use std::sync::Arc;
use crate::application::service::PickingBatchService;
use crate::application::service::DeliveryNoteService;
use crate::application::service::DeliveryNoteItemService;
use crate::application::service::InventoryCompanySettingService;
use crate::application::service::LandedCostService;
use crate::application::service::LandedCostLineService;
use crate::application::service::LandedCostAdjustmentLineService;
use crate::application::service::LocationService;
use crate::application::service::StockMoveService;
use crate::application::service::StockMoveLineService;
use crate::application::service::OperationTypeService;
use crate::application::service::TransferService;
use crate::application::service::RouteService;
use crate::application::service::RouteRuleService;
use crate::application::service::ReorderingRuleService;
use crate::application::service::PurchaseReceiptService;
use crate::application::service::PurchaseReceiptItemService;
use crate::application::service::QuantService;
use crate::application::service::ScrapService;
use crate::application::service::ScrapReasonTagService;
use crate::application::service::StockEntryService;
use crate::application::service::StockEntryItemService;
use crate::application::service::StockLedgerEntryService;
use crate::application::service::BinService;
use crate::application::service::StockReconciliationService;
use crate::application::service::StockReconciliationItemService;
use crate::application::service::PackageTypeService;
use crate::application::service::StorageCategoryService;
use crate::application::service::StorageCategoryCapacityService;
use crate::application::service::PutawayRuleService;
use crate::application::service::LotService;
use crate::application::service::PackageService;
use crate::application::service::WarehouseService;
use crate::application::service::StockItemService;
#[derive(Clone)]
pub struct AppState {
pub picking_batch_service: Arc<PickingBatchService>,
pub delivery_note_service: Arc<DeliveryNoteService>,
pub delivery_note_item_service: Arc<DeliveryNoteItemService>,
pub inventory_company_setting_service: Arc<InventoryCompanySettingService>,
pub landed_cost_service: Arc<LandedCostService>,
pub landed_cost_line_service: Arc<LandedCostLineService>,
pub landed_cost_adjustment_line_service: Arc<LandedCostAdjustmentLineService>,
pub location_service: Arc<LocationService>,
pub stock_move_service: Arc<StockMoveService>,
pub stock_move_line_service: Arc<StockMoveLineService>,
pub operation_type_service: Arc<OperationTypeService>,
pub transfer_service: Arc<TransferService>,
pub route_service: Arc<RouteService>,
pub route_rule_service: Arc<RouteRuleService>,
pub reordering_rule_service: Arc<ReorderingRuleService>,
pub purchase_receipt_service: Arc<PurchaseReceiptService>,
pub purchase_receipt_item_service: Arc<PurchaseReceiptItemService>,
pub quant_service: Arc<QuantService>,
pub scrap_service: Arc<ScrapService>,
pub scrap_reason_tag_service: Arc<ScrapReasonTagService>,
pub stock_entry_service: Arc<StockEntryService>,
pub stock_entry_item_service: Arc<StockEntryItemService>,
pub stock_ledger_entry_service: Arc<StockLedgerEntryService>,
pub bin_service: Arc<BinService>,
pub stock_reconciliation_service: Arc<StockReconciliationService>,
pub stock_reconciliation_item_service: Arc<StockReconciliationItemService>,
pub package_type_service: Arc<PackageTypeService>,
pub storage_category_service: Arc<StorageCategoryService>,
pub storage_category_capacity_service: Arc<StorageCategoryCapacityService>,
pub putaway_rule_service: Arc<PutawayRuleService>,
pub lot_service: Arc<LotService>,
pub package_service: Arc<PackageService>,
pub warehouse_service: Arc<WarehouseService>,
pub stock_item_service: Arc<StockItemService>,
}
impl AppState {
pub fn new(
picking_batch_service: Arc<PickingBatchService>,
delivery_note_service: Arc<DeliveryNoteService>,
delivery_note_item_service: Arc<DeliveryNoteItemService>,
inventory_company_setting_service: Arc<InventoryCompanySettingService>,
landed_cost_service: Arc<LandedCostService>,
landed_cost_line_service: Arc<LandedCostLineService>,
landed_cost_adjustment_line_service: Arc<LandedCostAdjustmentLineService>,
location_service: Arc<LocationService>,
stock_move_service: Arc<StockMoveService>,
stock_move_line_service: Arc<StockMoveLineService>,
operation_type_service: Arc<OperationTypeService>,
transfer_service: Arc<TransferService>,
route_service: Arc<RouteService>,
route_rule_service: Arc<RouteRuleService>,
reordering_rule_service: Arc<ReorderingRuleService>,
purchase_receipt_service: Arc<PurchaseReceiptService>,
purchase_receipt_item_service: Arc<PurchaseReceiptItemService>,
quant_service: Arc<QuantService>,
scrap_service: Arc<ScrapService>,
scrap_reason_tag_service: Arc<ScrapReasonTagService>,
stock_entry_service: Arc<StockEntryService>,
stock_entry_item_service: Arc<StockEntryItemService>,
stock_ledger_entry_service: Arc<StockLedgerEntryService>,
bin_service: Arc<BinService>,
stock_reconciliation_service: Arc<StockReconciliationService>,
stock_reconciliation_item_service: Arc<StockReconciliationItemService>,
package_type_service: Arc<PackageTypeService>,
storage_category_service: Arc<StorageCategoryService>,
storage_category_capacity_service: Arc<StorageCategoryCapacityService>,
putaway_rule_service: Arc<PutawayRuleService>,
lot_service: Arc<LotService>,
package_service: Arc<PackageService>,
warehouse_service: Arc<WarehouseService>,
stock_item_service: Arc<StockItemService>
) -> Self {
Self {
picking_batch_service,
delivery_note_service,
delivery_note_item_service,
inventory_company_setting_service,
landed_cost_service,
landed_cost_line_service,
landed_cost_adjustment_line_service,
location_service,
stock_move_service,
stock_move_line_service,
operation_type_service,
transfer_service,
route_service,
route_rule_service,
reordering_rule_service,
purchase_receipt_service,
purchase_receipt_item_service,
quant_service,
scrap_service,
scrap_reason_tag_service,
stock_entry_service,
stock_entry_item_service,
stock_ledger_entry_service,
bin_service,
stock_reconciliation_service,
stock_reconciliation_item_service,
package_type_service,
storage_category_service,
storage_category_capacity_service,
putaway_rule_service,
lot_service,
package_service,
warehouse_service,
stock_item_service,
}
}
pub fn from_module(module: &crate::InventoryModule) -> Self {
Self {
picking_batch_service: module.picking_batch_service.clone(),
delivery_note_service: module.delivery_note_service.clone(),
delivery_note_item_service: module.delivery_note_item_service.clone(),
inventory_company_setting_service: module.inventory_company_setting_service.clone(),
landed_cost_service: module.landed_cost_service.clone(),
landed_cost_line_service: module.landed_cost_line_service.clone(),
landed_cost_adjustment_line_service: module.landed_cost_adjustment_line_service.clone(),
location_service: module.location_service.clone(),
stock_move_service: module.stock_move_service.clone(),
stock_move_line_service: module.stock_move_line_service.clone(),
operation_type_service: module.operation_type_service.clone(),
transfer_service: module.transfer_service.clone(),
route_service: module.route_service.clone(),
route_rule_service: module.route_rule_service.clone(),
reordering_rule_service: module.reordering_rule_service.clone(),
purchase_receipt_service: module.purchase_receipt_service.clone(),
purchase_receipt_item_service: module.purchase_receipt_item_service.clone(),
quant_service: module.quant_service.clone(),
scrap_service: module.scrap_service.clone(),
scrap_reason_tag_service: module.scrap_reason_tag_service.clone(),
stock_entry_service: module.stock_entry_service.clone(),
stock_entry_item_service: module.stock_entry_item_service.clone(),
stock_ledger_entry_service: module.stock_ledger_entry_service.clone(),
bin_service: module.bin_service.clone(),
stock_reconciliation_service: module.stock_reconciliation_service.clone(),
stock_reconciliation_item_service: module.stock_reconciliation_item_service.clone(),
package_type_service: module.package_type_service.clone(),
storage_category_service: module.storage_category_service.clone(),
storage_category_capacity_service: module.storage_category_capacity_service.clone(),
putaway_rule_service: module.putaway_rule_service.clone(),
lot_service: module.lot_service.clone(),
package_service: module.package_service.clone(),
warehouse_service: module.warehouse_service.clone(),
stock_item_service: module.stock_item_service.clone(),
}
}
}
#[derive(Default)]
pub struct AppStateBuilder {
picking_batch_service: Option<Arc<PickingBatchService>>,
delivery_note_service: Option<Arc<DeliveryNoteService>>,
delivery_note_item_service: Option<Arc<DeliveryNoteItemService>>,
inventory_company_setting_service: Option<Arc<InventoryCompanySettingService>>,
landed_cost_service: Option<Arc<LandedCostService>>,
landed_cost_line_service: Option<Arc<LandedCostLineService>>,
landed_cost_adjustment_line_service: Option<Arc<LandedCostAdjustmentLineService>>,
location_service: Option<Arc<LocationService>>,
stock_move_service: Option<Arc<StockMoveService>>,
stock_move_line_service: Option<Arc<StockMoveLineService>>,
operation_type_service: Option<Arc<OperationTypeService>>,
transfer_service: Option<Arc<TransferService>>,
route_service: Option<Arc<RouteService>>,
route_rule_service: Option<Arc<RouteRuleService>>,
reordering_rule_service: Option<Arc<ReorderingRuleService>>,
purchase_receipt_service: Option<Arc<PurchaseReceiptService>>,
purchase_receipt_item_service: Option<Arc<PurchaseReceiptItemService>>,
quant_service: Option<Arc<QuantService>>,
scrap_service: Option<Arc<ScrapService>>,
scrap_reason_tag_service: Option<Arc<ScrapReasonTagService>>,
stock_entry_service: Option<Arc<StockEntryService>>,
stock_entry_item_service: Option<Arc<StockEntryItemService>>,
stock_ledger_entry_service: Option<Arc<StockLedgerEntryService>>,
bin_service: Option<Arc<BinService>>,
stock_reconciliation_service: Option<Arc<StockReconciliationService>>,
stock_reconciliation_item_service: Option<Arc<StockReconciliationItemService>>,
package_type_service: Option<Arc<PackageTypeService>>,
storage_category_service: Option<Arc<StorageCategoryService>>,
storage_category_capacity_service: Option<Arc<StorageCategoryCapacityService>>,
putaway_rule_service: Option<Arc<PutawayRuleService>>,
lot_service: Option<Arc<LotService>>,
package_service: Option<Arc<PackageService>>,
warehouse_service: Option<Arc<WarehouseService>>,
stock_item_service: Option<Arc<StockItemService>>,
}
impl AppStateBuilder {
pub fn new() -> Self {
Self::default()
}
pub fn with_picking_batch_service(mut self, service: Arc<PickingBatchService>) -> Self {
self.picking_batch_service = Some(service);
self
}
pub fn with_delivery_note_service(mut self, service: Arc<DeliveryNoteService>) -> Self {
self.delivery_note_service = Some(service);
self
}
pub fn with_delivery_note_item_service(mut self, service: Arc<DeliveryNoteItemService>) -> Self {
self.delivery_note_item_service = Some(service);
self
}
pub fn with_inventory_company_setting_service(mut self, service: Arc<InventoryCompanySettingService>) -> Self {
self.inventory_company_setting_service = Some(service);
self
}
pub fn with_landed_cost_service(mut self, service: Arc<LandedCostService>) -> Self {
self.landed_cost_service = Some(service);
self
}
pub fn with_landed_cost_line_service(mut self, service: Arc<LandedCostLineService>) -> Self {
self.landed_cost_line_service = Some(service);
self
}
pub fn with_landed_cost_adjustment_line_service(mut self, service: Arc<LandedCostAdjustmentLineService>) -> Self {
self.landed_cost_adjustment_line_service = Some(service);
self
}
pub fn with_location_service(mut self, service: Arc<LocationService>) -> Self {
self.location_service = Some(service);
self
}
pub fn with_stock_move_service(mut self, service: Arc<StockMoveService>) -> Self {
self.stock_move_service = Some(service);
self
}
pub fn with_stock_move_line_service(mut self, service: Arc<StockMoveLineService>) -> Self {
self.stock_move_line_service = Some(service);
self
}
pub fn with_operation_type_service(mut self, service: Arc<OperationTypeService>) -> Self {
self.operation_type_service = Some(service);
self
}
pub fn with_transfer_service(mut self, service: Arc<TransferService>) -> Self {
self.transfer_service = Some(service);
self
}
pub fn with_route_service(mut self, service: Arc<RouteService>) -> Self {
self.route_service = Some(service);
self
}
pub fn with_route_rule_service(mut self, service: Arc<RouteRuleService>) -> Self {
self.route_rule_service = Some(service);
self
}
pub fn with_reordering_rule_service(mut self, service: Arc<ReorderingRuleService>) -> Self {
self.reordering_rule_service = Some(service);
self
}
pub fn with_purchase_receipt_service(mut self, service: Arc<PurchaseReceiptService>) -> Self {
self.purchase_receipt_service = Some(service);
self
}
pub fn with_purchase_receipt_item_service(mut self, service: Arc<PurchaseReceiptItemService>) -> Self {
self.purchase_receipt_item_service = Some(service);
self
}
pub fn with_quant_service(mut self, service: Arc<QuantService>) -> Self {
self.quant_service = Some(service);
self
}
pub fn with_scrap_service(mut self, service: Arc<ScrapService>) -> Self {
self.scrap_service = Some(service);
self
}
pub fn with_scrap_reason_tag_service(mut self, service: Arc<ScrapReasonTagService>) -> Self {
self.scrap_reason_tag_service = Some(service);
self
}
pub fn with_stock_entry_service(mut self, service: Arc<StockEntryService>) -> Self {
self.stock_entry_service = Some(service);
self
}
pub fn with_stock_entry_item_service(mut self, service: Arc<StockEntryItemService>) -> Self {
self.stock_entry_item_service = Some(service);
self
}
pub fn with_stock_ledger_entry_service(mut self, service: Arc<StockLedgerEntryService>) -> Self {
self.stock_ledger_entry_service = Some(service);
self
}
pub fn with_bin_service(mut self, service: Arc<BinService>) -> Self {
self.bin_service = Some(service);
self
}
pub fn with_stock_reconciliation_service(mut self, service: Arc<StockReconciliationService>) -> Self {
self.stock_reconciliation_service = Some(service);
self
}
pub fn with_stock_reconciliation_item_service(mut self, service: Arc<StockReconciliationItemService>) -> Self {
self.stock_reconciliation_item_service = Some(service);
self
}
pub fn with_package_type_service(mut self, service: Arc<PackageTypeService>) -> Self {
self.package_type_service = Some(service);
self
}
pub fn with_storage_category_service(mut self, service: Arc<StorageCategoryService>) -> Self {
self.storage_category_service = Some(service);
self
}
pub fn with_storage_category_capacity_service(mut self, service: Arc<StorageCategoryCapacityService>) -> Self {
self.storage_category_capacity_service = Some(service);
self
}
pub fn with_putaway_rule_service(mut self, service: Arc<PutawayRuleService>) -> Self {
self.putaway_rule_service = Some(service);
self
}
pub fn with_lot_service(mut self, service: Arc<LotService>) -> Self {
self.lot_service = Some(service);
self
}
pub fn with_package_service(mut self, service: Arc<PackageService>) -> Self {
self.package_service = Some(service);
self
}
pub fn with_warehouse_service(mut self, service: Arc<WarehouseService>) -> Self {
self.warehouse_service = Some(service);
self
}
pub fn with_stock_item_service(mut self, service: Arc<StockItemService>) -> Self {
self.stock_item_service = Some(service);
self
}
pub fn build(self) -> AppState {
AppState {
picking_batch_service: self.picking_batch_service.expect("picking_batch_service is required"),
delivery_note_service: self.delivery_note_service.expect("delivery_note_service is required"),
delivery_note_item_service: self.delivery_note_item_service.expect("delivery_note_item_service is required"),
inventory_company_setting_service: self.inventory_company_setting_service.expect("inventory_company_setting_service is required"),
landed_cost_service: self.landed_cost_service.expect("landed_cost_service is required"),
landed_cost_line_service: self.landed_cost_line_service.expect("landed_cost_line_service is required"),
landed_cost_adjustment_line_service: self.landed_cost_adjustment_line_service.expect("landed_cost_adjustment_line_service is required"),
location_service: self.location_service.expect("location_service is required"),
stock_move_service: self.stock_move_service.expect("stock_move_service is required"),
stock_move_line_service: self.stock_move_line_service.expect("stock_move_line_service is required"),
operation_type_service: self.operation_type_service.expect("operation_type_service is required"),
transfer_service: self.transfer_service.expect("transfer_service is required"),
route_service: self.route_service.expect("route_service is required"),
route_rule_service: self.route_rule_service.expect("route_rule_service is required"),
reordering_rule_service: self.reordering_rule_service.expect("reordering_rule_service is required"),
purchase_receipt_service: self.purchase_receipt_service.expect("purchase_receipt_service is required"),
purchase_receipt_item_service: self.purchase_receipt_item_service.expect("purchase_receipt_item_service is required"),
quant_service: self.quant_service.expect("quant_service is required"),
scrap_service: self.scrap_service.expect("scrap_service is required"),
scrap_reason_tag_service: self.scrap_reason_tag_service.expect("scrap_reason_tag_service is required"),
stock_entry_service: self.stock_entry_service.expect("stock_entry_service is required"),
stock_entry_item_service: self.stock_entry_item_service.expect("stock_entry_item_service is required"),
stock_ledger_entry_service: self.stock_ledger_entry_service.expect("stock_ledger_entry_service is required"),
bin_service: self.bin_service.expect("bin_service is required"),
stock_reconciliation_service: self.stock_reconciliation_service.expect("stock_reconciliation_service is required"),
stock_reconciliation_item_service: self.stock_reconciliation_item_service.expect("stock_reconciliation_item_service is required"),
package_type_service: self.package_type_service.expect("package_type_service is required"),
storage_category_service: self.storage_category_service.expect("storage_category_service is required"),
storage_category_capacity_service: self.storage_category_capacity_service.expect("storage_category_capacity_service is required"),
putaway_rule_service: self.putaway_rule_service.expect("putaway_rule_service is required"),
lot_service: self.lot_service.expect("lot_service is required"),
package_service: self.package_service.expect("package_service is required"),
warehouse_service: self.warehouse_service.expect("warehouse_service is required"),
stock_item_service: self.stock_item_service.expect("stock_item_service is required"),
}
}
}