Example #1
0
        public async Task <Dal.Entities.PurchaseOrder> AddPurchaseOrder(Dal.Entities.PurchaseOrder purchaseOrder)
        {
            Guard.Argument(purchaseOrder, nameof(purchaseOrder)).NotNull();

            purchaseOrder.Status = PurchaseOrderStatus.Pending;

            await ValidatePurchaseOrder(purchaseOrder);

            purchaseOrder.Created = DateTimeOffset.UtcNow;
            purchaseOrder.Updated = DateTimeOffset.UtcNow;

            _unitOfWork.PurchaseOrdeRepository.Insert(purchaseOrder);
            await _unitOfWork.SaveChanges();

            return(purchaseOrder);
        }
Example #2
0
        public async Task <Dal.Entities.PurchaseOrder> UpdatePurchaseOrder(Dal.Entities.PurchaseOrder purchaseOrder)
        {
            Guard.Argument(purchaseOrder, nameof(purchaseOrder)).NotNull();

            await ValidatePurchaseOrder(purchaseOrder);

            var currentPurchaseOrder = await GetPurchaseOrderById(purchaseOrder.Id);

            var mapper = ServiceMapper.GetMapper();

            mapper.Map(purchaseOrder, currentPurchaseOrder);

            currentPurchaseOrder.Updated = DateTimeOffset.UtcNow;

            await _unitOfWork.SaveChanges();

            return(currentPurchaseOrder);
        }
Example #3
0
        public PurchaseOrderStatus GetPurchaseOrderStatus(Dal.Entities.PurchaseOrder purchaseOrder)
        {
            if (purchaseOrder == null)
            {
                throw new ArgumentNullException(nameof(purchaseOrder));
            }

            if (purchaseOrder.PurchaseOrderItems.All(poi => poi.ReceivedQuantity >= poi.Quantity))
            {
                return(PurchaseOrderStatus.Received);
            }

            if (purchaseOrder.PurchaseOrderItems.All(poi => poi.ReceivedQuantity == 0))
            {
                return(PurchaseOrderStatus.Pending);
            }

            return(PurchaseOrderStatus.PartiallyReceived);
        }
Example #4
0
        private async Task ValidatePurchaseOrder(Dal.Entities.PurchaseOrder purchaseOrder)
        {
            var validator      = new PurchaseOrderValidator();
            var validateResult = await validator.ValidateAsync(purchaseOrder);

            if (validateResult.IsValid)
            {
                return;
            }

            throw new ServiceException(validateResult.Errors.Select(e => new ErrorMessage()
            {
                Code = ErrorCodes.Model_Validation_Error_Code,
                Meta = new
                {
                    e.ErrorCode,
                    e.ErrorMessage,
                    e.PropertyName
                },
                Message = e.ErrorMessage
            }).ToArray());
        }
        public async Task <GrnReport> GetGrnReport(long id)
        {
            var grn = await _grnService.GetByIdIncludeWithProduct(id);

            var supplier = await _supplierService.GetSupplierById(grn.SupplierId);

            var wareHouse = await _wareHouseService.GetWareHouseById(grn.WareHouseId);

            Dal.Entities.PurchaseOrder purchaseOrder = !grn.PurchaseOrderId.HasValue ? null : await _purchaseOrderService.GetPurchaseOrderById(grn.PurchaseOrderId.Value);

            return(new GrnReport()
            {
                GrnNo = grn.GrnNo,
                Date = grn.Created,
                GrnType = grn.Type.GetDescription(),
                PurchaseOrderNumber = purchaseOrder?.PoNumber,
                SupplierName = supplier.SupplierName,
                SupplierCode = supplier.Code,
                SupplierInvoiceNo = grn?.SupplierInvoiceNumber,
                WareHouse = wareHouse.Code,
                WareHouseName = wareHouse.Name,
                WareHouseAddressLine1 = wareHouse.Address.AddressLine1,
                WareHouseAddressLine2 = wareHouse.Address.AddressLine2,
                City = wareHouse.Address.City.CityName,
                Telephone = wareHouse?.Phone,
                GrnReportItems = grn.GoodReceivedNoteItems.Select(item => new GrnReportItem()
                {
                    ExpiredDate = item.ExpiredDate,
                    ProductId = item.Product.Code,
                    ProductName = item.Product.Description,
                    Quantity = item.Quantity,
                    UnitCost = item.UnitCost,
                    UnitOfMeasure = item.Product.MassUnit.ToString()
                }).ToList()
            });
        }