public RetailSalesInvoiceDetail SoftDeleteObject(RetailSalesInvoiceDetail retailSalesInvoiceDetail, IRetailSalesInvoiceService _retailSalesInvoiceService)
 {
     if (_validator.ValidDeleteObject(retailSalesInvoiceDetail, _retailSalesInvoiceService))
     {
         RetailSalesInvoice retailSalesInvoice = _retailSalesInvoiceService.GetObjectById(retailSalesInvoiceDetail.RetailSalesInvoiceId);
         _repository.SoftDeleteObject(retailSalesInvoiceDetail);
         retailSalesInvoice.Total = CalculateTotal(retailSalesInvoice.Id);
         retailSalesInvoice.Total = CalculateCoGS(retailSalesInvoice.Id);
         _retailSalesInvoiceService.GetRepository().Update(retailSalesInvoice);
     }
     return(retailSalesInvoiceDetail);
 }
        public RetailSalesInvoiceDetail CreateObject(RetailSalesInvoiceDetail retailSalesInvoiceDetail, IRetailSalesInvoiceService _retailSalesInvoiceService,
                                                     IItemService _itemService, IWarehouseItemService _warehouseItemService, IPriceMutationService _priceMutationService)
        {
            retailSalesInvoiceDetail.Errors = new Dictionary <String, String>();
            if (_validator.ValidCreateObject(retailSalesInvoiceDetail, _retailSalesInvoiceService, this, _itemService, _warehouseItemService))
            {
                Item item = _itemService.GetObjectById(retailSalesInvoiceDetail.ItemId);
                RetailSalesInvoice retailSalesInvoice = _retailSalesInvoiceService.GetObjectById(retailSalesInvoiceDetail.RetailSalesInvoiceId);
                PriceMutation      priceMutation      = _priceMutationService.GetObjectById(item.PriceMutationId);

                if (retailSalesInvoiceDetail.IsManualPriceAssignment)
                {
                    //priceMutation = _priceMutationService.CreateObject(retailSalesInvoiceDetail.ItemId, retailSalesInvoiceDetail.AssignedPrice, DateTime.Now);

                    retailSalesInvoiceDetail.PriceMutationId = priceMutation.Id;
                    retailSalesInvoiceDetail.Amount          = (retailSalesInvoiceDetail.AssignedPrice * retailSalesInvoiceDetail.Quantity) * (100 - retailSalesInvoiceDetail.Discount) / 100;
                    //item.PriceMutationId = priceMutation.Id;
                    //_itemService.GetRepository().Update(item);
                }
                else
                {
                    retailSalesInvoiceDetail.PriceMutationId = item.PriceMutationId;
                    retailSalesInvoiceDetail.Amount          = (priceMutation.Amount * retailSalesInvoiceDetail.Quantity) * (100 - retailSalesInvoiceDetail.Discount) / 100;
                }
                retailSalesInvoiceDetail.CoGS = retailSalesInvoiceDetail.Quantity * item.AvgPrice;

                retailSalesInvoiceDetail = _repository.CreateObject(retailSalesInvoiceDetail);
                if (retailSalesInvoiceDetail.IsManualPriceAssignment)
                {
                    priceMutation.CreatedAt = retailSalesInvoiceDetail.CreatedAt;
                    _priceMutationService.GetRepository().Update(priceMutation);
                }

                retailSalesInvoice.Total = CalculateTotal(retailSalesInvoice.Id);
                retailSalesInvoice.Total = CalculateCoGS(retailSalesInvoice.Id);
                _retailSalesInvoiceService.GetRepository().Update(retailSalesInvoice);
            }
            return(retailSalesInvoiceDetail);
        }