162 lines
7.5 KiB
Go
162 lines
7.5 KiB
Go
package contract
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
type CreateExpenseRequest struct {
|
|
Receiver string `json:"receiver" validate:"required"`
|
|
TransactionDate string `json:"transaction_date" validate:"required"`
|
|
CodeNumber string `json:"code_number" validate:"required"`
|
|
OutletID string `json:"outlet_id" validate:"required"`
|
|
Status *string `json:"status,omitempty" validate:"omitempty,oneof=draft sent approved cancel"`
|
|
Description *string `json:"description,omitempty"`
|
|
Tax float64 `json:"tax"`
|
|
Total float64 `json:"total" validate:"required"`
|
|
Items []CreateExpenseItemRequest `json:"items" validate:"required"`
|
|
}
|
|
|
|
type CreateExpenseItemRequest struct {
|
|
ChartOfAccountID string `json:"chart_of_account_id" validate:"required"`
|
|
PurchaseCategoryID string `json:"purchase_category_id" validate:"required"`
|
|
Item string `json:"item" validate:"required"`
|
|
Description *string `json:"description,omitempty"`
|
|
Amount float64 `json:"amount" validate:"required"`
|
|
}
|
|
|
|
type UpdateExpenseRequest struct {
|
|
Receiver *string `json:"receiver,omitempty"`
|
|
TransactionDate *string `json:"transaction_date,omitempty"`
|
|
CodeNumber *string `json:"code_number,omitempty"`
|
|
OutletID *string `json:"outlet_id,omitempty"`
|
|
Status *string `json:"status,omitempty" validate:"omitempty,oneof=draft sent approved cancel"`
|
|
Description *string `json:"description,omitempty"`
|
|
Tax *float64 `json:"tax,omitempty"`
|
|
Total *float64 `json:"total,omitempty"`
|
|
Reserved1 *string `json:"reserved1,omitempty"`
|
|
Items []UpdateExpenseItemRequest `json:"items,omitempty"`
|
|
}
|
|
|
|
type UpdateExpenseItemRequest struct {
|
|
ChartOfAccountID *string `json:"chart_of_account_id,omitempty"`
|
|
PurchaseCategoryID *string `json:"purchase_category_id,omitempty"`
|
|
Item *string `json:"item,omitempty"`
|
|
Description *string `json:"description,omitempty"`
|
|
Amount *float64 `json:"amount,omitempty"`
|
|
}
|
|
|
|
type ExpenseResponse struct {
|
|
ID uuid.UUID `json:"id"`
|
|
OrganizationID uuid.UUID `json:"organization_id"`
|
|
OutletID uuid.UUID `json:"outlet_id"`
|
|
Receiver string `json:"receiver"`
|
|
TransactionDate time.Time `json:"transaction_date"`
|
|
CodeNumber string `json:"code_number"`
|
|
Status string `json:"status"`
|
|
Description *string `json:"description"`
|
|
Tax float64 `json:"tax"`
|
|
Total float64 `json:"total"`
|
|
Reserved1 *string `json:"reserved1,omitempty"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
Items []ExpenseItemResponse `json:"items,omitempty"`
|
|
}
|
|
|
|
type ExpenseItemResponse struct {
|
|
ID uuid.UUID `json:"id"`
|
|
ExpenseID uuid.UUID `json:"expense_id"`
|
|
ChartOfAccountID uuid.UUID `json:"chart_of_account_id"`
|
|
ChartOfAccountName string `json:"chart_of_account_name,omitempty"`
|
|
PurchaseCategoryID uuid.UUID `json:"purchase_category_id"`
|
|
PurchaseCategoryName string `json:"purchase_category_name,omitempty"`
|
|
PurchaseCategoryType string `json:"purchase_category_type,omitempty"`
|
|
PurchaseCategory *PurchaseCategoryResponse `json:"purchase_category,omitempty"`
|
|
Item string `json:"item"`
|
|
Description *string `json:"description"`
|
|
Amount float64 `json:"amount"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
type ListExpenseRequest struct {
|
|
Page int `json:"page" validate:"min=1"`
|
|
Limit int `json:"limit" validate:"min=1,max=100"`
|
|
Search string `json:"search,omitempty"`
|
|
OutletID string `json:"outlet_id,omitempty"`
|
|
Status string `json:"status,omitempty" validate:"omitempty,oneof=draft sent approved cancel"`
|
|
StartDate string `json:"start_date,omitempty"`
|
|
EndDate string `json:"end_date,omitempty"`
|
|
}
|
|
|
|
type ListExpenseResponse struct {
|
|
Expenses []ExpenseResponse `json:"expenses"`
|
|
TotalCount int `json:"total_count"`
|
|
Page int `json:"page"`
|
|
Limit int `json:"limit"`
|
|
TotalPages int `json:"total_pages"`
|
|
}
|
|
|
|
type ExpenseAnalyticsRequest struct {
|
|
OutletID *string `form:"outlet_id,omitempty"`
|
|
DateFrom string `form:"date_from" validate:"required"`
|
|
DateTo string `form:"date_to" validate:"required"`
|
|
GroupBy string `form:"group_by,default=day" validate:"omitempty,oneof=day hour week month"`
|
|
}
|
|
|
|
type ExpenseAnalyticsResponse struct {
|
|
OrganizationID uuid.UUID `json:"organization_id"`
|
|
OutletID *uuid.UUID `json:"outlet_id,omitempty"`
|
|
DateFrom time.Time `json:"date_from"`
|
|
DateTo time.Time `json:"date_to"`
|
|
GroupBy string `json:"group_by"`
|
|
Summary ExpenseAnalyticsSummary `json:"summary"`
|
|
Data []ExpenseAnalyticsData `json:"data"`
|
|
CategoryData []ExpenseAnalyticsCategoryData `json:"category_data"`
|
|
ChartOfAccountData []ExpenseAnalyticsChartOfAccountData `json:"chart_of_account_data"`
|
|
ItemData []ExpenseAnalyticsItemData `json:"item_data"`
|
|
}
|
|
|
|
type ExpenseAnalyticsSummary struct {
|
|
TotalExpenses float64 `json:"total_expenses"`
|
|
TotalExpenseCount int64 `json:"total_expense_count"`
|
|
TotalTax float64 `json:"total_tax"`
|
|
AverageExpenseValue float64 `json:"average_expense_value"`
|
|
TotalCategories int64 `json:"total_categories"`
|
|
TotalItems int64 `json:"total_items"`
|
|
}
|
|
|
|
type ExpenseAnalyticsData struct {
|
|
Date time.Time `json:"date"`
|
|
Expenses float64 `json:"expenses"`
|
|
ExpenseCount int64 `json:"expense_count"`
|
|
Tax float64 `json:"tax"`
|
|
Items int64 `json:"items"`
|
|
Categories int64 `json:"categories"`
|
|
}
|
|
|
|
type ExpenseAnalyticsCategoryData struct {
|
|
PurchaseCategoryID uuid.UUID `json:"purchase_category_id"`
|
|
PurchaseCategoryName string `json:"purchase_category_name"`
|
|
PurchaseCategoryType string `json:"purchase_category_type"`
|
|
TotalAmount float64 `json:"total_amount"`
|
|
ExpenseCount int64 `json:"expense_count"`
|
|
ItemCount int64 `json:"item_count"`
|
|
}
|
|
|
|
type ExpenseAnalyticsChartOfAccountData struct {
|
|
ChartOfAccountID uuid.UUID `json:"chart_of_account_id"`
|
|
ChartOfAccountName string `json:"chart_of_account_name"`
|
|
TotalAmount float64 `json:"total_amount"`
|
|
ExpenseCount int64 `json:"expense_count"`
|
|
ItemCount int64 `json:"item_count"`
|
|
}
|
|
|
|
type ExpenseAnalyticsItemData struct {
|
|
Item string `json:"item"`
|
|
TotalAmount float64 `json:"total_amount"`
|
|
ExpenseCount int64 `json:"expense_count"`
|
|
ItemCount int64 `json:"item_count"`
|
|
}
|