All catch blocks in singleApproval, bulkApprovals (both classes), and
delivery now return error.response?.data for axios errors and undefined
otherwise, consistent with the BaseApiService pattern.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add updateChickinDate method to ChickinService (PATCH /production/chickins/chick-in-date)
- Add pencil icon button next to each chickin date in ChickLogsView
- Clicking the icon toggles an inline DateInput with Simpan/Batal buttons
- Save button is disabled and shows loading state while request is in flight
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add start_date and end_date range inputs to the marketing filter modal
with validation that prevents end date from being earlier than start date
- Add 'Filter Berdasarkan' single-select radio (so_date / created_at)
to let users choose which date field the range applies to
- Add single-select Gudang (warehouse) filter backed by WarehouseApi,
serialized as warehouse_id query param
- Wire all three new filters into useTableFilter (paramMap, persist,
excludeKeysFromUrl for label-only fields) and propagate through
filterSubmitHandler, filterResetHandler, and marketingFilterInitialValues
so filter state survives page refreshes
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add exportBalanceMonitoringToExcel to FinanceApiService (server-side
blob download hitting reports/balance-monitoring?export=excel). Wire it
into BalanceMonitoringTab via a Dropdown export button in the tab
actions. Wrap the handler in useCallback to prevent an infinite
setTabActions loop caused by a new function reference on every render.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add exportToExcelSupplierPerSheet and exportToExcelGeneral methods to
LogisticApiService, hitting the existing purchase-supplier endpoint with
export=excel / export=excel-all query params and downloading the server
blob response. Replace the client-side Excel generation in
PurchasesPerSupplierTab with calls to these two service methods, and
split the single Export to Excel button into Export to Excel - Supplier
Per Sheet and Export to Excel - General.
Replace filterParams/currentPage/pageSize state with useTableFilter (persist:true),
switch SWR to httpClientFetcher with explicit type, store OptionType[] directly for
suppliers/filterBy, add formikResetHandler using resetFilter(), remove TabActions
component anti-pattern and handleFilterModalOpenRef, pass filterModal.openModal directly.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace filterParams/currentPage/pageSize state with useTableFilter (persist:true),
switch SWR to httpClientFetcher with explicit type, store OptionType[] directly for
customers/filterBy, add formikResetHandler using resetFilter(), remove enableReinitialize
and handleFilterModalOpenRef, pass filterModal.openModal directly.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace single-select customerFilter/salesFilter with OptionType[] multi-select
(customers, salesPersons, filterBy), switch SWR to httpClientFetcher with explicit
type, remove PDF export, enableReinitialize, useRef modal hack, useMemo on data/meta,
and useCallback on trivial handlers. Add formikResetHandler using resetFilter().
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>