mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-24 15:25:43 +00:00
Feat(BE-339): make a report for purchasing supplier
This commit is contained in:
@@ -0,0 +1,138 @@
|
||||
package dto
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
entity "gitlab.com/mbugroup/lti-api.git/internal/entities"
|
||||
productDTO "gitlab.com/mbugroup/lti-api.git/internal/modules/master/products/dto"
|
||||
supplierDTO "gitlab.com/mbugroup/lti-api.git/internal/modules/master/suppliers/dto"
|
||||
warehouseDTO "gitlab.com/mbugroup/lti-api.git/internal/modules/master/warehouses/dto"
|
||||
)
|
||||
|
||||
type PurchaseSupplierRowDTO struct {
|
||||
ReceiveDate string `json:"receive_date"`
|
||||
PoDate string `json:"po_date"`
|
||||
PoNumber string `json:"po_number"`
|
||||
Product *productDTO.ProductRelationDTO `json:"product,omitempty"`
|
||||
Warehouse *warehouseDTO.WarehouseRelationDTO `json:"warehouse,omitempty"`
|
||||
Qty float64 `json:"qty"`
|
||||
UnitPrice float64 `json:"unit_price"`
|
||||
PurchaseValue float64 `json:"purchase_value"`
|
||||
TransportUnitPrice float64 `json:"transport_unit_price"`
|
||||
TransportValue float64 `json:"transport_value"`
|
||||
TotalAmount float64 `json:"total_amount"`
|
||||
Expedition string `json:"expedition"`
|
||||
DeliveryNumber string `json:"delivery_number"`
|
||||
}
|
||||
|
||||
type PurchaseSupplierSummaryDTO struct {
|
||||
TotalQty float64 `json:"total_qty"`
|
||||
TotalPurchaseValue float64 `json:"total_purchase_value"`
|
||||
TotalTransportValue float64 `json:"total_transport_value"`
|
||||
TotalAmount float64 `json:"total_amount"`
|
||||
}
|
||||
|
||||
type PurchaseSupplierDTO struct {
|
||||
Supplier *supplierDTO.SupplierRelationDTO `json:"supplier"`
|
||||
Rows []PurchaseSupplierRowDTO `json:"rows"`
|
||||
Summary PurchaseSupplierSummaryDTO `json:"summary"`
|
||||
}
|
||||
|
||||
func formatDatePtr(t *time.Time) string {
|
||||
if t == nil || t.IsZero() {
|
||||
return ""
|
||||
}
|
||||
return t.Format("02-Jan-2006")
|
||||
}
|
||||
|
||||
func ToPurchaseSupplierRowDTO(item *entity.PurchaseItem) PurchaseSupplierRowDTO {
|
||||
row := PurchaseSupplierRowDTO{
|
||||
ReceiveDate: formatDatePtr(item.ReceivedDate),
|
||||
Qty: item.TotalQty,
|
||||
UnitPrice: item.Price,
|
||||
}
|
||||
|
||||
if item.Purchase != nil {
|
||||
row.PoDate = formatDatePtr(item.Purchase.PoDate)
|
||||
if item.Purchase.PoNumber != nil {
|
||||
row.PoNumber = *item.Purchase.PoNumber
|
||||
}
|
||||
}
|
||||
|
||||
if item.Product != nil && item.Product.Id != 0 {
|
||||
product := productDTO.ToProductRelationDTO(*item.Product)
|
||||
row.Product = &product
|
||||
}
|
||||
|
||||
if item.Warehouse != nil && item.Warehouse.Id != 0 {
|
||||
warehouse := warehouseDTO.ToWarehouseRelationDTO(*item.Warehouse)
|
||||
row.Warehouse = &warehouse
|
||||
}
|
||||
|
||||
qty := row.Qty
|
||||
if qty < 0 {
|
||||
qty = 0
|
||||
}
|
||||
|
||||
row.PurchaseValue = row.UnitPrice * qty
|
||||
|
||||
var transportUnit float64
|
||||
var expeditionName string
|
||||
|
||||
if item.ExpenseNonstock != nil {
|
||||
transportUnit = item.ExpenseNonstock.Price
|
||||
|
||||
if item.ExpenseNonstock.Expense != nil &&
|
||||
item.ExpenseNonstock.Expense.Supplier != nil &&
|
||||
item.ExpenseNonstock.Expense.Supplier.Id != 0 {
|
||||
expSupplier := item.ExpenseNonstock.Expense.Supplier
|
||||
expeditionName = expSupplier.Name
|
||||
}
|
||||
}
|
||||
|
||||
row.TransportUnitPrice = transportUnit
|
||||
row.TransportValue = transportUnit * qty
|
||||
row.TotalAmount = row.PurchaseValue + row.TransportValue
|
||||
|
||||
if expeditionName == "" {
|
||||
row.Expedition = "-"
|
||||
} else {
|
||||
row.Expedition = expeditionName
|
||||
}
|
||||
|
||||
if item.TravelNumber != nil && *item.TravelNumber != "" {
|
||||
row.DeliveryNumber = *item.TravelNumber
|
||||
} else {
|
||||
row.DeliveryNumber = "-"
|
||||
}
|
||||
|
||||
return row
|
||||
}
|
||||
|
||||
func ToPurchaseSupplierDTO(supplier entity.Supplier, items []entity.PurchaseItem) PurchaseSupplierDTO {
|
||||
var supplierDTORef *supplierDTO.SupplierRelationDTO
|
||||
if supplier.Id != 0 {
|
||||
mapped := supplierDTO.ToSupplierRelationDTO(supplier)
|
||||
supplierDTORef = &mapped
|
||||
}
|
||||
|
||||
rows := make([]PurchaseSupplierRowDTO, 0, len(items))
|
||||
summary := PurchaseSupplierSummaryDTO{}
|
||||
|
||||
for i := range items {
|
||||
row := ToPurchaseSupplierRowDTO(&items[i])
|
||||
rows = append(rows, row)
|
||||
|
||||
summary.TotalQty += row.Qty
|
||||
summary.TotalPurchaseValue += row.PurchaseValue
|
||||
summary.TotalTransportValue += row.TransportValue
|
||||
summary.TotalAmount += row.TotalAmount
|
||||
}
|
||||
|
||||
return PurchaseSupplierDTO{
|
||||
Supplier: supplierDTORef,
|
||||
Rows: rows,
|
||||
Summary: summary,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user