Example #1
0
        public void Cuando_CalculamosCon_ModalidadVentaIndentSL_Entonces_CantidadTotalOrdenCompra_DebeSer_Multiplo_CapacidadFCL()
        {
            // Arrange
            IProductQuoteService productQuoteService = new ProductQuoteServiceBuilder().Build();

            // Act
            ProductQuote productQuote = new ProductQuote();

            productQuote.ProductID = 2;
            //product.FCLKilogram = 26250
            productQuote.SaleModalityID            = (int)EnumSaleModality.IndentSL;
            productQuote.MinimumQuantityDelivery   = 10;
            productQuote.QuantityOpenPurchaseOrder = 30000;
            productQuote.MaximumMonthsStock        = 10;

            productQuoteService.CalculateQuote(productQuote);

            // Assert
            StringAssert.Contains(productQuote.Message, "Para la modalidad Indent / Indent + Servicio Logistico/Financiero de guarda, la Cantidad Total  Orden de Compra (Kg) debe ser multiplo de la Capacidad del FCL:");
        }
Example #2
0
        public void Cuando_CalculamosCon_ModalidadVentaLocalProgramada_Entonces_CantidadTotalOrdenCompra_DebeSer_Multiplo_ProductFCLKilogram()
        {
            // Arrange
            IProductQuoteService productQuoteService = new ProductQuoteServiceBuilder().Build();

            // Act
            ProductQuote productQuote = new ProductQuote();

            productQuote.ProductID = 2;
            //product.FCLKilogram = 26250
            productQuote.SaleModalityID            = (int)EnumSaleModality.LocalProgramada;
            productQuote.MinimumQuantityDelivery   = 10;
            productQuote.QuantityOpenPurchaseOrder = 30000;
            productQuote.MaximumMonthsStock        = 10;

            productQuoteService.CalculateQuote(productQuote);

            // Assert
            StringAssert.Contains(productQuote.Message, "Para la modalidad Distribución con Importación a Pedido, la Cantidad Total  Orden de Compra (Kg) debe ser multiplo de la Capacidad del FCL:");
        }
Example #3
0
        public void Cuando_CalculamosCon_ModalidadVentaIndent_Entonces_CantidadMinima_DebeSer_Multiplo_CantidadFCLProductoToneladas()
        {
            // Arrange
            IProductQuoteService productQuoteService = new ProductQuoteServiceBuilder().Build();

            // Act
            ProductQuote productQuote = new ProductQuote();

            productQuote.ProductID = 2;
            //product.FCLKilogram = 26250
            //product.PositionKilogram = 1250
            productQuote.SaleModalityID            = (int)EnumSaleModality.Indent;
            productQuote.MinimumQuantityDelivery   = 30000;
            productQuote.QuantityOpenPurchaseOrder = 60000;
            productQuote.MaximumMonthsStock        = 10;

            productQuoteService.CalculateQuote(productQuote);

            // Assert
            StringAssert.Contains(productQuote.Message, "Para la modalidad Indent, la Cantidad Minima de la OC (Kg) debe ser multiplo de la capacidad del FCL");
        }
Example #4
0
        public void Cuando_CalculamosCon_ModalidadVentaLocal_Entonces_CantidadTotalDivididoCantidadEntregas_DebeSer_Multiplo_UnidadMinimaVentaProducto()
        {
            // Arrange
            IProductQuoteService productQuoteService = new ProductQuoteServiceBuilder().Build();

            // Act
            ProductQuote productQuote = new ProductQuote();

            productQuote.ProductID = 2;
            //product.FCLKilogram = 26250
            //product.PositionKilogram = 1250
            productQuote.SaleModalityID            = (int)EnumSaleModality.Local;
            productQuote.MinimumQuantityDelivery   = 1;
            productQuote.QuantityOpenPurchaseOrder = 999;
            productQuote.MaximumMonthsStock        = 10;

            productQuoteService.CalculateQuote(productQuote);

            // Assert
            StringAssert.Contains(productQuote.Message, "La Cantidad Total  Orden de Compra (Kg) debe ser multiplo de Unidad Mínima de Venta del Producto");
        }
