Merge branch 'dev/randy' into 'development'

[FIX/FE][US#304] Adjust Permission for Finance and Marketing

See merge request mbugroup/lti-web-client!135
This commit is contained in:
Rivaldi A N S
2026-01-05 06:47:30 +00:00
7 changed files with 52 additions and 148 deletions
+25 -3
View File
@@ -9,6 +9,7 @@ import Table from '@/components/Table';
import {
FINANCE_INITIAL_BALANCE_STATUS,
FINANCE_TRANSACTION_STATUS,
FINANCE_INJECTION_STATUS,
} from '@/config/constant';
import { formatCurrency, formatDate, formatTitleCase } from '@/lib/helper';
import { FinanceApi } from '@/services/api/finance';
@@ -33,7 +34,7 @@ const FinanceDetail = ({ finance }: { finance: Finance }) => {
},
{
label: 'Pihak',
value: finance.party.name,
value: finance.party.id ? finance.party.name : '-',
},
{
label: 'Tanggal',
@@ -51,7 +52,7 @@ const FinanceDetail = ({ finance }: { finance: Finance }) => {
const informasiTransfer = [
{
label: 'No. Referensi',
value: finance.reference_number,
value: finance.reference_number ?? '-',
},
{
label: 'Nomor Rekening',
@@ -69,7 +70,16 @@ const FinanceDetail = ({ finance }: { finance: Finance }) => {
label: 'Sisa',
value: formatCurrency(finance.income_amount),
},
];
].filter((item) => {
// Hide party account number row if transaction type is INJECTION
if (
FINANCE_INJECTION_STATUS.includes(finance.transaction_type) &&
item.label === `Rekening ${formatTitleCase(finance.party.type)}`
) {
return false;
}
return true;
});
const confirmationModalDeleteClickHandler = async () => {
setIsDeleteLoading(true);
@@ -162,6 +172,18 @@ const FinanceDetail = ({ finance }: { finance: Finance }) => {
</Button>
</RequirePermission>
)}
{FINANCE_INJECTION_STATUS.includes(finance.transaction_type) && (
<RequirePermission permissions='lti.finance.injections.update'>
<Button
color='warning'
className='min-w-24'
href={`/finance/detail/edit/injection?financeId=${finance.id}`}
>
<Icon icon='mdi:pencil-outline' />
Edit
</Button>
</RequirePermission>
)}
<RequirePermission permissions='lti.finance.transactions.delete'>
<Button
color='error'
@@ -49,7 +49,14 @@ const RowOptionsMenu = ({
}) => {
return (
<RowOptionsMenuWrapper type={type}>
<RequirePermission permissions='lti.finance.transactions.detail'>
<RequirePermission
permissions={[
'lti.finance.transactions.detail',
'lti.finance.initial_balances.detail',
'lti.finance.injections.detail',
'lti.finance.payments.detail',
]}
>
<Button
href={`/finance/detail?financeId=${props.row.original.id}`}
variant='ghost'
@@ -77,10 +77,6 @@ const MarketingDetail = ({
confirmationModal.openModal();
};
const deliveryClickHandler = () => {
deliveryModal.openModal();
};
const deleteClickHandler = () => {
deleteModal.openModal();
};
@@ -135,7 +131,7 @@ const MarketingDetail = ({
<div className='flex-row flex gap-3'>
{initialValues?.latest_approval?.step_number == 1 && (
<>
{/* <RequirePermission permissions='lti.marketing.sales_order.approve'>
<RequirePermission permissions='lti.marketing.sales_order.approve'>
<Button
color='success'
onClick={approveClickHandler}
@@ -147,20 +143,9 @@ const MarketingDetail = ({
<Icon icon='mdi:check' width={24} height={24} />
Approve
</Button>
</RequirePermission> */}
<Button
color='success'
onClick={approveClickHandler}
disabled={
initialValues?.latest_approval?.step_number == 1 &&
initialValues?.latest_approval?.action == 'REJECTED'
}
>
<Icon icon='mdi:check' width={24} height={24} />
Approve
</Button>
</RequirePermission>
{/* <RequirePermission permissions='lti.marketing.sales_order.approve'>
<RequirePermission permissions='lti.marketing.sales_order.approve'>
<Button
color='error'
onClick={rejectClickHandler}
@@ -172,23 +157,12 @@ const MarketingDetail = ({
<Icon icon='mdi:close' width={24} height={24} />
Reject
</Button>
</RequirePermission> */}
<Button
color='error'
onClick={rejectClickHandler}
disabled={
initialValues?.latest_approval?.step_number == 1 &&
initialValues?.latest_approval?.action == 'REJECTED'
}
>
<Icon icon='mdi:close' width={24} height={24} />
Reject
</Button>
</RequirePermission>
</>
)}
{initialValues?.latest_approval?.step_number != 1 && (
<>
{/* <RequirePermission
<RequirePermission
permissions={
initialValues?.latest_approval?.step_number == 3
? 'lti.marketing.delivery_order.update'
@@ -209,21 +183,7 @@ const MarketingDetail = ({
: 'Tambah '}
Delivery Order
</Button>
</RequirePermission> */}
<Button
color='success'
href={
initialValues?.latest_approval?.step_number == 3
? `/marketing/detail/delivery-orders/edit?marketingId=${initialValues?.id}`
: `/marketing/add/delivery-orders?marketingId=${initialValues?.id}`
}
>
<Icon icon='mdi:truck' width={24} height={24} />
{initialValues?.latest_approval?.step_number == 3
? 'Edit '
: 'Tambah '}
Delivery Order
</Button>
</RequirePermission>
</>
)}
</div>
@@ -466,7 +426,7 @@ const MarketingDetail = ({
<div className='flex flex-row gap-3'>
{initialValues?.latest_approval?.step_number != 3 && (
<>
{/* <RequirePermission permissions='lti.marketing.sales_order.update'>
<RequirePermission permissions='lti.marketing.sales_order.update'>
<Button
color='warning'
type='button'
@@ -475,27 +435,15 @@ const MarketingDetail = ({
<Icon icon='mdi:pencil' width={24} height={24} />
Edit
</Button>
</RequirePermission> */}
<Button
color='warning'
type='button'
href={`/marketing/detail/${initialValues?.latest_approval?.step_number == 3 ? 'delivery-orders' : 'sales-orders'}/edit?marketingId=${initialValues?.id}`}
>
<Icon icon='mdi:pencil' width={24} height={24} />
Edit
</Button>
</RequirePermission>
</>
)}
{/* <RequirePermission permissions='lti.marketing.sales_order.delete'>
<RequirePermission permissions='lti.marketing.sales_order.delete'>
<Button color='error' onClick={deleteClickHandler}>
<Icon icon='mdi:delete' width={24} height={24} />
Hapus
</Button>
</RequirePermission> */}
<Button color='error' onClick={deleteClickHandler}>
<Icon icon='mdi:delete' width={24} height={24} />
Hapus
</Button>
</RequirePermission>
</div>
</div>
<ConfirmationModal
@@ -635,12 +635,6 @@ const MarketingForm = ({
wrapper: 'bg-white w-full',
}}
>
{/* <div className='text-blue-500'>
{JSON.stringify(formik.values)}
</div>
<div className='text-red-500'>
{JSON.stringify(formik.errors)}
</div> */}
<MemoizedDeliveryOrderProductTable
formType={formType}
data={deliveryOrderValues}
@@ -690,7 +684,7 @@ const MarketingForm = ({
{/* Actions button */}
{formType == 'edit' && (
<div className='flex flex-row justify-start'>
{/* <RequirePermission permissions='lti.marketing.sales_order.delete'>
<RequirePermission permissions='lti.marketing.sales_order.delete'>
<Button
type='button'
color='error'
@@ -700,16 +694,7 @@ const MarketingForm = ({
<Icon icon='mdi:trash' width={24} height={24} />
Hapus
</Button>
</RequirePermission> */}
<Button
type='button'
color='error'
onClick={handleDelete}
isLoading={isLoading}
>
<Icon icon='mdi:trash' width={24} height={24} />
Hapus
</Button>
</RequirePermission>
</div>
)}
@@ -11,7 +11,7 @@ import SelectInput, {
useSelect,
} from '@/components/input/SelectInput';
import { Kandang } from '@/types/api/master-data/kandang';
import { KandangApi, WarehouseApi } from '@/services/api/master-data';
import { WarehouseApi } from '@/services/api/master-data';
import { ProductWarehouse } from '@/types/api/inventory/product-warehouse';
import { ProductWarehouseApi } from '@/services/api/inventory';
import NumberInput from '@/components/input/NumberInput';
@@ -180,9 +180,6 @@ const SalesOrderProductForm = ({
</Alert>
</div>
)}
{/* <small className='block text-rose-500'>
{JSON.stringify(formik.errors)}
</small> */}
<div className='grid sm:grid-cols-2 gap-4 z-200'>
<PatternInput
name='vehicle_number'
@@ -32,38 +32,6 @@ const DeliveryOrderProductTable = ({
const columns = useMemo(() => {
const cols = [
// {
// id: 'select',
// header: ({
// table,
// }: {
// table: TanStack.Table<DeliveryOrderProductFormValues>;
// }) => (
// <div className='w-full flex flex-row justify-center'>
// <CheckboxInput
// name='allRow'
// checked={table.getIsAllRowsSelected()}
// indeterminate={table.getIsSomeRowsSelected()}
// onChange={table.getToggleAllRowsSelectedHandler()}
// />
// </div>
// ),
// cell: ({
// row,
// }: {
// row: TanStack.Row<DeliveryOrderProductFormValues>;
// }) => (
// <div>
// <CheckboxInput
// name='row'
// checked={row.getIsSelected()}
// disabled={!row.getCanSelect()}
// indeterminate={row.getIsSomeSelected()}
// onChange={row.getToggleSelectedHandler()}
// />
// </div>
// ),
// },
{
accessorFn: (row: DeliveryOrderProductFormValues) => row.do_number,
header: 'No. Pengiriman',
@@ -188,18 +156,6 @@ const DeliveryOrderProductTable = ({
</Button>
)}
{!props.row.original.qty && '-'}
{/* {formType == 'add_deliver' && (
<Button
color='error'
className='p-1'
onClick={() =>
onDeleteRef.current(props.row.original.id as number)
}
type='button'
>
<Icon icon='mdi:trash' width={16} height={16} />
</Button>
)} */}
</>
</div>
),
@@ -248,22 +204,6 @@ const DeliveryOrderProductTable = ({
<Icon icon='mdi:plus' width={16} height={16} />
Tambah Pengiriman
</Button>
{/* {selectedRowIds.length > 0 && (
<Button
type='button'
variant='outline'
color='error'
className='justify-start w-fit py-1 text-sm'
onClick={onBulkDelete}
>
<Icon icon='mdi:trash' width={16} height={16} />
Hapus
{selectedRowIds.length > 0
? ` (${selectedRowIds.length})`
: ''}{' '}
Pengiriman
</Button>
)} */}
</div>
</>
);
+6 -1
View File
@@ -76,7 +76,12 @@ export const ROUTE_PERMISSIONS: Record<string, string[]> = {
// Finance
'/finance/': ['lti.finance.transactions.list'],
'/finance/detail/': ['lti.finance.transactions.detail'],
'/finance/detail/': [
'lti.finance.transactions.detail',
'lti.finance.initial_balances.detail',
'lti.finance.injections.detail',
'lti.finance.payments.detail',
],
'/finance/add/': ['lti.finance.payments.create'],
'/finance/detail/edit/': ['lti.finance.payments.update'],
'/finance/add/initial-balance/': ['lti.finance.initial_balances.create'],