diff --git a/packages/server/src/modules/CreditNoteRefunds/dto/CreditNoteRefund.dto.ts b/packages/server/src/modules/CreditNoteRefunds/dto/CreditNoteRefund.dto.ts index b20191244..d3dab1ffb 100644 --- a/packages/server/src/modules/CreditNoteRefunds/dto/CreditNoteRefund.dto.ts +++ b/packages/server/src/modules/CreditNoteRefunds/dto/CreditNoteRefund.dto.ts @@ -1,5 +1,6 @@ import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsOptional, IsPositive, IsString } from 'class-validator'; +import { ToNumber, IsOptional } from '@/common/decorators/Validators'; +import { IsDateString, IsNotEmpty, IsPositive, IsString } from 'class-validator'; import { IsDate } from 'class-validator'; import { IsNumber } from 'class-validator'; @@ -10,8 +11,13 @@ export class CreditNoteRefundDto { description: 'The id of the from account', example: 1, }) + @ApiProperty({ + description: 'The id of the from account', + example: 1, + }) fromAccountId: number; + @ToNumber() @IsNumber() @IsPositive() @IsNotEmpty() @@ -21,6 +27,7 @@ export class CreditNoteRefundDto { }) amount: number; + @ToNumber() @IsNumber() @IsOptional() @IsPositive() @@ -30,23 +37,23 @@ export class CreditNoteRefundDto { }) exchangeRate?: number; + @IsOptional() @IsString() - @IsNotEmpty() @ApiProperty({ description: 'The reference number of the credit note refund', example: '123456', }) referenceNo: string; + @IsOptional() @IsString() - @IsNotEmpty() @ApiProperty({ description: 'The description of the credit note refund', example: 'Credit note refund', }) description: string; - @IsDate() + @IsDateString() @IsNotEmpty() @ApiProperty({ description: 'The date of the credit note refund', @@ -54,6 +61,7 @@ export class CreditNoteRefundDto { }) date: Date; + @ToNumber() @IsNumber() @IsOptional() @ApiProperty({ diff --git a/packages/server/src/modules/VendorCreditsRefund/VendorCreditsRefund.application.ts b/packages/server/src/modules/VendorCreditsRefund/VendorCreditsRefund.application.ts index 1053765e7..bf488a768 100644 --- a/packages/server/src/modules/VendorCreditsRefund/VendorCreditsRefund.application.ts +++ b/packages/server/src/modules/VendorCreditsRefund/VendorCreditsRefund.application.ts @@ -2,19 +2,35 @@ import { Injectable } from '@nestjs/common'; import { DeleteRefundVendorCreditService } from './commands/DeleteRefundVendorCredit.service'; import { RefundVendorCredit } from './models/RefundVendorCredit'; import { CreateRefundVendorCredit } from './commands/CreateRefundVendorCredit.service'; -import { IRefundVendorCreditDTO } from './types/VendorCreditRefund.types'; import { RefundVendorCreditDto } from './dtos/RefundVendorCredit.dto'; +import { GetRefundVendorCreditsService } from './queries/GetRefundVendorCredits.service'; +import { IRefundVendorCreditPOJO } from './types/VendorCreditRefund.types'; @Injectable() export class VendorCreditsRefundApplication { /** * @param {CreateRefundVendorCredit} createRefundVendorCreditService * @param {DeleteRefundVendorCreditService} deleteRefundVendorCreditService + * @param {GetRefundVendorCreditsService} getRefundVendorCreditsService */ constructor( private readonly createRefundVendorCreditService: CreateRefundVendorCredit, private readonly deleteRefundVendorCreditService: DeleteRefundVendorCreditService, - ) {} + private readonly getRefundVendorCreditsService: GetRefundVendorCreditsService, + ) { } + + /** + * Retrieve the vendor credit refunds graph. + * @param {number} vendorCreditId - Vendor credit id. + * @returns {Promise} + */ + public getVendorCreditRefunds( + vendorCreditId: number, + ): Promise { + return this.getRefundVendorCreditsService.getVendorCreditRefunds( + vendorCreditId, + ); + } /** * Creates a refund vendor credit. diff --git a/packages/server/src/modules/VendorCreditsRefund/VendorCreditsRefund.controller.ts b/packages/server/src/modules/VendorCreditsRefund/VendorCreditsRefund.controller.ts index 5ee79421e..9951cb6bc 100644 --- a/packages/server/src/modules/VendorCreditsRefund/VendorCreditsRefund.controller.ts +++ b/packages/server/src/modules/VendorCreditsRefund/VendorCreditsRefund.controller.ts @@ -1,4 +1,4 @@ -import { Body, Controller, Delete, Param, Post } from '@nestjs/common'; +import { Body, Controller, Delete, Get, Param, Post } from '@nestjs/common'; import { VendorCreditsRefundApplication } from './VendorCreditsRefund.application'; import { RefundVendorCredit } from './models/RefundVendorCredit'; import { ApiOperation, ApiTags } from '@nestjs/swagger'; @@ -9,7 +9,22 @@ import { RefundVendorCreditDto } from './dtos/RefundVendorCredit.dto'; export class VendorCreditsRefundController { constructor( private readonly vendorCreditsRefundApplication: VendorCreditsRefundApplication, - ) {} + ) { } + + /** + * Retrieve the vendor credit refunds graph. + * @param {number} vendorCreditId - Vendor credit id. + * @returns {Promise} + */ + @Get(':vendorCreditId/refund') + @ApiOperation({ summary: 'Retrieve the vendor credit refunds graph.' }) + public getVendorCreditRefunds( + @Param('vendorCreditId') vendorCreditId: string, + ) { + return this.vendorCreditsRefundApplication.getVendorCreditRefunds( + Number(vendorCreditId), + ); + } /** * Creates a refund vendor credit. @@ -17,7 +32,7 @@ export class VendorCreditsRefundController { * @param {IRefundVendorCreditDTO} refundVendorCreditDTO * @returns {Promise} */ - @Post(':vendorCreditId/refunds') + @Post(':vendorCreditId/refund') @ApiOperation({ summary: 'Create a refund for the given vendor credit.' }) public async createRefundVendorCredit( @Param('vendorCreditId') vendorCreditId: string, diff --git a/packages/server/src/modules/VendorCreditsRefund/dtos/RefundVendorCredit.dto.ts b/packages/server/src/modules/VendorCreditsRefund/dtos/RefundVendorCredit.dto.ts index 975fb6ff8..84dae9922 100644 --- a/packages/server/src/modules/VendorCreditsRefund/dtos/RefundVendorCredit.dto.ts +++ b/packages/server/src/modules/VendorCreditsRefund/dtos/RefundVendorCredit.dto.ts @@ -1,10 +1,12 @@ +import { IsOptional, ToNumber } from '@/common/decorators/Validators'; import { ApiProperty } from '@nestjs/swagger'; -import { Min } from 'class-validator'; +import { IsDateString, Min } from 'class-validator'; import { IsString } from 'class-validator'; import { IsDate } from 'class-validator'; -import { IsNotEmpty, IsNumber, IsOptional, IsPositive } from 'class-validator'; +import { IsNotEmpty, IsNumber, IsPositive } from 'class-validator'; export class RefundVendorCreditDto { + @ToNumber() @IsNumber() @IsNotEmpty() @Min(0) @@ -32,6 +34,7 @@ export class RefundVendorCreditDto { }) depositAccountId: number; + @IsOptional() @IsString() @IsNotEmpty() @ApiProperty({ @@ -40,7 +43,7 @@ export class RefundVendorCreditDto { }) description: string; - @IsDate() + @IsDateString() @IsNotEmpty() @ApiProperty({ description: 'The date of the refund', diff --git a/packages/webapp/src/containers/Dialogs/RefundCreditNoteDialog/RefundCreditNoteFormFields.tsx b/packages/webapp/src/containers/Dialogs/RefundCreditNoteDialog/RefundCreditNoteFormFields.tsx index f0f0fdd42..4479844be 100644 --- a/packages/webapp/src/containers/Dialogs/RefundCreditNoteDialog/RefundCreditNoteFormFields.tsx +++ b/packages/webapp/src/containers/Dialogs/RefundCreditNoteDialog/RefundCreditNoteFormFields.tsx @@ -31,6 +31,9 @@ import { FeatureCan, FInputGroup, FMoneyInputGroup, + FDateInput, + FFormGroup, + FTextArea, } from '@/components'; import { inputIntent, @@ -66,16 +69,13 @@ function RefundCreditNoteFormFields({ - } - className={classNames('form-group--select-list', Classes.FILL)} - > + }> - + @@ -84,29 +84,23 @@ function RefundCreditNoteFormFields({ {/* ------------- Refund date ------------- */} - - {({ form, field: { value }, meta: { error, touched } }) => ( - } - labelInfo={} - fill - > - { - form.setFieldValue('date', formattedDate); - })} - popoverProps={{ position: Position.BOTTOM, minimal: true }} - inputProps={{ - leftIcon: , - }} - /> - - )} - + } + labelInfo={} + fill + > + , + }} + /> + + {/* ------------ Form account ------------ */} } labelInfo={} fill + fastField > @@ -137,6 +133,7 @@ function RefundCreditNoteFormFields({ label={} labelInfo={} fill + fastField > @@ -144,6 +141,7 @@ function RefundCreditNoteFormFields({ name={'amount'} minimal={true} inputRef={(ref) => (amountFieldRef.current = ref)} + /> @@ -161,21 +159,19 @@ function RefundCreditNoteFormFields({ {/* ------------ Reference No. ------------ */} - } fill> + } fill fastField> {/* --------- Statement --------- */} - - {({ form, field, meta: { error, touched } }) => ( - } - className={'form-group--description'} - > -