/// <summary> /// Guarda los datos de la poliza /// </summary> /// <param name="polizaEntradaGanadoInfo"></param> /// <param name="tipoPoliza"></param> internal void GuardarServicioPI(IList <PolizaInfo> polizaEntradaGanadoInfo, TipoPoliza tipoPoliza) { try { Logger.Info(); var polizaDAL = new PolizaDAL(); var ref3 = polizaEntradaGanadoInfo.Select(refeferencia => refeferencia.Referencia3).Distinct().ToList(); List <PolizaInfo> polizasRef3; for (var indexRef3 = 0; indexRef3 < ref3.Count; indexRef3++) { polizasRef3 = polizaEntradaGanadoInfo.Where(referencia => referencia.Referencia3.Equals(ref3[indexRef3])). ToList(); ValidarImportes(polizasRef3); } polizaDAL.CrearServicioPI(polizaEntradaGanadoInfo, tipoPoliza); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Guarda el gasto de inventario a la base de datos /// </summary> /// <param name="info"></param> /// <returns></returns> internal long Guardar(GastoInventarioInfo info) { long folioGasto; try { PolizaAbstract poliza; IList <PolizaInfo> listaPolizas; using (var transaction = new TransactionScope()) { Logger.Info(); info.TipoFolio = TipoFolio.GastoInventario; var dal = new GastoInventarioDAL(); int gastoInventarioID = dal.Guardar(info); GastoInventarioInfo gastoInventario = dal.ObtenerPorID(gastoInventarioID); if (gastoInventario == null) { return(0); } gastoInventario.CuentaGasto = info.CuentaGasto; gastoInventario.CentroCosto = info.CentroCosto; gastoInventario.Corral = info.Corral; gastoInventario.TotalCorrales = info.TotalCorrales; poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.GastosInventario); if (gastoInventario.Importe < 0) { poliza.Cancelacion = true; gastoInventario.Importe = Math.Abs(gastoInventario.Importe); } listaPolizas = poliza.GeneraPoliza(gastoInventario); var polizaDAL = new PolizaDAL(); listaPolizas.ToList().ForEach(datos => { datos.OrganizacionID = info.Organizacion.OrganizacionID; datos.UsuarioCreacionID = info.UsuarioId; datos.Activo = EstatusEnum.Activo; datos.ArchivoEnviadoServidor = 1; }); polizaDAL.CrearServicioPI(listaPolizas, TipoPoliza.GastosInventario); transaction.Complete(); folioGasto = gastoInventario.FolioGasto; } } catch (ExcepcionServicio) { throw; } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } return(folioGasto); }
/// <summary> /// Genera la conciliacion de las polizas faltantes en SAP /// </summary> /// <param name="polizasReenviar"></param> internal void GuardarConciliacion(List <PolizaInfo> polizasReenviar) { try { Logger.Info(); var polizaDAL = new PolizaDAL(); using (var scope = new TransactionScope()) { List <PolizaInfo> polizasGuardar; List <string> referencias = polizasReenviar.Select(ref3 => ref3.Referencia3).Distinct().ToList(); int milisegundo; for (var indexReferencias = 0; indexReferencias < referencias.Count; indexReferencias++) { polizasGuardar = polizasReenviar.Where(ref3 => ref3.Referencia3.Equals(referencias[indexReferencias])).ToList (); milisegundo = DateTime.Now.Millisecond; polizasGuardar.ForEach(datos => { var ref3 = new StringBuilder(); ref3.Append("03"); ref3.Append(datos.TextoAsignado.PadLeft(10, ' ')); ref3.Append(new Random(10).Next(10, 20)); ref3.Append(new Random(30).Next(30, 40)); ref3.Append(milisegundo); ref3.Append(datos.ClaseDocumento); datos.Referencia3 = ref3.ToString(); if (!string.IsNullOrWhiteSpace(datos.Proveedor) && (datos.Proveedor.StartsWith("1126") || datos.Proveedor.StartsWith("1127"))) { datos.Cuenta = datos.Proveedor; datos.Proveedor = string.Empty; } }); polizasGuardar.ForEach(x => x.NumeroReferencia = string.Format("{0}{1}{2}", DateTime.Now.Hour, DateTime.Now.Minute, milisegundo)); ValidarImportes(polizasGuardar); Thread.Sleep(20); polizaDAL.CrearServicioPI(polizasGuardar, (TipoPoliza)polizasGuardar.Select(x => x.TipoPolizaID).FirstOrDefault()); } scope.Complete(); } } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Obtiene un listado de las Polizas que estan pendientes /// por ser enviadas a SAP /// </summary> /// <returns></returns> internal Queue <IList <PolizaInfo> > ObtenerPolizasPendientes() { try { Logger.Info(); var polizaDAL = new PolizaDAL(); return(polizaDAL.ObtenerPolizasPendientes()); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
internal List <TiposCuentaConciliacionInfo> ObtenerTipoCuentaConciliacion() { try { Logger.Info(); var polizaDal = new PolizaDAL(); return(polizaDal.obtenerTiposCuentas()); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Método que obtiene el listado de pólizas de la organización en el rango de fechas indicado. /// </summary> /// <param name="conciliaciionParametros"></param> internal List <PolizaInfo> ObtenerPolizasConciliacionSapSiap(ConciliaciionParametros conciliaciionParametros) { try { Logger.Info(); var polizaDal = new PolizaDAL(); return(polizaDal.ObtenerPolizasConciliacionSapSiap(conciliaciionParametros)); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Activa bandera para indicar que la poliza /// debe ser cancelada /// </summary> /// <param name="polizasID"></param> internal void ActualizaCanceladoSAP(List <int> polizasID) { try { Logger.Info(); var polizaDAL = new PolizaDAL(); polizaDAL.ActualizaCanceladoSAP(polizasID); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Actualiza bandera para indicar si el archivo fue /// grabado en el servidor de SAP ó no /// </summary> /// <returns></returns> internal void DesactivarPolizas(List <PolizaInfo> polizasCancelar) { try { Logger.Info(); var polizaDAL = new PolizaDAL(); polizaDAL.DesactivarPolizas(polizasCancelar); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Actualiza datos de poliza /// </summary> /// <param name="respuestaServicioPI"></param> internal void Actualizar(RespuestaServicioPI respuestaServicioPI) { try { Logger.Info(); var polizaDAL = new PolizaDAL(); polizaDAL.Actualizar(respuestaServicioPI); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Registra una salida de ganado en transito, genera la poliza y factura correspondiente e imprime el archivo de poliza en formato PDF /// </summary> /// <param name="input">salida de ganado en transito que se registrara</param> /// <param name="registroExitoso">indica si se completo el registro de la salida de ganado en transito</param> /// <returns>Regresa los datos que conformaran el archivo impreso en PDF</returns> public MemoryStream GuardarSalida(SalidaGanadoEnTransitoInfo input, out bool registroExitoso) { try { var salida = new SalidaGanadoEnTransitoDAL(); var ms = new MemoryStream(); registroExitoso = false; using (var transaction = new TransactionScope()) //agrupa el proceso siguiente como una sola operacion { salida.GuardarSalida(ref input); //registrar la salida de ganado en transito y actualiza el folio generado para la salida salida.ActualizarEntradas(input); //actualiza las entradas de ganado en transito, y del lote correspondiente if (input.Muerte) // si es salida de ganado en transito por muerte { var polizaSalida = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.SalidaMuerteEnTransito); var polizaDal = new PolizaDAL(); var polizaSalidaMuerteTransito = polizaSalida.GeneraPoliza(input); //genera el XML de la poliza //genera el XML de la poliza de salida de ganado por muerte input.PolizaID = polizaDal.Crear(polizaSalidaMuerteTransito, TipoPoliza.SalidaMuerteEnTransito); //almacena la poliza generada en la base de datos ms = polizaSalida.ImprimePoliza(input, polizaSalidaMuerteTransito); //genera el archivo en formato PDF de la poliza generada registroExitoso = true; //indica que se completo la operacion exitosamente } else if (input.Venta) //en caso de ser una salida de ganado en transito por venta { var polizaSalida = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.SalidaVentaEnTransito); var polizaDal = new PolizaDAL(); var poliza = polizaSalida.GeneraPoliza(input); //genera el XML de la poliza de salida de ganado por venta input.PolizaID = polizaDal.Crear(poliza, TipoPoliza.SalidaVentaEnTransito); //almacena la poliza generada en la base de datos ms = polizaSalida.ImprimePoliza(input, poliza); //genera el archivo en formato PDF de la poliza generada var generarFactura = new FacturaBL(); generarFactura.SalidaGanadoTransito_ObtenerDatosFactura(input.Folio, input.OrganizacionID, true); //genera la factura de la salida de ganado en transito registroExitoso = true; //indica que se completo la operacion exitosamente } salida.AsignarPolizaRegistrada(input); //asigna la poliza generada a la salida de ganado en transito registrada transaction.Complete(); //da por concluido el proceso de Salida de ganado en transito por venta o muerte return(ms); //regresa los datos del archivo PDF que se imprimiran } } catch (Exception ex) { Logger.Error(ex); registroExitoso = false; throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
internal List <int> ObtenerPolizasMal() { try { Logger.Info(); var polizaDAL = new PolizaDAL(); List <int> polizasMal = polizaDAL.ObtenerPolizasMal(); return(polizasMal); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Obtiene las polizas para su conciliacion /// </summary> /// <param name="organizacionID"></param> /// <param name="fechaInicio"></param> /// <param name="fechaFin"></param> /// <param name="claseDocumento"> </param> /// <returns></returns> internal IEnumerable <PolizaInfo> ObtenerPolizasConciliacion(int organizacionID, DateTime fechaInicio , DateTime fechaFin, string claseDocumento) { try { Logger.Info(); var polizaDAL = new PolizaDAL(); return(polizaDAL.ObtenerPolizasConciliacion(organizacionID, fechaInicio, fechaFin, claseDocumento)); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Obtiene los datos de la poliza /// </summary> /// <returns></returns> internal IList <PolizaInfo> ObtenerPoliza(TipoPoliza tipoPoliza, int organizacionID, DateTime fecha , string clave, string concepto, long estatus) { try { Logger.Info(); var polizaDAL = new PolizaDAL(); return(polizaDAL.ObtenerPoliza(tipoPoliza, organizacionID, fecha, clave, concepto, estatus)); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Obtiene los datos de la poliza /// </summary> /// <returns></returns> internal IList <PolizaInfo> ObtenerPolizaConDocumentoSAPPorRango(TipoPoliza tipoPoliza, int organizacionID, DateTime fecha) { IList <PolizaInfo> polizas; try { Logger.Info(); var polizaDAL = new PolizaDAL(); polizas = polizaDAL.ObtenerPolizaConDocumentoSAPPorRango(tipoPoliza, organizacionID, fecha); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } return(polizas); }
/// <summary> /// Metodo para Cancelar un traspaso de MP /// </summary> /// <param name="info"></param> public Dictionary <long, MemoryStream> CancelarTraspaso(TraspasoMpPaMedInfo info) { try { var resultado = new Dictionary <long, MemoryStream>(); Logger.Info(); var traspasoMateriaPrimaDAL = new TraspasoMateriaPrimaDAL(); var almacenMovimientoBL = new AlmacenMovimientoBL(); var cancelacionMovimientoBL = new CancelacionMovimientoBL(); TraspasoMateriaPrimaInfo traspasoCancelar = traspasoMateriaPrimaDAL.ObtenerPorID(info.TraspasoMateriaPrimaID); if (traspasoCancelar == null) { return(null); } AlmacenMovimientoInfo movimientoOrigen = almacenMovimientoBL.ObtenerPorIDCompleto( traspasoCancelar.AlmacenMovimientoOrigen.AlmacenMovimientoID); AlmacenMovimientoInfo movimientoDestino = almacenMovimientoBL.ObtenerPorIDCompleto( traspasoCancelar.AlmacenMovimientoDestino.AlmacenMovimientoID); AlmacenInfo almacenOrigenAux = info.AlmacenOrigen; AlmacenInfo almacenDestinoAux = info.AlmacenDestino; AlmacenMovimientoDetalle detalleOrigen = movimientoOrigen.ListaAlmacenMovimientoDetalle.FirstOrDefault(); AlmacenMovimientoDetalle detalleDestino = movimientoDestino.ListaAlmacenMovimientoDetalle.FirstOrDefault(); if (detalleOrigen == null || detalleDestino == null) { return(null); } info.CantidadTraspasarOrigen = detalleOrigen.Cantidad; info.CantidadTraspasarDestino = detalleDestino.Cantidad; info.PrecioTraspasoOrigen = detalleOrigen.Precio; info.PrecioTraspasoDestino = detalleDestino.Precio; info.ImporteTraspaso = detalleDestino.Importe; info.AlmacenDestino = almacenOrigenAux; info.AlmacenOrigen = almacenDestinoAux; using (var transaction = new TransactionScope()) { long almacenMovimientoEntradaID = 0; long almacenMovimientoSalidaID = 0; if (movimientoDestino != null) { almacenMovimientoEntradaID = GenerarMovimientoEntradaCancelacion(movimientoDestino, info.Usuario); almacenMovimientoSalidaID = GenerarMovimientoSalidaCancelacion(movimientoOrigen, info.Usuario); } var cancelacionMovimientoEntrada = new CancelacionMovimientoInfo { TipoCancelacion = new TipoCancelacionInfo { TipoCancelacionId = TipoCancelacionEnum.TraspasoMpPaMed.GetHashCode() }, Pedido = new PedidoInfo(), AlmacenMovimientoOrigen = new AlmacenMovimientoInfo { AlmacenMovimientoID = almacenMovimientoEntradaID }, AlmacenMovimientoCancelado = new AlmacenMovimientoInfo { AlmacenMovimientoID = movimientoOrigen.AlmacenMovimientoID }, Activo = EstatusEnum.Activo, Justificacion = traspasoCancelar.Justificacion, UsuarioCreacionID = info.Usuario.UsuarioID }; CancelacionMovimientoInfo movimientoCancelado = cancelacionMovimientoBL.Guardar(cancelacionMovimientoEntrada); if (movimientoDestino != null) { var cancelacionMovimientoSalida = new CancelacionMovimientoInfo { TipoCancelacion = new TipoCancelacionInfo { TipoCancelacionId = TipoCancelacionEnum.TraspasoMpPaMed.GetHashCode() }, Pedido = new PedidoInfo(), AlmacenMovimientoOrigen = new AlmacenMovimientoInfo { AlmacenMovimientoID = almacenMovimientoSalidaID }, AlmacenMovimientoCancelado = new AlmacenMovimientoInfo { AlmacenMovimientoID = movimientoDestino.AlmacenMovimientoID }, Activo = EstatusEnum.Activo, Justificacion = traspasoCancelar.Justificacion, UsuarioCreacionID = info.Usuario.UsuarioID }; cancelacionMovimientoBL.Guardar(cancelacionMovimientoSalida); } traspasoCancelar.Activo = EstatusEnum.Inactivo; traspasoCancelar.UsuarioModificacionID = info.Usuario.UsuarioID; traspasoMateriaPrimaDAL.Actualizar(traspasoCancelar); movimientoOrigen.UsuarioModificacionID = info.Usuario.UsuarioID; if (movimientoDestino != null) { movimientoDestino.UsuarioModificacionID = info.Usuario.UsuarioID; } movimientoOrigen.Status = Estatus.CanceladoInv.GetHashCode(); if (movimientoDestino != null) { movimientoDestino.Status = Estatus.CanceladoInv.GetHashCode(); } almacenMovimientoBL.ActualizarEstatus(movimientoOrigen); almacenMovimientoBL.ActualizarEstatus(movimientoDestino); AlmacenMovimientoInfo movimientoCancelacion = almacenMovimientoBL.ObtenerPorIDCompleto(almacenMovimientoEntradaID); if (movimientoCancelacion == null) { return(null); } info.FolioTraspaso = traspasoCancelar.FolioTraspaso; info.FechaTraspaso = movimientoCancelado.FechaCancelacion; info.AlmacenMovimientoID = movimientoDestino.AlmacenMovimientoID; MemoryStream pdfPoliza = null; if (info.AlmacenOrigen.AlmacenID != info.AlmacenDestino.AlmacenID) { info.EsCancelacion = true; var productoBL = new ProductoBL(); info.ProductoOrigen = productoBL.ObtenerPorID(info.ProductoOrigen); info.ProductoDestino = info.ProductoOrigen; PolizaAbstract poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.EntradaTraspaso); IList <PolizaInfo> listaPolizas = poliza.GeneraPoliza(info); pdfPoliza = poliza.ImprimePoliza(info, listaPolizas); if (listaPolizas != null && listaPolizas.Any()) { listaPolizas.ToList().ForEach(datos => { datos.OrganizacionID = info.Usuario.Organizacion.OrganizacionID; datos.UsuarioCreacionID = info.Usuario.UsuarioID; datos.Activo = EstatusEnum.Activo; datos.ArchivoEnviadoServidor = 1; }); var polizaDAL = new PolizaDAL(); polizaDAL.CrearServicioPI(listaPolizas, TipoPoliza.EntradaTraspaso); } } transaction.Complete(); resultado.Add(info.FolioTraspaso, pdfPoliza); return(resultado); } } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Metodo para Guardar/Modificar una entidad TraspasoMateriaPrima /// </summary> /// <param name="info"></param> public Dictionary <long, MemoryStream> GuardarTraspaso(TraspasoMpPaMedInfo info) { try { var resultado = new Dictionary <long, MemoryStream>(); Logger.Info(); var traspasoMateriaPrimaDAL = new TraspasoMateriaPrimaDAL(); using (var transaction = new TransactionScope()) { long almacenMovimientoOrigenID = GenerarMovimientoSalida(info); long almacenMovimientoDestinoID = GenerarMovimientoEntrada(info); var traspasoMateriaPrimaGuardar = new TraspasoMateriaPrimaInfo { ContratoOrigen = info.ContratoOrigen, ContratoDestino = info.ContratoDestino, Organizacion = info.Usuario.Organizacion, AlmacenOrigen = info.AlmacenOrigen, AlmacenDestino = info.AlmacenDestino, AlmacenInventarioLoteOrigen = info.LoteMpOrigen, AlmacenInventarioLoteDestino = info.LoteMpDestino, CuentaSAP = info.CuentaContable, Justificacion = info.JustificacionDestino, AlmacenMovimientoOrigen = new AlmacenMovimientoInfo { AlmacenMovimientoID = almacenMovimientoOrigenID }, AlmacenMovimientoDestino = new AlmacenMovimientoInfo { AlmacenMovimientoID = almacenMovimientoDestinoID }, Activo = EstatusEnum.Activo, UsuarioCreacionID = info.Usuario.UsuarioID }; traspasoMateriaPrimaGuardar = traspasoMateriaPrimaDAL.Crear(traspasoMateriaPrimaGuardar); info.FolioTraspaso = traspasoMateriaPrimaGuardar.FolioTraspaso; info.FechaTraspaso = traspasoMateriaPrimaGuardar.FechaMovimiento; info.AlmacenMovimientoID = almacenMovimientoDestinoID; MemoryStream pdfPoliza = null; if (info.AlmacenOrigen.AlmacenID != info.AlmacenDestino.AlmacenID) { var productoBL = new ProductoBL(); info.ProductoOrigen = productoBL.ObtenerPorID(info.ProductoOrigen); info.ProductoDestino = info.ProductoOrigen; PolizaAbstract poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.EntradaTraspaso); IList <PolizaInfo> listaPolizas = poliza.GeneraPoliza(info); pdfPoliza = poliza.ImprimePoliza(info, listaPolizas); if (listaPolizas != null && listaPolizas.Any()) { listaPolizas.ToList().ForEach(datos => { datos.OrganizacionID = info.Usuario.Organizacion.OrganizacionID; datos.UsuarioCreacionID = info.Usuario.UsuarioID; datos.Activo = EstatusEnum.Activo; datos.ArchivoEnviadoServidor = 1; }); var polizaDAL = new PolizaDAL(); polizaDAL.CrearServicioPI(listaPolizas, TipoPoliza.EntradaTraspaso); } } transaction.Complete(); resultado.Add(info.FolioTraspaso, pdfPoliza); return(resultado); } } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <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); } }