/// <summary>
        /// Actualiza el campo 'Total facturas' de la lista 'Almacén'
        /// </summary>
        /// <param name="elItem"></param>
        private void ActualizarTotalFacturas(SPListItem itemAlmacen)
        {
            double totalFacturas = 0;

            SPQuery consulta = new SPQuery();

            consulta.Query = "<Where><Eq><FieldRef Name='Almac_x00e9_n_x0020_asociado_x00' />" +
                             "<Value Type='Text'>" + itemAlmacen.ID + "</Value></Eq></Where>";
            SPListItemCollection itemsFacturas =
                itemAlmacen.Web.Lists[LISTA_FACTURAS].GetItems(consulta);

            foreach (SPListItem itemFactura in itemsFacturas)
            {
                totalFacturas = totalFacturas +
                                double.Parse(itemFactura["Total factura"].ToString());
            }

            itemAlmacen["Total facturas"] = totalFacturas;
            using (DisabledItemEventsScope scope = new DisabledItemEventsScope())
            {
                try
                {
                    itemAlmacen.Web.AllowUnsafeUpdates = true;
                    itemAlmacen.SystemUpdate();
                }
                finally
                {
                    itemAlmacen.Web.AllowUnsafeUpdates = false;
                }
            }
        }
        /// <summary>
        /// Actualiza el campo 'Total factura' de la lista 'Facturas'
        /// </summary>
        /// <param name="elItem"></param>
        private void ActualizarTotalFactura(SPListItem itemFactura)
        {
            double totalFactura = 0;

            SPQuery consulta = new SPQuery();

            consulta.Query = "<Where><Eq><FieldRef Name='Factura_x0020_asociada_x003a_ID' />" +
                             "<Value Type='Text'>" + itemFactura.ID + "</Value></Eq></Where>";
            SPListItemCollection itemsPedidos =
                itemFactura.Web.Lists[LISTA_ITEMS_PEDIDOS].GetItems(consulta);

            foreach (SPListItem itemPedido in itemsPedidos)
            {
                totalFactura = totalFactura +
                               double.Parse(SubcadenaDespues(itemPedido["Precio extendido"]).Replace('.', ','));
            }

            itemFactura["Total factura"] = totalFactura;
            using (DisabledItemEventsScope scope = new DisabledItemEventsScope())
            {
                try
                {
                    itemFactura.Web.AllowUnsafeUpdates = true;
                    itemFactura.SystemUpdate();
                }
                finally
                {
                    itemFactura.Web.AllowUnsafeUpdates = false;
                }
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Redistribuye (prorratea) los costos definidos al envio
        /// para cada ítem pedido asociado
        /// </summary>
        /// <param name="itemEnvio"></param>
        private void RedistribuirCostosEnvio(SPListItem itemEnvio)
        {
            SPList listaParametros   = itemEnvio.Web.Lists[LISTA_PARAMETROS];
            SPList listaFacturas     = itemEnvio.Web.Lists[LISTA_FACTURAS];
            SPList listaAlmacen      = itemEnvio.Web.Lists[LISTA_ALMACEN];
            SPList listaItemsPedidos = itemEnvio.Web.Lists[LISTA_ITEMS_PEDIDOS];

            bool prorrateoConArancel = true;

            #region Obtener el tipo de prorrateo
            SPQuery consultaParam = new SPQuery();
            consultaParam.Query = "<Where><Eq><FieldRef Name='Title' />" +
                                  "<Value Type='Text'>" + PARAMETRO_TITULO + "</Value></Eq></Where>";
            SPListItemCollection itemsParametros = listaParametros.GetItems(consultaParam);

            if (itemsParametros.Count != 0 &&
                itemsParametros[0]["Valor parámetro"].ToString() == PARAMETRO_VALOR)
            {
                prorrateoConArancel = false;
            }
            #endregion

            #region Distribuir (prorratear) costos
            double totalEnvio         = 0;
            double costoFletes        = 0;
            double costoAranceles     = 0;
            double costoAduana        = 0;
            double costoTransportador = 0;
            double costoOtros         = 0;

            totalEnvio = this.ObtenerTotalDelEnvio(itemEnvio);
            if (itemEnvio["Costo fletes"] != null)
            {
                costoFletes = double.Parse(itemEnvio["Costo fletes"].ToString());
            }
            if (itemEnvio["Costo aranceles"] != null)
            {
                costoAranceles = double.Parse(itemEnvio["Costo aranceles"].ToString());
            }
            if (itemEnvio["Costo aduana"] != null)
            {
                costoAduana = double.Parse(itemEnvio["Costo aduana"].ToString());
            }
            if (itemEnvio["Costo transportador"] != null)
            {
                costoTransportador = double.Parse(itemEnvio["Costo transportador"].ToString());
            }
            if (itemEnvio["Costo otros"] != null)
            {
                costoOtros = double.Parse(itemEnvio["Costo otros"].ToString());
            }

            SPFieldLookupValueCollection almacenesAsociados =
                (SPFieldLookupValueCollection)itemEnvio["Almacenes asociados"];

            foreach (SPFieldLookupValue almacenAsociado in almacenesAsociados)
            {
                SPListItem elAlmacen =
                    listaAlmacen.GetItemByIdSelectedFields(almacenAsociado.LookupId,
                                                           "Facturas_x0020_asociadas");
                SPFieldLookupValueCollection facturasAsociadas =
                    (SPFieldLookupValueCollection)elAlmacen["Facturas asociadas"];

                foreach (SPFieldLookupValue facturaAsociada in facturasAsociadas)
                {
                    SPListItem laFactura =
                        listaFacturas.GetItemByIdSelectedFields(facturaAsociada.LookupId,
                                                                "_x00cd_tems_x0020_asociados");
                    SPFieldLookupValueCollection itemsAsociados =
                        (SPFieldLookupValueCollection)laFactura["Ítems asociados"];

                    foreach (SPFieldLookupValue itemAsociado in itemsAsociados)
                    {
                        SPListItem itemPedido = listaItemsPedidos.GetItemByIdSelectedFields(
                            itemAsociado.LookupId, "Costo_x0020_fletes", "Costo_x0020_aranceles",
                            "Costo_x0020_aduana", "Costo_x0020_transportador", "Costo_x0020_otros",
                            "Precio_x0020_extendido", "Item_x0020_asociado");
                        double precioItem =
                            double.Parse(SubcadenaDespues(itemPedido["Precio extendido"]).Replace('.', ','));
                        double porcentajeArancel = this.ObtenerPorcentajeArancel(itemPedido);

                        if (prorrateoConArancel)
                        {//TODO Prorrateo con aranceles, verificar el calculo
                            itemPedido["Costo fletes"] =
                                this.AplicarProrrateoConArancelFletes(precioItem, totalEnvio, costoFletes);
                            itemPedido["Costo aranceles"] =
                                this.AplicarProrrateoConArancelAranceles(precioItem, totalEnvio, costoFletes, porcentajeArancel);
                            itemPedido["Costo aduana"] =
                                this.AplicarProrrateoConArancelAduana(precioItem, totalEnvio, costoAduana, costoFletes);
                            itemPedido["Costo transportador"] =
                                this.AplicarProrrateoConArancelTransp(precioItem, totalEnvio, costoTransportador, costoFletes);
                            itemPedido["Costo otros"] =
                                this.AplicarProrrateoConArancelOtros(precioItem, totalEnvio, costoOtros, costoFletes);
                        }
                        else
                        {//Prorrateo sin aranceles
                            itemPedido["Costo fletes"] =
                                this.AplicarProrrateoSinArancel(precioItem, totalEnvio, costoFletes);
                            itemPedido["Costo aranceles"] =
                                this.AplicarProrrateoSinArancel(precioItem, totalEnvio, costoAranceles);
                            itemPedido["Costo aduana"] =
                                this.AplicarProrrateoSinArancel(precioItem, totalEnvio, costoAduana);
                            itemPedido["Costo transportador"] =
                                this.AplicarProrrateoSinArancel(precioItem, totalEnvio, costoTransportador);
                            itemPedido["Costo otros"] =
                                this.AplicarProrrateoSinArancel(precioItem, totalEnvio, costoOtros);
                        }

                        using (DisabledItemEventsScope scope = new DisabledItemEventsScope())
                        {
                            try
                            {
                                itemPedido.Web.AllowUnsafeUpdates = true;
                                itemPedido.Update();
                            }
                            finally
                            {
                                itemPedido.Web.AllowUnsafeUpdates = false;
                            }
                        }
                    }
                }
            }
            #endregion
        }