Example #5
0
        public void Cuando_CalculamosConMargenUSD_DeberiaCalcularOK()
        {
            // Arrange
            IProductQuoteService productQuoteService = new ProductQuoteServiceBuilder().Build();
            ProductQuote         productQuote        = new ProductQuote();

            productQuote.CustomerCompany     = "Empresa Cliente";
            productQuote.CustomerContactMail = "*****@*****.**";
            productQuote.CustomerContactName = "Contacto Cliente";
            productQuote.CustomerID          = 9;
            productQuote.CostoFinancieroMensual_PorITEM_Formula = "";
            productQuote.CustomerName   = "";
            productQuote.DeliveryAmount = 1;
            productQuote.ExchangeTypeID = 1;
            productQuote.ExchangeTypeLargeDescription = "Con variación Tipo Cambio";
            productQuote.ExchangeTypeName             = "Dólares";
            productQuote.ExpressCalc = true;
            productQuote.FreightType = "0";

            productQuote.GVD_CostoAlmacenamientoMensual = 400;
            productQuote.GVD_CostoFinancieroMensual     = 1;
            productQuote.GVD_CostoInOut = 800;
            productQuote.GVD_DiasStockPromedioDistLocal       = 60;
            productQuote.GVD_FactorCostoAlmacenamientoMensual = 2;
            productQuote.GVD_GastosFijos = 5;
            productQuote.GVD_TipoCambio  = 72;

            productQuote.GeographicAreaID              = 7;
            productQuote.GeographicAreaName            = "A Retirar";
            productQuote.IsSellerUser                  = true;
            productQuote.LeyendaCalculoCostoTransporte = "";
            productQuote.MargenNetoEntidadOrigen       = "0";

            //MARGEN USD INPUT
            //productQuote.MargenUSDInput = (decimal)1.6;
            productQuote.MargenUSDInput = (decimal)44800;

            productQuote.MaximumMonthsStock             = 0;
            productQuote.Message                        = "";
            productQuote.MinimumQuantityDelivery        = 28000;
            productQuote.PaymentDeadlineID              = 1;
            productQuote.PaymentDeadlineMonths          = 0;
            productQuote.PaymentDeadlineName            = "Contado Anticipado";
            productQuote.ProductBrandName               = "Porfertil ";
            productQuote.ProductBuyAndSellDirect        = true;
            productQuote.ProductFCLKilogram             = "28000";
            productQuote.ProductID                      = 1032;
            productQuote.ProductInOutStorage            = false;
            productQuote.ProductName                    = "Urea Industrial Premium - Porfertil  - Granel";
            productQuote.ProductPackagingID             = 5;
            productQuote.ProductPackagingName           = "Granel";
            productQuote.ProductProviderName            = "Profertil S.A.";
            productQuote.ProductProviderPaymentDeadline = 30;
            productQuote.ProductSellerCompanyName       = "Inquimex S.A";
            productQuote.ProductSingleName              = "Urea Industrial Premium";
            productQuote.ProductValidityOfPrice         = new DateTime(2022, 8, 1);
            productQuote.ProductValidityOfPriceInput    = new DateTime(2021, 3, 26);
            productQuote.ProductWaste                   = 0;
            productQuote.QuantityOpenPurchaseOrder      = 28000;
            productQuote.SaleModalityID                 = 1;
            productQuote.SaleModalityName               = "Distribución Local";
            productQuote.SalesChannelID                 = 3;
            productQuote.TiempoMedioStockDias_Formula   = "";
            productQuote.UserFullName                   = "Administrador";
            productQuote.UserId = "c2fbb2e1-52d4-4f79-b66b-e35ad3958a36";
            productQuote.WorkingCapital_Formula = "";

            // Act
            productQuoteService.CalculateQuote(productQuote);

            // Assert
            double precision = 1e-6;

            Assert.AreEqual(0.374d, (double)productQuote.CostoProducto_PorTON, precision);
            Assert.AreEqual(0.4155555555555555555555555556d, (double)productQuote.CustomerTotalCost, precision);
            Assert.AreEqual(0.374d, (double)productQuote.CostoProducto_PorTON, precision);
            Assert.AreEqual(0.0230864197530864197530864198d, (double)productQuote.GastosFijos_PorTON, precision);
            Assert.AreEqual(5.0d, (double)productQuote.IIBBAlicuota_PorITEM, precision);
            Assert.AreEqual(0.0230864197530864197530864198d, (double)productQuote.IIBBAlicuota_PorTON, precision);
            Assert.AreEqual(79.38d, (double)productQuote.MargenNetoOriginalPorc_PorTON, precision);

            Assert.AreEqual(1.6d, (double)productQuote.MargenNetoOriginalUSD_PorTON, precision);
            Assert.AreEqual(79.38d, (double)productQuote.MargenNetoPORCRofex, precision);


            Assert.AreEqual(10.0d, (double)productQuote.MargenNetoPorc_PorTON, precision);
            Assert.AreEqual(1.6d, (double)productQuote.MargenNetoUSDRofex, precision);


            Assert.AreEqual(1.6d, (double)productQuote.MargenNetoUSD_PorTON, precision);
            Assert.AreEqual(2.0155555555555555555555555556d, (double)productQuote.PrecioVentaRofex, precision);
            Assert.AreEqual(2.0155555555555555555555555556d, (double)productQuote.Price, precision);
            Assert.AreEqual(2.0155555555555555555555555556d, (double)productQuote.PriceOriginal, precision);
        }
