.
This commit is contained in:
parent
dd3f53c2b1
commit
936c440cf3
@ -11,15 +11,15 @@ export type IssuedInvoiceItemsProps = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export class IssuedInvoiceItems extends Collection<IssuedInvoiceItem> {
|
export class IssuedInvoiceItems extends Collection<IssuedInvoiceItem> {
|
||||||
private _languageCode!: LanguageCode;
|
private languageCode!: LanguageCode;
|
||||||
private _currencyCode!: CurrencyCode;
|
private currencyCode!: CurrencyCode;
|
||||||
private _globalDiscountPercentage!: Percentage;
|
private globalDiscountPercentage!: Percentage;
|
||||||
|
|
||||||
constructor(props: IssuedInvoiceItemsProps) {
|
constructor(props: IssuedInvoiceItemsProps) {
|
||||||
super(props.items ?? []);
|
super(props.items ?? []);
|
||||||
this._languageCode = props.languageCode;
|
this.languageCode = props.languageCode;
|
||||||
this._currencyCode = props.currencyCode;
|
this.currencyCode = props.currencyCode;
|
||||||
this._globalDiscountPercentage = props.globalDiscountPercentage;
|
this.globalDiscountPercentage = props.globalDiscountPercentage;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static create(props: IssuedInvoiceItemsProps): IssuedInvoiceItems {
|
public static create(props: IssuedInvoiceItemsProps): IssuedInvoiceItems {
|
||||||
@ -40,9 +40,9 @@ export class IssuedInvoiceItems extends Collection<IssuedInvoiceItem> {
|
|||||||
// tiene el mismo "currencyCode" y "languageCode" que la colección de items.
|
// tiene el mismo "currencyCode" y "languageCode" que la colección de items.
|
||||||
if (
|
if (
|
||||||
!(
|
!(
|
||||||
this._languageCode.equals(item.languageCode) &&
|
this.languageCode.equals(item.languageCode) &&
|
||||||
this._currencyCode.equals(item.currencyCode) &&
|
this.currencyCode.equals(item.currencyCode) &&
|
||||||
this._globalDiscountPercentage.equals(item.globalDiscountPercentage)
|
this.globalDiscountPercentage.equals(item.globalDiscountPercentage)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
import type { CurrencyCode, LanguageCode } from "@repo/rdx-ddd";
|
import type { CurrencyCode, LanguageCode } from "@repo/rdx-ddd";
|
||||||
import { Collection } from "@repo/rdx-utils";
|
import { Collection } from "@repo/rdx-utils";
|
||||||
|
|
||||||
|
import { InvoiceAmount } from "../../../common";
|
||||||
|
|
||||||
import type { IssuedInvoiceTax } from "./issued-invoice-tax.entity";
|
import type { IssuedInvoiceTax } from "./issued-invoice-tax.entity";
|
||||||
|
|
||||||
export type IssuedInvoiceTaxesProps = {
|
export type IssuedInvoiceTaxesProps = {
|
||||||
@ -10,16 +12,59 @@ export type IssuedInvoiceTaxesProps = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export class IssuedInvoiceTaxes extends Collection<IssuedInvoiceTax> {
|
export class IssuedInvoiceTaxes extends Collection<IssuedInvoiceTax> {
|
||||||
private _languageCode!: LanguageCode;
|
private languageCode!: LanguageCode;
|
||||||
private _currencyCode!: CurrencyCode;
|
private currencyCode!: CurrencyCode;
|
||||||
|
|
||||||
constructor(props: IssuedInvoiceTaxesProps) {
|
constructor(props: IssuedInvoiceTaxesProps) {
|
||||||
super(props.taxes ?? []);
|
super(props.taxes ?? []);
|
||||||
this._languageCode = props.languageCode;
|
this.languageCode = props.languageCode;
|
||||||
this._currencyCode = props.currencyCode;
|
this.currencyCode = props.currencyCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static create(props: IssuedInvoiceTaxesProps): IssuedInvoiceTaxes {
|
public static create(props: IssuedInvoiceTaxesProps): IssuedInvoiceTaxes {
|
||||||
return new IssuedInvoiceTaxes(props);
|
return new IssuedInvoiceTaxes(props);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public getTaxableAmount(): InvoiceAmount {
|
||||||
|
return this.items.reduce(
|
||||||
|
(acc, tax) => acc.add(tax.taxableAmount),
|
||||||
|
InvoiceAmount.zero(this.currencyCode.toString())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public getIvaAmount(): InvoiceAmount {
|
||||||
|
return this.items.reduce(
|
||||||
|
(acc, tax) => acc.add(tax.ivaAmount),
|
||||||
|
InvoiceAmount.zero(this.currencyCode.toString())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public getRecAmount(): InvoiceAmount {
|
||||||
|
return this.items.reduce(
|
||||||
|
(acc, tax) => acc.add(tax.recAmount),
|
||||||
|
InvoiceAmount.zero(this.currencyCode.toString())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public getRetentionAmount(): InvoiceAmount {
|
||||||
|
return this.items.reduce(
|
||||||
|
(acc, tax) => acc.add(tax.retentionAmount),
|
||||||
|
InvoiceAmount.zero(this.currencyCode.toString())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public getTaxesAmount(): InvoiceAmount {
|
||||||
|
return this.items.reduce(
|
||||||
|
(acc, tax) => acc.add(tax.taxesAmount),
|
||||||
|
InvoiceAmount.zero(this.currencyCode.toString())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public getTransferredTaxesAmount(): InvoiceAmount {
|
||||||
|
return this.getIvaAmount().add(this.getRecAmount());
|
||||||
|
}
|
||||||
|
|
||||||
|
public getNetTaxesAmount(): InvoiceAmount {
|
||||||
|
return this.getTransferredTaxesAmount().subtract(this.getRetentionAmount());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -247,15 +247,17 @@ export class Proforma extends AggregateRoot<InternalProformaProps> implements IP
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Mutabilidad
|
// Mutabilidad
|
||||||
public update(
|
public update(patch: ProformaPatchProps): Result<Proforma, Error> {
|
||||||
partialProforma: Partial<Omit<IProformaCreateProps, "companyId">>
|
const candidateProps: InternalProformaProps = {
|
||||||
): Result<Proforma, Error> {
|
|
||||||
const updatedProps = {
|
|
||||||
...this.props,
|
...this.props,
|
||||||
...partialProforma,
|
...patch,
|
||||||
} as IProformaCreateProps;
|
};
|
||||||
|
|
||||||
return Proforma.create(updatedProps, this.id);
|
// Validacciones
|
||||||
|
|
||||||
|
Object.assign(this.props, candidateProps);
|
||||||
|
|
||||||
|
return Result.ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
public issue(): Result<void, Error> {
|
public issue(): Result<void, Error> {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user