feat: credit note (#171)
* feat: add main page credit note * feat: enable credit note route and update menu item states * refactor: add i18n * refactor: edit i18n status * feat: add action column * feat: add empty form page * feat: add get data * feat: add type credit note status * refactor: add type name en * refactor: add type credit note status in type credit note * feat: add hsla colors * refactor: add slot grid * refactor: handle hide kebab edit show only tab tssued * feat: show grid card * feat: i18n * feat: add credit note form and dialog * refactor: add props hide kebab deelete * refactor: hide kebab * style: update color segments to indigo theme * feat: i18n * fix: update labels for credit note fields * refactor: add type * feat: new select quotation * refactor: use new select quotation * feat: navigate to * refactor: function trigger and navigate to * feat: i18n bank * feat: add payment expansion component and integrate into credit note form * refactor: bind i18n pay condition * refactor: navigate to get quotation id * feat: i18n * fix: update label for createdBy field in credit note form * feat: add credit note information expansion component * feat: add Credit Note expansion component and update form layout * refactor: bind quotation id and send * refactor: deelete duplicate type * refactor: show state button * refactor: handle show status * feat: add function update payback status * feat: add return and canceled reasons to credit note translations * feat: enhance SelectReadyRequestWork component with credit note handling and fetch parameters * feat: type * feat: add status handling and optional display for employee table * refactor: rename selectedQuotationId to quotationId in FormCredit component * feat: set default opened state for CreditNoteExpansion and add reason options * feat: update PaymentExpansion to handle payback type selection and clear fields for cash payments * feat: enhance ProductExpansion to support credit note handling and adjust price calculations * feat: implement product handling and price calculation in CreditNote form * feat: add manage attachment function to store * refactor: bind delete credit note * feat: add credit note status and reference fields to types * refactor: update task step handling and simplify request work structure in credit note form * feat: add navigation to quotation from credit note form * feat: enhance upload section layout based on file data * feat: add readonly functionality to credit note form and related components * refactor: remove console log * feat: update i18n * style: add rounded corners to complete view container in quotation form * feat: add RefundInformation component and update credit note form status handling * feat: i18n * feat: update payback status endpoint and add paybackStatus to CreditNote type * feat: enhance QuotationFormReceipt component with optional props and slot support * feat: integrate payback status handling in RefundInformation and FormPage components * feat: add external file group * feat: update API endpoint paths for credit note operations * feat: improve layout and styling in UploadFile components * feat: implement file upload and management in Credit Note * refactor: update upload to check if it is redirect or not * feat: upload file slips * feat: add payback date dispaly * refactor: change module no * fix: icon link to main page instead * feat: add file dialog with image download functionality * fix: view slip * feat: add download button to image viewer * feat: handle after submit * feat: conditionally render bank transfer information * feat: handle upload file on create * feat: handle change payback status * feat: payback type in credit note form * fix: correct reference to quotation data in goToQuotation function --------- Co-authored-by: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Co-authored-by: puriphatt <puriphat@frappet.com> Co-authored-by: Thanaphon Frappet <thanaphon@frappet.com>
This commit is contained in:
parent
0c694dee5d
commit
5e2100eb8d
34 changed files with 2897 additions and 77 deletions
|
|
@ -14,7 +14,7 @@ import { useQuotationForm } from './form';
|
|||
import { hslaColors } from './constants';
|
||||
|
||||
// NOTE Import Types
|
||||
import { CustomerBranchCreate } from 'stores/customer/types';
|
||||
import { CustomerBranchCreate, CustomerType } from 'stores/customer/types';
|
||||
|
||||
// NOTE: Import Components
|
||||
import QuotationCard from 'src/components/05_quotation/QuotationCard.vue';
|
||||
|
|
@ -181,7 +181,7 @@ async function triggerDialogDeleteQuottaion(id: string) {
|
|||
});
|
||||
}
|
||||
|
||||
function triggerCreateCustomerd(opts: { type: 'CORP' | 'PERS' }) {
|
||||
function triggerCreateCustomerd(opts: { type: CustomerType }) {
|
||||
setDefaultCustomer();
|
||||
customerFormState.value.dialogType = 'create';
|
||||
customerFormData.value.customerType = opts?.type;
|
||||
|
|
@ -656,6 +656,8 @@ async function storeDataLocal(id: string) {
|
|||
<template #grid="{ item }">
|
||||
<div class="col-md-4 col-sm-6 col-12">
|
||||
<QuotationCard
|
||||
hide-kebab-delete
|
||||
:hide-kebab-edit="!(pageState.currentTab === 'Issued')"
|
||||
:urgent="item.row.urgent"
|
||||
:code="item.row.code"
|
||||
:title="item.row.workName"
|
||||
|
|
|
|||
|
|
@ -1865,7 +1865,7 @@ watch(
|
|||
|
||||
<div
|
||||
v-if="view === View.Complete"
|
||||
class="surface-1 q-pa-md full-width q-gutter-y-md"
|
||||
class="surface-1 q-pa-md full-width q-gutter-y-md rounded"
|
||||
>
|
||||
<div class="row justify-between items-center">
|
||||
<q-input
|
||||
|
|
|
|||
|
|
@ -11,31 +11,40 @@ defineEmits<{
|
|||
|
||||
withDefaults(
|
||||
defineProps<{
|
||||
payType: string;
|
||||
amount: number;
|
||||
date: string | Date;
|
||||
index: number;
|
||||
paySplitCount: number;
|
||||
title?: string;
|
||||
hideExampleBtn?: boolean;
|
||||
successLabel?: string;
|
||||
|
||||
payType?: string;
|
||||
amount?: number;
|
||||
date?: string | Date;
|
||||
index?: number;
|
||||
paySplitCount?: number;
|
||||
}>(),
|
||||
{ payType: 'Full', amount: 0, date: () => new Date() },
|
||||
{ payType: 'Full', amount: 0, date: () => new Date(), index: 0 },
|
||||
);
|
||||
</script>
|
||||
<template>
|
||||
<section class="surface-1 rounded row">
|
||||
<aside class="column col bordered-r q-py-md q-pl-md">
|
||||
<span class="text-weight-medium text-body1">
|
||||
{{ $t('quotation.receiptDialog.PaymentReceive') }}
|
||||
{{ title || $t('quotation.receiptDialog.PaymentReceive') }}
|
||||
</span>
|
||||
<span class="app-text-muted-2 q-pt-md">
|
||||
{{ $t('quotation.receiptDialog.paymentMethod') }}
|
||||
</span>
|
||||
<span class="row items-center">
|
||||
{{ $t(`quotation.type.${payType}`) }}
|
||||
{{ payType !== 'Full' ? `${index + 1} / ${paySplitCount}` : `` }}
|
||||
<q-icon name="mdi-minus" class="q-px-xs" />
|
||||
<article class="app-text-positive text-weight-medium">
|
||||
{{ $t('quotation.receiptDialog.PaymentSuccess') }}
|
||||
</article>
|
||||
<div v-if="$slots.payType" class="row items-center">
|
||||
<slot name="payType"></slot>
|
||||
</div>
|
||||
<div v-else class="row items-center">
|
||||
{{ $t(`quotation.type.${payType}`) }}
|
||||
{{ payType !== 'Full' ? `${index + 1} / ${paySplitCount}` : `` }}
|
||||
<q-icon name="mdi-minus" class="q-px-xs" />
|
||||
<article class="app-text-positive text-weight-medium">
|
||||
{{ $t('quotation.receiptDialog.PaymentSuccess') }}
|
||||
</article>
|
||||
</div>
|
||||
<article class="q-ml-auto text-weight-bold text-body1 q-pr-lg">
|
||||
฿ {{ formatNumberDecimal(amount, 2) }}
|
||||
</article>
|
||||
|
|
@ -45,6 +54,7 @@ withDefaults(
|
|||
<aside class="column col q-py-md text-right self-center q-px-md">
|
||||
<div class="q-gutter-x-xs">
|
||||
<MainButton
|
||||
v-if="!hideExampleBtn"
|
||||
icon="mdi-play-box-outline"
|
||||
color="207 96% 32%"
|
||||
@click="() => $emit('example', index)"
|
||||
|
|
@ -53,7 +63,7 @@ withDefaults(
|
|||
<ViewButton icon-only @click="() => $emit('view', index)" />
|
||||
</div>
|
||||
<span class="app-text-positive text-weight-bold text-body1">
|
||||
{{ $t('quotation.receiptDialog.receiptIssued') }}
|
||||
{{ successLabel || $t('quotation.receiptDialog.receiptIssued') }}
|
||||
</span>
|
||||
<div class="app-text-muted-2">
|
||||
<q-icon name="mdi-calendar-blank-outline" />
|
||||
|
|
@ -62,6 +72,7 @@ withDefaults(
|
|||
date: date,
|
||||
dayStyle: '2-digit',
|
||||
monthStyle: '2-digit',
|
||||
withTime: true,
|
||||
})
|
||||
}}
|
||||
</div>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue