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:
Methapon Metanipat 2025-01-14 09:08:31 +07:00 committed by GitHub
parent 0c694dee5d
commit 5e2100eb8d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
34 changed files with 2897 additions and 77 deletions

View file

@ -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"

View file

@ -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

View file

@ -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>