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; } } }