Feat[BE-222,223,224]: creating So create delete patch update get getall approval API

This commit is contained in:
aguhh18
2025-11-12 11:28:18 +07:00
parent 762dfa9fb9
commit 0a0c3f869b
24 changed files with 1688 additions and 82 deletions
@@ -0,0 +1,164 @@
package dto
import (
"time"
entity "gitlab.com/mbugroup/lti-api.git/internal/entities"
approvalDTO "gitlab.com/mbugroup/lti-api.git/internal/modules/approvals/dto"
userDTO "gitlab.com/mbugroup/lti-api.git/internal/modules/users/dto"
)
// === DTO Structs ===
type MarketingDeliveryProductDTO struct {
Id uint `json:"id"`
MarketingProductId uint `json:"marketing_product_id"`
Qty float64 `json:"qty"`
UnitPrice float64 `json:"unit_price"`
TotalWeight float64 `json:"total_weight"`
AvgWeight float64 `json:"avg_weight"`
TotalPrice float64 `json:"total_price"`
DeliveryDate *time.Time `json:"delivery_date"`
VehicleNumber string `json:"vehicle_number"`
}
type DeliveryOrdersBaseDTO struct {
Id uint `json:"id,omitempty"`
DeliveryNumber *string `json:"delivery_number,omitempty"`
DeliveryDate *time.Time `json:"delivery_date,omitempty"`
MarketingId uint `json:"marketing_id"`
Notes string `json:"notes,omitempty"`
}
type MarketingBaseDTO struct {
Id uint `json:"id"`
SoNumber string `json:"so_number"`
SoDate time.Time `json:"so_date"`
}
type DeliveryOrdersListDTO struct {
DeliveryOrdersBaseDTO
Marketing *MarketingBaseDTO `json:"marketing,omitempty"`
DeliveryProducts []MarketingDeliveryProductDTO `json:"delivery_products,omitempty"`
CreatedUser *userDTO.UserBaseDTO `json:"created_user"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
Approval *approvalDTO.ApprovalBaseDTO `json:"approval,omitempty"`
}
type DeliveryOrdersDetailDTO struct {
DeliveryOrdersListDTO
}
// === Mapper Functions ===
func ToMarketingDeliveryProductDTO(e entity.MarketingDeliveryProduct) MarketingDeliveryProductDTO {
return MarketingDeliveryProductDTO{
Id: e.Id,
MarketingProductId: e.MarketingProductId,
Qty: e.Qty,
UnitPrice: e.UnitPrice,
TotalWeight: e.TotalWeight,
AvgWeight: e.AvgWeight,
TotalPrice: e.TotalPrice,
DeliveryDate: e.DeliveryDate,
VehicleNumber: e.VehicleNumber,
}
}
func ToDeliveryOrdersBaseDTO(e entity.DeliveryOrders) DeliveryOrdersBaseDTO {
var deliveryNumber *string
if e.DeliveryNumber != "" {
deliveryNumber = &e.DeliveryNumber
}
return DeliveryOrdersBaseDTO{
Id: e.Id,
DeliveryNumber: deliveryNumber,
DeliveryDate: &e.DeliveryDate,
MarketingId: e.MarketingId,
Notes: e.Notes,
}
}
func ToDeliveryOrdersListDTO(e entity.DeliveryOrders) DeliveryOrdersListDTO {
var createdUser *userDTO.UserBaseDTO
if e.CreatedUser != nil && e.CreatedUser.Id != 0 {
mapped := userDTO.ToUserBaseDTO(*e.CreatedUser)
createdUser = &mapped
}
var marketing *MarketingBaseDTO
if e.Marketing != nil && e.Marketing.Id != 0 {
marketing = &MarketingBaseDTO{
Id: e.Marketing.Id,
SoNumber: e.Marketing.SoNumber,
SoDate: e.Marketing.SoDate,
}
}
var deliveryProductsDTOs []MarketingDeliveryProductDTO
if len(e.DeliveryProducts) > 0 {
deliveryProductsDTOs = make([]MarketingDeliveryProductDTO, len(e.DeliveryProducts))
for i, dp := range e.DeliveryProducts {
deliveryProductsDTOs[i] = ToMarketingDeliveryProductDTO(dp)
}
}
return DeliveryOrdersListDTO{
DeliveryOrdersBaseDTO: ToDeliveryOrdersBaseDTO(e),
Marketing: marketing,
DeliveryProducts: deliveryProductsDTOs,
CreatedAt: e.CreatedAt,
UpdatedAt: e.UpdatedAt,
CreatedUser: createdUser,
}
}
func ToDeliveryOrdersListDTOWithProducts(e entity.DeliveryOrders, deliveryProducts []entity.MarketingDeliveryProduct) DeliveryOrdersListDTO {
var createdUser *userDTO.UserBaseDTO
if e.CreatedUser != nil && e.CreatedUser.Id != 0 {
mapped := userDTO.ToUserBaseDTO(*e.CreatedUser)
createdUser = &mapped
}
var marketing *MarketingBaseDTO
if e.Marketing != nil && e.Marketing.Id != 0 {
marketing = &MarketingBaseDTO{
Id: e.Marketing.Id,
SoNumber: e.Marketing.SoNumber,
SoDate: e.Marketing.SoDate,
}
}
var deliveryProductsDTOs []MarketingDeliveryProductDTO
if len(deliveryProducts) > 0 {
deliveryProductsDTOs = make([]MarketingDeliveryProductDTO, len(deliveryProducts))
for i, dp := range deliveryProducts {
deliveryProductsDTOs[i] = ToMarketingDeliveryProductDTO(dp)
}
}
return DeliveryOrdersListDTO{
DeliveryOrdersBaseDTO: ToDeliveryOrdersBaseDTO(e),
Marketing: marketing,
DeliveryProducts: deliveryProductsDTOs,
CreatedAt: e.CreatedAt,
UpdatedAt: e.UpdatedAt,
CreatedUser: createdUser,
}
}
func ToDeliveryOrdersListDTOs(e []entity.DeliveryOrders) []DeliveryOrdersListDTO {
result := make([]DeliveryOrdersListDTO, len(e))
for i, r := range e {
result[i] = ToDeliveryOrdersListDTO(r)
}
return result
}
func ToDeliveryOrdersDetailDTO(e entity.DeliveryOrders) DeliveryOrdersDetailDTO {
return DeliveryOrdersDetailDTO{
DeliveryOrdersListDTO: ToDeliveryOrdersListDTO(e),
}
}