Add coa purchase and vendors
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
package mappers
|
||||
|
||||
import (
|
||||
"apskel-pos-be/internal/entities"
|
||||
"apskel-pos-be/internal/models"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
func AccountEntityToResponse(entity *entities.Account) *models.AccountResponse {
|
||||
response := &models.AccountResponse{
|
||||
ID: entity.ID,
|
||||
OrganizationID: entity.OrganizationID,
|
||||
OutletID: entity.OutletID,
|
||||
ChartOfAccountID: entity.ChartOfAccountID,
|
||||
Name: entity.Name,
|
||||
Number: entity.Number,
|
||||
AccountType: string(entity.AccountType),
|
||||
OpeningBalance: entity.OpeningBalance,
|
||||
CurrentBalance: entity.CurrentBalance,
|
||||
Description: entity.Description,
|
||||
IsActive: entity.IsActive,
|
||||
IsSystem: entity.IsSystem,
|
||||
CreatedAt: entity.CreatedAt,
|
||||
UpdatedAt: entity.UpdatedAt,
|
||||
}
|
||||
|
||||
if entity.ChartOfAccount.ID != uuid.Nil {
|
||||
response.ChartOfAccount = ChartOfAccountEntityToResponse(&entity.ChartOfAccount)
|
||||
}
|
||||
|
||||
return response
|
||||
}
|
||||
|
||||
func AccountCreateRequestToEntity(req *models.CreateAccountRequest, organizationID uuid.UUID, outletID *uuid.UUID) *entities.Account {
|
||||
return &entities.Account{
|
||||
OrganizationID: organizationID,
|
||||
OutletID: outletID,
|
||||
ChartOfAccountID: req.ChartOfAccountID,
|
||||
Name: req.Name,
|
||||
Number: req.Number,
|
||||
AccountType: entities.AccountType(req.AccountType),
|
||||
OpeningBalance: req.OpeningBalance,
|
||||
CurrentBalance: req.OpeningBalance, // Initialize current balance with opening balance
|
||||
Description: req.Description,
|
||||
IsActive: true,
|
||||
IsSystem: false,
|
||||
}
|
||||
}
|
||||
|
||||
func AccountUpdateRequestToEntity(entity *entities.Account, req *models.UpdateAccountRequest) {
|
||||
if req.ChartOfAccountID != nil {
|
||||
entity.ChartOfAccountID = *req.ChartOfAccountID
|
||||
}
|
||||
if req.Name != nil {
|
||||
entity.Name = *req.Name
|
||||
}
|
||||
if req.Number != nil {
|
||||
entity.Number = *req.Number
|
||||
}
|
||||
if req.AccountType != nil {
|
||||
entity.AccountType = entities.AccountType(*req.AccountType)
|
||||
}
|
||||
if req.OpeningBalance != nil {
|
||||
entity.OpeningBalance = *req.OpeningBalance
|
||||
}
|
||||
if req.Description != nil {
|
||||
entity.Description = req.Description
|
||||
}
|
||||
if req.IsActive != nil {
|
||||
entity.IsActive = *req.IsActive
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
package mappers
|
||||
|
||||
import (
|
||||
"apskel-pos-be/internal/entities"
|
||||
"apskel-pos-be/internal/models"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
func ChartOfAccountEntityToResponse(entity *entities.ChartOfAccount) *models.ChartOfAccountResponse {
|
||||
response := &models.ChartOfAccountResponse{
|
||||
ID: entity.ID,
|
||||
OrganizationID: entity.OrganizationID,
|
||||
OutletID: entity.OutletID,
|
||||
ChartOfAccountTypeID: entity.ChartOfAccountTypeID,
|
||||
ParentID: entity.ParentID,
|
||||
Name: entity.Name,
|
||||
Code: entity.Code,
|
||||
Description: entity.Description,
|
||||
IsActive: entity.IsActive,
|
||||
IsSystem: entity.IsSystem,
|
||||
CreatedAt: entity.CreatedAt,
|
||||
UpdatedAt: entity.UpdatedAt,
|
||||
}
|
||||
|
||||
if entity.ChartOfAccountType.ID != uuid.Nil {
|
||||
response.ChartOfAccountType = ChartOfAccountTypeEntityToResponse(&entity.ChartOfAccountType)
|
||||
}
|
||||
|
||||
if entity.Parent != nil {
|
||||
response.Parent = ChartOfAccountEntityToResponse(entity.Parent)
|
||||
}
|
||||
|
||||
if len(entity.Children) > 0 {
|
||||
response.Children = make([]models.ChartOfAccountResponse, len(entity.Children))
|
||||
for i, child := range entity.Children {
|
||||
response.Children[i] = *ChartOfAccountEntityToResponse(&child)
|
||||
}
|
||||
}
|
||||
|
||||
return response
|
||||
}
|
||||
|
||||
func ChartOfAccountCreateRequestToEntity(req *models.CreateChartOfAccountRequest, organizationID uuid.UUID, outletID *uuid.UUID) *entities.ChartOfAccount {
|
||||
return &entities.ChartOfAccount{
|
||||
OrganizationID: organizationID,
|
||||
OutletID: outletID,
|
||||
ChartOfAccountTypeID: req.ChartOfAccountTypeID,
|
||||
ParentID: req.ParentID,
|
||||
Name: req.Name,
|
||||
Code: req.Code,
|
||||
Description: req.Description,
|
||||
IsActive: true,
|
||||
IsSystem: false,
|
||||
}
|
||||
}
|
||||
|
||||
func ChartOfAccountUpdateRequestToEntity(entity *entities.ChartOfAccount, req *models.UpdateChartOfAccountRequest) {
|
||||
if req.ChartOfAccountTypeID != nil {
|
||||
entity.ChartOfAccountTypeID = *req.ChartOfAccountTypeID
|
||||
}
|
||||
if req.ParentID != nil {
|
||||
entity.ParentID = req.ParentID
|
||||
}
|
||||
if req.Name != nil {
|
||||
entity.Name = *req.Name
|
||||
}
|
||||
if req.Code != nil {
|
||||
entity.Code = *req.Code
|
||||
}
|
||||
if req.Description != nil {
|
||||
entity.Description = req.Description
|
||||
}
|
||||
if req.IsActive != nil {
|
||||
entity.IsActive = *req.IsActive
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package mappers
|
||||
|
||||
import (
|
||||
"apskel-pos-be/internal/entities"
|
||||
"apskel-pos-be/internal/models"
|
||||
)
|
||||
|
||||
func ChartOfAccountTypeEntityToResponse(entity *entities.ChartOfAccountType) *models.ChartOfAccountTypeResponse {
|
||||
return &models.ChartOfAccountTypeResponse{
|
||||
ID: entity.ID,
|
||||
Name: entity.Name,
|
||||
Code: entity.Code,
|
||||
Description: entity.Description,
|
||||
IsActive: entity.IsActive,
|
||||
CreatedAt: entity.CreatedAt,
|
||||
UpdatedAt: entity.UpdatedAt,
|
||||
}
|
||||
}
|
||||
|
||||
func ChartOfAccountTypeCreateRequestToEntity(req *models.CreateChartOfAccountTypeRequest) *entities.ChartOfAccountType {
|
||||
return &entities.ChartOfAccountType{
|
||||
Name: req.Name,
|
||||
Code: req.Code,
|
||||
Description: req.Description,
|
||||
IsActive: true,
|
||||
}
|
||||
}
|
||||
|
||||
func ChartOfAccountTypeUpdateRequestToEntity(entity *entities.ChartOfAccountType, req *models.UpdateChartOfAccountTypeRequest) {
|
||||
if req.Name != nil {
|
||||
entity.Name = *req.Name
|
||||
}
|
||||
if req.Code != nil {
|
||||
entity.Code = *req.Code
|
||||
}
|
||||
if req.Description != nil {
|
||||
entity.Description = req.Description
|
||||
}
|
||||
if req.IsActive != nil {
|
||||
entity.IsActive = *req.IsActive
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,168 @@
|
||||
package mappers
|
||||
|
||||
import (
|
||||
"apskel-pos-be/internal/contract"
|
||||
"apskel-pos-be/internal/models"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Chart of Account Type Mappers
|
||||
func ContractToModelCreateChartOfAccountTypeRequest(req *contract.CreateChartOfAccountTypeRequest) *models.CreateChartOfAccountTypeRequest {
|
||||
return &models.CreateChartOfAccountTypeRequest{
|
||||
Name: req.Name,
|
||||
Code: req.Code,
|
||||
Description: req.Description,
|
||||
}
|
||||
}
|
||||
|
||||
func ContractToModelUpdateChartOfAccountTypeRequest(req *contract.UpdateChartOfAccountTypeRequest) *models.UpdateChartOfAccountTypeRequest {
|
||||
return &models.UpdateChartOfAccountTypeRequest{
|
||||
Name: req.Name,
|
||||
Code: req.Code,
|
||||
Description: req.Description,
|
||||
IsActive: req.IsActive,
|
||||
}
|
||||
}
|
||||
|
||||
func ModelToContractChartOfAccountTypeResponse(resp *models.ChartOfAccountTypeResponse) *contract.ChartOfAccountTypeResponse {
|
||||
return &contract.ChartOfAccountTypeResponse{
|
||||
ID: resp.ID,
|
||||
Name: resp.Name,
|
||||
Code: resp.Code,
|
||||
Description: resp.Description,
|
||||
IsActive: resp.IsActive,
|
||||
CreatedAt: resp.CreatedAt.Format(time.RFC3339),
|
||||
UpdatedAt: resp.UpdatedAt.Format(time.RFC3339),
|
||||
}
|
||||
}
|
||||
|
||||
// Chart of Account Mappers
|
||||
func ContractToModelCreateChartOfAccountRequest(req *contract.CreateChartOfAccountRequest) *models.CreateChartOfAccountRequest {
|
||||
return &models.CreateChartOfAccountRequest{
|
||||
ChartOfAccountTypeID: req.ChartOfAccountTypeID,
|
||||
ParentID: req.ParentID,
|
||||
Name: req.Name,
|
||||
Code: req.Code,
|
||||
Description: req.Description,
|
||||
}
|
||||
}
|
||||
|
||||
func ContractToModelUpdateChartOfAccountRequest(req *contract.UpdateChartOfAccountRequest) *models.UpdateChartOfAccountRequest {
|
||||
return &models.UpdateChartOfAccountRequest{
|
||||
ChartOfAccountTypeID: req.ChartOfAccountTypeID,
|
||||
ParentID: req.ParentID,
|
||||
Name: req.Name,
|
||||
Code: req.Code,
|
||||
Description: req.Description,
|
||||
IsActive: req.IsActive,
|
||||
}
|
||||
}
|
||||
|
||||
func ContractToModelListChartOfAccountsRequest(req *contract.ListChartOfAccountsRequest) *models.ListChartOfAccountsRequest {
|
||||
return &models.ListChartOfAccountsRequest{
|
||||
OrganizationID: req.OrganizationID,
|
||||
OutletID: req.OutletID,
|
||||
ChartOfAccountTypeID: req.ChartOfAccountTypeID,
|
||||
ParentID: req.ParentID,
|
||||
IsActive: req.IsActive,
|
||||
IsSystem: req.IsSystem,
|
||||
Page: req.Page,
|
||||
Limit: req.Limit,
|
||||
}
|
||||
}
|
||||
|
||||
func ModelToContractChartOfAccountResponse(resp *models.ChartOfAccountResponse) *contract.ChartOfAccountResponse {
|
||||
contractResp := &contract.ChartOfAccountResponse{
|
||||
ID: resp.ID,
|
||||
OrganizationID: resp.OrganizationID,
|
||||
OutletID: resp.OutletID,
|
||||
ChartOfAccountTypeID: resp.ChartOfAccountTypeID,
|
||||
ParentID: resp.ParentID,
|
||||
Name: resp.Name,
|
||||
Code: resp.Code,
|
||||
Description: resp.Description,
|
||||
IsActive: resp.IsActive,
|
||||
IsSystem: resp.IsSystem,
|
||||
CreatedAt: resp.CreatedAt.Format(time.RFC3339),
|
||||
UpdatedAt: resp.UpdatedAt.Format(time.RFC3339),
|
||||
}
|
||||
|
||||
if resp.ChartOfAccountType != nil {
|
||||
contractResp.ChartOfAccountType = ModelToContractChartOfAccountTypeResponse(resp.ChartOfAccountType)
|
||||
}
|
||||
|
||||
if resp.Parent != nil {
|
||||
contractResp.Parent = ModelToContractChartOfAccountResponse(resp.Parent)
|
||||
}
|
||||
|
||||
if len(resp.Children) > 0 {
|
||||
contractResp.Children = make([]contract.ChartOfAccountResponse, len(resp.Children))
|
||||
for i, child := range resp.Children {
|
||||
contractResp.Children[i] = *ModelToContractChartOfAccountResponse(&child)
|
||||
}
|
||||
}
|
||||
|
||||
return contractResp
|
||||
}
|
||||
|
||||
// Account Mappers
|
||||
func ContractToModelCreateAccountRequest(req *contract.CreateAccountRequest) *models.CreateAccountRequest {
|
||||
return &models.CreateAccountRequest{
|
||||
ChartOfAccountID: req.ChartOfAccountID,
|
||||
Name: req.Name,
|
||||
Number: req.Number,
|
||||
AccountType: req.AccountType,
|
||||
OpeningBalance: req.OpeningBalance,
|
||||
Description: req.Description,
|
||||
}
|
||||
}
|
||||
|
||||
func ContractToModelUpdateAccountRequest(req *contract.UpdateAccountRequest) *models.UpdateAccountRequest {
|
||||
return &models.UpdateAccountRequest{
|
||||
ChartOfAccountID: req.ChartOfAccountID,
|
||||
Name: req.Name,
|
||||
Number: req.Number,
|
||||
AccountType: req.AccountType,
|
||||
OpeningBalance: req.OpeningBalance,
|
||||
Description: req.Description,
|
||||
IsActive: req.IsActive,
|
||||
}
|
||||
}
|
||||
|
||||
func ContractToModelListAccountsRequest(req *contract.ListAccountsRequest) *models.ListAccountsRequest {
|
||||
return &models.ListAccountsRequest{
|
||||
OrganizationID: req.OrganizationID,
|
||||
OutletID: req.OutletID,
|
||||
ChartOfAccountID: req.ChartOfAccountID,
|
||||
AccountType: req.AccountType,
|
||||
IsActive: req.IsActive,
|
||||
IsSystem: req.IsSystem,
|
||||
Page: req.Page,
|
||||
Limit: req.Limit,
|
||||
}
|
||||
}
|
||||
|
||||
func ModelToContractAccountResponse(resp *models.AccountResponse) *contract.AccountResponse {
|
||||
contractResp := &contract.AccountResponse{
|
||||
ID: resp.ID,
|
||||
OrganizationID: resp.OrganizationID,
|
||||
OutletID: resp.OutletID,
|
||||
ChartOfAccountID: resp.ChartOfAccountID,
|
||||
Name: resp.Name,
|
||||
Number: resp.Number,
|
||||
AccountType: resp.AccountType,
|
||||
OpeningBalance: resp.OpeningBalance,
|
||||
CurrentBalance: resp.CurrentBalance,
|
||||
Description: resp.Description,
|
||||
IsActive: resp.IsActive,
|
||||
IsSystem: resp.IsSystem,
|
||||
CreatedAt: resp.CreatedAt.Format(time.RFC3339),
|
||||
UpdatedAt: resp.UpdatedAt.Format(time.RFC3339),
|
||||
}
|
||||
|
||||
if resp.ChartOfAccount != nil {
|
||||
contractResp.ChartOfAccount = ModelToContractChartOfAccountResponse(resp.ChartOfAccount)
|
||||
}
|
||||
|
||||
return contractResp
|
||||
}
|
||||
@@ -74,3 +74,26 @@ func MapIngredientModelsToEntities(models []*models.Ingredient) []*entities.Ingr
|
||||
|
||||
return entities
|
||||
}
|
||||
|
||||
// Entity to Response conversions
|
||||
func MapIngredientEntityToResponse(entity *entities.Ingredient) *models.IngredientResponse {
|
||||
if entity == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &models.IngredientResponse{
|
||||
ID: entity.ID,
|
||||
OrganizationID: entity.OrganizationID,
|
||||
OutletID: entity.OutletID,
|
||||
Name: entity.Name,
|
||||
UnitID: entity.UnitID,
|
||||
Cost: entity.Cost,
|
||||
Stock: entity.Stock,
|
||||
IsSemiFinished: entity.IsSemiFinished,
|
||||
IsActive: entity.IsActive,
|
||||
Metadata: entity.Metadata,
|
||||
CreatedAt: entity.CreatedAt,
|
||||
UpdatedAt: entity.UpdatedAt,
|
||||
Unit: MapUnitEntityToModel(entity.Unit),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
package mappers
|
||||
|
||||
import (
|
||||
"apskel-pos-be/internal/entities"
|
||||
"apskel-pos-be/internal/models"
|
||||
)
|
||||
|
||||
// Entity to Model conversions
|
||||
func IngredientUnitConverterEntityToModel(entity *entities.IngredientUnitConverter) *models.IngredientUnitConverter {
|
||||
if entity == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
model := &models.IngredientUnitConverter{
|
||||
ID: entity.ID,
|
||||
OrganizationID: entity.OrganizationID,
|
||||
IngredientID: entity.IngredientID,
|
||||
FromUnitID: entity.FromUnitID,
|
||||
ToUnitID: entity.ToUnitID,
|
||||
ConversionFactor: entity.ConversionFactor,
|
||||
IsActive: entity.IsActive,
|
||||
CreatedAt: entity.CreatedAt,
|
||||
UpdatedAt: entity.UpdatedAt,
|
||||
CreatedBy: entity.CreatedBy,
|
||||
UpdatedBy: entity.UpdatedBy,
|
||||
}
|
||||
|
||||
// Map related entities
|
||||
if entity.Ingredient != nil {
|
||||
model.Ingredient = MapIngredientEntityToModel(entity.Ingredient)
|
||||
}
|
||||
if entity.FromUnit != nil {
|
||||
model.FromUnit = MapUnitEntityToModel(entity.FromUnit)
|
||||
}
|
||||
if entity.ToUnit != nil {
|
||||
model.ToUnit = MapUnitEntityToModel(entity.ToUnit)
|
||||
}
|
||||
|
||||
return model
|
||||
}
|
||||
|
||||
// Entity to Response conversions
|
||||
func IngredientUnitConverterEntityToResponse(entity *entities.IngredientUnitConverter) *models.IngredientUnitConverterResponse {
|
||||
if entity == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
response := &models.IngredientUnitConverterResponse{
|
||||
ID: entity.ID,
|
||||
OrganizationID: entity.OrganizationID,
|
||||
IngredientID: entity.IngredientID,
|
||||
FromUnitID: entity.FromUnitID,
|
||||
ToUnitID: entity.ToUnitID,
|
||||
ConversionFactor: entity.ConversionFactor,
|
||||
IsActive: entity.IsActive,
|
||||
CreatedAt: entity.CreatedAt,
|
||||
UpdatedAt: entity.UpdatedAt,
|
||||
CreatedBy: entity.CreatedBy,
|
||||
UpdatedBy: entity.UpdatedBy,
|
||||
}
|
||||
|
||||
// Map related entities
|
||||
if entity.Ingredient != nil {
|
||||
response.Ingredient = MapIngredientEntityToResponse(entity.Ingredient)
|
||||
}
|
||||
if entity.FromUnit != nil {
|
||||
response.FromUnit = MapUnitEntityToResponse(entity.FromUnit)
|
||||
}
|
||||
if entity.ToUnit != nil {
|
||||
response.ToUnit = MapUnitEntityToResponse(entity.ToUnit)
|
||||
}
|
||||
|
||||
return response
|
||||
}
|
||||
|
||||
// Batch conversion methods
|
||||
func IngredientUnitConverterEntitiesToModels(entities []*entities.IngredientUnitConverter) []*models.IngredientUnitConverter {
|
||||
models := make([]*models.IngredientUnitConverter, len(entities))
|
||||
for i, entity := range entities {
|
||||
models[i] = IngredientUnitConverterEntityToModel(entity)
|
||||
}
|
||||
return models
|
||||
}
|
||||
|
||||
func IngredientUnitConverterEntitiesToResponses(entities []*entities.IngredientUnitConverter) []*models.IngredientUnitConverterResponse {
|
||||
responses := make([]*models.IngredientUnitConverterResponse, len(entities))
|
||||
for i, entity := range entities {
|
||||
responses[i] = IngredientUnitConverterEntityToResponse(entity)
|
||||
}
|
||||
return responses
|
||||
}
|
||||
@@ -0,0 +1,273 @@
|
||||
package mappers
|
||||
|
||||
import (
|
||||
"apskel-pos-be/internal/entities"
|
||||
"apskel-pos-be/internal/models"
|
||||
)
|
||||
|
||||
func PurchaseOrderEntityToModel(entity *entities.PurchaseOrder) *models.PurchaseOrder {
|
||||
if entity == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &models.PurchaseOrder{
|
||||
ID: entity.ID,
|
||||
OrganizationID: entity.OrganizationID,
|
||||
VendorID: entity.VendorID,
|
||||
PONumber: entity.PONumber,
|
||||
TransactionDate: entity.TransactionDate,
|
||||
DueDate: entity.DueDate,
|
||||
Reference: entity.Reference,
|
||||
Status: entity.Status,
|
||||
Message: entity.Message,
|
||||
TotalAmount: entity.TotalAmount,
|
||||
CreatedAt: entity.CreatedAt,
|
||||
UpdatedAt: entity.UpdatedAt,
|
||||
}
|
||||
}
|
||||
|
||||
func PurchaseOrderModelToEntity(model *models.PurchaseOrder) *entities.PurchaseOrder {
|
||||
if model == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &entities.PurchaseOrder{
|
||||
ID: model.ID,
|
||||
OrganizationID: model.OrganizationID,
|
||||
VendorID: model.VendorID,
|
||||
PONumber: model.PONumber,
|
||||
TransactionDate: model.TransactionDate,
|
||||
DueDate: model.DueDate,
|
||||
Reference: model.Reference,
|
||||
Status: model.Status,
|
||||
Message: model.Message,
|
||||
TotalAmount: model.TotalAmount,
|
||||
CreatedAt: model.CreatedAt,
|
||||
UpdatedAt: model.UpdatedAt,
|
||||
}
|
||||
}
|
||||
|
||||
func PurchaseOrderEntityToResponse(entity *entities.PurchaseOrder) *models.PurchaseOrderResponse {
|
||||
if entity == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
response := &models.PurchaseOrderResponse{
|
||||
ID: entity.ID,
|
||||
OrganizationID: entity.OrganizationID,
|
||||
VendorID: entity.VendorID,
|
||||
PONumber: entity.PONumber,
|
||||
TransactionDate: entity.TransactionDate,
|
||||
DueDate: entity.DueDate,
|
||||
Reference: entity.Reference,
|
||||
Status: entity.Status,
|
||||
Message: entity.Message,
|
||||
TotalAmount: entity.TotalAmount,
|
||||
CreatedAt: entity.CreatedAt,
|
||||
UpdatedAt: entity.UpdatedAt,
|
||||
}
|
||||
|
||||
// Map vendor if present
|
||||
if entity.Vendor != nil {
|
||||
response.Vendor = VendorEntityToResponse(entity.Vendor)
|
||||
}
|
||||
|
||||
// Map items if present
|
||||
if entity.Items != nil {
|
||||
response.Items = PurchaseOrderItemEntitiesToResponses(entity.Items)
|
||||
}
|
||||
|
||||
// Map attachments if present
|
||||
if entity.Attachments != nil {
|
||||
response.Attachments = PurchaseOrderAttachmentEntitiesToResponses(entity.Attachments)
|
||||
}
|
||||
|
||||
return response
|
||||
}
|
||||
|
||||
func PurchaseOrderItemEntityToModel(entity *entities.PurchaseOrderItem) *models.PurchaseOrderItem {
|
||||
if entity == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &models.PurchaseOrderItem{
|
||||
ID: entity.ID,
|
||||
PurchaseOrderID: entity.PurchaseOrderID,
|
||||
IngredientID: entity.IngredientID,
|
||||
Description: entity.Description,
|
||||
Quantity: entity.Quantity,
|
||||
UnitID: entity.UnitID,
|
||||
Amount: entity.Amount,
|
||||
CreatedAt: entity.CreatedAt,
|
||||
UpdatedAt: entity.UpdatedAt,
|
||||
}
|
||||
}
|
||||
|
||||
func PurchaseOrderItemModelToEntity(model *models.PurchaseOrderItem) *entities.PurchaseOrderItem {
|
||||
if model == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &entities.PurchaseOrderItem{
|
||||
ID: model.ID,
|
||||
PurchaseOrderID: model.PurchaseOrderID,
|
||||
IngredientID: model.IngredientID,
|
||||
Description: model.Description,
|
||||
Quantity: model.Quantity,
|
||||
UnitID: model.UnitID,
|
||||
Amount: model.Amount,
|
||||
CreatedAt: model.CreatedAt,
|
||||
UpdatedAt: model.UpdatedAt,
|
||||
}
|
||||
}
|
||||
|
||||
func PurchaseOrderItemEntityToResponse(entity *entities.PurchaseOrderItem) *models.PurchaseOrderItemResponse {
|
||||
if entity == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
response := &models.PurchaseOrderItemResponse{
|
||||
ID: entity.ID,
|
||||
PurchaseOrderID: entity.PurchaseOrderID,
|
||||
IngredientID: entity.IngredientID,
|
||||
Description: entity.Description,
|
||||
Quantity: entity.Quantity,
|
||||
UnitID: entity.UnitID,
|
||||
Amount: entity.Amount,
|
||||
CreatedAt: entity.CreatedAt,
|
||||
UpdatedAt: entity.UpdatedAt,
|
||||
}
|
||||
|
||||
// Map ingredient if present
|
||||
if entity.Ingredient != nil {
|
||||
response.Ingredient = &models.IngredientResponse{
|
||||
ID: entity.Ingredient.ID,
|
||||
Name: entity.Ingredient.Name,
|
||||
}
|
||||
}
|
||||
|
||||
// Map unit if present
|
||||
if entity.Unit != nil {
|
||||
response.Unit = &models.UnitResponse{
|
||||
ID: entity.Unit.ID,
|
||||
Name: entity.Unit.Name,
|
||||
}
|
||||
}
|
||||
|
||||
return response
|
||||
}
|
||||
|
||||
func PurchaseOrderAttachmentEntityToModel(entity *entities.PurchaseOrderAttachment) *models.PurchaseOrderAttachment {
|
||||
if entity == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &models.PurchaseOrderAttachment{
|
||||
ID: entity.ID,
|
||||
PurchaseOrderID: entity.PurchaseOrderID,
|
||||
FileID: entity.FileID,
|
||||
CreatedAt: entity.CreatedAt,
|
||||
}
|
||||
}
|
||||
|
||||
func PurchaseOrderAttachmentModelToEntity(model *models.PurchaseOrderAttachment) *entities.PurchaseOrderAttachment {
|
||||
if model == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &entities.PurchaseOrderAttachment{
|
||||
ID: model.ID,
|
||||
PurchaseOrderID: model.PurchaseOrderID,
|
||||
FileID: model.FileID,
|
||||
CreatedAt: model.CreatedAt,
|
||||
}
|
||||
}
|
||||
|
||||
func PurchaseOrderAttachmentEntityToResponse(entity *entities.PurchaseOrderAttachment) *models.PurchaseOrderAttachmentResponse {
|
||||
if entity == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
response := &models.PurchaseOrderAttachmentResponse{
|
||||
ID: entity.ID,
|
||||
PurchaseOrderID: entity.PurchaseOrderID,
|
||||
FileID: entity.FileID,
|
||||
CreatedAt: entity.CreatedAt,
|
||||
}
|
||||
|
||||
// Map file if present
|
||||
if entity.File != nil {
|
||||
response.File = &models.FileResponse{
|
||||
ID: entity.File.ID,
|
||||
FileName: entity.File.FileName,
|
||||
OriginalName: entity.File.OriginalName,
|
||||
FileURL: entity.File.FileURL,
|
||||
FileSize: entity.File.FileSize,
|
||||
MimeType: entity.File.MimeType,
|
||||
FileType: entity.File.FileType,
|
||||
IsPublic: entity.File.IsPublic,
|
||||
CreatedAt: entity.File.CreatedAt,
|
||||
UpdatedAt: entity.File.UpdatedAt,
|
||||
}
|
||||
}
|
||||
|
||||
return response
|
||||
}
|
||||
|
||||
// Batch conversion methods
|
||||
func PurchaseOrderEntitiesToModels(entities []*entities.PurchaseOrder) []*models.PurchaseOrder {
|
||||
if entities == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
models := make([]*models.PurchaseOrder, len(entities))
|
||||
for i, entity := range entities {
|
||||
models[i] = PurchaseOrderEntityToModel(entity)
|
||||
}
|
||||
return models
|
||||
}
|
||||
|
||||
func PurchaseOrderEntitiesToResponses(entities []*entities.PurchaseOrder) []models.PurchaseOrderResponse {
|
||||
if entities == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
responses := make([]models.PurchaseOrderResponse, len(entities))
|
||||
for i, entity := range entities {
|
||||
response := PurchaseOrderEntityToResponse(entity)
|
||||
if response != nil {
|
||||
responses[i] = *response
|
||||
}
|
||||
}
|
||||
return responses
|
||||
}
|
||||
|
||||
func PurchaseOrderItemEntitiesToResponses(entities []entities.PurchaseOrderItem) []models.PurchaseOrderItemResponse {
|
||||
if entities == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
responses := make([]models.PurchaseOrderItemResponse, len(entities))
|
||||
for i, entity := range entities {
|
||||
response := PurchaseOrderItemEntityToResponse(&entity)
|
||||
if response != nil {
|
||||
responses[i] = *response
|
||||
}
|
||||
}
|
||||
return responses
|
||||
}
|
||||
|
||||
func PurchaseOrderAttachmentEntitiesToResponses(entities []entities.PurchaseOrderAttachment) []models.PurchaseOrderAttachmentResponse {
|
||||
if entities == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
responses := make([]models.PurchaseOrderAttachmentResponse, len(entities))
|
||||
for i, entity := range entities {
|
||||
response := PurchaseOrderAttachmentEntityToResponse(&entity)
|
||||
if response != nil {
|
||||
responses[i] = *response
|
||||
}
|
||||
}
|
||||
return responses
|
||||
}
|
||||
@@ -66,3 +66,22 @@ func MapUnitModelsToEntities(models []*models.Unit) []*entities.Unit {
|
||||
|
||||
return entities
|
||||
}
|
||||
|
||||
// Entity to Response conversions
|
||||
func MapUnitEntityToResponse(entity *entities.Unit) *models.UnitResponse {
|
||||
if entity == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &models.UnitResponse{
|
||||
ID: entity.ID,
|
||||
OrganizationID: entity.OrganizationID,
|
||||
OutletID: entity.OutletID,
|
||||
Name: entity.Name,
|
||||
Abbreviation: entity.Abbreviation,
|
||||
IsActive: entity.IsActive,
|
||||
DeletedAt: entity.DeletedAt,
|
||||
CreatedAt: entity.CreatedAt,
|
||||
UpdatedAt: entity.UpdatedAt,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
package mappers
|
||||
|
||||
import (
|
||||
"apskel-pos-be/internal/entities"
|
||||
"apskel-pos-be/internal/models"
|
||||
)
|
||||
|
||||
func VendorEntityToModel(entity *entities.Vendor) *models.Vendor {
|
||||
if entity == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &models.Vendor{
|
||||
ID: entity.ID,
|
||||
OrganizationID: entity.OrganizationID,
|
||||
Name: entity.Name,
|
||||
Email: entity.Email,
|
||||
PhoneNumber: entity.PhoneNumber,
|
||||
Address: entity.Address,
|
||||
ContactPerson: entity.ContactPerson,
|
||||
TaxNumber: entity.TaxNumber,
|
||||
PaymentTerms: entity.PaymentTerms,
|
||||
Notes: entity.Notes,
|
||||
IsActive: entity.IsActive,
|
||||
CreatedAt: entity.CreatedAt,
|
||||
UpdatedAt: entity.UpdatedAt,
|
||||
}
|
||||
}
|
||||
|
||||
func VendorModelToEntity(model *models.Vendor) *entities.Vendor {
|
||||
if model == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &entities.Vendor{
|
||||
ID: model.ID,
|
||||
OrganizationID: model.OrganizationID,
|
||||
Name: model.Name,
|
||||
Email: model.Email,
|
||||
PhoneNumber: model.PhoneNumber,
|
||||
Address: model.Address,
|
||||
ContactPerson: model.ContactPerson,
|
||||
TaxNumber: model.TaxNumber,
|
||||
PaymentTerms: model.PaymentTerms,
|
||||
Notes: model.Notes,
|
||||
IsActive: model.IsActive,
|
||||
CreatedAt: model.CreatedAt,
|
||||
UpdatedAt: model.UpdatedAt,
|
||||
}
|
||||
}
|
||||
|
||||
func VendorEntityToResponse(entity *entities.Vendor) *models.VendorResponse {
|
||||
if entity == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &models.VendorResponse{
|
||||
ID: entity.ID,
|
||||
OrganizationID: entity.OrganizationID,
|
||||
Name: entity.Name,
|
||||
Email: entity.Email,
|
||||
PhoneNumber: entity.PhoneNumber,
|
||||
Address: entity.Address,
|
||||
ContactPerson: entity.ContactPerson,
|
||||
TaxNumber: entity.TaxNumber,
|
||||
PaymentTerms: entity.PaymentTerms,
|
||||
Notes: entity.Notes,
|
||||
IsActive: entity.IsActive,
|
||||
CreatedAt: entity.CreatedAt,
|
||||
UpdatedAt: entity.UpdatedAt,
|
||||
}
|
||||
}
|
||||
|
||||
func VendorEntitiesToModels(entities []*entities.Vendor) []*models.Vendor {
|
||||
if entities == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
models := make([]*models.Vendor, len(entities))
|
||||
for i, entity := range entities {
|
||||
models[i] = VendorEntityToModel(entity)
|
||||
}
|
||||
return models
|
||||
}
|
||||
|
||||
func VendorEntitiesToResponses(entities []*entities.Vendor) []*models.VendorResponse {
|
||||
if entities == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
responses := make([]*models.VendorResponse, len(entities))
|
||||
for i, entity := range entities {
|
||||
responses[i] = VendorEntityToResponse(entity)
|
||||
}
|
||||
return responses
|
||||
}
|
||||
Reference in New Issue
Block a user