public GeographicAreaTransportTypeViewModel(GeographicAreaTransportType geographicAreaTransportType)
 {
     this.GeographicAreaTransportTypeID = geographicAreaTransportType.GeographicAreaTransportTypeID;
     this.GeographicAreaID         = geographicAreaTransportType.GeographicAreaID;
     this.GeographicAreaName       = geographicAreaTransportType.GeographicArea.Name;
     this.TransportTypeID          = geographicAreaTransportType.TransportTypeID;
     this.TransportTypeDescription = geographicAreaTransportType.TransportType.Description;
     this.FreightCost = geographicAreaTransportType.FreightCost;
 }
예제 #2
0
        public decimal GetFleteFRMT_PorItem(ProductQuote productQuote, Product product)
        {
            ///transportCost: Transporte: Según tabla en función a la cantidad mínima por entrega. Si retira cliente es cero. Luego será transporte
            ///chico, chasis o semi en función a la cantidad (tiene que poder cambiarse la cantidad porque depende del costo de transporte tbn
            ///(a veces te conviene más dos chasis que un semi). Siempre que el envase del producto sea granel liquido o solido, el transporte será el
            ///correspondiente (y tendrá ese costo)
            ///
            ///Compra Total = 140 ton
            ///Entrega Min = 30 ton
            ///Son 4 entregas de 30 ton + 1 entrega de 20 ton
            ///Para las primeras 4 entregas se utilizan en cada una: un Semi de 26 posiciones y uno de 4 posiciones
            ///y para la ultima entrega un Semi de 26 posiciones.
            ///(Semi26 + Semi4) * 4 + (Semi26) = 43.200 ?????

            GeographicAreaTransportType        transportType      = null;
            List <GeographicAreaTransportType> transportTypeList  = new List <GeographicAreaTransportType>();
            List <GeographicAreaTransportType> transportTypeList2 = new List <GeographicAreaTransportType>();
            int totalQty       = productQuote.QuantityOpenPurchaseOrder;
            int deliveryQty    = productQuote.MinimumQuantityDelivery;
            int deliveryEntire = totalQty / deliveryQty;
            int deliveryRest   = totalQty % deliveryQty;
            int rest           = deliveryQty;
            int rest2          = deliveryRest;

            //Recuperamos los Tipos de Transporte filtrados por Tipo de Carga y por Area Geografica
            IEnumerable <GeographicAreaTransportType> transportList = GetAllTransportTypesOrdered(productQuote.GeographicAreaID, product.FreightTypeID);

            //Si no existen tranportes, devuelve costo 0 (cero), la leyenda interna 'NO SE ENCONTRO FLETE' y la leyenda al usuario: 'Esta cotización no incluye el costo del flete, el cual deberá considerarse por separado'
            if (!transportList.Any())
            {
                productQuote.LeyendaCalculoCostoTransporte = "NO SE ENCONTRO FLETE";
                //productQuote.Observations = "Esta cotización no incluye el costo del flete, el cual deberá considerarse por separado.";
                return(0);
            }

            //Si encontro fletes, va sumando fletes por cada MinimumQuantityDelivery hasta completar la OC
            while (rest > 0)
            {
                transportType = SearchTransportType(transportList, deliveryQty, ref rest);
                if ((transportType == null) && (transportTypeList.Count == 0))
                {
                    productQuote.LeyendaCalculoCostoTransporte = "NO SE ENCONTRO FLETE";
                    //productQuote.Observations = "Esta cotización no incluye el costo del flete, el cual deberá considerarse por separado.";
                    return(0);
                }
                transportTypeList.Add(transportType);
                deliveryQty = rest;
            }

            decimal deliveryCost    = GetDeliveryCost(transportTypeList);
            decimal deliveryCostAll = deliveryCost * deliveryEntire;


            //falta calcular el rest de totalQty / deliveryQty
            while (rest2 > 0)
            {
                transportType = SearchTransportType(transportList, deliveryRest, ref rest2);
                transportTypeList2.Add(transportType);
                deliveryRest = rest2;
            }

            decimal costodeliveryRest = GetDeliveryCost(transportTypeList2);
            decimal totalResult       = deliveryCostAll + costodeliveryRest;

            productQuote.LeyendaCalculoCostoTransporte = CaptionFreightCalculation("Entrega Individual", transportTypeList) + "]*" + deliveryEntire + CaptionFreightCalculation("Entrega rest", transportTypeList2);

            return(totalResult);
        }
예제 #3
0
        public GeographicAreaTransportType CreateGeographicAreaTransportType(GeographicAreaTransportType geographicAreaTransportType)
        {
            geographicAreaTransportTypeRepository.Create(geographicAreaTransportType);

            return(geographicAreaTransportType);
        }