Files
books/models/baseModels/AccountingSettings/AccountingSettings.ts
T
Able k SajuandGitHub 593b1112c7 Merge pull request #1232 from suhailanzar/partial-Payment
fix: implement complete partial payment handling
2025-06-16 12:11:55 +05:30

116 lines
3.2 KiB
TypeScript

import { Doc } from 'fyo/model/doc';
import {
ChangeArg,
FiltersMap,
HiddenMap,
ListsMap,
ReadOnlyMap,
ValidationMap,
} from 'fyo/model/types';
import { validateEmail } from 'fyo/model/validationFunction';
import { InventorySettings } from 'models/inventory/InventorySettings';
import { ModelNameEnum } from 'models/types';
import { createDiscountAccount } from 'src/setup/setupInstance';
import { getCountryInfo } from 'utils/misc';
export class AccountingSettings extends Doc {
enableDiscounting?: boolean;
enableInventory?: boolean;
enablePriceList?: boolean;
enableLead?: boolean;
enableCouponCode?: boolean;
enableFormCustomization?: boolean;
enableInvoiceReturns?: boolean;
enableLoyaltyProgram?: boolean;
enablePricingRule?: boolean;
enableERPNextSync?: boolean;
enablePointOfSaleWithOutInventory?: boolean;
enablePartialPayment?: boolean;
static filters: FiltersMap = {
writeOffAccount: () => ({
isGroup: false,
rootType: 'Expense',
}),
roundOffAccount: () => ({
isGroup: false,
rootType: 'Expense',
}),
discountAccount: () => ({
isGroup: false,
rootType: 'Income',
}),
};
validations: ValidationMap = {
email: validateEmail,
};
static lists: ListsMap = {
country: () => Object.keys(getCountryInfo()),
};
readOnly: ReadOnlyMap = {
enableDiscounting: () => {
return !!this.enableDiscounting;
},
enableInventory: () => {
return !!this.enableInventory;
},
enableLead: () => {
return !!this.enableLead;
},
enableERPNextSync: () => {
return !!this.enableERPNextSync;
},
enableInvoiceReturns: () => {
return !!this.enableInvoiceReturns;
},
enableLoyaltyProgram: () => {
return !!this.enableLoyaltyProgram;
},
enablePointOfSaleWithOutInventory: () => {
return !!this.enablePointOfSaleWithOutInventory;
},
enableitemGroup: () => {
return !!this.enableitemGroup;
},
};
override hidden: HiddenMap = {
discountAccount: () => !this.enableDiscounting,
gstin: () => this.fyo.singles.SystemSettings?.countryCode !== 'in',
enablePricingRule: () =>
!this.fyo.singles.AccountingSettings?.enableDiscounting,
enableCouponCode: () =>
!this.fyo.singles.AccountingSettings?.enablePricingRule,
};
async change(ch: ChangeArg) {
const discountingEnabled =
ch.changed === 'enableDiscounting' && this.enableDiscounting;
const discountAccountNotSet = !this.discountAccount;
if (discountingEnabled && discountAccountNotSet) {
await createDiscountAccount(this.fyo);
}
if (
ch.changed == 'enablePointOfSaleWithOutInventory' &&
this.enablePointOfSaleWithOutInventory
) {
const inventorySettings = (await this.fyo.doc.getDoc(
ModelNameEnum.InventorySettings
)) as InventorySettings;
await inventorySettings.set('enableBatches', true);
await inventorySettings.set('enableUomConversions', true);
await inventorySettings.set('enableSerialNumber', true);
await inventorySettings.set('enableBarcodes', true);
await inventorySettings.set('enablePointOfSale', true);
await inventorySettings.sync();
}
}
}