fix(SPG-643) Sync batch data couch pouch
parent
fba7b9aae5
commit
1560cb0512
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 (
|
||||
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({
|
||||
|
|
|
@ -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 })
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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`,
|
||||
|
|
|
@ -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, {
|
||||
id: data._id,
|
||||
creator_counter_no: data.pos_number,
|
||||
creator_id: data.pos_admin?.id,
|
||||
creator_name: data.pos_admin?.name,
|
||||
});
|
||||
}
|
||||
|
||||
Object.assign(data, {
|
||||
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;
|
||||
|
|
|
@ -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`,
|
||||
|
|
Loading…
Reference in New Issue