Ejemplo n.º 1
0
        /// <summary>
        /// Valida que existan los parametros de la factura para generarla
        /// </summary>
        /// <param name="organizacionId"></param>
        /// <returns></returns>
        public void ValidarDatosDeConfiguracion(int organizacionId)
        {
            try
            {
                Logger.Info();
                var parametrosBl = new ParametroOrganizacionBL();
                var parametroInfo = parametrosBl.ObtenerPorOrganizacionIDClaveParametro(organizacionId,
                    ParametrosEnum.SerieFactura.ToString());

                if (parametroInfo != null)
                {
                    parametroInfo = parametrosBl.ObtenerPorOrganizacionIDClaveParametro(organizacionId,
                        ParametrosEnum.FolioFactura.ToString());

                    if (parametroInfo != null)
                    {
                        parametroInfo = parametrosBl.ObtenerPorOrganizacionIDClaveParametro(organizacionId,
                            ParametrosEnum.SELLER_ID.ToString());

                        if (parametroInfo != null)
                        {
                            parametroInfo = parametrosBl.ObtenerPorOrganizacionIDClaveParametro(organizacionId,
                                ParametrosEnum.SHIP_FROM.ToString());

                            if (parametroInfo == null)
                            {
                                throw new ExcepcionServicio(
                                    Properties.ResourceServices.FacturaElectronica_MensajeErrorAlGenerarFactura);
                            }
                        }
                        else
                        {
                            throw new ExcepcionServicio(
                                Properties.ResourceServices.FacturaElectronica_MensajeErrorParametros);
                        }
                    }
                    else
                    {
                        throw new ExcepcionServicio(
                            Properties.ResourceServices.FacturaElectronica_MensajeErrorFolioFactura);
                    }
                }
                else
                {
                    throw new ExcepcionServicio(Properties.ResourceServices.FacturaElectronica_MensajeErrorSerie);
                }
            }
            catch (ExcepcionServicio ex)
            {
                Logger.Error(ex);
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
Ejemplo n.º 2
0
        internal FacturaInfo ObtenerDatosDeFacturacionSalidaVentaTransito(FacturaInfo facturaInfo, int organizacionId)
        {
            try
            {
                Logger.Info();

                if (facturaInfo != null)
                {
                    var parametrosBl = new ParametroOrganizacionBL();

                    var ruta = parametrosBl.ObtenerPorOrganizacionIDClaveParametro(organizacionId, ParametrosEnum.RutaCFDI.ToString());

                    if (ruta != null)
                    {
                        var parametroInfo = parametrosBl.ObtenerPorOrganizacionIDClaveParametro(organizacionId,
                            ParametrosEnum.SerieFactura.ToString());

                        if (parametroInfo != null)
                        {
                            parametroInfo = parametrosBl.ObtenerPorOrganizacionIDClaveParametro(organizacionId,
                                ParametrosEnum.SELLER_ID.ToString());

                            if (parametroInfo != null)
                            {
                                facturaInfo.SellerId = parametroInfo.Valor;

                                parametroInfo = parametrosBl.ObtenerPorOrganizacionIDClaveParametro(organizacionId,
                                    ParametrosEnum.SHIP_FROM.ToString());

                                if (parametroInfo != null)
                                {
                                    facturaInfo.ShipFrom = parametroInfo.Valor;
                                    facturaInfo.BuyerId = facturaInfo.DatosCliente.PartyId;
                                    facturaInfo.ShipTo = facturaInfo.DatosCliente.PartyId;
                                }
                                else
                                {
                                    throw new ExcepcionServicio(
                                        Properties.ResourceServices.FacturaElectronica_MensajeErrorParametros);
                                }
                            }
                            else
                            {
                                throw new ExcepcionServicio(
                                    Properties.ResourceServices.FacturaElectronica_MensajeErrorParametros);
                            }
                        }
                        else
                        {
                            throw new ExcepcionServicio(
                                Properties.ResourceServices.FacturaElectronica_MensajeErrorFolioFactura);
                        }
                    }
                    else
                    {
                        throw new ExcepcionServicio(Properties.ResourceServices.FacturaElectronica_MensajeErrorSerie);
                    }
                }
                else
                {
                    throw new ExcepcionServicio(
                        Properties.ResourceServices.FacturaElectronica_MensajeErrorAlConsultarDatos);
                }

                return facturaInfo;
            }
            catch (ExcepcionServicio ex)
            {
                Logger.Error(ex);
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Genera la factura en la ruta especificada
        /// </summary>
        /// <param name="datosFactura"></param>
        /// <param name="organizacionId"></param>
        internal void GenerarFactura(FacturaInfo datosFactura, int organizacionId)
        {
            var doc = new XDocument(new XDeclaration("1.0", "ISO-8859-1", ""));
            try
            {
                var parametrosBl = new ParametroOrganizacionBL();
                var parametroInfo = parametrosBl.ObtenerPorOrganizacionIDClaveParametro(organizacionId, ParametrosEnum.RutaCFDI.ToString());

                if (parametroInfo != null)
                {
                    string rutaRepositorio = parametroInfo.Valor;

                    if (datosFactura != null && rutaRepositorio != "")
                    {
                        doc.Add(
                            new XElement("TRANSACTIONS", new XAttribute("EMITER", "VIZ-MPEIRO"),
                                new XElement("TRANSACTION",
                                    new XElement("SERIE", datosFactura.Serie),
                                    new XElement("TRX_NUMBER", datosFactura.TrxNumber),
                                    new XElement("CUST_TRX_TYPE_ID", datosFactura.TipoCliente),
                                    new XElement("TRX_DATE", datosFactura.FechaFactura),
                                    new XElement("BILL_TO_CUSTOMER",
                                        new XElement("PARTY",
                                            new XElement("CODIGO_CLIENTE", datosFactura.DatosDeEnvio.CodigoCliente),
                                            new XElement("PARTY_ID", datosFactura.DatosDeEnvio.PartyId),
                                            datosFactura.DatosDeEnvio.Nombre == null
                                                ? new XElement("PARTY_NAME")
                                                : new XElement("PARTY_NAME",
                                                    new XCData(datosFactura.DatosDeEnvio.Nombre)),
                                            new XElement("PARTY_TYPE", datosFactura.DatosDeEnvio.PartyType),
                                            datosFactura.DatosDeEnvio.CodigoFiscal == null
                                                ? new XElement("JGZZ_FISCAL_CODE")
                                                : new XElement("JGZZ_FISCAL_CODE",
                                                    new XCData(datosFactura.DatosDeEnvio.CodigoFiscal)),
                                            datosFactura.DatosDeEnvio.Direccion1 == null
                                                ? new XElement("ADDRESS1")
                                                : new XElement("ADDRESS1",
                                                    new XCData(datosFactura.DatosDeEnvio.Direccion1)),
                                            datosFactura.DatosDeEnvio.Direccion2 == null
                                                ? new XElement("ADDRESS2")
                                                : new XElement("ADDRESS2",
                                                    new XCData(datosFactura.DatosDeEnvio.Direccion2)),
                                            datosFactura.DatosDeEnvio.Direccion3 == null
                                                ? new XElement("ADDRESS3")
                                                : new XElement("ADDRESS3",
                                                    new XCData(datosFactura.DatosDeEnvio.Direccion3)),
                                            datosFactura.DatosDeEnvio.Direccion4 == null
                                                ? new XElement("ADDRESS4")
                                                : new XElement("ADDRESS4",
                                                    new XCData(datosFactura.DatosDeEnvio.Direccion4)),

                                            new XElement("POSTAL_CODE", datosFactura.DatosDeEnvio.CodigoPostal),
                                            datosFactura.DatosDeEnvio.Ciudad == null
                                                ? new XElement("CITY")
                                                : new XElement("CITY", new XCData(datosFactura.DatosDeEnvio.Ciudad)),
                                            datosFactura.DatosDeEnvio.Estado == null
                                                ? new XElement("STATE")
                                                : new XElement("STATE", new XCData(datosFactura.DatosDeEnvio.Estado)),
                                            datosFactura.DatosDeEnvio.Pais == null
                                                ? new XElement("COUNTRY")
                                                : new XElement("COUNTRY", new XCData(datosFactura.DatosDeEnvio.Pais)),
                                            new XElement("METODO_PAGO", datosFactura.DatosCliente.MetodoDePago),
                                            new XElement("COND_PAGO", datosFactura.DatosCliente.CondicionDePago),
                                            new XElement("DIAS_PAGO", datosFactura.DatosCliente.DiasDePago)
                                            )
                                        ),
                                    new XElement("TIPO_MONEDA", datosFactura.TipoMoneda),
                                    new XElement("TASA_DE_CAMBIO", datosFactura.TasaDeCambio),
                                    new XElement("SELLER_ID", datosFactura.SellerId),
                                    new XElement("BUYER_ID", datosFactura.BuyerId),
                                    new XElement("SHIP_FROM", datosFactura.ShipFrom),
                                    new XElement("SHIP_TO", datosFactura.ShipTo),
                                    new XElement("ACCOUNT_NUMBER", datosFactura.NumeroDeCuenta),
                                    new XElement("SHIP_TO_CUSTOMER",
                                        new XElement("PARTY",
                                            new XElement("CODIGO_CLIENTE", datosFactura.DatosDeEnvio.CodigoCliente),
                                            new XElement("PARTY_ID", datosFactura.DatosDeEnvio.PartyId),
                                            datosFactura.DatosDeEnvio.Nombre == null
                                                ? new XElement("PARTY_NAME", "")
                                                : new XElement("PARTY_NAME",
                                                    new XCData(datosFactura.DatosDeEnvio.Nombre)),
                                            new XElement("PARTY_TYPE", datosFactura.DatosDeEnvio.PartyType),
                                            datosFactura.DatosDeEnvio.CodigoFiscal == null
                                                ? new XElement("JGZZ_FISCAL_CODE")
                                                : new XElement("JGZZ_FISCAL_CODE",
                                                    new XCData(datosFactura.DatosDeEnvio.CodigoFiscal)),
                                            datosFactura.DatosDeEnvio.Direccion1 == null
                                                ? new XElement("ADDRESS1")
                                                : new XElement("ADDRESS1",
                                                    new XCData(datosFactura.DatosDeEnvio.Direccion1)),
                                            datosFactura.DatosDeEnvio.Direccion2 == null
                                                ? new XElement("ADDRESS2")
                                                : new XElement("ADDRESS2",
                                                    new XCData(datosFactura.DatosDeEnvio.Direccion2)),
                                            datosFactura.DatosDeEnvio.Direccion3 == null
                                                ? new XElement("ADDRESS3")
                                                : new XElement("ADDRESS3",
                                                    new XCData(datosFactura.DatosDeEnvio.Direccion3)),
                                            datosFactura.DatosDeEnvio.Direccion4 == null
                                                ? new XElement("ADDRESS4")
                                                : new XElement("ADDRESS4",
                                                    new XCData(datosFactura.DatosDeEnvio.Direccion4)),

                                            new XElement("POSTAL_CODE", datosFactura.DatosDeEnvio.CodigoPostal),
                                            datosFactura.DatosDeEnvio.Ciudad == null
                                                ? new XElement("CITY")
                                                : new XElement("CITY", new XCData(datosFactura.DatosDeEnvio.Ciudad)),
                                            datosFactura.DatosDeEnvio.Estado == null
                                                ? new XElement("STATE")
                                                : new XElement("STATE", new XCData(datosFactura.DatosDeEnvio.Estado)),
                                            datosFactura.DatosDeEnvio.Pais == null
                                                ? new XElement("COUNTRY")
                                                : new XElement("COUNTRY", new XCData(datosFactura.DatosDeEnvio.Pais))
                                            )
                                        ),
                                    new XElement("STATUS_FACTURA", datosFactura.EstatusFactura),
                                    new XElement("TRANSACTION_LINES",
                                        from transaction in datosFactura.ItemsFactura
                                        select new XElement("TRANSACTION_LINE",
                                            new XElement("LINE_NUMBER", transaction.LineNumber),
                                            new XElement("LINE_TYPE", transaction.LineType),
                                            new XElement("INVENTORY_ITEM_ID", transaction.InventoryItemId),
                                            new XElement("ITEM_EAN_NUMBER", transaction.ItemEanNumber),
                                            new XElement("SERIAL", transaction.Serial),
                                            new XElement("DESCRIPTION", new XCData(transaction.Description)),
                                            new XElement("QUANTITY_INVOICED", transaction.QuantityInvoiced),
                                            new XElement("QUANTITY_CREDITED", transaction.QuantityCredited),
                                            new XElement("UNIT_SELLING_PRICE", transaction.UnitSellingPrice),
                                            new XElement("UOM_CODE", transaction.UomCode),
                                            new XElement("TAX_RATE", transaction.TaxRate),
                                            new XElement("TAXABLE_AMOUNT", transaction.TaxableAmount),
                                            new XElement("PRECIO_NETO", transaction.PrecioNeto),
                                            new XElement("DESCUENTO", transaction.Descuento),
                                            new XElement("VAT_TAX_ID", transaction.VatTaxId),
                                            new XElement("CANTIDAD_BULTOS", transaction.CantidadBultos)
                                            )
                                        ),
                                    new XElement("ADDENDA", new XAttribute("TYPE", "NONE")),
                                    new XElement("COMPLEMENTO", new XAttribute("TYPE", "NONE")),
                                    new XElement("IMPRESION", new XAttribute("ORIGINAL", "1"),
                                        new XAttribute("PREFACTURA", "0"),
                                        new XAttribute("BN", "false"), new XAttribute("PRINTER", "2")),
                                    new XElement("PRINTER", new XAttribute("ROUTE", "Finanzas FE"))
                                    )
                                )
                            );
                    }
                    if (Directory.Exists(rutaRepositorio))
                    {
                        string nombreCompleto = String.Format("{0}\\{1}", rutaRepositorio, datosFactura.NombreFactura);
                        doc.Save(nombreCompleto);
                    }
                    else
                    {
                        throw new ExcepcionServicio(
                            Properties.ResourceServices.FacturaElectronica_MensajeErrorDirectorioNoExiste);
                    }
                }
                else
                {
                    throw new ExcepcionServicio(
                        Properties.ResourceServices.FacturaElectronica_MensajeErrorRutaXml);
                }
            }
            catch (ExcepcionServicio ex)
            {
                Logger.Error(ex);
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        ///     Metodo que crear una entrada de ganado
        /// </summary>
        /// <param name="entradaGanadoSobranteInfo"></param>
        internal int GuardarEntradaGanadoSobrante(EntradaGanadoSobranteInfo entradaGanadoSobranteInfo)
        {
            try
            {
                Logger.Info();
                var entradaGanadoSobranteDAL = new EntradaGanadoSobranteDAL();
                var entradaGanadoTransitoBL  = new EntradaGanadoTransitoBL();
                var parametroBL     = new ParametroOrganizacionBL();
                var animalBl        = new AnimalBL();
                int entradaGanadoID = 0;

                /* Obtener Tipo de organizacion Origen*/
                ParametrosEnum corralFaltante =
                    entradaGanadoSobranteInfo.EntradaGanado.TipoOrganizacionOrigenId ==
                    (int)TipoOrganizacion.CompraDirecta ?
                    ParametrosEnum.CORRALFALTDIRECTA :
                    ParametrosEnum.CORRALFALTPROPIO;

                /* Obtener Codigo Corral de parametroOrganizacion*/
                ParametroOrganizacionInfo parametroOrganizacionInfo =
                    parametroBL.ObtenerPorOrganizacionIDClaveParametro(
                        entradaGanadoSobranteInfo.EntradaGanado.OrganizacionID,
                        corralFaltante.ToString());

                if (parametroOrganizacionInfo != null)
                {
                    /* Obtener entradaGanadoTransitoInfo del corral faltante parametrizado*/
                    EntradaGanadoTransitoInfo entradaGanadoTransitoInfo =
                        entradaGanadoTransitoBL.ObtenerPorCorralOrganizacion(
                            parametroOrganizacionInfo.Valor,
                            entradaGanadoSobranteInfo.EntradaGanado.OrganizacionID);

                    if (entradaGanadoTransitoInfo != null && entradaGanadoTransitoInfo.Cabezas > 0)
                    {
                        /* Obtener el importe prorrateado mediante el siguiente calculo: Importe = Importe / Cabezas */
                        List <EntradaGanadoTransitoDetalleInfo> detalles = entradaGanadoTransitoInfo.EntradasGanadoTransitoDetalles;
                        for (int indexDetalle = 0; indexDetalle < detalles.Count; indexDetalle++)
                        {
                            entradaGanadoSobranteInfo.Importe = detalles[indexDetalle].Importe / entradaGanadoTransitoInfo.Cabezas;

                            /* Se almacena la entrada Ganado Sobrante*/
                            entradaGanadoID =
                                entradaGanadoSobranteDAL.GuardarEntradaGanadoSobrante(entradaGanadoSobranteInfo);

                            /* Se actuacon los datos a actualizar en la tabla entradaGanadoTransito */
                            detalles[indexDetalle].Importe = entradaGanadoSobranteInfo.Importe * -1;
                            entradaGanadoTransitoInfo.Peso = (entradaGanadoTransitoInfo.Peso /
                                                              entradaGanadoTransitoInfo.Cabezas) * -1;
                            entradaGanadoTransitoInfo.Cabezas = -1;
                            entradaGanadoTransitoInfo.UsuarioModificacionID = entradaGanadoSobranteInfo.UsuarioCreacionID;

                            /*  Al ingresar los registros sobrantes se deben descontar de los faltantes de la tabla 'EntradaGanadoTransito' */
                            entradaGanadoTransitoBL.Guardar(entradaGanadoTransitoInfo);
                        }
                        /* Actualziar el Peso Compra del Animal */
                        entradaGanadoSobranteInfo.Animal.UsuarioModificacionID = entradaGanadoSobranteInfo.UsuarioCreacionID;
                        entradaGanadoSobranteInfo.Animal.PesoCompra            = (int)entradaGanadoTransitoInfo.Peso;
                        animalBl.ActualizaPesoCompra(entradaGanadoSobranteInfo.Animal);
                    }
                    else
                    {
                        throw new ExcepcionDesconocida("No hay suficientes cabezas faltantes para cubrir las sobrantes de la partida. Favor de validar.");
                    }
                }
                else
                {
                    throw new ExcepcionDesconocida("No existe un corral de cabezas faltantes configurado. Favor de validar.");
                }
                return(entradaGanadoID);
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
Ejemplo n.º 5
0
        //const string saltoLinea = "\n";

        /// <summary>
        ///      Obtiene registros de RepartoDetalle
        /// </summary>
        /// <returns> </returns>
        public ResultadoOperacion GenerarArchivoDatalink(RepartoInfo repartoInfo, int tipoServicioID)
        {
            ResultadoOperacion resultadoOperacion;
            var parametroOrganizacionBL = new ParametroOrganizacionBL();
            var ruta    = parametroOrganizacionBL.ObtenerPorOrganizacionIDClaveParametro(repartoInfo.OrganizacionID, ParametrosEnum.rutaGenerarArchivoDatalink.ToString());
            var nombre  = parametroOrganizacionBL.ObtenerPorOrganizacionIDClaveParametro(repartoInfo.OrganizacionID, ParametrosEnum.nombreGenerarArchivoDatalink.ToString());
            var archivo = String.Format("{0}{1}", ruta.Valor, nombre.Valor);

            try
            {
                Logger.Info();
                var generarArchivoDatalinkDAL = new GenerarArchivoDatalinkDAL();
                var listadoDetalle            = generarArchivoDatalinkDAL.ObtenerDatosRepartoDetalle(repartoInfo, tipoServicioID);
                if (listadoDetalle != null)
                {
                    if (File.Exists(archivo))
                    {
                        File.Delete(archivo);
                    }

                    using (var sw = new StreamWriter(archivo))
                    {
                        var cabecero = string.Format("{0}{1}{0}", comillas, letraP);
                        sw.WriteLine(cabecero);

                        foreach (var generarArchivoDatalinkInfo in listadoDetalle)
                        {
                            var contenido = string.Format("{0}{1}{0}{2}{0}{3}{0}{2}{0}{4}{0}{2}{5}{2}{6}{2}{7}{2}{8}", comillas, generarArchivoDatalinkInfo.Servicio, coma, generarArchivoDatalinkInfo.Corral.Trim().PadLeft(numeroCaracteres, espacio), generarArchivoDatalinkInfo.Formula.ToString(CultureInfo.InvariantCulture).Trim().PadLeft(numeroCaracteres, espacio), generarArchivoDatalinkInfo.Kilos.ToString(CultureInfo.InvariantCulture).Trim().PadLeft(numeroCaracteres, espacio), generarArchivoDatalinkInfo.Cero.ToString(CultureInfo.InvariantCulture).Trim().PadLeft(numeroCaracteres, espacio), generarArchivoDatalinkInfo.Seccion, generarArchivoDatalinkInfo.Uno.ToString(CultureInfo.InvariantCulture).Trim().PadLeft(numeroCaracteres, espacio));
                            sw.WriteLine(contenido);
                        }

                        var pie = string.Format("{0}{1}{0}", comillas, simboloPeso);
                        sw.WriteLine(pie);
                    }

                    resultadoOperacion = new ResultadoOperacion()
                    {
                        Resultado = true
                    };
                }
                else
                {
                    if (File.Exists(archivo))
                    {
                        File.Delete(archivo);
                    }

                    using (var sw = new StreamWriter(archivo))
                    {
                        var cabecero = string.Format("{0}{1}{0}", comillas, letraP);
                        sw.WriteLine(cabecero);

                        var pie = string.Format("{0}{1}{0}", comillas, simboloPeso);
                        sw.WriteLine(pie);
                    }

                    resultadoOperacion = new ResultadoOperacion()
                    {
                        Resultado = true
                    };
                }
            }
            catch (ExcepcionGenerica ex)
            {
                Logger.Error(ex);
                return(new ResultadoOperacion()
                {
                    Resultado = false
                });
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                return(new ResultadoOperacion()
                {
                    Resultado = false
                });
            }
            return(resultadoOperacion);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Método Para Guardar en en la Tabla Animal
        /// </summary>
        internal OrdenSacrificioInfo GuardarOrdenSacrificio(OrdenSacrificioInfo ordenInfo, IList <OrdenSacrificioDetalleInfo> detalleOrden, int organizacionId)
        {
            OrdenSacrificioInfo result = null;

            try
            {
                Logger.Info();
                IList <SalidaSacrificioInfo> salidaSacrificio = null;
                var    paramOrgPl             = new ParametroOrganizacionBL();
                var    salidaSacrificioDal    = new SalidaSacrificioDAL();
                var    ordenSacrificioDal     = new OrdenSacrificioDAL();
                var    salidaSacrificioNuevos = new List <SalidaSacrificioInfo>();
                var    osId        = 0;
                var    aplicaMarel = false;
                string conexion    = salidaSacrificioDal.ObtenerCadenaConexionSPI(organizacionId);
                var    paramOrg    = paramOrgPl.ObtenerPorOrganizacionIDClaveParametro(organizacionId, ParametrosEnum.AplicaSalidaSacrificioMarel.ToString());
                if (paramOrg != null)
                {
                    if (paramOrg.Valor.Trim() == "1")
                    {
                        aplicaMarel = true;
                        IList <SalidaSacrificioDetalleInfo> detalleSacrificio = null;
                        using (var transaction = new TransactionScope())
                        {
                            result = ordenSacrificioDal.GuardarOrdenSacrificio(ordenInfo);
                            if (result != null)
                            {
                                result.UsuarioCreacion = ordenInfo.UsuarioCreacion;
                                ordenSacrificioDal.GuardarDetalleOrdenSacrificio(result, detalleOrden);
                                salidaSacrificio = salidaSacrificioDal.ObtenerPorOrdenSacrificioID(result.OrdenSacrificioID);
                            }

                            //Obtenemos registros de la orden de sacrificio del SIAP para enviarlos al SCP
                            osId = Convert.ToInt32(result.OrdenSacrificioID);
                            detalleSacrificio = salidaSacrificioDal.ObtenerPorOrdenSacrificioId(osId, organizacionId, 0, ordenInfo.UsuarioCreacion);

                            transaction.Complete();
                        }

                        if (salidaSacrificio != null && salidaSacrificio.Count > 0)
                        {
                            foreach (var corralSacrificio in salidaSacrificio)
                            {
                                OrdenSacrificioDetalleInfo detalleValidar =
                                    detalleOrden.FirstOrDefault(orden => corralSacrificio.NUM_CORR.Equals(orden.Corral.Codigo.Trim().PadLeft(3, '0'), StringComparison.InvariantCultureIgnoreCase));

                                if (detalleValidar != null)
                                {
                                    if (detalleValidar.OrdenSacrificioDetalleID == 0)
                                    {
                                        salidaSacrificioNuevos.Add(corralSacrificio);
                                    }
                                }
                            }

                            var guardoSCP = false;
                            using (var transaction = new TransactionScope())
                            {
                                if (!salidaSacrificioDal.CrearLista(salidaSacrificioNuevos, conexion))
                                {
                                    Logger.Error(new Exception("Ocurrió un error al enviar información al SCP."));
                                    result = null;
                                }
                                else
                                {
                                    //Obtenemos salida de sacrificio del SCP para insertarla en Marel
                                    var sacrificio = salidaSacrificioDal.ObtenerSalidaSacrificio(detalleSacrificio.ToList(), organizacionId, conexion);
                                    if (sacrificio.Count > 0)
                                    {
                                        //Guardar información en Marel
                                        if (!salidaSacrificioDal.GuardarSalidaSacrificioMarel(sacrificio, organizacionId, conexion))
                                        {
                                            Logger.Error(new Exception("Ocurrió un error al enviar información al SCP-Marel."));
                                            result = null;
                                        }
                                        else
                                        {
                                            guardoSCP = true;
                                            transaction.Complete();
                                        }
                                    }
                                    else
                                    {
                                        Logger.Error(new Exception("Ocurrió un error al obtener información del SCP para enviarla a Marel"));
                                        result = null;
                                    }
                                }
                            }

                            if (!guardoSCP)
                            {
                                salidaSacrificioDal.EliminarDetalleOrdenSacrificio(salidaSacrificioNuevos, organizacionId, osId, 1, ordenInfo.UsuarioCreacion);
                            }
                        }
                    }
                }

                if (!aplicaMarel)
                {
                    using (var transaction = new TransactionScope())
                    {
                        result = ordenSacrificioDal.GuardarOrdenSacrificio(ordenInfo);
                        if (result != null)
                        {
                            result.UsuarioCreacion = ordenInfo.UsuarioCreacion;
                            ordenSacrificioDal.GuardarDetalleOrdenSacrificio(result, detalleOrden);
                            salidaSacrificio = salidaSacrificioDal.ObtenerPorOrdenSacrificioID(result.OrdenSacrificioID);
                        }
                        osId = Convert.ToInt32(result.OrdenSacrificioID);
                        transaction.Complete();
                    }

                    if (salidaSacrificio != null && salidaSacrificio.Count > 0)
                    {
                        foreach (var corralSacrificio in salidaSacrificio)
                        {
                            OrdenSacrificioDetalleInfo detalleValidar =
                                detalleOrden.FirstOrDefault(orden => corralSacrificio.NUM_CORR.Equals(orden.Corral.Codigo.Trim().PadLeft(3, '0'), StringComparison.InvariantCultureIgnoreCase));

                            if (detalleValidar != null)
                            {
                                if (detalleValidar.OrdenSacrificioDetalleID == 0)
                                {
                                    salidaSacrificioNuevos.Add(corralSacrificio);
                                }
                            }
                        }

                        var guardoSCP = false;
                        using (var transaction = new TransactionScope())
                        {
                            if (!salidaSacrificioDal.CrearLista(salidaSacrificioNuevos, conexion))
                            {
                                Logger.Error(new Exception("Ocurrió un error al enviar información al SCP."));
                                result = null;
                            }
                            else
                            {
                                guardoSCP = true;
                                transaction.Complete();
                            }
                        }

                        if (!guardoSCP)
                        {
                            salidaSacrificioDal.EliminarDetalleOrdenSacrificio(salidaSacrificioNuevos, organizacionId, osId, 0, ordenInfo.UsuarioCreacion);
                        }
                    }
                }
            }
            catch (ExcepcionGenerica ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(result);
        }