コード例 #1
0
        public override async Task <ExtPostContainer <string> > SaveInput(WarehouseDocumentInput input)
        {
            var id = !string.IsNullOrWhiteSpace(input.Id) ? input.Id : Guid.NewGuid().ToString("N");

            await Validate(input);

            var warehouseDocument = new WarehouseDocument
            {
                Id               = id,
                IdWarehouse      = input.IdWarehouse,
                DocumentType     = input.DocumentType,
                EmissionDate     = input.EmissionDate,
                PaymentType      = input.PaymentType,
                DocumentState    = input.DocumentState,
                Output           = input.Output,
                ProductDocuments = input.ProductDocuments == null || !input.ProductDocuments.Any() ? new List <ProductDocument>() : input.ProductDocuments.Select(PD_Input => new ProductDocument
                {
                    IdProduct = PD_Input.IdProduct,
                    Quantity  = PD_Input.Quantity,
                    Price     = PD_Input.Price
                }).ToList(),
                Destiny = input.Destiny,
                Source  = input.Source
            };

            await SaveDb(warehouseDocument);

            return(await SaveSearch(warehouseDocument));
        }
コード例 #2
0
        public async override Task Validate(WarehouseDocumentInput input)
        {
            if (!input.ProductDocuments.Any())
            {
                throw new CustomException("Tiene que haber al menos un producto");
            }
            else
            {
                var isUnique = input.ProductDocuments.GroupBy(o => o.IdProduct).Max(g => g.Count()) == 1;
                if (!isUnique)
                {
                    throw new CustomException("No se pueden ingresar productos repetidos");
                }
            }

            await base.Validate(input);

            if (!Enum.IsDefined(typeof(DocumentType), input.DocumentType))
            {
                throw new ArgumentOutOfRangeException("input.DocumentType", "Enum fuera de rango");
            }

            if (!Enum.IsDefined(typeof(PaymentType), input.PaymentType))
            {
                throw new ArgumentOutOfRangeException("input.PaymentType", "Enum fuera de rango");
            }

            if (!Enum.IsDefined(typeof(DocumentState), input.DocumentState))
            {
                throw new ArgumentOutOfRangeException("input.DocumentState", "Enum fuera de rango");
            }

            if (!input.Output)
            {
                // Documento de entrada, por lo que se debe ingresar un origen desde donde vienen los productos, ese origen debe
                // ser un proveedor, o sea, un business name que no posea centro de costos. El valor de destino es null, ya que
                // el id de bodega previamente ingresado tomará ese lugar.
                if (string.IsNullOrWhiteSpace(input.Source))
                {
                    throw new CustomException("Debe ingresar un origen");
                }
                input.Destiny = input.IdWarehouse;
                var provider = await Queries.GetCostCenterFromBusinessName(input.Source);

                if (provider.Any())
                {
                    throw new CustomException("El business name posee centro de costos, por lo que no puede ser un proveedor");
                }
            }
            if (input.Output)
            {
                // Documento de salida, por lo que se debe ingresar un destino haia donde irán los productos, ese destino debe ser
                // un business name que si posea centro de costos, para poder realizar la transacción. En este caso, el valor de origen
                // es null, ya que el id de bodega previamente ingresado tomará ese lugar.
                if (string.IsNullOrWhiteSpace(input.Destiny))
                {
                    throw new CustomException("Debe ingresar un destino");
                }
                input.Source = input.IdWarehouse;
                var noprovider = await Queries.GetCostCenterFromBusinessName(input.Destiny);

                if (!noprovider.Any())
                {
                    throw new CustomException("El business name no posee centro de costos, por lo que es un proveedor");
                }
            }
        }