Exemplo n.º 1
0
        public virtual void Approve(Receipt receipt)
        {
            if (receipt.IsApproved == false)
            {
                var logs = new List <StoreLocatorItemLog>();
                foreach (var item in receipt.ReceiptItems)
                {
                    var log = _storeService.AddStoreLocatorItemLog(
                        0,
                        DateTime.UtcNow,
                        receipt.StoreId,
                        item.StoreLocatorId,
                        item.ItemId,
                        item.UnitPrice ?? 0,
                        item.Quantity ?? 0,
                        item.Cost ?? 0,
                        InventoryTransactionType.Receipt,
                        receipt.Id,
                        receipt.Number,
                        receipt.ReceiptDate,
                        item.Id
                        );
                    logs.Add(log);
                }

                _storeService.PostToInventory(logs);
                receipt.IsApproved = true;

                //commit all changes
                this._dbContext.SaveChanges();
            }
        }
Exemplo n.º 2
0
        public virtual void Approve(Transfer transfer)
        {
            if (transfer.IsApproved == false)
            {
                foreach (var item in transfer.TransferItems)
                {
                    var     removals     = new List <StoreLocatorItemRemoval>();
                    decimal?transferCost = 0;
                    removals = _storeService.RemoveStoreLocatorItem(
                        transfer.FromStoreId,
                        item.FromStoreLocatorId,
                        item.ItemId,
                        item.TransferQuantity ?? 0,
                        InventoryTransactionType.Transfer,
                        transfer.Id,
                        transfer.Number,
                        transfer.TransferDate,
                        item.Id,
                        out transferCost
                        );

                    item.TransferCost = transferCost;
                    _transferRepository.Update(transfer);

                    var logs = new List <StoreLocatorItemLog>();
                    foreach (var removal in removals)
                    {
                        var log = _storeService.AddStoreLocatorItemLog(
                            0,
                            DateTime.UtcNow,
                            transfer.ToStoreId,
                            item.ToStoreLocatorId,
                            item.ItemId,
                            removal.UnitPrice ?? 0,
                            removal.Quantity ?? 0,
                            removal.Cost ?? 0,
                            InventoryTransactionType.Transfer,
                            transfer.Id,
                            transfer.Number,
                            transfer.TransferDate,
                            item.Id
                            );
                        logs.Add(log);
                    }

                    _storeService.PostToInventory(logs);
                }

                transfer.IsApproved = true;

                //commit all changes
                this._dbContext.SaveChanges();
            }
        }
        public virtual void Approve(Adjust adjust)
        {
            if (adjust.IsApproved == false)
            {
                var logs = new List <StoreLocatorItemLog>();
                foreach (var item in adjust.AdjustItems)
                {
                    if (item.AdjustQuantity > 0)
                    {
                        var log = _storeService.AddStoreLocatorItemLog(
                            0,
                            DateTime.UtcNow,
                            adjust.StoreId,
                            item.StoreLocatorId,
                            item.ItemId,
                            item.AdjustUnitPrice ?? 0,
                            item.AdjustQuantity ?? 0,
                            item.AdjustCost ?? 0,
                            InventoryTransactionType.Adjust,
                            adjust.Id,
                            adjust.Number,
                            adjust.AdjustDate,
                            item.Id
                            );
                        logs.Add(log);
                    }
                    else
                    {
                        decimal?adjustCost = 0;
                        _storeService.RemoveStoreLocatorItem(
                            adjust.StoreId,
                            item.StoreLocatorId,
                            item.ItemId,
                            -item.AdjustQuantity ?? 0,
                            InventoryTransactionType.Adjust,
                            adjust.Id,
                            adjust.Number,
                            adjust.AdjustDate,
                            item.Id,
                            out adjustCost
                            );

                        item.AdjustCost = adjustCost;
                        _adjustRepository.Update(adjust);
                    }
                }
                _storeService.PostToInventory(logs);
                adjust.IsApproved = true;

                //commit all changes
                this._dbContext.SaveChanges();
            }
        }
        public virtual void Approve(Return returnEntity) //named parameter is returnEntity because return is a keyword
        {
            if (returnEntity.IsApproved == false)
            {
                foreach (var item in returnEntity.ReturnItems)
                {
                    //get log records of issue item
                    var query = _storeLocatorItemLogRepository.GetAll()
                                .Where(s => s.TransactionType == InventoryTransactionType.Issue &&
                                       s.TransactionItemId == item.IssueItemId);

                    //create reverse logs
                    int costingType = _inventorySettings.CostingType.Value;
                    var logs        = new List <StoreLocatorItemLog>();
                    var reverseLogs = new List <StoreLocatorItemLog>();

                    //reverse the order from the issue
                    if (costingType == (int)ItemCostingType.FIFO)
                    {
                        logs = query.OrderByDescending(s => s.BatchDate).ToList();
                    }
                    else if (costingType == (int)ItemCostingType.LIFO)
                    {
                        logs = query.OrderBy(s => s.BatchDate).ToList();
                    }
                    else
                    {
                        logs = query.OrderByDescending(s => s.BatchDate).ToList();
                    }

                    var     returnQuantity = item.ReturnQuantity;
                    decimal?returnCost     = 0;
                    foreach (var log in logs)
                    {
                        if (returnQuantity > 0)
                        {
                            if (returnQuantity > -log.QuantityChanged)
                            {
                                reverseLogs.Add(_storeService.AddStoreLocatorItemLog(
                                                    log.StoreLocatorItemId,
                                                    log.BatchDate,
                                                    log.StoreId,
                                                    log.StoreLocatorId,
                                                    log.ItemId,
                                                    log.UnitPrice,
                                                    -log.QuantityChanged,
                                                    -log.CostChanged,
                                                    InventoryTransactionType.Return,
                                                    returnEntity.Id,
                                                    returnEntity.Number,
                                                    returnEntity.ReturnDate,
                                                    item.Id
                                                    ));

                                returnCost += -log.CostChanged;
                            }
                            else
                            {
                                reverseLogs.Add(_storeService.AddStoreLocatorItemLog(
                                                    log.StoreLocatorItemId,
                                                    log.BatchDate,
                                                    log.StoreId,
                                                    log.StoreLocatorId,
                                                    log.ItemId,
                                                    log.UnitPrice,
                                                    returnQuantity,
                                                    log.UnitPrice * returnQuantity,
                                                    InventoryTransactionType.Return,
                                                    returnEntity.Id,
                                                    returnEntity.Number,
                                                    returnEntity.ReturnDate,
                                                    item.Id
                                                    ));

                                returnCost += log.UnitPrice * returnQuantity;
                            }

                            returnQuantity = returnQuantity - (-log.QuantityChanged);
                        }
                    }

                    //post reverse logs
                    _storeService.PostToInventory(reverseLogs);
                    item.ReturnCost = returnCost;
                }

                returnEntity.IsApproved = true;
                //commit all changes
                this._dbContext.SaveChanges();
            }
        }