Add coa purchase and vendors
This commit is contained in:
@@ -0,0 +1,154 @@
|
||||
package transformer
|
||||
|
||||
import (
|
||||
"apskel-pos-be/internal/contract"
|
||||
"apskel-pos-be/internal/models"
|
||||
)
|
||||
|
||||
// Request transformations
|
||||
func CreateIngredientUnitConverterRequestToModel(req *contract.CreateIngredientUnitConverterRequest) *models.CreateIngredientUnitConverterRequest {
|
||||
if req == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &models.CreateIngredientUnitConverterRequest{
|
||||
IngredientID: req.IngredientID,
|
||||
FromUnitID: req.FromUnitID,
|
||||
ToUnitID: req.ToUnitID,
|
||||
ConversionFactor: req.ConversionFactor,
|
||||
IsActive: req.IsActive,
|
||||
}
|
||||
}
|
||||
|
||||
func UpdateIngredientUnitConverterRequestToModel(req *contract.UpdateIngredientUnitConverterRequest) *models.UpdateIngredientUnitConverterRequest {
|
||||
if req == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &models.UpdateIngredientUnitConverterRequest{
|
||||
FromUnitID: req.FromUnitID,
|
||||
ToUnitID: req.ToUnitID,
|
||||
ConversionFactor: req.ConversionFactor,
|
||||
IsActive: req.IsActive,
|
||||
}
|
||||
}
|
||||
|
||||
func ListIngredientUnitConvertersRequestToModel(req *contract.ListIngredientUnitConvertersRequest) *models.ListIngredientUnitConvertersRequest {
|
||||
if req == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &models.ListIngredientUnitConvertersRequest{
|
||||
IngredientID: req.IngredientID,
|
||||
FromUnitID: req.FromUnitID,
|
||||
ToUnitID: req.ToUnitID,
|
||||
IsActive: req.IsActive,
|
||||
Search: req.Search,
|
||||
Page: req.Page,
|
||||
Limit: req.Limit,
|
||||
}
|
||||
}
|
||||
|
||||
func ConvertUnitRequestToModel(req *contract.ConvertUnitRequest) *models.ConvertUnitRequest {
|
||||
if req == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &models.ConvertUnitRequest{
|
||||
IngredientID: req.IngredientID,
|
||||
FromUnitID: req.FromUnitID,
|
||||
ToUnitID: req.ToUnitID,
|
||||
Quantity: req.Quantity,
|
||||
}
|
||||
}
|
||||
|
||||
// Response transformations
|
||||
func IngredientUnitConverterModelResponseToResponse(model *models.IngredientUnitConverterResponse) contract.IngredientUnitConverterResponse {
|
||||
if model == nil {
|
||||
return contract.IngredientUnitConverterResponse{}
|
||||
}
|
||||
|
||||
response := contract.IngredientUnitConverterResponse{
|
||||
ID: model.ID,
|
||||
OrganizationID: model.OrganizationID,
|
||||
IngredientID: model.IngredientID,
|
||||
FromUnitID: model.FromUnitID,
|
||||
ToUnitID: model.ToUnitID,
|
||||
ConversionFactor: model.ConversionFactor,
|
||||
IsActive: model.IsActive,
|
||||
CreatedAt: model.CreatedAt,
|
||||
UpdatedAt: model.UpdatedAt,
|
||||
CreatedBy: model.CreatedBy,
|
||||
UpdatedBy: model.UpdatedBy,
|
||||
}
|
||||
|
||||
// Map related entities
|
||||
if model.Ingredient != nil {
|
||||
ingredientResp := IngredientModelResponseToResponse(model.Ingredient)
|
||||
response.Ingredient = &ingredientResp
|
||||
}
|
||||
if model.FromUnit != nil {
|
||||
fromUnitResp := UnitModelResponseToResponse(model.FromUnit)
|
||||
response.FromUnit = &fromUnitResp
|
||||
}
|
||||
if model.ToUnit != nil {
|
||||
toUnitResp := UnitModelResponseToResponse(model.ToUnit)
|
||||
response.ToUnit = &toUnitResp
|
||||
}
|
||||
|
||||
return response
|
||||
}
|
||||
|
||||
func ConvertUnitModelResponseToResponse(model *models.ConvertUnitResponse) contract.ConvertUnitResponse {
|
||||
if model == nil {
|
||||
return contract.ConvertUnitResponse{}
|
||||
}
|
||||
|
||||
response := contract.ConvertUnitResponse{
|
||||
FromQuantity: model.FromQuantity,
|
||||
ToQuantity: model.ToQuantity,
|
||||
ConversionFactor: model.ConversionFactor,
|
||||
}
|
||||
|
||||
// Map units
|
||||
if model.FromUnit != nil {
|
||||
fromUnitResp := UnitModelResponseToResponse(model.FromUnit)
|
||||
response.FromUnit = &fromUnitResp
|
||||
}
|
||||
if model.ToUnit != nil {
|
||||
toUnitResp := UnitModelResponseToResponse(model.ToUnit)
|
||||
response.ToUnit = &toUnitResp
|
||||
}
|
||||
|
||||
// Map ingredient
|
||||
if model.Ingredient != nil {
|
||||
ingredientResp := IngredientModelResponseToResponse(model.Ingredient)
|
||||
response.Ingredient = &ingredientResp
|
||||
}
|
||||
|
||||
return response
|
||||
}
|
||||
|
||||
// Helper functions for related entities
|
||||
func IngredientModelResponseToResponse(model *models.IngredientResponse) contract.IngredientResponse {
|
||||
if model == nil {
|
||||
return contract.IngredientResponse{}
|
||||
}
|
||||
|
||||
return contract.IngredientResponse{
|
||||
ID: model.ID,
|
||||
Name: model.Name,
|
||||
}
|
||||
}
|
||||
|
||||
func UnitModelResponseToResponse(model *models.UnitResponse) contract.UnitResponse {
|
||||
if model == nil {
|
||||
return contract.UnitResponse{}
|
||||
}
|
||||
|
||||
return contract.UnitResponse{
|
||||
ID: model.ID,
|
||||
Name: model.Name,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,204 @@
|
||||
package transformer
|
||||
|
||||
import (
|
||||
"apskel-pos-be/internal/contract"
|
||||
"apskel-pos-be/internal/models"
|
||||
)
|
||||
|
||||
// Contract to Model conversions
|
||||
func CreatePurchaseOrderRequestToModel(req *contract.CreatePurchaseOrderRequest) *models.CreatePurchaseOrderRequest {
|
||||
items := make([]models.CreatePurchaseOrderItemRequest, len(req.Items))
|
||||
for i, item := range req.Items {
|
||||
items[i] = models.CreatePurchaseOrderItemRequest{
|
||||
IngredientID: item.IngredientID,
|
||||
Description: item.Description,
|
||||
Quantity: item.Quantity,
|
||||
UnitID: item.UnitID,
|
||||
Amount: item.Amount,
|
||||
}
|
||||
}
|
||||
|
||||
return &models.CreatePurchaseOrderRequest{
|
||||
VendorID: req.VendorID,
|
||||
PONumber: req.PONumber,
|
||||
TransactionDate: req.TransactionDate,
|
||||
DueDate: req.DueDate,
|
||||
Reference: req.Reference,
|
||||
Status: req.Status,
|
||||
Message: req.Message,
|
||||
Items: items,
|
||||
AttachmentFileIDs: req.AttachmentFileIDs,
|
||||
}
|
||||
}
|
||||
|
||||
func UpdatePurchaseOrderRequestToModel(req *contract.UpdatePurchaseOrderRequest) *models.UpdatePurchaseOrderRequest {
|
||||
var items []models.UpdatePurchaseOrderItemRequest
|
||||
if req.Items != nil {
|
||||
items = make([]models.UpdatePurchaseOrderItemRequest, len(req.Items))
|
||||
for i, item := range req.Items {
|
||||
items[i] = models.UpdatePurchaseOrderItemRequest{
|
||||
ID: item.ID,
|
||||
IngredientID: item.IngredientID,
|
||||
Description: item.Description,
|
||||
Quantity: item.Quantity,
|
||||
UnitID: item.UnitID,
|
||||
Amount: item.Amount,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return &models.UpdatePurchaseOrderRequest{
|
||||
VendorID: req.VendorID,
|
||||
PONumber: req.PONumber,
|
||||
TransactionDate: req.TransactionDate,
|
||||
DueDate: req.DueDate,
|
||||
Reference: req.Reference,
|
||||
Status: req.Status,
|
||||
Message: req.Message,
|
||||
Items: items,
|
||||
AttachmentFileIDs: req.AttachmentFileIDs,
|
||||
}
|
||||
}
|
||||
|
||||
func ListPurchaseOrdersRequestToModel(req *contract.ListPurchaseOrdersRequest) *models.ListPurchaseOrdersRequest {
|
||||
return &models.ListPurchaseOrdersRequest{
|
||||
Page: req.Page,
|
||||
Limit: req.Limit,
|
||||
Search: req.Search,
|
||||
Status: req.Status,
|
||||
VendorID: req.VendorID,
|
||||
StartDate: req.StartDate,
|
||||
EndDate: req.EndDate,
|
||||
}
|
||||
}
|
||||
|
||||
// Model to Contract conversions
|
||||
func PurchaseOrderModelResponseToResponse(po *models.PurchaseOrderResponse) *contract.PurchaseOrderResponse {
|
||||
if po == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
response := &contract.PurchaseOrderResponse{
|
||||
ID: po.ID,
|
||||
OrganizationID: po.OrganizationID,
|
||||
VendorID: po.VendorID,
|
||||
PONumber: po.PONumber,
|
||||
TransactionDate: po.TransactionDate,
|
||||
DueDate: po.DueDate,
|
||||
Reference: po.Reference,
|
||||
Status: po.Status,
|
||||
Message: po.Message,
|
||||
TotalAmount: po.TotalAmount,
|
||||
CreatedAt: po.CreatedAt,
|
||||
UpdatedAt: po.UpdatedAt,
|
||||
}
|
||||
|
||||
// Map vendor if present
|
||||
if po.Vendor != nil {
|
||||
response.Vendor = &contract.VendorResponse{
|
||||
ID: po.Vendor.ID,
|
||||
OrganizationID: po.Vendor.OrganizationID,
|
||||
Name: po.Vendor.Name,
|
||||
Email: po.Vendor.Email,
|
||||
PhoneNumber: po.Vendor.PhoneNumber,
|
||||
Address: po.Vendor.Address,
|
||||
ContactPerson: po.Vendor.ContactPerson,
|
||||
TaxNumber: po.Vendor.TaxNumber,
|
||||
PaymentTerms: po.Vendor.PaymentTerms,
|
||||
Notes: po.Vendor.Notes,
|
||||
IsActive: po.Vendor.IsActive,
|
||||
CreatedAt: po.Vendor.CreatedAt,
|
||||
UpdatedAt: po.Vendor.UpdatedAt,
|
||||
}
|
||||
}
|
||||
|
||||
// Map items if present
|
||||
if po.Items != nil {
|
||||
response.Items = make([]contract.PurchaseOrderItemResponse, len(po.Items))
|
||||
for i, item := range po.Items {
|
||||
response.Items[i] = contract.PurchaseOrderItemResponse{
|
||||
ID: item.ID,
|
||||
PurchaseOrderID: item.PurchaseOrderID,
|
||||
IngredientID: item.IngredientID,
|
||||
Description: item.Description,
|
||||
Quantity: item.Quantity,
|
||||
UnitID: item.UnitID,
|
||||
Amount: item.Amount,
|
||||
CreatedAt: item.CreatedAt,
|
||||
UpdatedAt: item.UpdatedAt,
|
||||
}
|
||||
|
||||
// Map ingredient if present
|
||||
if item.Ingredient != nil {
|
||||
response.Items[i].Ingredient = &contract.IngredientResponse{
|
||||
ID: item.Ingredient.ID,
|
||||
Name: item.Ingredient.Name,
|
||||
}
|
||||
}
|
||||
|
||||
// Map unit if present
|
||||
if item.Unit != nil {
|
||||
response.Items[i].Unit = &contract.UnitResponse{
|
||||
ID: item.Unit.ID,
|
||||
Name: item.Unit.Name,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Map attachments if present
|
||||
if po.Attachments != nil {
|
||||
response.Attachments = make([]contract.PurchaseOrderAttachmentResponse, len(po.Attachments))
|
||||
for i, attachment := range po.Attachments {
|
||||
response.Attachments[i] = contract.PurchaseOrderAttachmentResponse{
|
||||
ID: attachment.ID,
|
||||
PurchaseOrderID: attachment.PurchaseOrderID,
|
||||
FileID: attachment.FileID,
|
||||
CreatedAt: attachment.CreatedAt,
|
||||
}
|
||||
|
||||
// Map file if present
|
||||
if attachment.File != nil {
|
||||
response.Attachments[i].File = &contract.FileResponse{
|
||||
ID: attachment.File.ID,
|
||||
FileName: attachment.File.FileName,
|
||||
OriginalName: attachment.File.OriginalName,
|
||||
FileURL: attachment.File.FileURL,
|
||||
FileSize: attachment.File.FileSize,
|
||||
MimeType: attachment.File.MimeType,
|
||||
FileType: attachment.File.FileType,
|
||||
IsPublic: attachment.File.IsPublic,
|
||||
CreatedAt: attachment.File.CreatedAt,
|
||||
UpdatedAt: attachment.File.UpdatedAt,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return response
|
||||
}
|
||||
|
||||
func PurchaseOrderModelResponsesToResponses(pos []models.PurchaseOrderResponse) []contract.PurchaseOrderResponse {
|
||||
if pos == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
responses := make([]contract.PurchaseOrderResponse, len(pos))
|
||||
for i, po := range pos {
|
||||
response := PurchaseOrderModelResponseToResponse(&po)
|
||||
if response != nil {
|
||||
responses[i] = *response
|
||||
}
|
||||
}
|
||||
return responses
|
||||
}
|
||||
|
||||
func ListPurchaseOrdersModelResponseToResponse(resp *models.ListPurchaseOrdersResponse) *contract.ListPurchaseOrdersResponse {
|
||||
return &contract.ListPurchaseOrdersResponse{
|
||||
PurchaseOrders: PurchaseOrderModelResponsesToResponses(resp.PurchaseOrders),
|
||||
TotalCount: resp.TotalCount,
|
||||
Page: resp.Page,
|
||||
Limit: resp.Limit,
|
||||
TotalPages: resp.TotalPages,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
package transformer
|
||||
|
||||
import (
|
||||
"apskel-pos-be/internal/contract"
|
||||
"apskel-pos-be/internal/models"
|
||||
)
|
||||
|
||||
// Contract to Model conversions
|
||||
func CreateVendorRequestToModel(req *contract.CreateVendorRequest) *models.CreateVendorRequest {
|
||||
return &models.CreateVendorRequest{
|
||||
Name: req.Name,
|
||||
Email: req.Email,
|
||||
PhoneNumber: req.PhoneNumber,
|
||||
Address: req.Address,
|
||||
ContactPerson: req.ContactPerson,
|
||||
TaxNumber: req.TaxNumber,
|
||||
PaymentTerms: req.PaymentTerms,
|
||||
Notes: req.Notes,
|
||||
IsActive: req.IsActive,
|
||||
}
|
||||
}
|
||||
|
||||
func UpdateVendorRequestToModel(req *contract.UpdateVendorRequest) *models.UpdateVendorRequest {
|
||||
return &models.UpdateVendorRequest{
|
||||
Name: req.Name,
|
||||
Email: req.Email,
|
||||
PhoneNumber: req.PhoneNumber,
|
||||
Address: req.Address,
|
||||
ContactPerson: req.ContactPerson,
|
||||
TaxNumber: req.TaxNumber,
|
||||
PaymentTerms: req.PaymentTerms,
|
||||
Notes: req.Notes,
|
||||
IsActive: req.IsActive,
|
||||
}
|
||||
}
|
||||
|
||||
func ListVendorsRequestToModel(req *contract.ListVendorsRequest) *models.ListVendorsRequest {
|
||||
return &models.ListVendorsRequest{
|
||||
Page: req.Page,
|
||||
Limit: req.Limit,
|
||||
Search: req.Search,
|
||||
IsActive: req.IsActive,
|
||||
}
|
||||
}
|
||||
|
||||
// Model to Contract conversions
|
||||
func VendorModelResponseToResponse(vendor *models.VendorResponse) *contract.VendorResponse {
|
||||
return &contract.VendorResponse{
|
||||
ID: vendor.ID,
|
||||
OrganizationID: vendor.OrganizationID,
|
||||
Name: vendor.Name,
|
||||
Email: vendor.Email,
|
||||
PhoneNumber: vendor.PhoneNumber,
|
||||
Address: vendor.Address,
|
||||
ContactPerson: vendor.ContactPerson,
|
||||
TaxNumber: vendor.TaxNumber,
|
||||
PaymentTerms: vendor.PaymentTerms,
|
||||
Notes: vendor.Notes,
|
||||
IsActive: vendor.IsActive,
|
||||
CreatedAt: vendor.CreatedAt,
|
||||
UpdatedAt: vendor.UpdatedAt,
|
||||
}
|
||||
}
|
||||
|
||||
func VendorModelResponsesToResponses(vendors []*models.VendorResponse) []contract.VendorResponse {
|
||||
if vendors == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
responses := make([]contract.VendorResponse, len(vendors))
|
||||
for i, vendor := range vendors {
|
||||
response := VendorModelResponseToResponse(vendor)
|
||||
if response != nil {
|
||||
responses[i] = *response
|
||||
}
|
||||
}
|
||||
return responses
|
||||
}
|
||||
|
||||
func ListVendorsModelResponseToResponse(resp *models.ListVendorsResponse) *contract.ListVendorsResponse {
|
||||
contractVendors := VendorModelResponsesToResponses(resp.Vendors)
|
||||
return &contract.ListVendorsResponse{
|
||||
Vendors: contractVendors,
|
||||
TotalCount: resp.TotalCount,
|
||||
Page: resp.Page,
|
||||
Limit: resp.Limit,
|
||||
TotalPages: resp.TotalPages,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user