fix(SPG-643) Sync batch data couch pouch

pull/33/head
Aswin Ashar Abdullah 2024-07-19 17:46:48 +07:00
parent fba7b9aae5
commit 1560cb0512
11 changed files with 87 additions and 66 deletions

View File

@ -10,39 +10,14 @@ export function setQueryFilterDefault(
baseFilter: BaseFilterEntity,
tableName: TABLE_NAME,
): SelectQueryBuilder<any> {
// filter berdasarkan statuses
if (!!baseFilter.statuses) {
queryBuilder.andWhere(
new Brackets((qb) => {
baseFilter.statuses.map((status) => {
// trim search
const statusData = status.includes("'")
? status.trim().replace(/'/g, "''").replace(/\s+/g, ' ')
: status.trim().replace(/\s+/g, ' ');
// jika searching status terdapat dalam enum, maka dia mencari specific data
// ? karena jika tidak, ketika dia search "active" maka "inactive" juga ikut
if (STATUS[statusData.toUpperCase()])
qb.orWhere(`${tableName}.status = :statusData`, {
statusData: statusData,
});
else
qb['orWhere'](
`${tableName}.status::text ILIKE '%${[statusData]}%'`,
);
});
}),
);
}
// filter berdasarkan id pembuat
if (!!baseFilter.created_ids)
new WhereInQueryHelper(
queryBuilder,
tableName,
'created_id',
'creator_id',
baseFilter.created_ids,
'created_ids',
'creator_ids',
).getQuery();
// filter berdasarkan tanggal terakhir dibuat

View File

@ -107,7 +107,7 @@ export abstract class BaseBatchUpdateStatusManager<Entity> extends BaseManager {
if (!this.eventTopics.length) return;
for (const topic of this.eventTopics) {
let data;
if (!topic.relations) {
if (topic.relations?.length) {
data = await this.dataService.getOneByOptions({
where: {
id: dataNew.id,

View File

@ -8,6 +8,7 @@ import {
} from 'src/core/helpers/query/default-filter.helper';
import { Param } from '../../entities/base-filter.entity';
import { joinRelationHelper } from 'src/core/helpers/query/join-relations.helper';
import { STATUS } from 'src/core/strings/constants/base.constants';
export abstract class BaseIndexManager<Entity> extends BaseReadManager {
protected result: PaginationResponse<Entity>;
@ -19,6 +20,7 @@ export abstract class BaseIndexManager<Entity> extends BaseReadManager {
}
async process(): Promise<void> {
const specificFilter = this.specificFilter;
const { joinRelations, selectRelations, countRelations } = this.relations;
if (joinRelations?.length)
@ -40,10 +42,26 @@ export abstract class BaseIndexManager<Entity> extends BaseReadManager {
if (this.selects?.length) this.queryBuilder.select(this.selects);
if (this.filterParam.statuses?.length > 0) {
const data = this.filterParam.statuses.map((status) => {
const statusData = status.includes("'")
? status.trim().replace(/'/g, "''").replace(/\s+/g, ' ')
: status.trim().replace(/\s+/g, ' ');
// jika searching status terdapat dalam enum, maka dia mencari specific data
// ? karena jika tidak, ketika dia search "active" maka "inactive" juga ikut
return STATUS[statusData.toUpperCase()] ?? statusData;
});
specificFilter.push({
cols: `${this.tableName}.status::text`,
data: data,
});
}
new SpecificSearchFilter<Entity>(
this.queryBuilder,
this.tableName,
this.specificFilter,
specificFilter,
).getFilter();
getOrderBy(this.filterParam, this.queryBuilder, this.tableName);

View File

@ -1,25 +0,0 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class UpdateMidtransColumnTransaction1721284234428
implements MigrationInterface
{
name = 'UpdateMidtransColumnTransaction1721284234428';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "transactions" DROP COLUMN "payment_midtrans_url"`,
);
await queryRunner.query(
`ALTER TABLE "transactions" DROP COLUMN "payment_midtrans_token"`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "transactions" ADD "payment_midtrans_token" character varying`,
);
await queryRunner.query(
`ALTER TABLE "transactions" ADD "payment_midtrans_url" character varying`,
);
}
}

View File

@ -0,0 +1,25 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class UpdateColumnTransaction1721385120750
implements MigrationInterface
{
name = 'UpdateColumnTransaction1721385120750';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "transactions" DROP COLUMN "discount_percentage"`,
);
await queryRunner.query(
`ALTER TABLE "transactions" ADD "discount_percentage" numeric`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "transactions" DROP COLUMN "discount_percentage"`,
);
await queryRunner.query(
`ALTER TABLE "transactions" ADD "discount_percentage" integer`,
);
}
}

View File

@ -24,7 +24,8 @@ export class PaymentTransactionHandler
if (
old_data.status == STATUS.DRAFT &&
current_data.status == STATUS.PENDING &&
current_data.payment_type != TransactionPaymentType.COUNTER
current_data.payment_type != TransactionPaymentType.COUNTER &&
!!current_data.customer_email
) {
if (current_data.payment_type != TransactionPaymentType.MIDTRANS) {
payments = await this.paymentService.getManyByOptions({

View File

@ -93,7 +93,7 @@ export class TransactionModel
@Column('varchar', { name: 'discount_code', nullable: true })
discount_code: string;
@Column('int', { name: 'discount_percentage', nullable: true })
@Column('decimal', { name: 'discount_percentage', nullable: true })
discount_percentage: number;
@Column('decimal', { name: 'discount_value', nullable: true })

View File

@ -56,7 +56,10 @@ export class ConfirmTransactionManager extends BaseUpdateStatusManager<Transacti
}
Object.assign(this.data, {
invoice_code: await generateInvoiceCodeHelper(this.dataService),
invoice_code:
this.data.payment_type == TransactionPaymentType.COUNTER
? null
: await generateInvoiceCodeHelper(this.dataService),
status: freeTransaction ? STATUS.ACTIVE : STATUS.PENDING,
});
return;

View File

@ -35,11 +35,14 @@ export class DetailTransactionManager extends BaseDetailManager<TransactionEntit
get selects(): string[] {
return [
`${this.tableName}.id`,
`${this.tableName}.creator_counter_no`,
`${this.tableName}.creator_name`,
`${this.tableName}.created_at`,
`${this.tableName}.updated_at`,
`${this.tableName}.editor_name`,
`${this.tableName}.invoice_code`,
`${this.tableName}.invoice_date`,
`${this.tableName}.settlement_date`,
`${this.tableName}.season_period_id`,
`${this.tableName}.season_period_name`,

View File

@ -1,5 +1,8 @@
import { STATUS } from 'src/core/strings/constants/base.constants';
import { TransactionType } from 'src/modules/transaction/transaction/constants';
import {
TransactionPaymentType,
TransactionType,
} from 'src/modules/transaction/transaction/constants';
export function mappingTransaction(data) {
let payment_type_bank: any = null;
@ -73,15 +76,31 @@ export function mappingTransaction(data) {
export function mappingRevertTransaction(data, type) {
if (type == TransactionType.COUNTER) {
if (data.booking_id) {
Object.assign(data, {
editor_id: data.pos_admin?.id,
editor_name: data.pos_admin?.name,
edited_at: new Date(data.created_at),
});
} else {
Object.assign(data, {
creator_id: data.pos_admin?.id,
creator_name: data.pos_admin?.name,
});
}
Object.assign(data, {
id: data._id,
creator_counter_no: data.pos_number,
creator_id: data.pos_admin?.id,
creator_name: data.pos_admin?.name,
id: data.booking_id ?? data._id,
invoice_code: data.code,
creator_counter_no: Number(data.pos_number),
status: STATUS.SETTLED,
booking_date: data.created_at,
settlement_date: data.created_at,
payment_type: data.payment_type,
settlement_date: new Date(data.created_at),
payment_date: new Date(data.created_at),
invoice_date: new Date(data.created_at),
payment_type:
data.payment_type == 'cc'
? TransactionPaymentType.CC
: data.payment_type,
payment_card_information: data.card_information,
payment_code_reference: data.payment_code,
discount_code_id: data.discount_code?.id,
@ -116,7 +135,8 @@ export function mappingRevertTransaction(data, type) {
});
data.items?.map((item) => {
const total_price = Number(item.item.base_price) * Number(item.qty);
const total_price =
Number(item.item.price ?? item.item.base_price) * Number(item.qty);
const share_margin = item.item.tenant?.share_margin ?? 0;
const total_share_tenant =
share_margin > 0 ? (Number(share_margin) / 100) * total_price : 0;

View File

@ -48,6 +48,7 @@ export class IndexTransactionManager extends BaseIndexManager<TransactionEntity>
`${this.tableName}.id`,
`${this.tableName}.status`,
`${this.tableName}.invoice_code`,
`${this.tableName}.creator_counter_no`,
`${this.tableName}.booking_date`,
`${this.tableName}.no_of_group`,
`${this.tableName}.type`,