mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-20 13:31:56 +00:00
f6c88b773d
This reverts merge request !340
802 lines
24 KiB
Go
802 lines
24 KiB
Go
package utils
|
|
|
|
import (
|
|
"strings"
|
|
|
|
approvalutils "gitlab.com/mbugroup/lti-api.git/internal/utils/approvals"
|
|
)
|
|
|
|
// -------------------------------------------------------------------
|
|
// FlagType & Groups
|
|
// -------------------------------------------------------------------
|
|
|
|
type FlagType string
|
|
|
|
type FlagGroup string
|
|
|
|
const (
|
|
FlagIsActive FlagType = "IS_ACTIVE"
|
|
|
|
FlagDOC FlagType = "DOC"
|
|
FlagPullet FlagType = "PULLET"
|
|
FlagLayer FlagType = "LAYER"
|
|
FlagPakan FlagType = "PAKAN"
|
|
FlagPreStarter FlagType = "PRE-STARTER"
|
|
FlagStarter FlagType = "STARTER"
|
|
FlagFinisher FlagType = "FINISHER"
|
|
FlagOVK FlagType = "OVK"
|
|
FlagObat FlagType = "OBAT"
|
|
FlagVitamin FlagType = "VITAMIN"
|
|
FlagKimia FlagType = "KIMIA"
|
|
FlagEkspedisi FlagType = "EKSPEDISI"
|
|
|
|
// flag ayam
|
|
FlagAyamAfkir FlagType = "AYAM-AFKIR"
|
|
FlagAyamCulling FlagType = "AYAM-CULLING"
|
|
FlagAyamMati FlagType = "AYAM-MATI"
|
|
|
|
//flag telur
|
|
FlagTelur FlagType = "TELUR"
|
|
FlagTelurUtuh FlagType = "TELUR-UTUH"
|
|
FlagTelurPecah FlagType = "TELUR-PECAH"
|
|
FlagTelurPutih FlagType = "TELUR-PUTIH"
|
|
FlagTelurRetak FlagType = "TELUR-RETAK"
|
|
)
|
|
|
|
const (
|
|
FlagGroupProduct FlagGroup = "PRODUCT"
|
|
FlagGroupNonstock FlagGroup = "NONSTOCK"
|
|
)
|
|
|
|
var flagGroupOptions = map[FlagGroup][]FlagType{
|
|
FlagGroupProduct: {
|
|
FlagDOC,
|
|
FlagPullet,
|
|
FlagLayer,
|
|
FlagPakan,
|
|
FlagPreStarter,
|
|
FlagStarter,
|
|
FlagFinisher,
|
|
FlagOVK,
|
|
FlagObat,
|
|
FlagVitamin,
|
|
FlagKimia,
|
|
},
|
|
FlagGroupNonstock: {
|
|
FlagEkspedisi,
|
|
},
|
|
}
|
|
|
|
var allFlagTypes = func() map[FlagType]struct{} {
|
|
m := map[FlagType]struct{}{
|
|
FlagIsActive: {},
|
|
}
|
|
for _, flags := range flagGroupOptions {
|
|
for _, flag := range flags {
|
|
m[flag] = struct{}{}
|
|
}
|
|
}
|
|
return m
|
|
}()
|
|
|
|
func AllFlagTypes() map[FlagType]struct{} {
|
|
return allFlagTypes
|
|
}
|
|
|
|
// -------------------------------------------------------------------
|
|
// WarehouseType
|
|
// -------------------------------------------------------------------
|
|
|
|
type WarehouseType string
|
|
|
|
const (
|
|
WarehouseTypeArea WarehouseType = "AREA"
|
|
WarehouseTypeLokasi WarehouseType = "LOKASI"
|
|
WarehouseTypeKandang WarehouseType = "KANDANG"
|
|
)
|
|
|
|
// -------------------------------------------------------------------
|
|
// Stock log
|
|
// -------------------------------------------------------------------
|
|
|
|
type StockLogTransactionType string
|
|
|
|
const (
|
|
StockLogTransactionTypeIncrease StockLogTransactionType = "INCREASE"
|
|
StockLogTransactionTypeDecrease StockLogTransactionType = "DECREASE"
|
|
)
|
|
|
|
type StockLogType string
|
|
|
|
const (
|
|
StockLogTypeAdjustment StockLogType = "ADJUSTMENT"
|
|
StockLogTypeTransfer StockLogType = "TRANSFER"
|
|
StockLogTypeTransferLaying StockLogType = "TRANSFER_LAYING"
|
|
StockLogTypeMarketing StockLogType = "MARKETING"
|
|
StockLogTypeChikin StockLogType = "CHICKIN"
|
|
StockLogTypePurchase StockLogType = "PURCHASE"
|
|
StockLogTypeRecording StockLogType = "RECORDING"
|
|
)
|
|
|
|
// -------------------------------------------------------------------
|
|
// Transfer context
|
|
// -------------------------------------------------------------------
|
|
|
|
const (
|
|
TransferContextKey = "transfer_context"
|
|
TransferContextInventoryTransfer = "inventory_transfer"
|
|
TransferContextTransferToLaying = "transfer_to_laying"
|
|
)
|
|
|
|
// -------------------------------------------------------------------
|
|
// WarehouseType
|
|
// -------------------------------------------------------------------
|
|
|
|
type CustomerSupplierType string
|
|
|
|
const (
|
|
CustomerSupplierTypeBisnis CustomerSupplierType = "BISNIS"
|
|
CustomerSupplierTypeIndividual CustomerSupplierType = "INDIVIDUAL"
|
|
)
|
|
|
|
// -------------------------------------------------------------------
|
|
// SupplierCategory
|
|
// -------------------------------------------------------------------
|
|
|
|
type SupplierCategory string
|
|
|
|
const (
|
|
SupplierCategoryBOP SupplierCategory = "BOP"
|
|
SupplierCategorySapronak SupplierCategory = "SAPRONAK"
|
|
)
|
|
|
|
// -------------------------------------------------------------------
|
|
// ExpenseCategory
|
|
// -------------------------------------------------------------------
|
|
|
|
type ExpenseCategory string
|
|
|
|
const (
|
|
ExpenseCategoryBOP ExpenseCategory = "BOP"
|
|
ExpenseCategoryNonBOP ExpenseCategory = "NON-BOP"
|
|
)
|
|
|
|
// -------------------------------------------------------------------
|
|
// Filter Customer Payment
|
|
// -------------------------------------------------------------------
|
|
|
|
const (
|
|
CustomerPaymentFilterByTransDate = "TRANS_DATE"
|
|
CustomerPaymentFilterByRealizationDate = "REALIZATION_DATE"
|
|
)
|
|
|
|
// -------------------------------------------------------------------
|
|
// Payment Method
|
|
// -------------------------------------------------------------------
|
|
|
|
type PaymentMethod string
|
|
|
|
const (
|
|
PaymentMethodTransfer PaymentMethod = "TRANSFER"
|
|
PaymentMethodCash PaymentMethod = "CASH"
|
|
PaymentMethodCard PaymentMethod = "CARD"
|
|
PaymentMethodCheque PaymentMethod = "CHEQUE"
|
|
PaymentMethodSaldo PaymentMethod = "SALDO"
|
|
)
|
|
|
|
// -------------------------------------------------------------------
|
|
// Trasaction Type
|
|
// -------------------------------------------------------------------
|
|
|
|
type TransactionType string
|
|
|
|
const (
|
|
TransactionTypePenjualan TransactionType = "PENJUALAN"
|
|
TransactionTypePembelian TransactionType = "PEMBELIAN"
|
|
TransactionTypeBiaya TransactionType = "BIAYA"
|
|
TransactionTypeInjection TransactionType = "INJECTION"
|
|
TransactionTypeSaldoAwal TransactionType = "SALDO_AWAL"
|
|
)
|
|
|
|
type AdjustmentTransactionType string
|
|
|
|
const (
|
|
AdjustmentTransactionTypePembelian AdjustmentTransactionType = "PEMBELIAN"
|
|
AdjustmentTransactionTypeRecording AdjustmentTransactionType = "RECORDING"
|
|
AdjustmentTransactionTypePenjualan AdjustmentTransactionType = "PENJUALAN"
|
|
)
|
|
|
|
type AdjustmentTransactionSubtype string
|
|
|
|
const (
|
|
AdjustmentTransactionSubtypePurchaseIn AdjustmentTransactionSubtype = "PURCHASE_IN"
|
|
AdjustmentTransactionSubtypeRecordingDepletionOut AdjustmentTransactionSubtype = "RECORDING_DEPLETION_OUT"
|
|
AdjustmentTransactionSubtypeMarketingOut AdjustmentTransactionSubtype = "MARKETING_OUT"
|
|
AdjustmentTransactionSubtypeRecordingDepletionIn AdjustmentTransactionSubtype = "RECORDING_DEPLETION_IN"
|
|
AdjustmentTransactionSubtypeRecordingStockOut AdjustmentTransactionSubtype = "RECORDING_STOCK_OUT"
|
|
AdjustmentTransactionSubtypeRecordingEggIn AdjustmentTransactionSubtype = "RECORDING_EGG_IN"
|
|
)
|
|
|
|
var adjustmentSubtypesByType = map[AdjustmentTransactionType][]string{
|
|
AdjustmentTransactionTypePembelian: {
|
|
string(AdjustmentTransactionSubtypePurchaseIn),
|
|
},
|
|
AdjustmentTransactionTypeRecording: {
|
|
string(AdjustmentTransactionSubtypeRecordingStockOut),
|
|
string(AdjustmentTransactionSubtypeRecordingDepletionOut),
|
|
string(AdjustmentTransactionSubtypeRecordingDepletionIn),
|
|
string(AdjustmentTransactionSubtypeRecordingEggIn),
|
|
},
|
|
AdjustmentTransactionTypePenjualan: {
|
|
string(AdjustmentTransactionSubtypeMarketingOut),
|
|
},
|
|
}
|
|
|
|
var hiddenAdjustmentSubtypesForFrontend = map[string]struct{}{
|
|
string(AdjustmentTransactionSubtypeRecordingDepletionIn): {},
|
|
}
|
|
|
|
var adjustmentSubtypeToType = func() map[string]AdjustmentTransactionType {
|
|
out := make(map[string]AdjustmentTransactionType)
|
|
for txType, subtypes := range adjustmentSubtypesByType {
|
|
for _, subtype := range subtypes {
|
|
code := strings.ToUpper(strings.TrimSpace(subtype))
|
|
if code == "" {
|
|
continue
|
|
}
|
|
out[code] = txType
|
|
}
|
|
}
|
|
return out
|
|
}()
|
|
|
|
func AdjustmentTransactionTypes() []string {
|
|
return []string{
|
|
string(AdjustmentTransactionTypePembelian),
|
|
string(AdjustmentTransactionTypeRecording),
|
|
string(AdjustmentTransactionTypePenjualan),
|
|
}
|
|
}
|
|
|
|
func AdjustmentTransactionSubtypesByType() map[string][]string {
|
|
out := make(map[string][]string, len(adjustmentSubtypesByType))
|
|
for _, txType := range []AdjustmentTransactionType{
|
|
AdjustmentTransactionTypePembelian,
|
|
AdjustmentTransactionTypeRecording,
|
|
AdjustmentTransactionTypePenjualan,
|
|
} {
|
|
src := adjustmentSubtypesByType[txType]
|
|
dup := make([]string, len(src))
|
|
copy(dup, src)
|
|
out[string(txType)] = dup
|
|
}
|
|
return out
|
|
}
|
|
|
|
func AdjustmentTransactionSubtypes() []string {
|
|
result := make([]string, 0)
|
|
for _, txType := range []AdjustmentTransactionType{
|
|
AdjustmentTransactionTypePembelian,
|
|
AdjustmentTransactionTypeRecording,
|
|
AdjustmentTransactionTypePenjualan,
|
|
} {
|
|
result = append(result, adjustmentSubtypesByType[txType]...)
|
|
}
|
|
return result
|
|
}
|
|
|
|
func AdjustmentTransactionSubtypesByTypeForFrontend() map[string][]string {
|
|
out := make(map[string][]string, len(adjustmentSubtypesByType))
|
|
for txType, subtypes := range AdjustmentTransactionSubtypesByType() {
|
|
filtered := make([]string, 0, len(subtypes))
|
|
for _, subtype := range subtypes {
|
|
if _, hidden := hiddenAdjustmentSubtypesForFrontend[subtype]; hidden {
|
|
continue
|
|
}
|
|
filtered = append(filtered, subtype)
|
|
}
|
|
out[txType] = filtered
|
|
}
|
|
return out
|
|
}
|
|
|
|
func AdjustmentTransactionSubtypesForFrontend() []string {
|
|
result := make([]string, 0)
|
|
for _, subtype := range AdjustmentTransactionSubtypes() {
|
|
if _, hidden := hiddenAdjustmentSubtypesForFrontend[subtype]; hidden {
|
|
continue
|
|
}
|
|
result = append(result, subtype)
|
|
}
|
|
return result
|
|
}
|
|
|
|
func ResolveAdjustmentTransactionType(functionCode string) string {
|
|
code := strings.ToUpper(strings.TrimSpace(functionCode))
|
|
if txType, ok := adjustmentSubtypeToType[code]; ok {
|
|
return string(txType)
|
|
}
|
|
switch {
|
|
case strings.HasPrefix(code, "PURCHASE_"):
|
|
return string(AdjustmentTransactionTypePembelian)
|
|
case strings.HasPrefix(code, "MARKETING_"):
|
|
return string(AdjustmentTransactionTypePenjualan)
|
|
case strings.HasPrefix(code, "RECORDING_"):
|
|
return string(AdjustmentTransactionTypeRecording)
|
|
default:
|
|
return ""
|
|
}
|
|
}
|
|
|
|
// -------------------------------------------------------------------
|
|
// Payment Party
|
|
// -------------------------------------------------------------------
|
|
|
|
type PaymentParty string
|
|
|
|
const (
|
|
PaymentPartyCustomer PaymentParty = "CUSTOMER"
|
|
PaymentPartySupplier PaymentParty = "SUPPLIER"
|
|
)
|
|
|
|
// -------------------------------------------------------------------
|
|
// Kandang Status
|
|
// -------------------------------------------------------------------
|
|
|
|
type KandangStatus string
|
|
|
|
const (
|
|
KandangStatusNonActive KandangStatus = "NON_ACTIVE"
|
|
KandangStatusPengajuan KandangStatus = "PENGAJUAN"
|
|
KandangStatusActive KandangStatus = "ACTIVE"
|
|
)
|
|
|
|
// -------------------------------------------------------------------
|
|
// Marketing Type
|
|
// -------------------------------------------------------------------
|
|
|
|
type MarketingType string
|
|
|
|
const (
|
|
MarketingTypeAyam MarketingType = "AYAM"
|
|
MarketingTypeTelur MarketingType = "TELUR"
|
|
MarketingTypeTrading MarketingType = "TRADING"
|
|
MarketingTypeAyamPullet MarketingType = "AYAM_PULLET"
|
|
)
|
|
|
|
// -------------------------------------------------------------------
|
|
// Convertion Unit
|
|
// -------------------------------------------------------------------
|
|
|
|
type ConvertionUnit string
|
|
|
|
const (
|
|
ConvertionUnitPeti ConvertionUnit = "PETI"
|
|
ConvertionUnitKG ConvertionUnit = "KG"
|
|
ConvertionUnitQty ConvertionUnit = "QTY"
|
|
)
|
|
|
|
// -------------------------------------------------------------------
|
|
// ProjectFlockCategory
|
|
// -------------------------------------------------------------------
|
|
|
|
type ProjectFlockCategory string
|
|
|
|
const (
|
|
ProjectFlockCategoryGrowing ProjectFlockCategory = "GROWING"
|
|
ProjectFlockCategoryLaying ProjectFlockCategory = "LAYING"
|
|
)
|
|
|
|
// -------------------------------------------------------------------
|
|
// Project Flock Approval
|
|
// -------------------------------------------------------------------
|
|
|
|
const (
|
|
ApprovalWorkflowProjectFlock approvalutils.ApprovalWorkflowKey = approvalutils.ApprovalWorkflowKey("PROJECT_FLOCKS")
|
|
ProjectFlockStepPengajuan approvalutils.ApprovalStep = 1
|
|
ProjectFlockStepAktif approvalutils.ApprovalStep = 2
|
|
ProjectFlockStepSelesai approvalutils.ApprovalStep = 3
|
|
)
|
|
|
|
// projectFlockApprovalSteps keeps the workflow step definitions for project flock approvals.
|
|
var ProjectFlockApprovalSteps = map[approvalutils.ApprovalStep]string{
|
|
ProjectFlockStepPengajuan: "Pengajuan",
|
|
ProjectFlockStepAktif: "Aktif",
|
|
ProjectFlockStepSelesai: "Selesai",
|
|
}
|
|
|
|
// -------------------------------------------------------------------
|
|
// Chickin Approval
|
|
// -------------------------------------------------------------------
|
|
const (
|
|
ApprovalWorkflowChickin approvalutils.ApprovalWorkflowKey = approvalutils.ApprovalWorkflowKey("CHICKINS")
|
|
ChickinStepPengajuan approvalutils.ApprovalStep = 1
|
|
ChickinStepDisetujui approvalutils.ApprovalStep = 2
|
|
)
|
|
|
|
var ChickinApprovalSteps = map[approvalutils.ApprovalStep]string{
|
|
ChickinStepPengajuan: "Pengajuan",
|
|
ChickinStepDisetujui: "Disetujui",
|
|
}
|
|
|
|
// -------------------------------------------------------------------
|
|
// Project-Flock kandang Approval
|
|
// -------------------------------------------------------------------
|
|
const (
|
|
ApprovalWorkflowProjectFlockKandang approvalutils.ApprovalWorkflowKey = approvalutils.ApprovalWorkflowKey("PROJECT_FLOCK_KANDANGS")
|
|
ProjectFlockKandangStepPengajuan approvalutils.ApprovalStep = 1
|
|
ProjectFlockKandangStepDisetujui approvalutils.ApprovalStep = 2
|
|
ProjectFlockKandangStepClosed approvalutils.ApprovalStep = 3
|
|
)
|
|
|
|
var ProjectFlockKandangApprovalSteps = map[approvalutils.ApprovalStep]string{
|
|
ProjectFlockKandangStepPengajuan: "Pengajuan",
|
|
ProjectFlockKandangStepDisetujui: "Disetujui",
|
|
ProjectFlockKandangStepClosed: "Selesai",
|
|
}
|
|
|
|
// -------------------------------------------------------------------
|
|
// Transfer To laying Approval
|
|
// -------------------------------------------------------------------
|
|
const (
|
|
ApprovalWorkflowTransferToLaying approvalutils.ApprovalWorkflowKey = approvalutils.ApprovalWorkflowKey("TRANSFER_TO_LAYINGS")
|
|
TransferToLayingStepPengajuan approvalutils.ApprovalStep = 1
|
|
TransferToLayingStepDisetujui approvalutils.ApprovalStep = 2
|
|
)
|
|
|
|
var TransferToLayingApprovalSteps = map[approvalutils.ApprovalStep]string{
|
|
TransferToLayingStepPengajuan: "Pengajuan",
|
|
TransferToLayingStepDisetujui: "Disetujui",
|
|
}
|
|
|
|
// -------------------------------------------------------------------
|
|
|
|
// -------------------------------------------------------------------
|
|
// Recording Approval
|
|
// -------------------------------------------------------------------
|
|
|
|
const (
|
|
ApprovalWorkflowRecording approvalutils.ApprovalWorkflowKey = approvalutils.ApprovalWorkflowKey("RECORDINGS")
|
|
RecordingStepPengajuan approvalutils.ApprovalStep = 1
|
|
RecordingStepDisetujui approvalutils.ApprovalStep = 2
|
|
)
|
|
|
|
var RecordingApprovalSteps = map[approvalutils.ApprovalStep]string{
|
|
RecordingStepPengajuan: "Pengajuan",
|
|
RecordingStepDisetujui: "Disetujui",
|
|
}
|
|
|
|
// -------------------------------------------------------------------
|
|
// Uniformity Approval
|
|
// -------------------------------------------------------------------
|
|
|
|
const (
|
|
ApprovalWorkflowUniformity approvalutils.ApprovalWorkflowKey = approvalutils.ApprovalWorkflowKey("UNIFORMITIES")
|
|
UniformityStepPengajuan approvalutils.ApprovalStep = 1
|
|
UniformityStepDisetujui approvalutils.ApprovalStep = 2
|
|
)
|
|
|
|
var UniformityApprovalSteps = map[approvalutils.ApprovalStep]string{
|
|
UniformityStepPengajuan: "Pengajuan",
|
|
UniformityStepDisetujui: "Disetujui",
|
|
}
|
|
|
|
// -------------------------------------------------------------------
|
|
// Purchase Approval
|
|
// -------------------------------------------------------------------
|
|
|
|
const (
|
|
ApprovalWorkflowPurchase approvalutils.ApprovalWorkflowKey = approvalutils.ApprovalWorkflowKey("PURCHASES")
|
|
PurchaseStepPengajuan approvalutils.ApprovalStep = 1
|
|
PurchaseStepStaffPurchase approvalutils.ApprovalStep = 2
|
|
PurchaseStepManager approvalutils.ApprovalStep = 3
|
|
PurchaseStepReceiving approvalutils.ApprovalStep = 4
|
|
PurchaseStepCompleted approvalutils.ApprovalStep = 5
|
|
|
|
PurchasePRNumberPrefix = "PR-LTI-"
|
|
PurchasePONumberPrefix = "PO-LTI-"
|
|
AdjustmentStockNumberPrefix = "ADJ-"
|
|
PurchaseNumberPadding = 4
|
|
)
|
|
|
|
var PurchaseApprovalSteps = map[approvalutils.ApprovalStep]string{
|
|
PurchaseStepPengajuan: "Pengajuan",
|
|
PurchaseStepStaffPurchase: "Staff Purchase",
|
|
PurchaseStepManager: "Manager Purchase",
|
|
PurchaseStepReceiving: "Penerimaan Produk",
|
|
PurchaseStepCompleted: "Selesai",
|
|
}
|
|
|
|
// -------------------------------------------------------------------
|
|
// Marketings Approval
|
|
// -------------------------------------------------------------------
|
|
|
|
const (
|
|
ApprovalWorkflowMarketing approvalutils.ApprovalWorkflowKey = approvalutils.ApprovalWorkflowKey("MARKETINGS")
|
|
MarketingStepPengajuan approvalutils.ApprovalStep = 1
|
|
MarketingStepSalesOrder approvalutils.ApprovalStep = 2
|
|
MarketingDeliveryOrder approvalutils.ApprovalStep = 3
|
|
|
|
MarketingSoNumberPrefix = "SO-"
|
|
MarketingNumberPadding = 5
|
|
)
|
|
|
|
var MarketingApprovalSteps = map[approvalutils.ApprovalStep]string{
|
|
MarketingStepPengajuan: "Pengajuan",
|
|
MarketingStepSalesOrder: "Sales Order",
|
|
MarketingDeliveryOrder: "Delivery Order",
|
|
}
|
|
|
|
// -------------------------------------------------------------------
|
|
// Expense Approval
|
|
// -------------------------------------------------------------------
|
|
|
|
const (
|
|
ApprovalWorkflowExpense approvalutils.ApprovalWorkflowKey = approvalutils.ApprovalWorkflowKey("EXPENSES")
|
|
ExpenseStepPengajuan approvalutils.ApprovalStep = 1
|
|
ExpenseStepHeadArea approvalutils.ApprovalStep = 2
|
|
ExpenseStepUnitVicePresident approvalutils.ApprovalStep = 3
|
|
ExpenseStepFinance approvalutils.ApprovalStep = 4
|
|
ExpenseStepRealisasi approvalutils.ApprovalStep = 5
|
|
ExpenseStepSelesai approvalutils.ApprovalStep = 6
|
|
)
|
|
|
|
var ExpenseApprovalSteps = map[approvalutils.ApprovalStep]string{
|
|
ExpenseStepPengajuan: "Pengajuan",
|
|
ExpenseStepHeadArea: "Approval Head Area",
|
|
ExpenseStepUnitVicePresident: "Approval Business Unit Vice President",
|
|
ExpenseStepFinance: "Approval Finance",
|
|
ExpenseStepRealisasi: "Realisasi",
|
|
ExpenseStepSelesai: "Selesai",
|
|
}
|
|
|
|
// -------------------------------------------------------------------
|
|
// Payment Approval
|
|
// -------------------------------------------------------------------
|
|
|
|
const (
|
|
ApprovalWorkflowPayment approvalutils.ApprovalWorkflowKey = approvalutils.ApprovalWorkflowKey("PAYMENTS")
|
|
PaymentStepPengajuan approvalutils.ApprovalStep = 1
|
|
PaymentStepDisetujui approvalutils.ApprovalStep = 2
|
|
)
|
|
|
|
var PaymentApprovalSteps = map[approvalutils.ApprovalStep]string{
|
|
PaymentStepPengajuan: "Pengajuan",
|
|
PaymentStepDisetujui: "Disetujui",
|
|
}
|
|
|
|
// -------------------------------------------------------------------
|
|
// Inisial Balance Approval
|
|
// -------------------------------------------------------------------
|
|
|
|
const (
|
|
ApprovalWorkflowInitial approvalutils.ApprovalWorkflowKey = approvalutils.ApprovalWorkflowKey("INITIAL_BALANCES")
|
|
InitialStepPengajuan approvalutils.ApprovalStep = 1
|
|
InitialStepDisetujui approvalutils.ApprovalStep = 2
|
|
)
|
|
|
|
var InitialApprovalSteps = map[approvalutils.ApprovalStep]string{
|
|
InitialStepPengajuan: "Pengajuan",
|
|
InitialStepDisetujui: "Disetujui",
|
|
}
|
|
|
|
// -------------------------------------------------------------------
|
|
// Injection Approval
|
|
// -------------------------------------------------------------------
|
|
|
|
const (
|
|
ApprovalWorkflowInjection approvalutils.ApprovalWorkflowKey = approvalutils.ApprovalWorkflowKey("INJECTIONS")
|
|
InjectionStepPengajuan approvalutils.ApprovalStep = 1
|
|
InjectionStepDisetujui approvalutils.ApprovalStep = 2
|
|
)
|
|
|
|
var InjectionApprovalSteps = map[approvalutils.ApprovalStep]string{
|
|
InjectionStepPengajuan: "Pengajuan",
|
|
InjectionStepDisetujui: "Disetujui",
|
|
}
|
|
|
|
// -------------------------------------------------------------------
|
|
// Document
|
|
// -------------------------------------------------------------------
|
|
|
|
type DocumentType string
|
|
type DocumentableType string
|
|
|
|
const (
|
|
DocumentTypeTransfer DocumentType = "STOCK_TRANSFER_DOCUMENT"
|
|
DocumentTypeExpense DocumentType = "EXPENSE_DOCUMENT"
|
|
DocumentTypeExpenseRealization DocumentType = "EXPENSE_REALIZATION_DOCUMENT"
|
|
DocumentTypePurchaseTravel DocumentType = "PURCHASE_TRAVEL_DOCUMENT"
|
|
|
|
DocumentableTypeTransfer DocumentableType = "STOCK_TRANSFER"
|
|
DocumentableTypeExpense DocumentableType = "EXPENSE"
|
|
DocumentableTypeExpenseRealization DocumentableType = "EXPENSE_REALIZATION"
|
|
DocumentableTypePurchaseItem DocumentableType = "PURCHASE_ITEM"
|
|
|
|
DocumentTypeDailyChecklist DocumentType = "DAILY_CHECKLIST_DOCUMENT"
|
|
)
|
|
|
|
// -------------------------------------------------------------------
|
|
// Validators
|
|
// -------------------------------------------------------------------
|
|
|
|
func IsValidFlagType(v string) bool {
|
|
_, ok := allFlagTypes[FlagType(strings.ToUpper(strings.TrimSpace(v)))]
|
|
return ok
|
|
}
|
|
|
|
func AllowedFlagTypes(group FlagGroup) []FlagType {
|
|
options, ok := flagGroupOptions[group]
|
|
if !ok {
|
|
return nil
|
|
}
|
|
result := make([]FlagType, len(options))
|
|
copy(result, options)
|
|
return result
|
|
}
|
|
|
|
func InvalidFlagsForGroup(flags []FlagType, group FlagGroup) []FlagType {
|
|
if len(flags) == 0 {
|
|
return nil
|
|
}
|
|
options, ok := flagGroupOptions[group]
|
|
if !ok {
|
|
return flags
|
|
}
|
|
allowed := make(map[FlagType]struct{}, len(options))
|
|
for _, flag := range options {
|
|
allowed[flag] = struct{}{}
|
|
}
|
|
invalid := make([]FlagType, 0)
|
|
for _, flag := range flags {
|
|
if _, ok := allowed[flag]; !ok {
|
|
invalid = append(invalid, flag)
|
|
}
|
|
}
|
|
return invalid
|
|
}
|
|
|
|
func NormalizeFlagTypes(flags []string) []FlagType {
|
|
if len(flags) == 0 {
|
|
return nil
|
|
}
|
|
seen := make(map[FlagType]struct{}, len(flags))
|
|
result := make([]FlagType, 0, len(flags))
|
|
for _, flag := range flags {
|
|
normalized := FlagType(strings.ToUpper(strings.TrimSpace(flag)))
|
|
if normalized == "" {
|
|
continue
|
|
}
|
|
if _, exists := seen[normalized]; exists {
|
|
continue
|
|
}
|
|
seen[normalized] = struct{}{}
|
|
result = append(result, normalized)
|
|
}
|
|
if len(result) == 0 {
|
|
return nil
|
|
}
|
|
return result
|
|
}
|
|
|
|
func FlagTypesToStrings(flags []FlagType) []string {
|
|
if len(flags) == 0 {
|
|
return nil
|
|
}
|
|
result := make([]string, len(flags))
|
|
for i, flag := range flags {
|
|
result[i] = string(flag)
|
|
}
|
|
return result
|
|
}
|
|
|
|
func NormalizeFlagsForGroup(raw []string, group FlagGroup) (normalized []FlagType, invalid []FlagType) {
|
|
normalized = NormalizeFlagTypes(raw)
|
|
if len(normalized) == 0 {
|
|
return nil, nil
|
|
}
|
|
invalid = InvalidFlagsForGroup(normalized, group)
|
|
if len(invalid) == 0 {
|
|
return normalized, nil
|
|
}
|
|
return normalized, invalid
|
|
}
|
|
|
|
func IsValidWarehouseType(v string) bool {
|
|
switch WarehouseType(v) {
|
|
case WarehouseTypeArea, WarehouseTypeLokasi, WarehouseTypeKandang:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func IsValidKandangStatus(v string) bool {
|
|
switch KandangStatus(v) {
|
|
case KandangStatusNonActive, KandangStatusPengajuan, KandangStatusActive:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func IsValidCustomerSupplierType(v string) bool {
|
|
switch CustomerSupplierType(v) {
|
|
case CustomerSupplierTypeBisnis, CustomerSupplierTypeIndividual:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func IsValidProjectFlockCategory(v string) bool {
|
|
switch ProjectFlockCategory(v) {
|
|
case ProjectFlockCategoryGrowing, ProjectFlockCategoryLaying:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func IsValidSupplierCategory(v string) bool {
|
|
switch SupplierCategory(v) {
|
|
case SupplierCategoryBOP, SupplierCategorySapronak:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func IsValidExpenseCategory(v string) bool {
|
|
switch ExpenseCategory(v) {
|
|
case ExpenseCategoryBOP, ExpenseCategoryNonBOP:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func IsValidPaymentMethod(v string) bool {
|
|
switch PaymentMethod(v) {
|
|
case PaymentMethodTransfer, PaymentMethodCash, PaymentMethodCard, PaymentMethodCheque, PaymentMethodSaldo:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func IsValidTransactionType(v string) bool {
|
|
switch TransactionType(v) {
|
|
case TransactionTypePenjualan, TransactionTypePembelian, TransactionTypeBiaya, TransactionTypeInjection, TransactionTypeSaldoAwal:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func IsValidPaymentParty(v string) bool {
|
|
switch PaymentParty(v) {
|
|
case PaymentPartyCustomer, PaymentPartySupplier:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func IsValidMarketingType(v string) bool {
|
|
switch MarketingType(v) {
|
|
case MarketingTypeAyam, MarketingTypeTelur, MarketingTypeTrading, MarketingTypeAyamPullet:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func IsValidConvertionUnit(v string) bool {
|
|
switch ConvertionUnit(v) {
|
|
case ConvertionUnitPeti, ConvertionUnitKG, ConvertionUnitQty:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
// example use
|
|
|
|
// Recording helper
|
|
|
|
/**
|
|
if !utils.IsValidFlagType(req.FlagName) {
|
|
return fiber.NewError(fiber.StatusBadRequest, "Invalid flag type")
|
|
}
|
|
*/
|