Merge pull request 'feat: add cancel transaction report' (#102) from development into production
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details

Reviewed-on: #102
pull/113/head 1.1.1-production.1
irfan 2024-09-27 10:17:42 +00:00
commit c47f1e2616
3 changed files with 411 additions and 4 deletions

View File

@ -0,0 +1,392 @@
import {
DATA_FORMAT,
DATA_TYPE,
FILTER_FIELD_TYPE,
FILTER_TYPE,
REPORT_GROUP,
} from '../../../constant';
import { ReportConfigEntity } from '../../../entities/report-config.entity';
import { TransactionType } from 'src/modules/transaction/transaction/constants';
import { STATUS } from 'src/core/strings/constants/base.constants';
export default <ReportConfigEntity>{
group_name: REPORT_GROUP.transaction_report,
unique_name: `${REPORT_GROUP.transaction_report}__cancel`,
label: 'Pembatalan',
table_schema: `transactions main
LEFT JOIN season_types s_period_type ON s_period_type.id::text = main.season_period_type_id
LEFT JOIN refunds refund ON refund.transaction_id = main.id and refund.status != 'cancel'
LEFT JOIN vip_codes vip ON vip.id::text = main.discount_code_id::text
LEFT JOIN (
select item.transaction_id, sum(item.total_hpp) AS total_hpp_item
from transaction_items item
group by item.transaction_id
) item ON item.transaction_id = main.id`,
main_table_alias: 'main',
whereDefaultConditions: [
{
column: 'main.status',
filter_type: FILTER_TYPE.TEXT_IN_MEMBER,
values: [STATUS.CANCEL],
},
{
column: 'main.is_recap_transaction',
filter_type: FILTER_TYPE.TEXT_EQUAL,
values: [false],
},
],
defaultOrderBy: [],
lowLevelOrderBy: [],
filter_period_config: {
hidden: true,
},
column_configs: [
{
column: 'main__payment_date',
query: `to_char(main.payment_date, 'DD-MM-YYYY')`,
label: 'Tgl. Pendapatan',
type: DATA_TYPE.DIMENSION,
format: DATA_FORMAT.TEXT,
},
{
column: 'main__status',
query: 'main.status',
label: 'Status',
type: DATA_TYPE.DIMENSION,
format: DATA_FORMAT.STATUS,
},
{
column: 'main__type',
query: 'main.type',
label: 'Sumber',
type: DATA_TYPE.DIMENSION,
format: DATA_FORMAT.TEXT,
},
{
column: 's_period_type__name',
query: 's_period_type.name',
label: 'Tipe Rate',
type: DATA_TYPE.DIMENSION,
format: DATA_FORMAT.TEXT,
},
{
column: 'main__invoice_code',
query: `CASE WHEN main.type != 'counter' THEN main.invoice_code ELSE null END`,
label: 'Kode Booking',
type: DATA_TYPE.DIMENSION,
format: DATA_FORMAT.TEXT,
},
{
column: 'main__payment_code',
query: `CASE WHEN main.type = 'counter' THEN main.invoice_code ELSE main.payment_code END`,
label: 'Kode Pembayaran',
type: DATA_TYPE.DIMENSION,
format: DATA_FORMAT.TEXT,
},
{
column: 'main__customer_type',
query: 'main.customer_type',
label: 'Tipe Pelanggan',
type: DATA_TYPE.DIMENSION,
format: DATA_FORMAT.TEXT,
},
{
column: 'main__creator_counter_no',
query: 'main.creator_counter_no',
label: 'No.PoS',
type: DATA_TYPE.DIMENSION,
format: DATA_FORMAT.TEXT,
},
{
column: 'main__creator_counter_name',
query: 'main.creator_counter_name',
label: 'Nama PoS',
type: DATA_TYPE.DIMENSION,
format: DATA_FORMAT.TEXT,
},
{
column: 'main__no_of_group',
query: 'main.no_of_group::NUMERIC',
label: '#Visitor',
type: DATA_TYPE.MEASURE,
format: DATA_FORMAT.NUMBER,
},
{
column: 'item__total_hpp_item',
query: 'item.total_hpp_item',
label: 'Total HPP',
type: DATA_TYPE.MEASURE,
format: DATA_FORMAT.CURRENCY,
},
{
column: 'main__payment_sub_total',
query: 'main.payment_sub_total',
label: 'Subtotal',
type: DATA_TYPE.MEASURE,
format: DATA_FORMAT.CURRENCY,
},
{
column: 'main__discount_percentage',
query: 'main.discount_percentage',
label: 'Diskon (%)',
type: DATA_TYPE.DIMENSION,
format: DATA_FORMAT.NUMBER,
},
{
column: 'main__discount_value',
query: 'main.discount_value',
label: 'Diskon (IDR)',
type: DATA_TYPE.MEASURE,
format: DATA_FORMAT.CURRENCY,
},
{
column: 'main__payment_total',
query: 'main.payment_total',
label: 'Total Penjualan',
type: DATA_TYPE.MEASURE,
format: DATA_FORMAT.CURRENCY,
},
{
column: 'main__payment_total_dpp',
query: 'main.payment_total_dpp',
label: 'DPP',
type: DATA_TYPE.MEASURE,
format: DATA_FORMAT.CURRENCY,
},
{
column: 'main__payment_total_tax',
query: 'main.payment_total_tax',
label: 'Total Pajak',
type: DATA_TYPE.MEASURE,
format: DATA_FORMAT.CURRENCY,
},
{
column: 'main__payment_total_share',
query: 'main.payment_total_share',
label: 'Profit Share',
type: DATA_TYPE.MEASURE,
format: DATA_FORMAT.CURRENCY,
},
{
column: 'refund__refund_date',
query: `to_char(refund.refund_date, 'DD-MM-YYYY')`,
label: 'Tgl. Pengembalian',
type: DATA_TYPE.DIMENSION,
format: DATA_FORMAT.TEXT,
},
{
column: 'refund__status',
query: 'refund.status',
label: 'Status Pengembalian',
type: DATA_TYPE.DIMENSION,
format: DATA_FORMAT.TEXT,
},
{
column: 'refund__code',
query: 'refund.code',
label: 'Kode Pengembalian',
type: DATA_TYPE.DIMENSION,
format: DATA_FORMAT.TEXT,
},
// {
// column: 'refund__refund_total',
// query: '(refund.refund_total * -1)',
// label: 'Total Pengembalian',
// type: DATA_TYPE.MEASURE,
// format: DATA_FORMAT.CURRENCY,
// },
// {
// column: 'transaction_balance',
// query: `CASE WHEN refund.id is null THEN main.payment_total ELSE main.payment_total - refund.refund_total END`,
// label: 'Balance',
// type: DATA_TYPE.MEASURE,
// format: DATA_FORMAT.CURRENCY,
// },
{
column: 'main__discount_code',
query: 'main.discount_code',
label: 'Kode Diskon',
type: DATA_TYPE.DIMENSION,
format: DATA_FORMAT.TEXT,
},
{
column: 'vip__creator_name',
query: 'vip.creator_name',
label: 'Diberikan Oleh',
type: DATA_TYPE.DIMENSION,
format: DATA_FORMAT.TEXT,
},
{
column: 'main__customer_name',
query: 'main.customer_name',
label: 'Nama Pelanggan',
type: DATA_TYPE.DIMENSION,
format: DATA_FORMAT.TEXT,
},
{
column: 'main__customer_description',
query: 'main.customer_description',
label: 'Deskripsi',
type: DATA_TYPE.DIMENSION,
format: DATA_FORMAT.TEXT,
},
{
column: 'main__customer_phone',
query: 'main.customer_phone',
label: 'Telepon',
type: DATA_TYPE.DIMENSION,
format: DATA_FORMAT.TEXT,
},
{
column: 'main__payment_type_counter',
query: 'main.payment_type_counter',
label: 'Type Pembayaran',
type: DATA_TYPE.DIMENSION,
format: DATA_FORMAT.TEXT,
},
{
column: 'main__payment_type_method_name',
query: 'main.payment_type_method_name',
label: 'Bank/Issuer',
type: DATA_TYPE.DIMENSION,
format: DATA_FORMAT.TEXT,
},
{
column: 'main__payment_card_information',
query: 'main.payment_card_information',
label: 'Information',
type: DATA_TYPE.DIMENSION,
format: DATA_FORMAT.TEXT,
},
{
column: 'main__creator_name',
query: 'main.creator_name',
label: 'Penjualan Dibuat Oleh',
type: DATA_TYPE.DIMENSION,
format: DATA_FORMAT.TEXT,
},
{
column: 'main__reconciliation_confirm_by',
query: 'main.reconciliation_confirm_by',
label: 'Direkonsiliasi Oleh',
type: DATA_TYPE.DIMENSION,
format: DATA_FORMAT.TEXT,
},
{
column: 'refund__creator_name',
query: 'refund.creator_name',
label: 'Pengembalian Dibuat Oleh',
type: DATA_TYPE.DIMENSION,
format: DATA_FORMAT.TEXT,
},
],
filter_configs: [
{
filed_label: 'Tgl. Pembatalan',
filter_column: 'main__payment_date',
field_type: FILTER_FIELD_TYPE.date_range_picker,
filter_type: FILTER_TYPE.DATE_IN_RANGE_TIMESTAMP,
date_format: 'DD-MM-YYYY',
},
{
filed_label: 'Sumber',
filter_column: 'main__type',
field_type: FILTER_FIELD_TYPE.select,
filter_type: FILTER_TYPE.TEXT_IN_MEMBER,
select_custom_options: [...Object.values(TransactionType)],
},
{
filed_label: 'Tipe Rate',
filter_column: 's_period_type__name',
field_type: FILTER_FIELD_TYPE.input_tag,
filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS,
},
{
filed_label: 'Kode Booking',
filter_column: 'main__invoice_code',
field_type: FILTER_FIELD_TYPE.input_tag,
filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS,
},
{
filed_label: 'Kode Pembayaran',
filter_column: 'main__payment_code',
field_type: FILTER_FIELD_TYPE.input_tag,
filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS,
},
{
filed_label: 'Tipe Pelanggan',
filter_column: 'main__customer_type',
field_type: FILTER_FIELD_TYPE.input_tag,
filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS,
},
{
filed_label: 'No. PoS',
filter_column: 'main__creator_counter_no',
field_type: FILTER_FIELD_TYPE.input_number,
filter_type: FILTER_TYPE.NUMBER_EQUAL,
},
{
filed_label: 'Nama PoS',
filter_column: 'main__creator_counter_name',
field_type: FILTER_FIELD_TYPE.input_tag,
filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS,
},
{
filed_label: 'Tgl. Pengembalian',
filter_column: 'refund__refund_date',
field_type: FILTER_FIELD_TYPE.date_range_picker,
filter_type: FILTER_TYPE.DATE_IN_RANGE_TIMESTAMP,
date_format: 'DD-MM-YYYY',
},
{
filed_label: 'Kode Pengembalian',
filter_column: 'refund__code',
field_type: FILTER_FIELD_TYPE.input_tag,
filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS,
},
{
filed_label: 'Kode Diskon',
filter_column: 'main__discount_code',
field_type: FILTER_FIELD_TYPE.input_tag,
filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS,
},
{
filed_label: 'Nama Pelanggan',
filter_column: 'main__customer_name',
field_type: FILTER_FIELD_TYPE.input_tag,
filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS,
},
{
filed_label: 'Type Pembayaran',
filter_column: 'main__payment_type_counter',
field_type: FILTER_FIELD_TYPE.input_tag,
filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS,
},
{
filed_label: 'Bank/Issuer',
filter_column: 'main__payment_type_method_name',
field_type: FILTER_FIELD_TYPE.input_tag,
filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS,
},
{
filed_label: 'Penjualan Dibuat Oleh',
filter_column: 'main__creator_name',
field_type: FILTER_FIELD_TYPE.input_tag,
filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS,
},
{
filed_label: 'Direkonsiliasi Oleh',
filter_column: 'main__reconciliation_confirm_by',
field_type: FILTER_FIELD_TYPE.input_tag,
filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS,
},
{
filed_label: 'Pengembalian Dibuat Oleh',
filter_column: 'refund__creator_name',
field_type: FILTER_FIELD_TYPE.input_tag,
filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS,
},
],
};

View File

@ -18,10 +18,10 @@ export default <ReportConfigEntity>{
LEFT JOIN refunds refund ON refund.transaction_id = main.id and refund.status != 'cancel' LEFT JOIN refunds refund ON refund.transaction_id = main.id and refund.status != 'cancel'
LEFT JOIN vip_codes vip ON vip.id::text = main.discount_code_id::text LEFT JOIN vip_codes vip ON vip.id::text = main.discount_code_id::text
LEFT JOIN ( LEFT JOIN (
select item.transaction_id, sum(item.total_hpp) AS total_hpp_item select item.transaction_id, sum(item.total_hpp) AS total_hpp_item
from transaction_items item from transaction_items item
group by item.transaction_id group by item.transaction_id
) item ON item.transaction_id = main.id`, ) item ON item.transaction_id = main.id`,
main_table_alias: 'main', main_table_alias: 'main',
whereDefaultConditions: [ whereDefaultConditions: [
{ {
@ -238,6 +238,13 @@ export default <ReportConfigEntity>{
type: DATA_TYPE.DIMENSION, type: DATA_TYPE.DIMENSION,
format: DATA_FORMAT.TEXT, format: DATA_FORMAT.TEXT,
}, },
{
column: 'main__payment_type_counter',
query: 'main.payment_type_counter',
label: 'Type Pembayaran',
type: DATA_TYPE.DIMENSION,
format: DATA_FORMAT.TEXT,
},
{ {
column: 'main__payment_type_method_name', column: 'main__payment_type_method_name',
query: 'main.payment_type_method_name', query: 'main.payment_type_method_name',
@ -351,6 +358,12 @@ export default <ReportConfigEntity>{
field_type: FILTER_FIELD_TYPE.input_tag, field_type: FILTER_FIELD_TYPE.input_tag,
filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS, filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS,
}, },
{
filed_label: 'Type Pembayaran',
filter_column: 'main__payment_type_counter',
field_type: FILTER_FIELD_TYPE.input_tag,
filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS,
},
{ {
filed_label: 'Bank/Issuer', filed_label: 'Bank/Issuer',
filter_column: 'main__payment_type_method_name', filter_column: 'main__payment_type_method_name',

View File

@ -1,6 +1,7 @@
import { ReportConfigEntity } from '../../entities/report-config.entity'; import { ReportConfigEntity } from '../../entities/report-config.entity';
import IncomeReport from './configs/income'; import IncomeReport from './configs/income';
import CancelReport from './configs/cancel-transaction';
import IncomeReportPerItem from './configs/income-per-item'; import IncomeReportPerItem from './configs/income-per-item';
import IncomeReportPerItemMaster from './configs/income-per-item-master'; import IncomeReportPerItemMaster from './configs/income-per-item-master';
import GivingDiscount from './configs/giving-discounts'; import GivingDiscount from './configs/giving-discounts';
@ -17,6 +18,7 @@ export const TransactionReportConfig: ReportConfigEntity[] = [
IncomeReport, IncomeReport,
IncomeReportPerItem, IncomeReportPerItem,
IncomeReportPerItemMaster, IncomeReportPerItemMaster,
CancelReport,
GivingDiscount, GivingDiscount,
// VisitorsPerRideReport, // VisitorsPerRideReport,
// TimePerRideReport, // TimePerRideReport,