Example #6
0
        public void Cuando_CalculamosCon_ModalidadVentaLocal_TodoOK()
        {
            // Arrange
            ProductQuoteServiceBuilder builder             = new ProductQuoteServiceBuilder();
            IProductQuoteService       productQuoteService = builder.Build();

            IProductRepository  productRepository  = builder.ProductRepositoryCreate();
            ICustomerRepository customerRepository = builder.CustomerRepositoryCreate();

            // Act
            ProductQuote productQuote = new ProductQuote();
            Product      product      = productRepository.FindProductsByID(5);    //5: Agua Amoniacal 28%
            Customer     customer     = customerRepository.FindCustomersByID(22); //22: Agrofacil S.A.

            //Producto
            SetProductToProductQuote(productQuote, product);

            //Cliente
            SetCustomerToProductQuote(productQuote, customer);

            //Modalidad de Venta
            productQuote.SaleModalityID   = (int)EnumSaleModality.Local; //Distribucion Local
            productQuote.SaleModalityName = "Distribución Local";

            //Lugar de Entrega
            productQuote.GeographicAreaID   = 7; //A Retirar
            productQuote.GeographicAreaName = "A Retirar";

            //Condicion de Pago
            productQuote.PaymentDeadlineID   = 1; //Contado Anticipado
            productQuote.PaymentDeadlineName = "Contado Anticipado";

            //Cantidad Total Orden Compra (Kg)
            productQuote.QuantityOpenPurchaseOrder = 28000;

            //Cantidad de Entregas
            productQuote.DeliveryAmount = 1; //1 Entrega

            //Cantidad Minima por Entrega (Kg)
            productQuote.MinimumQuantityDelivery = 28000;

            //Máximo Tiempo en Stock (Meses)
            productQuote.MaximumMonthsStock = 0; //Entrega Inmediata

            //Moneda de la Operación
            productQuote.ExchangeTypeID               = 1; //Dolares
            productQuote.ExchangeTypeName             = "Dólares";
            productQuote.ExchangeTypeLargeDescription = "Con variación Tipo Cambio";

            productQuote.MargenNetoEntidadOrigen = "0";

            productQuote.GVD_CostoAlmacenamientoMensual = 400;
            productQuote.GVD_CostoFinancieroMensual     = 1;
            productQuote.GVD_CostoInOut = 800;
            productQuote.GVD_DiasStockPromedioDistLocal       = 60;
            productQuote.GVD_FactorCostoAlmacenamientoMensual = 2;
            productQuote.GVD_GastosFijos           = 5;
            productQuote.GVD_IIBBAlicuota          = 0;
            productQuote.GVD_ImpuestoDebitoCredito = 0;
            productQuote.GVD_TipoCambio            = 72;


            //Inicializaciones
            productQuote.FreightType = "0";
            productQuote.CostoFinancieroMensual_PorITEM_Formula = "";

            productQuote.IsSellerUser             = true;
            productQuote.ProductSellerCompanyName = "Inquimex S.A";

            var jsonProductQuotePre = Newtonsoft.Json.JsonConvert.SerializeObject(productQuote);

            System.Diagnostics.Debug.WriteLine("PRE: " + jsonProductQuotePre);

            productQuoteService.CalculateQuote(productQuote);

            var jsonProductQuotePost = Newtonsoft.Json.JsonConvert.SerializeObject(productQuote);

            System.Diagnostics.Debug.WriteLine("POST: " + jsonProductQuotePost);

            // Assert
            Assert.IsFalse(productQuote.Price <= 0);
        }