fix(SPG-643) Sync batch data couch pouch
parent
fba7b9aae5
commit
1560cb0512
|
@ -10,39 +10,14 @@ export function setQueryFilterDefault(
|
||||||
baseFilter: BaseFilterEntity,
|
baseFilter: BaseFilterEntity,
|
||||||
tableName: TABLE_NAME,
|
tableName: TABLE_NAME,
|
||||||
): SelectQueryBuilder<any> {
|
): 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
|
// filter berdasarkan id pembuat
|
||||||
if (!!baseFilter.created_ids)
|
if (!!baseFilter.created_ids)
|
||||||
new WhereInQueryHelper(
|
new WhereInQueryHelper(
|
||||||
queryBuilder,
|
queryBuilder,
|
||||||
tableName,
|
tableName,
|
||||||
'created_id',
|
'creator_id',
|
||||||
baseFilter.created_ids,
|
baseFilter.created_ids,
|
||||||
'created_ids',
|
'creator_ids',
|
||||||
).getQuery();
|
).getQuery();
|
||||||
|
|
||||||
// filter berdasarkan tanggal terakhir dibuat
|
// filter berdasarkan tanggal terakhir dibuat
|
||||||
|
|
|
@ -107,7 +107,7 @@ export abstract class BaseBatchUpdateStatusManager<Entity> extends BaseManager {
|
||||||
if (!this.eventTopics.length) return;
|
if (!this.eventTopics.length) return;
|
||||||
for (const topic of this.eventTopics) {
|
for (const topic of this.eventTopics) {
|
||||||
let data;
|
let data;
|
||||||
if (!topic.relations) {
|
if (topic.relations?.length) {
|
||||||
data = await this.dataService.getOneByOptions({
|
data = await this.dataService.getOneByOptions({
|
||||||
where: {
|
where: {
|
||||||
id: dataNew.id,
|
id: dataNew.id,
|
||||||
|
|
|
@ -8,6 +8,7 @@ import {
|
||||||
} from 'src/core/helpers/query/default-filter.helper';
|
} from 'src/core/helpers/query/default-filter.helper';
|
||||||
import { Param } from '../../entities/base-filter.entity';
|
import { Param } from '../../entities/base-filter.entity';
|
||||||
import { joinRelationHelper } from 'src/core/helpers/query/join-relations.helper';
|
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 {
|
export abstract class BaseIndexManager<Entity> extends BaseReadManager {
|
||||||
protected result: PaginationResponse<Entity>;
|
protected result: PaginationResponse<Entity>;
|
||||||
|
@ -19,6 +20,7 @@ export abstract class BaseIndexManager<Entity> extends BaseReadManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
async process(): Promise<void> {
|
async process(): Promise<void> {
|
||||||
|
const specificFilter = this.specificFilter;
|
||||||
const { joinRelations, selectRelations, countRelations } = this.relations;
|
const { joinRelations, selectRelations, countRelations } = this.relations;
|
||||||
|
|
||||||
if (joinRelations?.length)
|
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.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>(
|
new SpecificSearchFilter<Entity>(
|
||||||
this.queryBuilder,
|
this.queryBuilder,
|
||||||
this.tableName,
|
this.tableName,
|
||||||
this.specificFilter,
|
specificFilter,
|
||||||
).getFilter();
|
).getFilter();
|
||||||
|
|
||||||
getOrderBy(this.filterParam, this.queryBuilder, this.tableName);
|
getOrderBy(this.filterParam, this.queryBuilder, this.tableName);
|
||||||
|
|
|
@ -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`,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -24,7 +24,8 @@ export class PaymentTransactionHandler
|
||||||
if (
|
if (
|
||||||
old_data.status == STATUS.DRAFT &&
|
old_data.status == STATUS.DRAFT &&
|
||||||
current_data.status == STATUS.PENDING &&
|
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) {
|
if (current_data.payment_type != TransactionPaymentType.MIDTRANS) {
|
||||||
payments = await this.paymentService.getManyByOptions({
|
payments = await this.paymentService.getManyByOptions({
|
||||||
|
|
|
@ -93,7 +93,7 @@ export class TransactionModel
|
||||||
@Column('varchar', { name: 'discount_code', nullable: true })
|
@Column('varchar', { name: 'discount_code', nullable: true })
|
||||||
discount_code: string;
|
discount_code: string;
|
||||||
|
|
||||||
@Column('int', { name: 'discount_percentage', nullable: true })
|
@Column('decimal', { name: 'discount_percentage', nullable: true })
|
||||||
discount_percentage: number;
|
discount_percentage: number;
|
||||||
|
|
||||||
@Column('decimal', { name: 'discount_value', nullable: true })
|
@Column('decimal', { name: 'discount_value', nullable: true })
|
||||||
|
|
|
@ -56,7 +56,10 @@ export class ConfirmTransactionManager extends BaseUpdateStatusManager<Transacti
|
||||||
}
|
}
|
||||||
|
|
||||||
Object.assign(this.data, {
|
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,
|
status: freeTransaction ? STATUS.ACTIVE : STATUS.PENDING,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -35,11 +35,14 @@ export class DetailTransactionManager extends BaseDetailManager<TransactionEntit
|
||||||
get selects(): string[] {
|
get selects(): string[] {
|
||||||
return [
|
return [
|
||||||
`${this.tableName}.id`,
|
`${this.tableName}.id`,
|
||||||
|
`${this.tableName}.creator_counter_no`,
|
||||||
`${this.tableName}.creator_name`,
|
`${this.tableName}.creator_name`,
|
||||||
`${this.tableName}.created_at`,
|
`${this.tableName}.created_at`,
|
||||||
`${this.tableName}.updated_at`,
|
`${this.tableName}.updated_at`,
|
||||||
`${this.tableName}.editor_name`,
|
`${this.tableName}.editor_name`,
|
||||||
`${this.tableName}.invoice_code`,
|
`${this.tableName}.invoice_code`,
|
||||||
|
`${this.tableName}.invoice_date`,
|
||||||
|
`${this.tableName}.settlement_date`,
|
||||||
|
|
||||||
`${this.tableName}.season_period_id`,
|
`${this.tableName}.season_period_id`,
|
||||||
`${this.tableName}.season_period_name`,
|
`${this.tableName}.season_period_name`,
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
import { STATUS } from 'src/core/strings/constants/base.constants';
|
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) {
|
export function mappingTransaction(data) {
|
||||||
let payment_type_bank: any = null;
|
let payment_type_bank: any = null;
|
||||||
|
@ -73,15 +76,31 @@ export function mappingTransaction(data) {
|
||||||
|
|
||||||
export function mappingRevertTransaction(data, type) {
|
export function mappingRevertTransaction(data, type) {
|
||||||
if (type == TransactionType.COUNTER) {
|
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, {
|
Object.assign(data, {
|
||||||
id: data._id,
|
id: data.booking_id ?? data._id,
|
||||||
creator_counter_no: data.pos_number,
|
invoice_code: data.code,
|
||||||
creator_id: data.pos_admin?.id,
|
creator_counter_no: Number(data.pos_number),
|
||||||
creator_name: data.pos_admin?.name,
|
|
||||||
status: STATUS.SETTLED,
|
status: STATUS.SETTLED,
|
||||||
booking_date: data.created_at,
|
settlement_date: new Date(data.created_at),
|
||||||
settlement_date: data.created_at,
|
payment_date: new Date(data.created_at),
|
||||||
payment_type: data.payment_type,
|
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_card_information: data.card_information,
|
||||||
payment_code_reference: data.payment_code,
|
payment_code_reference: data.payment_code,
|
||||||
discount_code_id: data.discount_code?.id,
|
discount_code_id: data.discount_code?.id,
|
||||||
|
@ -116,7 +135,8 @@ export function mappingRevertTransaction(data, type) {
|
||||||
});
|
});
|
||||||
|
|
||||||
data.items?.map((item) => {
|
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 share_margin = item.item.tenant?.share_margin ?? 0;
|
||||||
const total_share_tenant =
|
const total_share_tenant =
|
||||||
share_margin > 0 ? (Number(share_margin) / 100) * total_price : 0;
|
share_margin > 0 ? (Number(share_margin) / 100) * total_price : 0;
|
||||||
|
|
|
@ -48,6 +48,7 @@ export class IndexTransactionManager extends BaseIndexManager<TransactionEntity>
|
||||||
`${this.tableName}.id`,
|
`${this.tableName}.id`,
|
||||||
`${this.tableName}.status`,
|
`${this.tableName}.status`,
|
||||||
`${this.tableName}.invoice_code`,
|
`${this.tableName}.invoice_code`,
|
||||||
|
`${this.tableName}.creator_counter_no`,
|
||||||
`${this.tableName}.booking_date`,
|
`${this.tableName}.booking_date`,
|
||||||
`${this.tableName}.no_of_group`,
|
`${this.tableName}.no_of_group`,
|
||||||
`${this.tableName}.type`,
|
`${this.tableName}.type`,
|
||||||
|
|
Loading…
Reference in New Issue