This commit is contained in:
admin
2026-05-22 23:05:38 +09:00
parent e8690d130b
commit ebc87f96f9
6 changed files with 1783 additions and 1214 deletions

View File

@@ -863,7 +863,19 @@
<div class="search-buttons">
<button onclick="searchJournals()">🔍 検索</button>
<button onclick="printSearchResults()">🖨️ 印刷</button>
<button onclick="clearSearchConditions()" style="background: #6c757d; color: white; border: none; padding: 6px 14px; border-radius: 4px; cursor: pointer;">🔄 条件クリア</button>
<button
onclick="clearSearchConditions()"
style="
background: #6c757d;
color: white;
border: none;
padding: 6px 14px;
border-radius: 4px;
cursor: pointer;
"
>
🔄 条件クリア
</button>
</div>
</div>
@@ -2830,7 +2842,8 @@
// 複数行フォームへのコピー
function copyJournalToDetailForm(data) {
document.getElementById("detailEntryDate").value = data.entry_date;
document.getElementById("detailDescription").value = data.description || "";
document.getElementById("detailDescription").value =
data.description || "";
// 既存行をクリア
document.getElementById("detailLinesTbody").innerHTML = "";
@@ -2846,10 +2859,14 @@
accountInput.dataset.accountId = acc.account_id;
}
if (Number(line.debit) > 0) {
tr.querySelector(".detail-debit").value = Number(line.debit).toLocaleString();
tr.querySelector(".detail-debit").value = Number(
line.debit,
).toLocaleString();
}
if (Number(line.credit) > 0) {
tr.querySelector(".detail-credit").value = Number(line.credit).toLocaleString();
tr.querySelector(".detail-credit").value = Number(
line.credit,
).toLocaleString();
}
if (line.line_description) {
tr.querySelector(".detail-line-memo").value = line.line_description;
@@ -2879,58 +2896,121 @@
// 新UIでは簡易的にフォームに反映最初の借方行の科目 + 最初の貸方行を取引手段に設定)
if (data.lines && data.lines.length > 0) {
// 借方と貸方を分類
const debitLines = data.lines.filter((l) => Number(l.debit) > 0);
const creditLines = data.lines.filter((l) => Number(l.credit) > 0);
// 借方と貸方を分類
const debitLines = data.lines.filter((l) => Number(l.debit) > 0);
const creditLines = data.lines.filter((l) => Number(l.credit) > 0);
// 仮払/仮受消費税行を除外して主要な科目を特定
const mainDebit = debitLines.find((l) => {
const acc = accounts.find((a) => a.account_id === l.account_id);
return (
acc &&
!acc.account_name.includes("仮払消費税") &&
!acc.account_name.includes("仮受消費税")
// 仮払/仮受消費税行を除外して主要な科目を特定
const mainDebit = debitLines.find((l) => {
const acc = accounts.find((a) => a.account_id === l.account_id);
return (
acc &&
!acc.account_name.includes("仮払消費税") &&
!acc.account_name.includes("仮受消費税")
);
});
const mainCredit = creditLines.find((l) => {
const acc = accounts.find((a) => a.account_id === l.account_id);
return (
acc &&
!acc.account_name.includes("仮払消費税") &&
!acc.account_name.includes("仮受消費税")
);
});
// 税額行を検出
const taxDebitLine = debitLines.find((l) => {
const acc = accounts.find((a) => a.account_id === l.account_id);
return acc && acc.account_name.includes("仮払消費税");
});
const taxCreditLine = creditLines.find((l) => {
const acc = accounts.find((a) => a.account_id === l.account_id);
return acc && acc.account_name.includes("仮受消費税");
});
if (mainDebit && mainCredit) {
// 支出パターン: 借方=科目, 貸方=取引手段
if (taxDebitLine) {
// 支出(仮払消費税あり)
document.querySelector(
'input[name="entryType"][value="expense"]',
).checked = true;
const kamokuAcc = accounts.find(
(a) => a.account_id === mainDebit.account_id,
);
});
const mainCredit = creditLines.find((l) => {
const acc = accounts.find((a) => a.account_id === l.account_id);
return (
acc &&
!acc.account_name.includes("仮払消費税") &&
!acc.account_name.includes("仮受消費税")
const methodAcc = accounts.find(
(a) => a.account_id === mainCredit.account_id,
);
});
// 税額行を検出
const taxDebitLine = debitLines.find((l) => {
const acc = accounts.find((a) => a.account_id === l.account_id);
return acc && acc.account_name.includes("仮払消費税");
});
const taxCreditLine = creditLines.find((l) => {
const acc = accounts.find((a) => a.account_id === l.account_id);
return acc && acc.account_name.includes("仮受消費税");
});
if (mainDebit && mainCredit) {
// 支出パターン: 借方=科目, 貸方=取引手段
if (taxDebitLine) {
// 支出(仮払消費税あり)
if (kamokuAcc) {
document.getElementById("entryAccountInput").value =
`${kamokuAcc.account_code} ${kamokuAcc.account_name}`;
document.getElementById("entryAccountInput").dataset.accountId =
kamokuAcc.account_id;
}
if (methodAcc) {
document.getElementById("entryMethodInput").value =
`${methodAcc.account_code} ${methodAcc.account_name}`;
document.getElementById("entryMethodInput").dataset.accountId =
methodAcc.account_id;
}
const totalAmount = Number(mainCredit.credit);
document.getElementById("entryAmount").value =
totalAmount.toLocaleString();
document.getElementById("entryTaxAmount").value = Number(
taxDebitLine.debit,
).toLocaleString();
} else if (taxCreditLine) {
// 収入(仮受消費税あり)
document.querySelector(
'input[name="entryType"][value="income"]',
).checked = true;
const kamokuAcc = accounts.find(
(a) => a.account_id === mainCredit.account_id,
);
const methodAcc = accounts.find(
(a) => a.account_id === mainDebit.account_id,
);
if (kamokuAcc) {
document.getElementById("entryAccountInput").value =
`${kamokuAcc.account_code} ${kamokuAcc.account_name}`;
document.getElementById("entryAccountInput").dataset.accountId =
kamokuAcc.account_id;
}
if (methodAcc) {
document.getElementById("entryMethodInput").value =
`${methodAcc.account_code} ${methodAcc.account_name}`;
document.getElementById("entryMethodInput").dataset.accountId =
methodAcc.account_id;
}
const totalAmount = Number(mainDebit.debit);
document.getElementById("entryAmount").value =
totalAmount.toLocaleString();
document.getElementById("entryTaxAmount").value = Number(
taxCreditLine.credit,
).toLocaleString();
} else {
// 消費税なし - 借方科目が費用/資産 → 支出、それ以外は収入
const kamokuAccD = accounts.find(
(a) => a.account_id === mainDebit.account_id,
);
const isExpense =
kamokuAccD &&
(kamokuAccD.account_code.startsWith("8") ||
kamokuAccD.account_code.startsWith("1") ||
kamokuAccD.account_code.startsWith("2") ||
kamokuAccD.account_code.startsWith("3") ||
kamokuAccD.account_code.startsWith("4"));
if (isExpense) {
document.querySelector(
'input[name="entryType"][value="expense"]',
).checked = true;
const kamokuAcc = accounts.find(
(a) => a.account_id === mainDebit.account_id,
);
document.getElementById("entryAccountInput").value =
`${kamokuAccD.account_code} ${kamokuAccD.account_name}`;
document.getElementById("entryAccountInput").dataset.accountId =
kamokuAccD.account_id;
const methodAcc = accounts.find(
(a) => a.account_id === mainCredit.account_id,
);
if (kamokuAcc) {
document.getElementById("entryAccountInput").value =
`${kamokuAcc.account_code} ${kamokuAcc.account_name}`;
document.getElementById(
"entryAccountInput",
).dataset.accountId = kamokuAcc.account_id;
}
if (methodAcc) {
document.getElementById("entryMethodInput").value =
`${methodAcc.account_code} ${methodAcc.account_name}`;
@@ -2938,116 +3018,47 @@
"entryMethodInput",
).dataset.accountId = methodAcc.account_id;
}
const totalAmount = Number(mainCredit.credit);
document.getElementById("entryAmount").value =
totalAmount.toLocaleString();
document.getElementById("entryTaxAmount").value = Number(
taxDebitLine.debit,
document.getElementById("entryAmount").value = Number(
mainDebit.debit,
).toLocaleString();
} else if (taxCreditLine) {
// 収入(仮受消費税あり)
} else {
document.querySelector(
'input[name="entryType"][value="income"]',
).checked = true;
const kamokuAcc = accounts.find(
const kamokuAccC = accounts.find(
(a) => a.account_id === mainCredit.account_id,
);
const methodAcc = accounts.find(
(a) => a.account_id === mainDebit.account_id,
);
if (kamokuAcc) {
if (kamokuAccC) {
document.getElementById("entryAccountInput").value =
`${kamokuAcc.account_code} ${kamokuAcc.account_name}`;
`${kamokuAccC.account_code} ${kamokuAccC.account_name}`;
document.getElementById(
"entryAccountInput",
).dataset.accountId = kamokuAcc.account_id;
).dataset.accountId = kamokuAccC.account_id;
}
if (methodAcc) {
document.getElementById("entryMethodInput").value =
`${methodAcc.account_code} ${methodAcc.account_name}`;
document.getElementById(
"entryMethodInput",
).dataset.accountId = methodAcc.account_id;
}
const totalAmount = Number(mainDebit.debit);
document.getElementById("entryAmount").value =
totalAmount.toLocaleString();
document.getElementById("entryTaxAmount").value = Number(
taxCreditLine.credit,
document.getElementById("entryMethodInput").value =
`${kamokuAccD.account_code} ${kamokuAccD.account_name}`;
document.getElementById("entryMethodInput").dataset.accountId =
kamokuAccD.account_id;
document.getElementById("entryAmount").value = Number(
mainDebit.debit,
).toLocaleString();
} else {
// 消費税なし - 借方科目が費用/資産 → 支出、それ以外は収入
const kamokuAccD = accounts.find(
(a) => a.account_id === mainDebit.account_id,
);
const isExpense =
kamokuAccD &&
(kamokuAccD.account_code.startsWith("8") ||
kamokuAccD.account_code.startsWith("1") ||
kamokuAccD.account_code.startsWith("2") ||
kamokuAccD.account_code.startsWith("3") ||
kamokuAccD.account_code.startsWith("4"));
if (isExpense) {
document.querySelector(
'input[name="entryType"][value="expense"]',
).checked = true;
document.getElementById("entryAccountInput").value =
`${kamokuAccD.account_code} ${kamokuAccD.account_name}`;
document.getElementById(
"entryAccountInput",
).dataset.accountId = kamokuAccD.account_id;
const methodAcc = accounts.find(
(a) => a.account_id === mainCredit.account_id,
);
if (methodAcc) {
document.getElementById("entryMethodInput").value =
`${methodAcc.account_code} ${methodAcc.account_name}`;
document.getElementById(
"entryMethodInput",
).dataset.accountId = methodAcc.account_id;
}
document.getElementById("entryAmount").value = Number(
mainDebit.debit,
).toLocaleString();
} else {
document.querySelector(
'input[name="entryType"][value="income"]',
).checked = true;
const kamokuAccC = accounts.find(
(a) => a.account_id === mainCredit.account_id,
);
if (kamokuAccC) {
document.getElementById("entryAccountInput").value =
`${kamokuAccC.account_code} ${kamokuAccC.account_name}`;
document.getElementById(
"entryAccountInput",
).dataset.accountId = kamokuAccC.account_id;
}
document.getElementById("entryMethodInput").value =
`${kamokuAccD.account_code} ${kamokuAccD.account_name}`;
document.getElementById(
"entryMethodInput",
).dataset.accountId = kamokuAccD.account_id;
document.getElementById("entryAmount").value = Number(
mainDebit.debit,
).toLocaleString();
}
document.getElementById("entryTaxRate").value = "0";
document.getElementById("entryTaxAmount").value = "";
}
document.getElementById("entryTaxRate").value = "0";
document.getElementById("entryTaxAmount").value = "";
}
}
}
// ページ上部の仕訳入力フォームにスクロール
window.scrollTo({ top: 0, behavior: "smooth" });
// ページ上部の仕訳入力フォームにスクロール
window.scrollTo({ top: 0, behavior: "smooth" });
const dateInput = document.getElementById("entryDate");
dateInput.focus();
const dateInput = document.getElementById("entryDate");
dateInput.focus();
showAlert(
`仕訳を複製しました。\n\n※ このコピーは新規仕訳として独立した記録になります。\n※ 日付と摘要を必要に応じて修正してから登録してください。`,
"success",
);
showAlert(
`仕訳を複製しました。\n\n※ このコピーは新規仕訳として独立した記録になります。\n※ 日付と摘要を必要に応じて修正してから登録してください。`,
"success",
);
}
// --------------------------------------------------