Files
mohadese namavar ec84dfd222 init git
2024-06-16 00:22:14 +04:30

199 lines
5.5 KiB
Vue

<template>
<div class="sales-factor">
<div>
<h2>{{ $t("salesFactor") }}</h2>
<ul>
<li v-for="(value, key) in data" :key="key">
<label>{{ $t(key) }}:</label>
<span>{{ value }}</span>
</li>
</ul>
</div>
<table>
<thead>
<tr>
<th v-for="(h, i) in headers" :key="i" v-text="$t(h)" />
</tr>
</thead>
<tbody>
<tr v-for="(item, i) in products" :key="i">
<td>{{ i + 1 }}</td>
<td>{{ item.product.uid }}</td>
<td>{{ item.product.title }}</td>
<td>{{ item.quantity }}</td>
<td>{{ $t('number') }}</td>
<td>{{ numberFormat(item.price) }}</td>
<td>{{ 100 - Math.round(((item.specialPrice || item.price) / item.price) * 100) }} %</td>
<td>{{ numberFormat(item.specialPrice || item.price) }}</td>
<td></td>
</tr>
</tbody>
</table>
<div>
<div>
<div>
<label v-for="(word, i) in words" :key="i">
{{ $t(word) }}:
</label>
</div>
<label>{{ $t("debtor") }}:</label>
</div>
<ul>
<li v-for="(value, key) in summary" :key="key">
<label>{{ $t(key) }}</label>
<span>{{ numberFormat(value) }}</span>
</li>
</ul>
</div>
</div>
</template>
<script setup>
import init from '../../initialize/panel.js'
const { headers, words } = init()
const props = defineProps(['data'])
const { products, userID, _id, invoiceNumber, shippingAddress, createdAt } = props.data
const data = reactive({
customerName: userID.firstName + ' ' + userID.lastName,
phone: userID.phoneNumber,
documentNumber: _id,
customerCode: userID._id,
fax: userID.cellNumber,
factorNumber: invoiceNumber,
address: shippingAddress,
factorDate: new Date(createdAt).toLocaleDateString('fa-IR'),
});
const sumPrices = products.reduce((sum, item) => sum + item.price, 0)
const sumSpecialPrices = products.reduce((sum, item) => sum + item.specialPrice || item.price, 0)
const summary = reactive({
netSum: sumPrices,
discountPercent: 100 - Math.round((sumSpecialPrices / sumPrices) * 100),
sheetDiscount: sumPrices - sumSpecialPrices,
totalAmountFactor: sumSpecialPrices
});
const numberFormat = (number) =>
new Intl.NumberFormat('fa-IR', { maximumSignificantDigits: 3 }).format(number)
</script>
<style lang="scss">
.sales-factor {
@apply w-[77.5rem] flex flex-col [&_*]:border-[#E5E5E5];
&>div:nth-of-type(1) {
@apply flex flex-col;
&>h2 {
@apply h-[2.8rem] bg-zinc-100 flex items-center justify-center;
@apply text-[#333333] text-sm lg:text-base font-bold font-vazir;
}
ul {
@apply grid grid-cols-3 grid-rows-3 py-8 px-6 gap-6 border text-xs lg:text-base;
li {
@apply flex items-center gap-2.5 font-vazir;
label {
@apply text-[#333333] font-bold;
}
span {
@apply text-[#7F7F7F] font-medium;
}
&:nth-child(7) {
@apply col-span-2;
}
}
}
}
table {
thead {
tr {
@apply h-[2.8rem] bg-[#F2F2F2];
th {
@apply border border-t-0;
@apply text-center text-[#333333] text-xs lg:text-base font-medium font-vazir;
}
th:nth-of-type(9) {
@apply text-right pr-3;
}
}
}
tbody {
tr {
@apply h-[2.8rem];
td {
@apply border border-t-0;
@apply text-center text-[#333333] text-[0.7em] lg:text-sm font-medium font-vazir;
}
td:nth-of-type(3) {
@apply w-[22.5rem];
}
td:nth-of-type(9) {
@apply w-[13.4rem];
}
}
}
}
&>div:nth-of-type(2) {
@apply w-[64.1rem] flex;
label {
@apply text-[#333333] text-xs lg:text-base font-bold font-vazir;
}
&>div {
@apply w-[43.1rem] flex flex-col border border-t-0;
&>div {
@apply h-[6.9rem] p-6 flex flex-wrap gap-y-4 border-b;
label {
@apply first:w-full last:mx-auto;
}
}
&>label {
@apply h-[10.2rem] flex items-end p-6;
}
}
&>ul {
@apply flex flex-col justify-end h-[17.1rem] border-l;
li {
@apply flex border-b first:border-t;
* {
@apply w-[10.5rem] h-[3.3rem] flex items-center justify-center;
}
label {
@apply border-l;
}
span {
@apply text-[#333333] text-[0.7em] lg:text-sm font-medium font-vazir;
}
}
}
}
}
</style>