mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-24 15:25:43 +00:00
[FEAT/BE] Add filter delivery order, adjust response purchase and fcr growing recording
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"fmt"
|
||||
"math"
|
||||
"sort"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
entity "gitlab.com/mbugroup/lti-api.git/internal/entities"
|
||||
@@ -17,6 +18,7 @@ import (
|
||||
type MarketingRelationDTO struct {
|
||||
Id uint `json:"id"`
|
||||
SoNumber string `json:"so_number"`
|
||||
DoNumber *string `json:"do_number"`
|
||||
SoDate time.Time `json:"so_date"`
|
||||
Notes string `json:"notes,omitempty"`
|
||||
}
|
||||
@@ -95,9 +97,16 @@ type DeliveryMarketingProductDTO struct {
|
||||
}
|
||||
|
||||
func ToMarketingRelationDTO(marketing *entity.Marketing) MarketingRelationDTO {
|
||||
var doNumber *string
|
||||
if doNumbers := collectDoNumbers(marketing); len(doNumbers) > 0 {
|
||||
value := doNumbers[0]
|
||||
doNumber = &value
|
||||
}
|
||||
|
||||
return MarketingRelationDTO{
|
||||
Id: marketing.Id,
|
||||
SoNumber: marketing.SoNumber,
|
||||
DoNumber: doNumber,
|
||||
SoDate: marketing.SoDate,
|
||||
Notes: marketing.Notes,
|
||||
}
|
||||
@@ -182,7 +191,6 @@ func ToMarketingListDTO(marketing *entity.Marketing, deliveryProducts []entity.M
|
||||
salesOrderProducts[i] = ToDeliveryMarketingProductDTO(product, marketing.MarketingType)
|
||||
}
|
||||
}
|
||||
|
||||
return MarketingListDTO{
|
||||
MarketingRelationDTO: ToMarketingRelationDTO(marketing),
|
||||
Customer: customer,
|
||||
@@ -239,7 +247,6 @@ func ToMarketingDetailDTO(marketing *entity.Marketing, deliveryProducts []entity
|
||||
mapped := approvalDTO.ToApprovalDTO(*marketing.LatestApproval)
|
||||
latestApproval = mapped
|
||||
}
|
||||
|
||||
return MarketingDetailDTO{
|
||||
MarketingRelationDTO: ToMarketingRelationDTO(marketing),
|
||||
SoDocs: marketing.SoDocs,
|
||||
@@ -346,11 +353,46 @@ func groupDeliveryProducts(products []MarketingDeliveryProductDTO, soNumber stri
|
||||
}
|
||||
|
||||
func GenerateDeliveryOrderNumber(soNumber string, deliveryDate *time.Time, warehouseId uint) string {
|
||||
dateStr := ""
|
||||
if deliveryDate != nil {
|
||||
dateStr = deliveryDate.Format("20060102")
|
||||
numberPrefix := soNumber
|
||||
if strings.HasPrefix(strings.ToUpper(strings.TrimSpace(soNumber)), "SO-") {
|
||||
numberPrefix = "DO-" + soNumber[3:]
|
||||
}
|
||||
return fmt.Sprintf("%s-%s-%d", soNumber, dateStr, warehouseId)
|
||||
return numberPrefix
|
||||
}
|
||||
|
||||
func collectDoNumbers(marketing *entity.Marketing) []string {
|
||||
if marketing == nil || len(marketing.Products) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
seen := make(map[string]struct{})
|
||||
for _, product := range marketing.Products {
|
||||
if product.DeliveryProduct == nil || product.DeliveryProduct.DeliveryDate == nil {
|
||||
continue
|
||||
}
|
||||
warehouseID := product.ProductWarehouse.WarehouseId
|
||||
if warehouseID == 0 && product.ProductWarehouse.Warehouse.Id != 0 {
|
||||
warehouseID = product.ProductWarehouse.Warehouse.Id
|
||||
}
|
||||
if warehouseID == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
doNumber := GenerateDeliveryOrderNumber(marketing.SoNumber, product.DeliveryProduct.DeliveryDate, warehouseID)
|
||||
if doNumber != "" {
|
||||
seen[doNumber] = struct{}{}
|
||||
}
|
||||
}
|
||||
|
||||
if len(seen) == 0 {
|
||||
return nil
|
||||
}
|
||||
result := make([]string, 0, len(seen))
|
||||
for value := range seen {
|
||||
result = append(result, value)
|
||||
}
|
||||
sort.Strings(result)
|
||||
return result
|
||||
}
|
||||
|
||||
func getVehicleNumber(e entity.MarketingProduct) string {
|
||||
|
||||
Reference in New Issue
Block a user