public RetailPurchaseInvoice VIsConfirmableRetailPurchaseInvoiceDetails(RetailPurchaseInvoice retailPurchaseInvoice, IRetailPurchaseInvoiceDetailService _retailPurchaseInvoiceDetailService,
                                                                                IRetailPurchaseInvoiceService _retailPurchaseInvoiceService, IWarehouseItemService _warehouseItemService)
        {
            IList <RetailPurchaseInvoiceDetail> retailPurchaseInvoiceDetails = _retailPurchaseInvoiceDetailService.GetObjectsByRetailPurchaseInvoiceId(retailPurchaseInvoice.Id);

            if (!retailPurchaseInvoiceDetails.Any())
            {
                retailPurchaseInvoice.Errors.Add("Generic", "RetailPurchaseInvoiceDetails Tidak ada");
            }
            else
            {
                IRetailPurchaseInvoiceDetailValidator validator = _retailPurchaseInvoiceDetailService.GetValidator();
                foreach (var retailPurchaseInvoiceDetail in retailPurchaseInvoiceDetails)
                {
                    retailPurchaseInvoiceDetail.Errors = new Dictionary <string, string>();
                    if (!validator.ValidConfirmObject(retailPurchaseInvoiceDetail, _retailPurchaseInvoiceService, _warehouseItemService))
                    {
                        retailPurchaseInvoice.Errors.Add("Generic", "Harus confirmable semua");
                        return(retailPurchaseInvoice);
                    }
                }
            }
            return(retailPurchaseInvoice);
        }
예제 #2
0
        public RetailPurchaseInvoiceDetail ConfirmObject(RetailPurchaseInvoiceDetail retailPurchaseInvoiceDetail, IRetailPurchaseInvoiceService _retailPurchaseInvoiceService, IWarehouseItemService _warehouseItemService,
                                                         IWarehouseService _warehouseService, IItemService _itemService, IBarringService _barringService, IStockMutationService _stockMutationService)
        {
            if (_validator.ValidConfirmObject(retailPurchaseInvoiceDetail, _retailPurchaseInvoiceService, _warehouseItemService))
            {
                RetailPurchaseInvoice retailPurchaseInvoice = _retailPurchaseInvoiceService.GetObjectById(retailPurchaseInvoiceDetail.RetailPurchaseInvoiceId);
                WarehouseItem         warehouseItem         = _warehouseItemService.FindOrCreateObject(retailPurchaseInvoice.WarehouseId, retailPurchaseInvoiceDetail.ItemId);
                Item          item          = _itemService.GetObjectById(retailPurchaseInvoiceDetail.ItemId);
                StockMutation stockMutation = new StockMutation()
                {
                    ItemId                   = retailPurchaseInvoiceDetail.ItemId,
                    ItemCase                 = Core.Constants.Constant.ItemCase.Ready,
                    Status                   = Core.Constants.Constant.MutationStatus.Addition,
                    Quantity                 = retailPurchaseInvoiceDetail.Quantity,
                    SourceDocumentCode       = retailPurchaseInvoice.Code,
                    SourceDocumentId         = retailPurchaseInvoice.Id,
                    SourceDocumentType       = Core.Constants.Constant.SourceDocumentType.RetailPurchaseInvoice,
                    SourceDocumentDetailCode = retailPurchaseInvoiceDetail.Code,
                    SourceDocumentDetailId   = retailPurchaseInvoiceDetail.Id,
                    SourceDocumentDetailType = Core.Constants.Constant.SourceDocumentDetailType.RetailPurchaseInvoiceDetail,
                    WarehouseId              = retailPurchaseInvoice.WarehouseId,
                    WarehouseItemId          = warehouseItem.Id
                };

                decimal itemPrice = retailPurchaseInvoiceDetail.Amount / retailPurchaseInvoiceDetail.Quantity;
                item.AvgPrice = _itemService.CalculateAndUpdateAvgPrice(item, retailPurchaseInvoiceDetail.Quantity, itemPrice);

                stockMutation           = _stockMutationService.CreateObject(stockMutation, _warehouseService, _warehouseItemService, _itemService, _barringService);
                stockMutation.CreatedAt = (DateTime)retailPurchaseInvoice.ConfirmationDate.GetValueOrDefault();
                _stockMutationService.UpdateObject(stockMutation, _warehouseService, _warehouseItemService, _itemService, _barringService);
                _stockMutationService.StockMutateObject(stockMutation, _itemService, _barringService, _warehouseItemService);
                retailPurchaseInvoiceDetail.CoGS = retailPurchaseInvoiceDetail.Quantity * item.AvgPrice;
                retailPurchaseInvoiceDetail      = _repository.ConfirmObject(retailPurchaseInvoiceDetail);
            }
            return(retailPurchaseInvoiceDetail);
        }