wms-be/modules/quarantine/dto/quarantine_dto.go

136 lines
5.7 KiB
Go

package dto
import (
"github.com/Caknoooo/go-gin-clean-starter/database/entities"
"github.com/Caknoooo/go-gin-clean-starter/pkg/utils"
)
const (
MESSAGE_FAILED_CREATE_QUARANTINE = "failed create quarantine"
MESSAGE_FAILED_CREATE_QUARANTINE_LINE = "failed create quarantine line"
MESSAGE_SUCCESS_CREATE_QUARANTINE = "success create quarantine"
MESSAGE_SUCCESS_CREATE_QUARANTINE_LINE = "success create quarantine line"
MESSAGE_FAILED_GET_QUARANTINE = "failed get quarantine"
MESSAGE_SUCCESS_GET_QUARANTINE = "success get quarantine"
MESSAGE_FAILED_UPDATE_QUARANTINE = "failed update quarantine"
MESSAGE_FAILED_UPDATE_QUARANTINE_LINE = "failed update quarantine line"
MESSAGE_SUCCESS_UPDATE_QUARANTINE = "success update quarantine"
MESSAGE_SUCCESS_UPDATE_QUARANTINE_LINE = "success update quarantine line"
MESSAGE_FAILED_DELETE_QUARANTINE = "failed delete quarantine"
MESSAGE_FAILED_DELETE_QUARANTINE_LINE = "failed delete quarantine line"
MESSAGE_SUCCESS_DELETE_QUARANTINE = "success delete quarantine"
MESSAGE_SUCCESS_DELETE_QUARANTINE_LINE = "success delete quarantine line"
MESSAGE_FAILED_GET_DATA_FROM_BODY = "failed get data from body"
MESSAGE_SUCCESS_COMPLETE_QUARANTINE = "success complete quarantine"
MESSAGE_FAILED_COMPLETE_QUARANTINE = "failed complete quarantine"
MESSAGE_FAILED_GET_QUARANTINE_LINES = "failed get quarantine lines"
MESSAGE_SUCCESS_GET_QUARANTINE_LINES = "success get quarantine lines"
)
type QuarantineCreateRequest struct {
ReferenceNumber string `json:"reference_number"`
DocumentDate string `json:"document_date"`
Source string `json:"source"`
QrCodeFile string `json:"qr_code_file"`
ClientID string `json:"client_id" binding:"required"`
Status string `json:"status"`
QuarantineLines []QuarantineLineCreateRequest `json:"quarantine_lines,omitempty" binding:"dive"`
}
type QuarantineLineCreateRequest struct {
Quantity float64 `json:"quantity"`
BatchNumber string `json:"batch_number"`
RepackingSuggestion string `json:"repacking_suggestion"`
RepackUomID string `json:"repack_uom_id"`
RepackUomCode string `json:"repack_uom_code"`
ProductID string `json:"product_id"`
ProductCode string `json:"product_code"`
ClientID string `json:"client_id"`
}
type QuarantineUpdateRequest struct {
ReferenceNumber string `json:"reference_number"`
DocumentDate string `json:"document_date"`
Source string `json:"source"`
QrCodeFile string `json:"qr_code_file"`
Status string `json:"status"`
}
type QuarantineLineUpdateRequest struct {
Quantity float64 `json:"quantity"`
BatchNumber string `json:"batch_number"`
RepackingSuggestion string `json:"repacking_suggestion"`
RepackUomID string `json:"repack_uom_id"`
RepackUomCode string `json:"repack_uom_code"`
ProductID string `json:"product_id"`
ProductCode string `json:"product_code"`
ClientID string `json:"client_id"`
}
type QuarantineResponse struct {
ID string `json:"id"`
DocumentNumber string `json:"document_number"`
DocumentDate string `json:"document_date"`
Status string `json:"status"`
WarehouseID string `json:"warehouse_id"`
ZonaID string `json:"zona_id"`
ClientID string `json:"client_id"`
Warehouse string `json:"warehouse"`
Zona string `json:"zona"`
Client string `json:"client"`
QuarantineLines []QuarantineLineResponse `json:"quarantine_lines,omitempty"`
}
type QuarantineLineResponse struct {
ID string `json:"id"`
QuarantineID string `json:"quarantine_id"`
StorageID string `json:"storage_id"`
ProductID string `json:"product_id"`
ClientID string `json:"client_id"`
Product string `json:"product"`
Storage string `json:"storage"`
Quarantine string `json:"quarantine"`
Client string `json:"client"`
}
func MapQuarantineToResponse(entity entities.TInventoryQuarantineEntity, lines []entities.TInventoryQuarantineLineEntity) QuarantineResponse {
resp := QuarantineResponse{
ID: entity.ID.String(),
DocumentNumber: entity.DocumentNumber,
DocumentDate: utils.DateTimeToString(entity.DocumentDate),
Status: entity.Status,
WarehouseID: entity.WarehouseID.String(),
ZonaID: entity.ZonaID.String(),
ClientID: entity.ClientID.String(),
Warehouse: entity.Warehouse.Name,
Zona: entity.Zona.Name,
Client: entity.Client.Name,
}
return resp
}
func MapQuarantineLineToResponse(line entities.TInventoryQuarantineLineEntity) QuarantineLineResponse {
return QuarantineLineResponse{
ID: line.ID.String(),
QuarantineID: line.QuarantineID.String(),
StorageID: line.StorageID.String(),
ProductID: line.ProductID.String(),
ClientID: line.ClientID.String(),
Product: line.Product.Name,
Storage: line.StorageID.String(), // gunakan StorageID, karena field Name tidak ada
Quarantine: line.Quarantine.DocumentNumber,
Client: line.Client.Name,
}
}
func MapQuarantineLinesToResponse(lines []entities.TInventoryQuarantineLineEntity) []QuarantineLineResponse {
var responses []QuarantineLineResponse
for _, e := range lines {
responses = append(responses, MapQuarantineLineToResponse(e))
}
if responses == nil {
responses = make([]QuarantineLineResponse, 0)
}
return responses
}