diff --git a/.changeset/curly-trees-count.md b/.changeset/curly-trees-count.md new file mode 100644 index 000000000..14679d564 --- /dev/null +++ b/.changeset/curly-trees-count.md @@ -0,0 +1,5 @@ +--- +"@hera/plugin-rental": patch +--- + +结算单增加订单数量字段 diff --git a/packages/plugins/@hera/plugin-rental/src/client/schema-initializer/actions/SettlementExportExcel.tsx b/packages/plugins/@hera/plugin-rental/src/client/schema-initializer/actions/SettlementExportExcel.tsx index 4419af3c5..5fcd695c4 100644 --- a/packages/plugins/@hera/plugin-rental/src/client/schema-initializer/actions/SettlementExportExcel.tsx +++ b/packages/plugins/@hera/plugin-rental/src/client/schema-initializer/actions/SettlementExportExcel.tsx @@ -179,6 +179,10 @@ export const excelDataHandle = (excelData) => { name: '单位', key: 'name', }, + { + name: '订单数量', + key: 'name', + }, { name: '出入库数量', key: 'name', @@ -187,10 +191,6 @@ export const excelDataHandle = (excelData) => { name: '租赁单价', key: 'name', }, - { - name: ' ', - key: ' ', - }, { name: '天日', key: 'name', @@ -213,9 +213,9 @@ export const excelDataHandle = (excelData) => { '', category, value.unit_name, + parseFloat(value.item_count?.toFixed(2) || 0), parseFloat(value.count.toFixed(2)), parseFloat(value.unit_price.toFixed(5)), - '', value.days, parseFloat(value.amount.toFixed(2)), '', @@ -248,10 +248,6 @@ export const excelDataHandle = (excelData) => { name: '物质名称', key: 'name', }, - { - name: ' ', - key: ' ', - }, { name: '费用类别', key: 'name', @@ -260,6 +256,10 @@ export const excelDataHandle = (excelData) => { name: '单位', key: 'name', }, + { + name: '订单数量', + key: 'name', + }, { name: '出入库数量', key: 'name', @@ -284,11 +284,11 @@ export const excelDataHandle = (excelData) => { if (!value.is_excluded) { table3.rows.push([ converDate(value.date, 'YYYY-MM-DD'), - value.movement === -1 ? '出库' : value.movement === 1 ? '入库' : '出入库', + value.movement === '-1' ? '出库' : value.movement === '1' ? '入库' : '出入库', value.name, - '', category, value.unit_name, + parseFloat(value.item_count?.toFixed(2) || 0), parseFloat(value.count.toFixed(2)), parseFloat(value.unit_price.toFixed(5)), value.days !== 0 ? value.days : '', @@ -395,12 +395,12 @@ export const excelDataHandle = (excelData) => { key: ' ', }, { - name: '结存数量 ', + name: '订单数量 ', key: 'name2', }, { - name: ' ', - key: ' ', + name: '结存数量 ', + key: 'name2', }, { name: '物料名称 ', @@ -415,12 +415,12 @@ export const excelDataHandle = (excelData) => { key: 'name4', }, { - name: '结存数量', + name: '订单数量', key: 'name5', }, { - name: ' ', - key: ' ', + name: '结存数量', + key: 'name5', }, ], rows: [], @@ -433,13 +433,13 @@ export const excelDataHandle = (excelData) => { calc.summary[countNum - 1]?.name, '', calc.summary[countNum - 1]?.unit_name, + calc.summary[countNum - 1] ? parseFloat(calc.summary[countNum - 1].item_count?.toFixed(2) || 0) : ' ', calc.summary[countNum - 1] ? parseFloat(calc.summary[countNum - 1].count.toFixed(2)) : ' ', - '', calc.summary[countNum]?.name ?? '', '', calc.summary[countNum]?.unit_name ?? '', + calc.summary[countNum] ? parseFloat(calc.summary[countNum]?.item_count?.toFixed(2) || 0) : '', calc.summary[countNum] ? parseFloat(calc.summary[countNum]?.count.toFixed(2)) : '', - '', ]); } }); @@ -611,7 +611,6 @@ export const ExportToExcel = async (data) => { const rows24 = ws.getRows(table2Row, calc.history ? calc.history?.length + 1 : 1); rows24.forEach((value) => { ws.mergeCells(`A${value['_number']}:B${value['_number']}`); - ws.mergeCells(`F${value['_number']}:G${value['_number']}`); ws.mergeCells(`I${value['_number']}:J${value['_number']}`); if (value['_number'] !== table2Row) { const row25 = ws.getRow(value['_number']); @@ -627,7 +626,6 @@ export const ExportToExcel = async (data) => { excelAddTable(table3Row, '本期明细', ws, table3); const rows37 = ws.getRows(table3Row, calc.list ? calc.list?.length + 1 : 1); rows37.forEach((value) => { - ws.mergeCells(`C${value['_number']}:D${value['_number']}`); if (value['_number'] !== table3Row) { const row38 = ws.getRow(value['_number']); row38.alignment = { horizontal: 'right' }; @@ -663,9 +661,7 @@ export const ExportToExcel = async (data) => { CellBorder(table5Row); rows1?.forEach((value) => { ws.mergeCells(`A${value['_number']}:B${value['_number']}`); - ws.mergeCells(`D${value['_number']}:E${value['_number']}`); ws.mergeCells(`F${value['_number']}:G${value['_number']}`); - ws.mergeCells(`I${value['_number']}:J${value['_number']}`); if (value['_number'] !== table5Row) { const row38 = ws.getRow(value['_number']); row38.alignment = { horizontal: 'right' }; @@ -715,6 +711,6 @@ export const ExportToExcel = async (data) => { const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', }); - await saveAs(blob, `${contracts.project?.name}-${calc.name}.xlsx`); + await saveAs(blob, `${contracts.name}-${calc.name}.xlsx`); await message.success('导出成功'); }; diff --git a/packages/plugins/@hera/plugin-rental/src/server/pdf-documents/settlements-document.tsx b/packages/plugins/@hera/plugin-rental/src/server/pdf-documents/settlements-document.tsx index b43776e71..dafceb7d1 100644 --- a/packages/plugins/@hera/plugin-rental/src/server/pdf-documents/settlements-document.tsx +++ b/packages/plugins/@hera/plugin-rental/src/server/pdf-documents/settlements-document.tsx @@ -296,6 +296,7 @@ const PreviewDocument = ({ 物料名称 费用类别 单位 + 订单数量 出入库数量 租赁单价 天日 @@ -307,6 +308,7 @@ const PreviewDocument = ({ {item.name} {mapIfHas(getCategory, item.category)} {item.unit_name} + {formatQuantity(item.item_count, 2)} {formatQuantity(item.count, 2)} {formatCurrency(item.unit_price, 5)} {item.days} @@ -324,6 +326,7 @@ const PreviewDocument = ({ 物料名称 费用类别 单位 + 订单数量 出入库数量 租赁单价 天日 @@ -343,6 +346,7 @@ const PreviewDocument = ({ {mapIfHas(getCategory, item.category)} {item.unit_name} + {formatQuantity(item.item_count, 2)} {formatQuantity(item.count, 2)} {formatCurrency(item.unit_price, 5)} {item.days !== 0 ? item.days : ''} @@ -360,9 +364,11 @@ const PreviewDocument = ({ 物料名称 单位 + 订单数量 结存数量 物料名称 单位 + 订单数量 结存数量 {calc.summary?.map((item, index) => { @@ -372,11 +378,17 @@ const PreviewDocument = ({ {calc.summary[countNum - 1]?.name} {calc.summary[countNum - 1]?.unit_name} + + {calc.summary[countNum - 1] ? formatQuantity(calc.summary[countNum - 1]?.item_count, 2) : ''} + {calc.summary[countNum - 1] ? formatQuantity(calc.summary[countNum - 1]?.count, 2) : ''} {calc.summary[countNum]?.name} {calc.summary[countNum]?.unit_name} + + {calc.summary[countNum]?.item_count ? formatQuantity(calc.summary[countNum]?.item_count, 2) : ''} + {calc.summary[countNum]?.count ? formatQuantity(calc.summary[countNum]?.count, 2) : ''} diff --git a/packages/plugins/@hera/plugin-rental/src/server/services/settlement-service.ts b/packages/plugins/@hera/plugin-rental/src/server/services/settlement-service.ts index 8296ac2ab..960d6475d 100644 --- a/packages/plugins/@hera/plugin-rental/src/server/services/settlement-service.ts +++ b/packages/plugins/@hera/plugin-rental/src/server/services/settlement-service.ts @@ -82,9 +82,10 @@ export class SettlementService { !countRule.find((productRule) => productRule.product_id === rule.products[0].product_id); } if (isCount) { - const productName = item.record_items.filter( + const product = item.record_items.filter( (value) => value.product.product_category.id === recordItem.product_category_id, - )[0].product; + )[0]; + const productName = product.product; const day = dayjsDays(item.date) < dayjsDays(settlementAbout.start_date) ? getCalcDays(settlementAbout.start_date, settlementAbout.end_date) @@ -105,6 +106,7 @@ export class SettlementService { //租赁天数 历史订单就存开始日期到结束日期 当前订单存储订单日期到结束日期 days: day, is_excluded: false, + item_count: product.count, count: recordItem.weight * Number(movement), unit_price: rule.unit_price * 1000, amount: recordItem.weight * (rule.unit_price * 1000) * day * Number(movement), @@ -148,12 +150,13 @@ export class SettlementService { settlement_id: settlementsId, //合同ID movement: item.movement, //出入库状态 date: item.date, //时间 - name: productLength > 1 ? rule.comment ?? '' : recordItem?.product.name, //名称 - label: productLength > 1 ? rule.comment ?? '' : recordItem?.product.name, //规格 + name: productLength > 1 ? rule.comment ?? '' : recordItem.product.name, //名称 + label: productLength > 1 ? rule.comment ?? '' : recordItem.product.name, //规格 category: item.category, //费用类别 //租赁天数 历史订单就存开始日期到结束日期 当前订单存储订单日期到结束日期 days: day, is_excluded: false, + item_count: recordItem.count * Number(movement), count: item.weight * Number(movement), unit_price: rule.unit_price * 1000, amount: item.weight * (rule.unit_price * 1000) * day * Number(movement), @@ -198,6 +201,7 @@ export class SettlementService { const { count, unit } = ruleCount(rule, item, recordItem); data['unit_name'] = unit; data['count'] = count * Number(movement); + data['item_count'] = recordItem.count * Number(movement); data['unit_price'] = price; data['amount'] = data['count'] * price * (data.days || 0); createLeasDatas.push(data); @@ -284,6 +288,7 @@ export class SettlementService { label: recordItem.product.label + '-' + spec, category: name, movement: item.movement, + item_count: value.count, count: count, unit_price: rulefee.unit_price, amount: rulefee.unit_price * count, @@ -310,6 +315,7 @@ export class SettlementService { label: recordItem.product.label + '-' + spec, category: name, movement: '-1', + item_count: recordItem.count, count: recordCount, unit_price: rulefee.unit_price, amount: count * rulefee.unit_price, @@ -334,6 +340,7 @@ export class SettlementService { category: name, movement: '1', count: recordCount, + item_count: recordItem.count, unit_price: rulefee.unit_price, amount: count * rulefee.unit_price, unit_name: unit, @@ -356,6 +363,7 @@ export class SettlementService { category: name, movement: '0', count: recordCount, + item_count: recordItem.count, unit_price: rule.unit_price, amount: count * rule.unit_price, unit_name: unit, @@ -390,6 +398,7 @@ export class SettlementService { category: name, movement: '0', count: 0, + item_count: 0, unit_price: rule.unit_price, amount: 0, unit_name: rule.unit, @@ -411,6 +420,7 @@ export class SettlementService { }, 0) : 0 : item.weight; + if (item.fee_item.length) { item.fee_item.forEach((value) => { if (value.product_id === rule.fee_product_id) { @@ -586,6 +596,7 @@ export class SettlementService { ) { data.count = data.count / 1000; } + data.item_count = data.count; data.amount = data.count * data.unit_price; createFeesDatas.push(data); } @@ -622,6 +633,7 @@ export class SettlementService { summaryCategoryItems.push({ settlement_id: settlementsId, name: item.name, + item_count: item.item_count, count: item.count, unit_name: item.unit_name, type: 'category', @@ -630,6 +642,7 @@ export class SettlementService { summaryCategoryItems.forEach((value) => { if (value.name === item.name) { value.count += item.count; + value.item_count += item.item_count; } }); } @@ -644,12 +657,14 @@ export class SettlementService { name: item.name, count: item.count, unit_name: item.unit_name, + item_count: item.item_count, type: 'product', }); } else { summaryProductItems.forEach((value) => { if (value.name === item.name) { value.count += item.count; + value.item_count += item.item_count; } }); } @@ -833,9 +848,10 @@ const recordWeight = (rule, item, settlementsId, productRule, rulefee?) => { productRule.product_id - RulesNumber === weightItem.product_category_id) || productRule.product_id === weightItem.product_category_id, )[0]; - const productsName = item.record_items?.filter( + const product = item.record_items?.filter( (value) => value.product.category_id === itemWeight.product_category_id, - )[0].product; + )[0]; + const productsName = product.product; const productName = productCategory === 'category' ? productsName.name : productsName.label; return { settlement_id: settlementsId, @@ -846,6 +862,7 @@ const recordWeight = (rule, item, settlementsId, productRule, rulefee?) => { movement: item.movement, count: itemWeight.weight, unit_price: rulefee.unit_price, + item_count: product.count, amount: itemWeight.weight * rulefee.unit_price, unit_name: '吨', is_excluded: false, @@ -875,6 +892,7 @@ const recordWeight = (rule, item, settlementsId, productRule, rulefee?) => { label: productName + '-' + spec, category: name, movement: item.movement, + item_count: isRecordItem.count, count: count, unit_price: rulefee.unit_price, amount: item.weight * rulefee.unit_price, @@ -1028,6 +1046,7 @@ const feeData = (data, settlementAbout: Settlement, type) => { count: value.count, days: 0, name: name, + item_count: value.item_count, unit_name: value.unit_name, unit_price: value.unit_price, is_excluded: value.is_excluded, @@ -1036,6 +1055,7 @@ const feeData = (data, settlementAbout: Settlement, type) => { } else { feeItem[listKey].count = feeItem[listKey].count + value.count; feeItem[listKey].amount = feeItem[listKey].amount + value.amount; + feeItem[listKey].item_count = feeItem[listKey].item_count + value.item_count; feeItem[listKey].unit_price = isNaN(feeItem[listKey].amount / feeItem[listKey].count) ? 0 : feeItem[listKey].amount / feeItem[listKey].count; @@ -1109,6 +1129,7 @@ const screenData = (data, settlementAbout, type) => { name: name, unit_name: value.unit_name, unit_price: value.unit_price, + item_count: value.item_count, is_excluded: value.is_excluded, type: type, }; @@ -1117,6 +1138,7 @@ const screenData = (data, settlementAbout, type) => { history[historyKey].amount = formatNumber(history[historyKey].amount) + formatNumber(value.amount); history[historyKey].unit_price = history[historyKey].amount / history[historyKey].count / history[historyKey].days; + history[historyKey].item_count = formatNumber(history[historyKey].item_count) + formatNumber(value.item_count); } } else { if (!list[listKey]) { @@ -1130,6 +1152,7 @@ const screenData = (data, settlementAbout, type) => { days: value.days, name: name, unit_name: value.unit_name, + item_count: value.item_count, unit_price: value.unit_price, is_excluded: value.is_excluded, type: type, @@ -1140,6 +1163,7 @@ const screenData = (data, settlementAbout, type) => { list[listKey].unit_price = isNaN(list[listKey].amount / list[listKey].count / list[listKey].days) ? 0 : list[listKey].amount / list[listKey].count / list[listKey].days; + list[listKey].item_count = formatNumber(list[listKey].item_count) + formatNumber(value.item_count); } } });