コード例 #1
0
        public void EscribirSolicitudRetiro(DataSet dsSolicitudRetiro, DataSet dsOrdenRetiro,
                                            DataSet dsOrdenRetiroConceptoFacturable, DataSet dsDestinatario, DataSet dsDomicilio,
                                            DataSet dsDomicilioCliente, DataSet dsRemitente, DataSet dsDomicilioRemitente)
        {
            using (SqlConnection conexion = new SqlConnection())
            {
                SqlTransaction transaccion = null;
                conexion.ConnectionString = Config.ConnectionString;

                System.Globalization.CultureInfo culture = System.Globalization.CultureInfo.InvariantCulture;

                try
                {
                    conexion.Open();
                    transaccion = conexion.BeginTransaction();

                    int domicilioClienteID = 0;
                    int clienteID          = 0;
                    int destinatarioID     = 0;
                    int solicitudRetiroID  = 0;
                    int remitenteID        = 0;

                    // Obtengo los datos de la solicitud
                    foreach (System.Data.DataRow dr in dsSolicitudRetiro.Tables[0].Rows)
                    {
                        solicitudRetiroID = Utiles.Validaciones.obtieneEntero(dr["SolicitudRetiroID"].ToString());
                        int agenciaRetiroID = Utiles.Validaciones.obtieneEntero(dr["AgenciaRetiroID"].ToString());
                        clienteID = Utiles.Validaciones.obtieneEntero(dr["ClienteID"].ToString());
                        int      estadoSolicitudRetiroID = Utiles.Validaciones.obtieneEntero(dr["EstadoSolicitudID"].ToString());
                        int      numeroSolicitud         = Utiles.Validaciones.obtieneEntero(dr["NumeroSolicitud"].ToString());
                        DateTime fechaAlta           = Convert.ToDateTime(dr["FechaAlta"]);
                        bool     esSolicitudDespacho = Convert.ToBoolean(dr["EsSolicitudDespacho"]);
                        string   observacion         = Convert.ToString(dr["Observacion"]);

                        DateTime fechaConfirmacion = DateTime.Now;
                        try
                        {
                            fechaConfirmacion = dr["FechaConfirmacion"] != null?Convert.ToDateTime(dr["FechaConfirmacion"]) : DateTime.Now;
                        }
                        catch (Exception)
                        {
                            // Necesito capturarlo ya que en algunos casos no viene...
                        }

                        domicilioClienteID = Utiles.Validaciones.obtieneEntero(dr["DomicilioClienteID"].ToString());
                        int ordenRetiroDomicilioClienteID = 0;

                        // obtengo los datos del domicilio de la solicitud de retiro
                        foreach (System.Data.DataRow drDC in dsDomicilioCliente.Tables[0].Select("DomicilioClienteID=" + domicilioClienteID.ToString()))
                        {
                            string domicilio = drDC["Domicilio"].ToString();
                            domicilioClienteID = Utiles.Validaciones.obtieneEntero(drDC["DomicilioClienteID"].ToString());
                            int localidadID = Utiles.Validaciones.obtieneEntero(drDC["LocalidadID"].ToString());

                            // Guardar domicilio del cliente
                            ordenRetiroDomicilioClienteID = Convert.ToInt32(Config.Conexion.EjecutarResultadoUnico(transaccion, "OrdenRetiroDomicilioClienteINS",
                                                                                                                   domicilioClienteID,
                                                                                                                   domicilio, localidadID));
                            break;
                        }

                        // Guardar cabecera solicitud de retiro
                        Config.Conexion.EjecutarSinResultados(transaccion, "SolicitudRetiroINS",
                                                              solicitudRetiroID, agenciaRetiroID,
                                                              clienteID, ordenRetiroDomicilioClienteID,
                                                              estadoSolicitudRetiroID,
                                                              numeroSolicitud,
                                                              fechaAlta, fechaConfirmacion, esSolicitudDespacho, observacion);

                        break;
                    }

                    // Obtengo los datos de las órdenes de retiro
                    foreach (System.Data.DataRow drOR in dsOrdenRetiro.Tables[0].Rows)
                    {
                        int    agenciaID          = Utiles.Validaciones.obtieneEntero(drOR["AgenciaID"].ToString());
                        double alto               = Convert.ToDouble(drOR["Alto"].ToString(), culture);
                        double ancho              = Convert.ToDouble(drOR["Ancho"].ToString(), culture);
                        double bultos             = Convert.ToDouble(drOR["Bultos"].ToString(), culture);
                        double largo              = Convert.ToDouble(drOR["Largo"]);
                        int    localidadID        = Utiles.Validaciones.obtieneEntero(drOR["LocalidadID"].ToString());
                        int    modalidadEntregaID = Utiles.Validaciones.obtieneEntero(drOR["ModalidadEntregaID"].ToString());
                        string numeroOrden        = drOR["NumeroOrden"].ToString();
                        int    ordenRetiroID      = Utiles.Validaciones.obtieneEntero(drOR["OrdenRetiroID"].ToString());
                        int    idPromocionWeb     = 0;
                        try
                        {
                            idPromocionWeb = Utiles.Validaciones.obtieneEntero(drOR["IdPromocionWeb"].ToString());
                        }
                        catch {}
                        double peso = Convert.ToDouble(drOR["Peso"].ToString(), culture);

                        /* Cálculo del peso aforado */
                        ParametroUNegocio param = new ParametroUNegocio();
                        param.UnidadNegocioID = 1;
                        param.Parametro       = SisPack.Parametro.ValorDivisionCalculoPesoAforado;
                        param.ConsultarServicio();
                        //valorDivPesoAforado: Valor por el cual se divide para encontrar el peso aforado.
                        int valorDivPesoAforado = Convert.ToInt32(param.ValorString);
                        param = null;
                        double pesoAforado = Convert.ToDouble(((alto * ancho * largo) / valorDivPesoAforado), culture);

                        int    provinciaID    = Utiles.Validaciones.obtieneEntero(drOR["ProvinciaID"].ToString());
                        int    unidadVentaID  = Utiles.Validaciones.obtieneEntero(drOR["UnidadVentaID"].ToString());
                        double valorDeclarado = Convert.ToDouble(drOR["ValorDeclarado"].ToString(), culture);
                        string destino        = drOR["Destino"].ToString();
                        solicitudRetiroID = Utiles.Validaciones.obtieneEntero(drOR["SolicitudRetiroID"].ToString());
                        destinatarioID    = Utiles.Validaciones.obtieneEntero(drOR["DestinatarioID"].ToString());
                        string remitoClienteNro = drOR["RemitoClienteNro"].ToString();
                        remitenteID = Utiles.Validaciones.obtieneEntero(drOR["RemitenteID"].ToString());
                        int ordenRetiroDomicilioID = 0;

                        // obtengo los datos del destinatario de la orden de retiro
                        foreach (System.Data.DataRow drD in dsDestinatario.Tables[0].Select("DestinatarioID = " + destinatarioID.ToString()))
                        {
                            string apellido       = drD["Apellido"].ToString();
                            int    condicionIVAID = Utiles.Validaciones.obtieneEntero(drD["CondicionIVAID"].ToString());
                            destinatarioID = Utiles.Validaciones.obtieneEntero(drD["DestinatarioID"].ToString());
                            int    domicilioID = Utiles.Validaciones.obtieneEntero(drD["DomicilioID"].ToString());
                            string nombre      = drD["Nombre"].ToString();
                            string nroCUIT     = "";
                            try
                            {
                                nroCUIT = drD["NroCUIT"] != null ? drD["NroCUIT"].ToString() : "";
                            }
                            catch (Exception)
                            {
                                // Necesito capturarlo ya que en algunos casos no viene...
                            }

                            int nroDocumento    = Utiles.Validaciones.obtieneEntero(drD["NroDocumento"].ToString());
                            int tipoDocumentoID = Utiles.Validaciones.obtieneEntero(drD["TipoDocumentoID"].ToString());

                            // obtengo los datos del domicilio del destinatario
                            foreach (System.Data.DataRow drDD in dsDomicilio.Tables[0].Select("DomicilioID = " + domicilioID.ToString()))
                            {
                                bool   baja     = Convert.ToBoolean(drDD["Baja"]);
                                string calle    = drDD["Calle"].ToString();
                                string calleNro = drDD["CalleNro"].ToString();

                                string depto = "";
                                try
                                {
                                    depto = drDD["Dept"] != null ? drDD["Depto"].ToString() : "";
                                }
                                catch (Exception)
                                {
                                    // Necesito capturarlo ya que en algunos casos no viene...
                                }

                                string esEventual = drDD["EsEventual"].ToString();

                                string fax = "";
                                try
                                {
                                    fax = drDD["Fax"] != null ? drDD["Fax"].ToString() : "";
                                }
                                catch (Exception)
                                {
                                    // Necesito capturarlo ya que en algunos casos no viene...
                                }

                                int    localidadDomID = Utiles.Validaciones.obtieneEntero(drDD["LocalidadID"].ToString());
                                string telefono       = drDD["Telefono"].ToString();

                                ordenRetiroDomicilioID = Convert.ToInt32(Config.Conexion.EjecutarResultadoUnico(transaccion, "OrdenRetiroDomicilioINS",
                                                                                                                domicilioID, calle, calleNro, depto, esEventual, fax, localidadDomID,
                                                                                                                telefono));

                                break;
                            }

                            destinatarioID = Convert.ToInt32(Config.Conexion.EjecutarResultadoUnico(transaccion, "DestinatarioINS", destinatarioID, ordenRetiroID,
                                                                                                    apellido, condicionIVAID, nombre, Utiles.BaseDatos.StrToSql(nroCUIT),
                                                                                                    nroDocumento, tipoDocumentoID, ordenRetiroDomicilioID));
                        }

                        // obtengo los datos del remitente de la orden de retiro
                        foreach (System.Data.DataRow drR in dsRemitente.Tables[0].Select("RemitenteID = " + remitenteID.ToString()))
                        {
                            string apellido       = drR["Apellido"].ToString();
                            int    condicionIVAID = Utiles.Validaciones.obtieneEntero(drR["CondicionIVAID"].ToString());
                            remitenteID = Utiles.Validaciones.obtieneEntero(drR["RemitenteID"].ToString());
                            int    domicilioID = Utiles.Validaciones.obtieneEntero(drR["DomicilioID"].ToString());
                            string nombre      = drR["Nombre"].ToString();
                            string nroCUIT     = "";
                            try
                            {
                                nroCUIT = drR["NroCUIT"] != null ? drR["NroCUIT"].ToString() : "";
                            }
                            catch (Exception)
                            {
                                // Necesito capturarlo ya que en algunos casos no viene...
                            }

                            int nroDocumento    = Utiles.Validaciones.obtieneEntero(drR["NroDocumento"].ToString());
                            int tipoDocumentoID = Utiles.Validaciones.obtieneEntero(drR["TipoDocumentoID"].ToString());

                            // obtengo los datos del domicilio del remitente
                            foreach (System.Data.DataRow drDR in dsDomicilioRemitente.Tables[0].Select("DomicilioID = " + domicilioID.ToString()))
                            {
                                bool   baja     = Convert.ToBoolean(drDR["Baja"]);
                                string calle    = drDR["Calle"].ToString();
                                string calleNro = drDR["CalleNro"].ToString();

                                string depto = "";
                                try
                                {
                                    depto = drDR["Dept"] != null ? drDR["Depto"].ToString() : "";
                                }
                                catch (Exception)
                                {
                                    // Necesito capturarlo ya que en algunos casos no viene...
                                }

                                string esEventual = drDR["EsEventual"].ToString();

                                string fax = "";
                                try
                                {
                                    fax = drDR["Fax"] != null ? drDR["Fax"].ToString() : "";
                                }
                                catch (Exception)
                                {
                                    // Necesito capturarlo ya que en algunos casos no viene...
                                }

                                int    localidadDomID = Utiles.Validaciones.obtieneEntero(drDR["LocalidadID"].ToString());
                                string telefono       = drDR["Telefono"].ToString();

                                ordenRetiroDomicilioID = Convert.ToInt32(Config.Conexion.EjecutarResultadoUnico(transaccion, "OrdenRetiroDomicilioINS",
                                                                                                                domicilioID, calle, calleNro, depto, esEventual, fax, localidadDomID,
                                                                                                                telefono));

                                break;
                            }

                            remitenteID = Convert.ToInt32(Config.Conexion.EjecutarResultadoUnico(transaccion, "RemitenteINS", remitenteID, ordenRetiroID,
                                                                                                 apellido, condicionIVAID, nombre, Utiles.BaseDatos.StrToSql(nroCUIT),
                                                                                                 nroDocumento, tipoDocumentoID, ordenRetiroDomicilioID));
                        }

                        Config.Conexion.EjecutarSinResultados(transaccion, "OrdenRetiroINS",
                                                              ordenRetiroID, numeroOrden,
                                                              agenciaID, alto, ancho,
                                                              bultos, largo, localidadID, modalidadEntregaID, peso,
                                                              provinciaID, unidadVentaID, valorDeclarado, solicitudRetiroID,
                                                              clienteID, destinatarioID, destino, pesoAforado, remitoClienteNro, remitenteID, idPromocionWeb);

                        // obtengo los datos de los conceptos facturables de la orden actual
                        foreach (System.Data.DataRow drORC in dsOrdenRetiroConceptoFacturable.Tables[0].Select("OrdenRetiroID = " + ordenRetiroID.ToString()))
                        {
                            double importeCR      = Convert.ToDouble(drORC["ImporteCR"].ToString(), culture);
                            double importeEntrega = Convert.ToDouble(drORC["ImporteEntrega"].ToString(), culture);
                            double importeFlete   = Convert.ToDouble(drORC["ImporteFlete"].ToString(), culture);
                            double importeIVA     = Convert.ToDouble(drORC["ImporteIVA"].ToString(), culture);
                            double importeNeto    = Convert.ToDouble(drORC["ImporteNeto"].ToString(), culture);
                            double importeRetiro  = Convert.ToDouble(drORC["ImporteRetiro"].ToString(), culture);
                            double importeSeguro  = Convert.ToDouble(drORC["ImporteSeguro"].ToString(), culture);
                            double importeTotal   = Convert.ToDouble(drORC["ImporteTotal"].ToString(), culture);

                            Config.Conexion.EjecutarSinResultados(transaccion, "OrdenRetiroConceptoFacturableINS",
                                                                  ordenRetiroID, importeCR, importeEntrega, importeFlete, importeIVA,
                                                                  importeNeto, importeRetiro, importeSeguro, importeTotal);

                            break;
                        }
                    }

                    // Marco como procesada la solicitud que estaba pendiente de procesar.
                    Config.Conexion.EjecutarSinResultados(transaccion, "SolicitudProcesadaUPD",
                                                          solicitudRetiroID);

                    string        dirXML = System.Configuration.ConfigurationSettings.AppSettings["dirsolicitudesProcesadas"];
                    DirectoryInfo dir    = new DirectoryInfo(dirXML);
                    Mover(solicitudRetiroID + "S.xml", dir);
                    Mover(solicitudRetiroID + "OR.xml", dir);
                    Mover(solicitudRetiroID + "ORC.xml", dir);
                    Mover(solicitudRetiroID + "D.xml", dir);
                    Mover(solicitudRetiroID + "DS.xml", dir);
                    Mover(solicitudRetiroID + "DC.xml", dir);
                    Mover(solicitudRetiroID + "R.xml", dir);
                    Mover(solicitudRetiroID + "DR.xml", dir);

                    culture = null;

                    transaccion.Commit();
                }
                catch (Exception ex)
                {
                    transaccion.Rollback();
                    throw ex;
                }
            }
        }