mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-20 13:31:56 +00:00
[FEAT/BE] Add field purchase response get all
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package dto
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
entity "gitlab.com/mbugroup/lti-api.git/internal/entities"
|
||||
@@ -24,12 +25,17 @@ type PurchaseRelationDTO struct {
|
||||
|
||||
type PurchaseListDTO struct {
|
||||
PurchaseRelationDTO
|
||||
Supplier *supplierDTO.SupplierRelationDTO `json:"supplier"`
|
||||
DueDate *time.Time `json:"due_date"`
|
||||
CreatedUser *userDTO.UserRelationDTO `json:"created_user"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
LatestApproval *approvalDTO.ApprovalRelationDTO `json:"latest_approval"`
|
||||
Supplier *supplierDTO.SupplierRelationDTO `json:"supplier"`
|
||||
DueDate *time.Time `json:"due_date"`
|
||||
CreatedUser *userDTO.UserRelationDTO `json:"created_user"`
|
||||
RequesterName string `json:"requester_name"`
|
||||
PoExpedition []string `json:"po_expedition"`
|
||||
Products []productDTO.ProductRelationDTO `json:"products"`
|
||||
Location *locationDTO.LocationRelationDTO `json:"location"`
|
||||
Area *areaDTO.AreaRelationDTO `json:"area"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
LatestApproval *approvalDTO.ApprovalRelationDTO `json:"latest_approval"`
|
||||
}
|
||||
|
||||
type PurchaseDetailDTO struct {
|
||||
@@ -146,6 +152,10 @@ func ToPurchaseListDTO(p entity.Purchase) PurchaseListDTO {
|
||||
mapped := userDTO.ToUserRelationDTO(p.CreatedUser)
|
||||
createdUser = &mapped
|
||||
}
|
||||
requesterName := ""
|
||||
if createdUser != nil {
|
||||
requesterName = createdUser.Name
|
||||
}
|
||||
|
||||
var latestApproval *approvalDTO.ApprovalRelationDTO
|
||||
if p.LatestApproval != nil && p.LatestApproval.Id != 0 {
|
||||
@@ -153,11 +163,53 @@ func ToPurchaseListDTO(p entity.Purchase) PurchaseListDTO {
|
||||
latestApproval = &mapped
|
||||
}
|
||||
|
||||
var (
|
||||
poExpedition []string
|
||||
location *locationDTO.LocationRelationDTO
|
||||
area *areaDTO.AreaRelationDTO
|
||||
)
|
||||
productMap := make(map[uint]productDTO.ProductRelationDTO)
|
||||
expeditionRefSet := make(map[string]struct{})
|
||||
for i := range p.Items {
|
||||
item := p.Items[i]
|
||||
if item.Product != nil && item.Product.Id != 0 {
|
||||
if _, exists := productMap[item.Product.Id]; !exists {
|
||||
productMap[item.Product.Id] = productDTO.ToProductRelationDTO(*item.Product)
|
||||
}
|
||||
}
|
||||
if item.ExpenseNonstock != nil && item.ExpenseNonstock.Expense != nil {
|
||||
ref := strings.TrimSpace(item.ExpenseNonstock.Expense.ReferenceNumber)
|
||||
if ref != "" {
|
||||
if _, exists := expeditionRefSet[ref]; !exists {
|
||||
expeditionRefSet[ref] = struct{}{}
|
||||
poExpedition = append(poExpedition, ref)
|
||||
}
|
||||
}
|
||||
}
|
||||
if location == nil && item.Warehouse != nil && item.Warehouse.Location != nil && item.Warehouse.Location.Id != 0 {
|
||||
loc := locationDTO.ToLocationRelationDTO(*item.Warehouse.Location)
|
||||
location = &loc
|
||||
}
|
||||
if area == nil && item.Warehouse != nil && item.Warehouse.Area.Id != 0 {
|
||||
ar := areaDTO.ToAreaRelationDTO(item.Warehouse.Area)
|
||||
area = &ar
|
||||
}
|
||||
}
|
||||
products := make([]productDTO.ProductRelationDTO, 0, len(productMap))
|
||||
for _, prod := range productMap {
|
||||
products = append(products, prod)
|
||||
}
|
||||
|
||||
return PurchaseListDTO{
|
||||
PurchaseRelationDTO: ToPurchaseRelationDTO(&p),
|
||||
Supplier: supplier,
|
||||
DueDate: p.DueDate,
|
||||
CreatedUser: createdUser,
|
||||
RequesterName: requesterName,
|
||||
PoExpedition: poExpedition,
|
||||
Products: products,
|
||||
Location: location,
|
||||
Area: area,
|
||||
CreatedAt: p.CreatedAt,
|
||||
UpdatedAt: p.UpdatedAt,
|
||||
LatestApproval: latestApproval,
|
||||
|
||||
Reference in New Issue
Block a user