public RetailSalesInvoiceDetail ConfirmObject(RetailSalesInvoiceDetail retailSalesInvoiceDetail, IRetailSalesInvoiceService _retailSalesInvoiceService, IWarehouseItemService _warehouseItemService,
                                               IWarehouseService _warehouseService, IItemService _itemService, IBarringService _barringService, IStockMutationService _stockMutationService)
 {
     if (_validator.ValidConfirmObject(retailSalesInvoiceDetail, _retailSalesInvoiceService, _warehouseItemService))
     {
         RetailSalesInvoice retailSalesInvoice = _retailSalesInvoiceService.GetObjectById(retailSalesInvoiceDetail.RetailSalesInvoiceId);
         WarehouseItem      warehouseItem      = _warehouseItemService.FindOrCreateObject(retailSalesInvoice.WarehouseId, retailSalesInvoiceDetail.ItemId);
         Item          item          = _itemService.GetObjectById(retailSalesInvoiceDetail.ItemId);
         StockMutation stockMutation = new StockMutation()
         {
             ItemId                   = retailSalesInvoiceDetail.ItemId,
             ItemCase                 = Core.Constants.Constant.ItemCase.Ready,
             Status                   = Core.Constants.Constant.MutationStatus.Deduction,
             Quantity                 = retailSalesInvoiceDetail.Quantity,
             SourceDocumentCode       = retailSalesInvoice.Code,
             SourceDocumentId         = retailSalesInvoice.Id,
             SourceDocumentType       = Core.Constants.Constant.SourceDocumentType.RetailSalesInvoice,
             SourceDocumentDetailCode = retailSalesInvoiceDetail.Code,
             SourceDocumentDetailId   = retailSalesInvoiceDetail.Id,
             SourceDocumentDetailType = Core.Constants.Constant.SourceDocumentDetailType.RetailSalesInvoiceDetail,
             WarehouseId              = retailSalesInvoice.WarehouseId,
             WarehouseItemId          = warehouseItem.Id
         };
         stockMutation           = _stockMutationService.CreateObject(stockMutation, _warehouseService, _warehouseItemService, _itemService, _barringService);
         stockMutation.CreatedAt = (DateTime)retailSalesInvoice.ConfirmationDate.GetValueOrDefault();
         _stockMutationService.UpdateObject(stockMutation, _warehouseService, _warehouseItemService, _itemService, _barringService);
         _stockMutationService.StockMutateObject(stockMutation, _itemService, _barringService, _warehouseItemService);
         retailSalesInvoiceDetail.CoGS = retailSalesInvoiceDetail.Quantity * item.AvgPrice;
         retailSalesInvoiceDetail      = _repository.ConfirmObject(retailSalesInvoiceDetail);
     }
     return(retailSalesInvoiceDetail);
 }
        public RetailSalesInvoiceDetail VHasRetailSalesInvoice(RetailSalesInvoiceDetail retailSalesInvoiceDetail, IRetailSalesInvoiceService _retailSalesInvoiceService)
        {
            RetailSalesInvoice retailSalesInvoice = _retailSalesInvoiceService.GetObjectById(retailSalesInvoiceDetail.RetailSalesInvoiceId);

            if (retailSalesInvoice == null)
            {
                retailSalesInvoiceDetail.Errors.Add("RetailSalesInvoiceId", "Tidak valid");
            }
            return(retailSalesInvoiceDetail);
        }
        public RetailSalesInvoiceDetail VIsValidQuantity(RetailSalesInvoiceDetail retailSalesInvoiceDetail, IRetailSalesInvoiceService _retailSalesInvoiceService, IWarehouseItemService _warehouseItemService)
        {
            RetailSalesInvoice retailSalesInvoice = _retailSalesInvoiceService.GetObjectById(retailSalesInvoiceDetail.RetailSalesInvoiceId);
            WarehouseItem      warehouseItem      = _warehouseItemService.FindOrCreateObject(retailSalesInvoice.WarehouseId, retailSalesInvoiceDetail.ItemId);

            if (retailSalesInvoiceDetail.Quantity <= 0 || retailSalesInvoiceDetail.Quantity > warehouseItem.Quantity)
            {
                retailSalesInvoiceDetail.Errors.Add("Quantity", "Harus lebih besar dari 0 dan lebih kecil atau sama dengan WarehouseItem Quantity");
                return(retailSalesInvoiceDetail);
            }
            return(retailSalesInvoiceDetail);
        }
        public RetailSalesInvoiceDetail VIsValidQuantityOrdered(RetailSalesInvoiceDetail retailSalesInvoiceDetail, IRetailSalesInvoiceService _retailSalesInvoiceService, IWarehouseItemService _warehouseItemService)
        {
            RetailSalesInvoice retailSalesInvoice = _retailSalesInvoiceService.GetObjectById(retailSalesInvoiceDetail.RetailSalesInvoiceId);
            WarehouseItem      warehouseItem      = _warehouseItemService.FindOrCreateObject(retailSalesInvoice.WarehouseId, retailSalesInvoiceDetail.ItemId);

            if (warehouseItem.Quantity - retailSalesInvoiceDetail.Quantity < 0)
            {
                retailSalesInvoiceDetail.Errors.Add("Generic", "Quantity harus lebih kecil atau sama dengan WarehouseItem Quantity");
                return(retailSalesInvoiceDetail);
            }
            return(retailSalesInvoiceDetail);
        }
 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 VIsParentNotConfirmed(RetailSalesInvoiceDetail retailSalesInvoiceDetail, IRetailSalesInvoiceService _retailSalesInvoiceService)
        {
            RetailSalesInvoice retailSalesInvoice = _retailSalesInvoiceService.GetObjectById(retailSalesInvoiceDetail.RetailSalesInvoiceId);

            if (retailSalesInvoice != null)
            {
                if (retailSalesInvoice.IsConfirmed)
                {
                    retailSalesInvoiceDetail.Errors.Add("Generic", "RetailSalesInvoice tidak boleh terkonfirmasi");
                }
            }
            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);
        }
        public dynamic GetInfo(int Id)
        {
            RetailSalesInvoice model = new RetailSalesInvoice();

            try
            {
                model = _retailSalesInvoiceService.GetObjectById(Id);
            }
            catch (Exception ex)
            {
                LOG.Error("GetInfo", ex);
                Dictionary <string, string> Errors = new Dictionary <string, string>();
                Errors.Add("Generic", "Error " + ex);

                return(Json(new
                {
                    Errors
                }, JsonRequestBehavior.AllowGet));
            }

            return(Json(new
            {
                model.Id,
                model.Code,
                model.Description,
                model.SalesDate,
                model.DueDate,
                model.Discount,
                model.Tax,
                model.Total,
                model.ContactId,
                model.IsGBCH,
                model.GBCH_No,
                model.GBCH_DueDate,
                Contact = _contactService.GetObjectById(model.ContactId).Name,
                model.CashBankId,
                CashBank = _cashBankService.GetObjectById((int)model.CashBankId.GetValueOrDefault()).Name,
                model.WarehouseId,
                Warehouse = _warehouseService.GetObjectById(model.WarehouseId).Name,
                model.Errors
            }, JsonRequestBehavior.AllowGet));
        }