/// <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); } }
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); } }
/// <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); } }
/// <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); } }
//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); }
/// <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); }
/// <summary> /// Registra el envio de alimento de una organizacion a otra /// </summary> /// <param name="envioAlimento">Información del envio de alimento a guardar</param> /// <returns>Regresa una confirmación de registro del envio de alimento</returns> internal EnvioAlimentoInfo RegistrarEnvioAlimento(EnvioAlimentoInfo envioAlimento) { EnvioAlimentoInfo confirmacion = new EnvioAlimentoInfo(); try { Logger.Info(); AlmacenMovimientoBL almacenMovimientoBL = new AlmacenMovimientoBL(); EnvioAlimentoDAL salidaAlimentoDAL = new EnvioAlimentoDAL(); AlmacenMovimientoDetalleBL almacenMovimientoDetalleBl = new AlmacenMovimientoDetalleBL(); AlmacenMovimientoDetalle detalleMovimiento = new AlmacenMovimientoDetalle(); AlmacenInventarioBL inventario = new AlmacenInventarioBL(); AlmacenInventarioLoteBL loteBl = new AlmacenInventarioLoteBL(); AlmacenMovimientoInfo almacenMovimiento = new AlmacenMovimientoInfo(); almacenMovimiento.AlmacenID = envioAlimento.Almacen.AlmacenID; almacenMovimiento.TipoMovimientoID = TipoMovimiento.ProductoSalidaTraspaso.GetHashCode(); almacenMovimiento.Status = Estatus.AplicadoInv.GetHashCode(); almacenMovimiento.UsuarioCreacionID = envioAlimento.UsuarioCreacionID; almacenMovimiento.UsuarioModificacionID = envioAlimento.UsuarioCreacionID; almacenMovimiento.EsEnvioAlimento = true; almacenMovimiento.OrganizacionID = envioAlimento.Origen.OrganizacionID; PolizaAbstract poliza = null; IList <PolizaInfo> listaPolizas = null; using (var transaccion = new TransactionScope()) { //registrar en TB AlmacenMovimiento long almacenMovimientoID = almacenMovimientoBL.Crear(almacenMovimiento); almacenMovimiento.AlmacenMovimientoID = almacenMovimientoID; envioAlimento.AlmacenMovimientoId = almacenMovimientoID; if (envioAlimento.AlmacenMovimientoId == 0) { return new EnvioAlimentoInfo { EnvioId = 0 } } ; //registrar en TB AlmacenMovimientoDetalle detalleMovimiento.AlmacenMovimientoID = almacenMovimiento.AlmacenMovimientoID; almacenMovimiento = almacenMovimientoBL.ObtenerPorId(almacenMovimiento.AlmacenMovimientoID); if (almacenMovimiento.AlmacenMovimientoID == 0) { return new EnvioAlimentoInfo { EnvioId = 0 } } ; envioAlimento.Folio = almacenMovimiento.FolioMovimiento; detalleMovimiento.Producto = envioAlimento.Producto; if (detalleMovimiento.Producto.ManejaLote) { detalleMovimiento.AlmacenInventarioLoteId = envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().AlmacenInventarioLoteId; detalleMovimiento.Precio = envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().PrecioPromedio; } else { detalleMovimiento.Precio = envioAlimento.AlmacenInventario.PrecioPromedio; } detalleMovimiento.ProductoID = envioAlimento.Producto.ProductoId; detalleMovimiento.Cantidad = envioAlimento.Cantidad; detalleMovimiento.Importe = envioAlimento.Importe; detalleMovimiento.UsuarioCreacionID = envioAlimento.UsuarioCreacionID; detalleMovimiento.Piezas = envioAlimento.Piezas; int almacenMovimientoDetalleid = almacenMovimientoDetalleBl.Crear(detalleMovimiento); if (almacenMovimientoDetalleid == 0) { return new EnvioAlimentoInfo { EnvioId = 0 } } ; //registrar en TB EnvioProducto confirmacion = salidaAlimentoDAL.RegistrarEnvioAlimento(envioAlimento); if (confirmacion.EnvioId == 0) { return new EnvioAlimentoInfo { EnvioId = 0 } } ; envioAlimento.EnvioId = confirmacion.EnvioId; envioAlimento.FechaEnvio = confirmacion.FechaEnvio; envioAlimento.AlmacenInventario.Cantidad -= envioAlimento.Cantidad; envioAlimento.AlmacenInventario.Importe -= envioAlimento.Importe; decimal precioPromedioInicial = 0M; if (envioAlimento.Producto.ManejaLote) { precioPromedioInicial = envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().PrecioPromedio; } else { precioPromedioInicial = envioAlimento.AlmacenInventario.PrecioPromedio; } if (envioAlimento.AlmacenInventario.Cantidad == 0) { envioAlimento.AlmacenInventario.PrecioPromedio = 0M; } if (envioAlimento.AlmacenInventario.Cantidad < 0) { envioAlimento.AlmacenInventario.Cantidad = 0; } if (envioAlimento.AlmacenInventario.Importe < 0) { envioAlimento.AlmacenInventario.Importe = 0; } if (envioAlimento.AlmacenInventario.Cantidad > 0 && envioAlimento.AlmacenInventario.Importe > 0) { envioAlimento.AlmacenInventario.PrecioPromedio = envioAlimento.AlmacenInventario.Importe / envioAlimento.AlmacenInventario.Cantidad; } envioAlimento.AlmacenInventario.UsuarioModificacionID = envioAlimento.UsuarioCreacionID; inventario.ActualizarPorProductoId(envioAlimento.AlmacenInventario); if (envioAlimento.Producto.ManejaLote) { FechaInfo fechaInfo = new FechaBL().ObtenerFechaActual(); envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Cantidad -= envioAlimento.Cantidad; envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Importe -= envioAlimento.Importe; if (envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Cantidad <= 0) { envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().PrecioPromedio = 0M; envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Cantidad = 0; envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Importe = 0; envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().FechaInicio = fechaInfo.FechaActual; } if (envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Importe > 0 && envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Cantidad > 0) { envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().PrecioPromedio = envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Importe / envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Cantidad; } else { envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Activo = EstatusEnum.Inactivo; envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().FechaFin = fechaInfo.FechaActual; } if (envioAlimento.Producto.SubfamiliaId == SubFamiliasEnum.Forrajes.GetHashCode()) { envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Piezas -= envioAlimento.Piezas; if (envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Piezas < 0) { envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Piezas = 0; } } envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().UsuarioModificacionId = envioAlimento.UsuarioCreacionID; loteBl.ActualizarEnvioAlimento(envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault()); } if (salidaAlimentoDAL.RegistrarRecepcionProductoEnc(envioAlimento, TipoMovimiento.ProductoSalidaTraspaso) == 0) { return new EnvioAlimentoInfo { EnvioId = 0 } } ; if (salidaAlimentoDAL.RegistrarRecepcionProductoDet(envioAlimento, TipoMovimiento.ProductoSalidaTraspaso) == 0) { return new EnvioAlimentoInfo { EnvioId = 0 } } ; poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.SalidaTraspaso); SolicitudProductoInfo oSolicitud = new SolicitudProductoInfo(); oSolicitud.FolioSolicitud = envioAlimento.Folio; oSolicitud.OrganizacionID = envioAlimento.Origen.OrganizacionID; oSolicitud.AlmacenGeneralID = envioAlimento.Almacen.AlmacenID; oSolicitud.Almacen = new AlmacenBL().ObtenerAlmacenPorOrganizacion(envioAlimento.Destino.OrganizacionID).FirstOrDefault(); oSolicitud.FechaEntrega = envioAlimento.FechaEnvio; oSolicitud.UsuarioCreacionID = envioAlimento.UsuarioCreacionID; oSolicitud.Detalle = new List <SolicitudProductoDetalleInfo>(); SolicitudProductoDetalleInfo detalle = new SolicitudProductoDetalleInfo() { Cantidad = envioAlimento.Cantidad, PrecioPromedio = envioAlimento.Producto.ManejaLote ? envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().PrecioPromedio: envioAlimento.AlmacenInventario.PrecioPromedio, Producto = envioAlimento.Producto }; detalle.PrecioPromedio = decimal.Round(detalle.PrecioPromedio, 2); if (detalle.PrecioPromedio == 0) { detalle.PrecioPromedio = precioPromedioInicial; } oSolicitud.Detalle.Add(detalle); listaPolizas = poliza.GeneraPoliza(oSolicitud); var polizaDAL = new PolizaDAL(); if (listaPolizas != null && listaPolizas.Any()) { string Referencia = "03 " + envioAlimento.Folio.ToString() + new Random().Next(10, 20).ToString() + new Random().Next(30, 40) + DateTime.Now.Millisecond.ToString() + listaPolizas.ToList().FirstOrDefault().ClaseDocumento; listaPolizas.ToList().ForEach(datos => { datos.NumeroReferencia = envioAlimento.Folio.ToString(); datos.OrganizacionID = oSolicitud.OrganizacionID; datos.UsuarioCreacionID = envioAlimento.UsuarioCreacionID; datos.Activo = EstatusEnum.Activo; datos.ArchivoEnviadoServidor = 1; datos.Referencia3 = Referencia; }); ParametroOrganizacionInfo oParametroOrg = new ParametroOrganizacionBL().ObtenerPorOrganizacionIDClaveParametro(oSolicitud.OrganizacionID, ParametrosEnum.CuentaInventarioTransito.ToString()); if (oParametroOrg != null) { listaPolizas[listaPolizas.ToList().FindIndex(datos => datos.NumeroLinea.Trim() == "1")].Cuenta = oParametroOrg.Valor; } envioAlimento.Poliza = poliza.ImprimePoliza(oSolicitud, listaPolizas); polizaDAL.CrearServicioPI(listaPolizas, TipoPoliza.SalidaTraspaso); transaccion.Complete(); } } return(envioAlimento); } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }