修正
This commit is contained in:
@@ -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",
|
||||
);
|
||||
}
|
||||
|
||||
// --------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user