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

131 lines
5.9 KiB
Go

package dto
import (
"github.com/Caknoooo/go-gin-clean-starter/database/entities"
pkgdto "github.com/Caknoooo/go-gin-clean-starter/pkg/dto"
"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"`
Warehouse pkgdto.IdNameResponse `json:"warehouse"`
Zona pkgdto.IdNameResponse `json:"zona"`
Client pkgdto.IdNameResponse `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 pkgdto.IdNameResponse `json:"product"`
Storage pkgdto.IdNameResponse `json:"storage"`
Quarantine pkgdto.IdNameResponse `json:"quarantine"`
Client pkgdto.IdNameResponse `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,
Warehouse: pkgdto.IdNameResponse{ID: entity.WarehouseID.String(), Name: entity.Warehouse.Name},
Zona: pkgdto.IdNameResponse{ID: entity.ZonaID.String(), Name: entity.Zona.Name},
Client: pkgdto.IdNameResponse{ID: entity.ClientID.String(), Name: 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: pkgdto.IdNameResponse{ID: line.ProductID.String(), Name: line.Product.Name},
Storage: pkgdto.IdNameResponse{ID: line.StorageID.String(), Name: "line.Storage.Name"},
Quarantine: pkgdto.IdNameResponse{ID: line.QuarantineID.String(), Name: line.Quarantine.DocumentNumber},
Client: pkgdto.IdNameResponse{ID: line.ClientID.String(), Name: 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
}