Esempio n. 1
0
        private void InicializaContexto()
        {
            var fechaPl = new FechaPL();
            var fecha   = fechaPl.ObtenerFechaActual();

            Contexto = new InterfaceSalidaTraspasoInfo
            {
                FechaEnvio = fecha.FechaActual,

                OrganizacionId    = AuxConfiguracion.ObtenerOrganizacionUsuario(),
                UsuarioCreacionID = AuxConfiguracion.ObtenerUsuarioLogueado(),
                LoteInfo          = new LoteInfo(),
                CorralInfo        = new CorralInfo(),
                LoteProyecion     = new LoteProyeccionInfo(),
                TipoGanado        = new TipoGanadoInfo(),
                ListaInterfaceSalidaTraspasoDetalle = new List <InterfaceSalidaTraspasoDetalleInfo>()
            };
            if (Contexto.OrganizacionDestino == null || Contexto.OrganizacionDestino.OrganizacionID == 0)
            {
                Contexto.OrganizacionDestino = new OrganizacionInfo
                {
                    TipoOrganizacion = new TipoOrganizacionInfo
                    {
                        TipoOrganizacionID =
                            TipoOrganizacion.Ganadera.
                            GetHashCode()
                    }
                };
            }

            skAyudaOrganizacion.AsignarFoco();
        }
Esempio n. 2
0
 /// <summary>
 /// Obtiene los parametros para insertar un nuevo registro en la tabla InterfaceSalidaTraspaso
 /// </summary>
 /// <param name="interfaceSalidaTraspaso"></param>
 /// <returns></returns>
 internal static Dictionary <string, object> ObtenerParametrosCrear(InterfaceSalidaTraspasoInfo interfaceSalidaTraspaso)
 {
     try
     {
         Logger.Info();
         var parametros = new Dictionary <string, object>
         {
             { "@OrganizacionID", interfaceSalidaTraspaso.OrganizacionId },
             { "@OrganizacionIDDestino", interfaceSalidaTraspaso.OrganizacionDestino.OrganizacionID },
             { "@FolioTraspaso", interfaceSalidaTraspaso.FolioTraspaso },
             { "@CabezasEnvio", interfaceSalidaTraspaso.CabezasEnvio },
             { "@TraspasoGanado", interfaceSalidaTraspaso.TraspasoGanado },
             { "@SacrifioGanado", interfaceSalidaTraspaso.SacrificioGanado },
             { "@PesoTara", interfaceSalidaTraspaso.PesoTara },
             { "@PesoBruto", interfaceSalidaTraspaso.PesoBruto },
             { "@Activo", interfaceSalidaTraspaso.Activo.GetHashCode() },
             { "@UsuarioCreacionID", interfaceSalidaTraspaso.UsuarioCreacionID }
         };
         return(parametros);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
 /// <summary>
 /// Guarda una interface salida traspaso y regresa el item insertado.
 /// </summary>
 /// <param name="interfaceSalidaTraspaso"></param>
 /// <returns></returns>
 internal void Actualizar(InterfaceSalidaTraspasoInfo interfaceSalidaTraspaso)
 {
     try
     {
         var interfaceSalidaTraspasoDal = new InterfaceSalidaTraspasoDAL();
         interfaceSalidaTraspasoDal.Actualizar(interfaceSalidaTraspaso);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
Esempio n. 4
0
 /// <summary>
 ///  Guarda una interface salida traspaso y regresa el item insertado.
 /// </summary>
 /// <param name="interfaceSalidaTraspaso"></param>
 /// <returns></returns>
 internal void Actualizar(InterfaceSalidaTraspasoInfo interfaceSalidaTraspaso)
 {
     try
     {
         Logger.Info();
         var parametros = AuxInterfaceSalidaTraspasoDAL.ObtenerParametrosActualizar(interfaceSalidaTraspaso);
         Update("InterfaceSalidaTraspaso_Actualizar", parametros);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
Esempio n. 5
0
        /// <summary>
        /// Complementa el concepto de poliza con los folios de traspaso
        /// </summary>
        /// <param name="polizasSacrificioSukarne"></param>
        /// <param name="lotesSacrificioFolios"></param>
        /// <param name="interfaceSalidaTraspaso"> </param>
        private void ComplementarConceptoPoliza(IList <PolizaInfo> polizasSacrificioSukarne
                                                , List <PolizaSacrificioModel> lotesSacrificioFolios
                                                , List <InterfaceSalidaTraspasoInfo> interfaceSalidaTraspaso)
        {
            PolizaSacrificioModel polizaSacrificioModel;
            List <PolizaInfo>     polizas;

            var detalleTraspaso = new List <InterfaceSalidaTraspasoDetalleInfo>();

            interfaceSalidaTraspaso.ForEach(
                detalle => detalleTraspaso.AddRange(detalle.ListaInterfaceSalidaTraspasoDetalle));

            InterfaceSalidaTraspasoDetalleInfo interfaceSalidaTraspasoDetalle;
            InterfaceSalidaTraspasoInfo        interfaceSalida;

            for (var indexLotes = 0; indexLotes < lotesSacrificioFolios.Count; indexLotes++)
            {
                polizaSacrificioModel = lotesSacrificioFolios[indexLotes];
                polizas =
                    polizasSacrificioSukarne.Where(
                        concepto =>
                        concepto.Concepto
                        .IndexOf(
                            string.Format("{0}-{1}", polizaSacrificioModel.Serie, polizaSacrificioModel.Folio),
                            StringComparison.Ordinal) >= 0).ToList();
                if (polizas.Any())
                {
                    interfaceSalidaTraspasoDetalle = detalleTraspaso.FirstOrDefault(
                        det =>
                        det.InterfaceSalidaTraspasoDetalleID == polizaSacrificioModel.InterfaceSalidaTraspasoDetalleID);
                    if (interfaceSalidaTraspasoDetalle == null)
                    {
                        interfaceSalidaTraspasoDetalle = new InterfaceSalidaTraspasoDetalleInfo();
                    }
                    interfaceSalida = interfaceSalidaTraspaso.FirstOrDefault(
                        id =>
                        id.InterfaceSalidaTraspasoId ==
                        interfaceSalidaTraspasoDetalle.InterfaceSalidaTraspasoID);
                    if (interfaceSalida == null)
                    {
                        interfaceSalida = new InterfaceSalidaTraspasoInfo();
                    }
                    polizas.ForEach(
                        con =>
                        con.Concepto =
                            string.Format("{0} ST-{1}", con.Concepto, interfaceSalida.FolioTraspaso));
                }
            }
        }
        /// <summary>
        /// Guarda una interface salida traspaso y regresa el item insertado.
        /// </summary>
        /// <param name="interfaceSalidaTraspaso"></param>
        /// <returns></returns>
        internal InterfaceSalidaTraspasoInfo Crear(InterfaceSalidaTraspasoInfo interfaceSalidaTraspaso)
        {
            InterfaceSalidaTraspasoInfo result;

            try
            {
                var interfaceSalidaTraspasoDal = new InterfaceSalidaTraspasoDAL();
                result = interfaceSalidaTraspasoDal.Crear(interfaceSalidaTraspaso);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }

            return(result);
        }
Esempio n. 7
0
 /// <summary>
 ///  Guarda una interface salida traspaso y regresa el item insertado.
 /// </summary>
 /// <param name="interfaceSalidaTraspaso"></param>
 public InterfaceSalidaTraspasoInfo Crear(InterfaceSalidaTraspasoInfo interfaceSalidaTraspaso)
 {
     try
     {
         var interfaceSalidaTraspaspBl = new InterfaceSalidaTraspasoBL();
         return(interfaceSalidaTraspaspBl.Crear(interfaceSalidaTraspaso));
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
Esempio n. 8
0
 /// <summary>
 /// Obtiene los parametros para insertar un nuevo registro en la tabla InterfaceSalidaTraspaso
 /// </summary>
 /// <param name="interfaceSalidaTraspaso"></param>
 /// <returns></returns>
 internal static Dictionary <string, object> ObtenerParametrosActualizar(InterfaceSalidaTraspasoInfo interfaceSalidaTraspaso)
 {
     try
     {
         Logger.Info();
         var parametros = new Dictionary <string, object>
         {
             { "@InterfaceSalidaTraspasoID", interfaceSalidaTraspaso.InterfaceSalidaTraspasoId },
             { "@CabezasEnvio", interfaceSalidaTraspaso.CabezasEnvio },
             { "@PesoTara", interfaceSalidaTraspaso.PesoTara },
             { "@PesoBruto", interfaceSalidaTraspaso.PesoBruto },
             { "@UsuarioModificacionID", interfaceSalidaTraspaso.UsuarioModificacionID }
         };
         return(parametros);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
Esempio n. 9
0
 /// <summary>
 ///  Guarda una lista de interface salida traspaso.
 /// </summary>
 /// <param name="interfaceSalidaTraspaso"></param>
 public Dictionary <long, decimal> GuardarListadoInterfaceSalidaTraspaso(InterfaceSalidaTraspasoInfo interfaceSalidaTraspaso)
 {
     try
     {
         var interfaceSalidaTraspaspBl = new InterfaceSalidaTraspasoBL();
         return(interfaceSalidaTraspaspBl.CrearLista(interfaceSalidaTraspaso));
     }
     catch (ExcepcionServicio ex)
     {
         throw ex;
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
Esempio n. 10
0
        /// <summary>
        ///  Guarda una interface salida traspaso y regresa el item insertado.
        /// </summary>
        /// <param name="interfaceSalidaTraspaso"></param>
        /// <returns></returns>
        internal InterfaceSalidaTraspasoInfo Crear(InterfaceSalidaTraspasoInfo interfaceSalidaTraspaso)
        {
            InterfaceSalidaTraspasoInfo result = null;

            try
            {
                Logger.Info();
                var     parametros = AuxInterfaceSalidaTraspasoDAL.ObtenerParametrosCrear(interfaceSalidaTraspaso);
                DataSet ds         = Retrieve("InterfaceSalidaTraspaso_Crear", parametros);
                if (ValidateDataSet(ds))
                {
                    result = MapInterfaceSalidaTraspasoDAL.ObtenerPorId(ds);
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }

            return(result);
        }
Esempio n. 11
0
        private void CargarInterfaceSalidaTraspaso()
        {
            try
            {
                var interfaceSalidaTraspasoPl = new InterfaceSalidaTraspasoPL();

                Contexto = interfaceSalidaTraspasoPl.ObtenerInterfaceSalidaTraspasoPorFolioOrganizacion(Contexto);
                if (Contexto == null)
                {
                    SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal],
                                      Properties.Resources.TraspasoGanadoGordo_MensajeFolioInvalido,
                                      MessageBoxButton.OK, MessageImage.Warning);
                    Inicializar();
                    TxtFolioTraspaso.Focus();
                    return;
                }
                listadoDeTraspaso = new ObservableCollection <InterfaceSalidaTraspasoDetalleInfo>(Contexto.ListaInterfaceSalidaTraspasoDetalle);
                GridOrganizacionesTraspaso.ItemsSource = listadoDeTraspaso;

                Contexto.CabezasEnvio          = 0;
                skAyudaOrganizacion.IsEnabled  = false;
                TxtFolioTraspaso.IsEnabled     = false;
                Contexto.CorralInfo            = new CorralInfo();
                Contexto.LoteInfo              = new LoteInfo();
                Contexto.LoteProyecion         = new LoteProyeccionInfo();
                Contexto.UsuarioModificacionID = AuxConfiguracion.ObtenerUsuarioLogueado();
                Contexto.OrganizacionId        = AuxConfiguracion.ObtenerOrganizacionUsuario();
                Contexto.TipoGanado            = new TipoGanadoInfo();
                HabilitarControlesPesos();
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal],
                                  Properties.Resources.TraspasoGanadoGordo_MensajeErrorAlConsultarFolio,
                                  MessageBoxButton.OK, MessageImage.Warning);
            }
        }
Esempio n. 12
0
        /// <summary>
        /// Obtiene
        /// </summary>
        /// <param name="organizacionID"> </param>
        /// <param name="folioOrigen"> </param>
        /// <returns></returns>
        internal InterfaceSalidaTraspasoInfo ObtenerDatosInterfaceSalidaTraspaso(int organizacionID, int folioOrigen)
        {
            InterfaceSalidaTraspasoInfo result = null;

            try
            {
                Logger.Info();
                Dictionary <string, object> parametros =
                    AuxInterfaceSalidaTraspasoDAL.ObtenerParametrosDatosInterfaceSalidaTraspaso(organizacionID,
                                                                                                folioOrigen);
                DataSet ds = Retrieve("InterfaceSalidaTraspaso_ObtenerPorFolioTraspaso", parametros);
                if (ValidateDataSet(ds))
                {
                    result = MapInterfaceSalidaTraspasoDAL.ObtenerDatosInterfaceSalidaTraspaso(ds);
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(result);
        }
Esempio n. 13
0
 /// <summary>
 /// Obtiene los parametros para insertar un nuevo registro en la tabla InterfaceSalidaTraspaso
 /// </summary>
 /// <param name="interfaceSalidaTraspaso"></param>
 /// <returns></returns>
 internal static Dictionary <string, object> ObtenerParametrosInterfaceSalidaTraspasoPorFolioOrganizacion(InterfaceSalidaTraspasoInfo interfaceSalidaTraspaso)
 {
     try
     {
         Logger.Info();
         var parametros = new Dictionary <string, object>
         {
             { "@OrganizacionID", interfaceSalidaTraspaso.OrganizacionId },
             { "@FolioTraspaso", interfaceSalidaTraspaso.FolioTraspaso }
         };
         return(parametros);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
        /// <summary>
        /// Guarda una lista de interface salida traspaso.
        /// </summary>
        /// <param name="interfaceSalidaTraspaso"></param>
        internal Dictionary <long, decimal> CrearLista(InterfaceSalidaTraspasoInfo interfaceSalidaTraspaso)
        {
            decimal costoGanado = 0;

            try
            {
                var interfaceSalidaTraspasoDal = new InterfaceSalidaTraspasoDAL();
                using (var scope = new TransactionScope())
                {
                    interfaceSalidaTraspaso.TraspasoGanado =
                        interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle.Select(det => det.TraspasoGanado).
                        FirstOrDefault();
                    interfaceSalidaTraspaso.SacrificioGanado =
                        interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle.Select(det => det.SacrificioGanado).
                        FirstOrDefault();

                    InterfaceSalidaTraspasoInfo interfaceSalidaTraspasoGuardado;

                    if (interfaceSalidaTraspaso.InterfaceSalidaTraspasoId > 0)
                    {
                        Actualizar(interfaceSalidaTraspaso);
                        interfaceSalidaTraspasoGuardado = interfaceSalidaTraspaso;
                    }
                    else
                    {
                        var folioBL = new FolioBL();
                        interfaceSalidaTraspaso.FolioTraspaso = folioBL.ObtenerFolio(interfaceSalidaTraspaso.OrganizacionId
                                                                                     , TipoFolio.TraspasoGanado);
                        interfaceSalidaTraspasoGuardado = Crear(interfaceSalidaTraspaso);
                    }
                    var loteBL = new LoteBL();
                    if (interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle.Any())
                    {
                        interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle.ForEach(
                            det =>
                            det.InterfaceSalidaTraspasoID = interfaceSalidaTraspasoGuardado.InterfaceSalidaTraspasoId);

                        interfaceSalidaTraspasoDal.CrearLista(interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle);
                        List <LoteInfo> lotes = interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle
                                                .Select(lote => new LoteInfo
                        {
                            LoteID  = lote.Lote.LoteID,
                            Cabezas = lote.Cabezas,
                            UsuarioModificacionID = lote.UsuarioCreacionID
                        }).ToList();
                        loteBL.AcutalizaCabezasLoteXML(lotes);
                        List <LoteInfo> lotesCabezas = lotes.GroupBy(lote => lote.LoteID).Select(x => new LoteInfo
                        {
                            LoteID  = x.Key,
                            Cabezas = x.Sum(cab => cab.Cabezas),
                            UsuarioModificacionID = x.Select(usu => usu.UsuarioModificacionID).FirstOrDefault()
                        }).ToList();
                        List <LoteInfo> lotesDesactivar =
                            (from ist in interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle
                             from lote in lotesCabezas
                             where ist.Lote.Cabezas - lote.Cabezas == 0
                             select lote).ToList();
                        if (lotesDesactivar.Any())
                        {
                            loteBL.DesactivarLoteXML(lotesDesactivar);
                        }
                    }
                    #region POLIZA
                    if (interfaceSalidaTraspasoGuardado.PesoBruto > 0 && interfaceSalidaTraspasoGuardado.PesoTara > 0)
                    {
                        var      polizaBL       = new PolizaBL();
                        int      organizacionID = interfaceSalidaTraspasoGuardado.OrganizacionId;
                        DateTime fechaEnvio     = interfaceSalidaTraspasoGuardado.FechaEnvio;
                        long     folio          = interfaceSalidaTraspasoGuardado.FolioTraspaso;

                        IList <PolizaInfo> polizasGanado =
                            polizaBL.ObtenerPolizaConDocumentoSAPPendientes(TipoPoliza.SalidaGanado, organizacionID, fechaEnvio);
                        if (polizasGanado != null)
                        {
                            polizasGanado = polizasGanado.Where(con => con.Concepto.StartsWith(string.Format("ST-{0} ", folio))).ToList();
                        }
                        if (polizasGanado == null || !polizasGanado.Any())
                        {
                            InterfaceSalidaTraspasoInfo interfaceSalidaTraspasoSacarDetalle =
                                ObtenerInterfaceSalidaTraspasoPorFolioOrganizacion(interfaceSalidaTraspasoGuardado);
                            if (interfaceSalidaTraspasoSacarDetalle != null)
                            {
                                interfaceSalidaTraspasoGuardado.ListaInterfaceSalidaTraspasoDetalle =
                                    interfaceSalidaTraspasoSacarDetalle.ListaInterfaceSalidaTraspasoDetalle;
                            }
                            List <LoteInfo> lotesAnimal = interfaceSalidaTraspasoGuardado.ListaInterfaceSalidaTraspasoDetalle
                                                          .Select(lote => new LoteInfo
                            {
                                LoteID = lote.Lote.LoteID
                            }).ToList();
                            var animalBL = new AnimalBL();
                            List <AnimalInfo> animales
                                = animalBL.ObtenerAnimalesPorLoteXML(lotesAnimal, interfaceSalidaTraspaso.OrganizacionId);
                            int cabezas = interfaceSalidaTraspasoGuardado.ListaInterfaceSalidaTraspasoDetalle
                                          .Sum(cab => cab.Cabezas);
                            if (cabezas > animales.Count)
                            {
                                throw new ExcepcionServicio("No existe suficiente inventario para realizar el traspaso.");
                            }

                            var polizaSalidaGanado =
                                FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.SalidaGanado);
                            polizasGanado = polizaSalidaGanado.GeneraPoliza(interfaceSalidaTraspasoGuardado);
                            if (polizasGanado != null && polizasGanado.Any())
                            {
                                polizasGanado.ToList().ForEach(datos =>
                                {
                                    datos.OrganizacionID =
                                        interfaceSalidaTraspaso.OrganizacionId;
                                    datos.UsuarioCreacionID =
                                        interfaceSalidaTraspaso.UsuarioModificacionID ??
                                        0;
                                    datos.ArchivoEnviadoServidor = 1;
                                });
                                polizaBL.GuardarServicioPI(polizasGanado, TipoPoliza.SalidaGanado);
                            }
                        }
                        if (polizasGanado != null)
                        {
                            costoGanado =
                                polizasGanado.Where(imp => imp.Importe.IndexOf('-') < 0).Sum(
                                    imp => Convert.ToDecimal(imp.Importe));
                        }
                    }

                    #endregion POLIZA
                    scope.Complete();
                }
            }
            catch (ExcepcionServicio ex)
            {
                Logger.Error(ex);
                throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(new Dictionary <long, decimal> {
                { interfaceSalidaTraspaso.FolioTraspaso, costoGanado }
            });
        }
        /// <summary>
        /// Agrupa los costos de ganado de la interfaz
        /// </summary>
        /// <param name="entradaGanadoCosteo"></param>
        /// <param name="organizacionId"></param>
        /// <param name="interfaceSalidaTraspaso"></param>
        /// <param name="interfaceSalidaTraspasoCosto"></param>
        private void AgruparValoresInterfaz(EntradaGanadoCosteoInfo entradaGanadoCosteo, int organizacionId, InterfaceSalidaTraspasoInfo interfaceSalidaTraspaso, List <InterfaceSalidaTraspasoCostoInfo> interfaceSalidaTraspasoCosto)
        {
            var interfaceSalidaBL = new InterfaceSalidaBL();
            var costosAgrupados   = (from costos in entradaGanadoCosteo.ListaCostoEntrada
                                     group costos by costos.Costo.CostoID
                                     into costoAgrupado
                                     let interfaceSalidaCostoInfo = costoAgrupado.FirstOrDefault()
                                                                    let claveContable =
                                         interfaceSalidaBL.ObtenerCuentaInventario(interfaceSalidaCostoInfo.Costo,
                                                                                   organizacionId,
                                                                                   ClaveCuenta.CuentaInventarioIntensivo)
                                         where interfaceSalidaCostoInfo != null
                                         select new EntradaGanadoCostoInfo
            {
                Costo = interfaceSalidaCostoInfo.Costo,
                TieneCuenta = true,
                Importe = costoAgrupado.Sum(cos => cos.Importe),
                CuentaProvision = claveContable.Valor,
                DescripcionCuenta = claveContable.Descripcion,
                Origen = true
            }).ToList();

            entradaGanadoCosteo.ListaCalidadGanado = entradaGanadoCosteo.ListaCalidadGanado
                                                     .GroupBy(calidad => calidad.CalidadGanado.CalidadGanadoID)
                                                     .Select(calidad => new EntradaGanadoCalidadInfo
            {
                CalidadGanado
                    = new CalidadGanadoInfo
                    {
                        CalidadGanadoID = calidad.Key,
                        Calidad         =
                            calidad.Select(cal => cal.CalidadGanado.Calidad).
                            FirstOrDefault(),
                        Descripcion =
                            calidad.Select(cal => cal.CalidadGanado.Descripcion).
                            FirstOrDefault(),
                        Sexo =
                            calidad.Select(
                                id => id.CalidadGanado.Sexo).
                            FirstOrDefault()
                    },
                Valor = calidad.Sum(cal => cal.Valor),
            }).ToList();
            decimal importeGanado =
                costosAgrupados.Where(imp => imp.Costo.CostoID == 1).Select(imp => imp.Importe).FirstOrDefault();
            int cabezas = entradaGanadoCosteo.ListaCalidadGanado.Sum(cab => cab.Valor);

            importeGanado = importeGanado + (320 * cabezas);

            EntradaGanadoCostoInfo costoGanado = costosAgrupados.FirstOrDefault(id => id.Costo.CostoID == 1);
            decimal costosNoGanado             = costosAgrupados.Where(id => id.Costo.CostoID != 1).Sum(imp => imp.Importe);

            importeGanado      += costosNoGanado;
            costoGanado.Importe = importeGanado;
            entradaGanadoCosteo.ListaCostoEntrada = costosAgrupados.Where(id => id.Costo.CostoID == 1).ToList();

            foreach (var entradaDetalle in entradaGanadoCosteo.ListaEntradaDetalle)
            {
                var interfaceDetalle =
                    interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle.FirstOrDefault(
                        det => det.TipoGanado.TipoGanadoID == entradaDetalle.TipoGanado.TipoGanadoID);

                if (interfaceDetalle != null)
                {
                    decimal importeGanadoDetalle =
                        interfaceSalidaTraspasoCosto.Where(
                            cos =>
                            cos.InterfaceSalidaTraspasoDetalle.InterfaceSalidaTraspasoDetalleID ==
                            interfaceDetalle.InterfaceSalidaTraspasoDetalleID &&
                            cos.Costo.CostoID == Costo.CostoGanado.GetHashCode()).Sum(cos => cos.Importe);

                    importeGanadoDetalle = importeGanadoDetalle + (320 * entradaDetalle.Cabezas);

                    decimal importeGanadoDetalleNoGanado =
                        interfaceSalidaTraspasoCosto.Where(
                            cos =>
                            cos.InterfaceSalidaTraspasoDetalle.InterfaceSalidaTraspasoDetalleID ==
                            interfaceDetalle.InterfaceSalidaTraspasoDetalleID &&
                            cos.Costo.CostoID != Costo.CostoGanado.GetHashCode()).Sum(cos => cos.Importe);

                    importeGanadoDetalle = importeGanadoDetalle + importeGanadoDetalleNoGanado;

                    entradaDetalle.Importe    = importeGanadoDetalle;
                    entradaDetalle.PrecioKilo = entradaDetalle.Importe / entradaDetalle.PesoOrigen;
                }
            }

            //entradaGanadoCosteo.ListaEntradaDetalle =
            //    entradaGanadoCosteo.ListaEntradaDetalle.GroupBy(tipo => tipo.TipoGanado.TipoGanadoID).Select(
            //        detalle => new EntradaDetalleInfo
            //                       {
            //                           TipoGanado = new TipoGanadoInfo
            //                                            {
            //                                                TipoGanadoID = detalle.Key,
            //                                                Descripcion =
            //                                                    detalle.Select(
            //                                                        des =>
            //                                                        des.TipoGanado.Descripcion).
            //                                                    FirstOrDefault()
            //                                            },
            //                           Cabezas = detalle.Sum(cab => cab.Cabezas),
            //                           PesoOrigen = detalle.Sum(peso => peso.PesoOrigen),
            //                           FechaSalidaInterface =
            //                               detalle.Select(fecha => fecha.FechaSalidaInterface).FirstOrDefault(),
            //                           PrecioKilo = importeGanado / detalle.Sum(peso => peso.PesoOrigen),
            //                           Importe =
            //                               (importeGanado / detalle.Sum(peso => peso.PesoOrigen)) *
            //                               detalle.Sum(peso => peso.PesoOrigen)
            //                       }).ToList();
        }
        private IList <PolizaInfo> ObtenerPoliza(InterfaceSalidaTraspasoInfo interfaceSalidaTraspaso, List <InterfaceSalidaTraspasoCostoInfo> interfaceSalidaTraspasoCosto)
        {
            var polizasSalidaTraspaso = new List <PolizaInfo>();

            IList <CuentaSAPInfo> cuentasSap = ObtenerCuentasSAP();

            TipoPolizaInfo tipoPoliza =
                TiposPoliza.FirstOrDefault(
                    clave => clave.TipoPolizaID == TipoPoliza.PolizaSacrificioTraspasoGanado.GetHashCode());

            if (tipoPoliza == null)
            {
                throw new ExcepcionServicio(string.Format("{0} {1}", "EL TIPO DE POLIZA",
                                                          TipoPoliza.PolizaSacrificioTraspasoGanado));
            }
            string textoDocumento  = tipoPoliza.TextoDocumento;
            string postFijoRef3    = tipoPoliza.PostFijoRef3;
            string prefijoConcepto = tipoPoliza.ClavePoliza;

            OrganizacionInfo organizacionDestino =
                ObtenerOrganizacionIVA(interfaceSalidaTraspaso.OrganizacionDestino.OrganizacionID);

            OrganizacionInfo organizacionOrigen =
                ObtenerOrganizacionIVA(interfaceSalidaTraspaso.OrganizacionId);
            string divisionOrigen = organizacionOrigen.Division;

            long folioTraspaso = interfaceSalidaTraspaso.FolioTraspaso;

            List <LoteInfo> lotes =
                interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle.Select(lote => lote.Lote).ToList();

            var costoBL = new CostoBL();
            IList <CostoInfo> costos = costoBL.ObtenerTodos(EstatusEnum.Activo);

            List <InterfaceSalidaTraspasoCostoInfo> animalesPorLote;
            int loteID;

            const string COMPLEMENTO_REF1       = "czas.";
            const string UNIDAD_MOVIMIENTO      = "Kgs.";
            const string DESCRIPCION_MOVIMIENTO = "CABEZAS";

            DateTime fechaEnvio = interfaceSalidaTraspaso.FechaEnvio;

            ParametroOrganizacionInfo parametroOrganizacion =
                ObtenerParametroOrganizacionPorClave(organizacionOrigen.OrganizacionID,
                                                     ParametrosEnum.CTACENTROCOSTOENG.ToString());

            for (var indexLotes = 0; indexLotes < lotes.Count; indexLotes++)
            {
                Thread.Sleep(999);
                var ref3 = new StringBuilder();
                ref3.Append("03");
                ref3.Append(Convert.ToString(folioTraspaso).PadLeft(10, ' '));
                ref3.Append(new Random(10).Next(10, 20));
                ref3.Append(new Random(30).Next(30, 40));
                ref3.Append(DateTime.Now.Millisecond);
                ref3.Append(postFijoRef3);

                var archivoFolio =
                    new StringBuilder(ObtenerArchivoFolio(fechaEnvio));
                //var numeroDocumento =
                //    new StringBuilder(string.Format("{0}{1}", folioTraspaso, ObtenerNumeroReferencia));
                var numeroDocumento = ObtenerNumeroReferenciaFolio(folioTraspaso);

                loteID          = lotes[indexLotes].LoteID;
                animalesPorLote = (from ani in interfaceSalidaTraspasoCosto
                                   from movs in interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle
                                   where movs.Lote.LoteID == loteID
                                   &&
                                   ani.InterfaceSalidaTraspasoDetalle.InterfaceSalidaTraspasoDetalleID ==
                                   movs.InterfaceSalidaTraspasoDetalleID
                                   orderby ani.InterfaceSalidaTraspasoCostoID, ani.AnimalID
                                   select ani).ToList();
                var renglon = 1;
                if (animalesPorLote.Any())
                {
                    int cabezas = interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle.Where(
                        loteId => loteId.Lote.LoteID == loteID).Select(
                        cabe => cabe.Cabezas).FirstOrDefault();
                    List <long> animalesAFacturar = ObtenerAnimalesPorFacturar(animalesPorLote, cabezas);
                    animalesPorLote =
                        animalesPorLote.Join(animalesAFacturar, lote => lote.AnimalID, id => id, (lote, id) => lote).
                        ToList();
                    var interfaceSalidaTraspasoCostoBL = new InterfaceSalidaTraspasoCostoBL();
                    interfaceSalidaTraspasoCostoBL.ActualizarFacturado(animalesAFacturar);
                    if (animalesPorLote.Any())
                    {
                        if (animalesPorLote.Any())
                        {
                            animalesPorLote = animalesPorLote
                                              .GroupBy(costoAnimal => costoAnimal.Costo.CostoID)
                                              .Select(dinero => new InterfaceSalidaTraspasoCostoInfo
                            {
                                AnimalID =
                                    dinero.Select(id => id.AnimalID).FirstOrDefault(),
                                Costo = new CostoInfo
                                {
                                    CostoID = dinero.Key
                                },
                                Importe = dinero.Sum(imp => imp.Importe),
                            }).ToList();
                            ClaveContableInfo claveContableDestino;
                            ClaveContableInfo claveContableOrigen;
                            CostoInfo         costo;

                            CuentaSAPInfo   cuentaSapDestino;
                            CuentaSAPInfo   cuentaSapOrigen;
                            DatosPolizaInfo datos;
                            PolizaInfo      polizaSalida;

                            decimal pesoOrigen = interfaceSalidaTraspaso.PesoBruto -
                                                 interfaceSalidaTraspaso.PesoTara;
                            InterfaceSalidaTraspasoCostoInfo animalCosto;
                            for (var indexCostos = 0; indexCostos < animalesPorLote.Count; indexCostos++)
                            {
                                animalCosto = animalesPorLote[indexCostos];
                                costo       =
                                    costos.FirstOrDefault(
                                        id => id.CostoID == animalCosto.Costo.CostoID);
                                claveContableDestino = ObtenerCuentaInventario(costo
                                                                               , organizacionDestino.OrganizacionID
                                                                               ,
                                                                               TipoPoliza.SalidaGanado);
                                claveContableOrigen = ObtenerCuentaInventario(costo
                                                                              , organizacionOrigen.OrganizacionID
                                                                              ,
                                                                              TipoPoliza.
                                                                              PolizaSacrificioTraspasoGanado);
                                cuentaSapDestino =
                                    cuentasSap.FirstOrDefault(
                                        clave => clave.CuentaSAP.Equals(claveContableDestino.Valor));
                                if (cuentaSapDestino == null)
                                {
                                    throw new ExcepcionServicio(string.Format("{0} {1}",
                                                                              "NO SE CUENTA CON CONFIGURACIÓN PARA CUENTA DE INVENTARIO",
                                                                              claveContableDestino.Valor));
                                }
                                cuentaSapOrigen =
                                    cuentasSap.FirstOrDefault(
                                        clave => clave.CuentaSAP.Equals(claveContableOrigen.Valor));
                                if (cuentaSapOrigen == null)
                                {
                                    throw new ExcepcionServicio(string.Format("{0} {1}",
                                                                              "NO SE CUENTA CON CONFIGURACIÓN PARA CUENTA DE TRANSITO",
                                                                              claveContableOrigen.Valor));
                                }
                                datos = new DatosPolizaInfo
                                {
                                    NumeroReferencia = numeroDocumento,
                                    FechaEntrada     = fechaEnvio,
                                    Folio            = folioTraspaso.ToString(),
                                    CabezasRecibidas = cabezas.ToString(),
                                    NumeroDocumento  = folioTraspaso.ToString(),
                                    ClaseDocumento   = postFijoRef3,
                                    Importe          =
                                        string.Format("{0}", Cancelacion ? (animalCosto.Importe * -1).ToString("F2")
                                                                         : animalCosto.Importe.ToString("F2")),
                                    IndicadorImpuesto = String.Empty,
                                    Renglon           = Convert.ToString(renglon++),
                                    Cabezas           = Convert.ToString(cabezas),
                                    ImporteIva        = "0",
                                    Ref3             = ref3.ToString(),
                                    ArchivoFolio     = archivoFolio.ToString(),
                                    DescripcionCosto = cuentaSapOrigen.Descripcion,
                                    Cuenta           = cuentaSapOrigen.CuentaSAP,
                                    CentroCosto      =
                                        cuentaSapOrigen.CuentaSAP.StartsWith(PrefijoCuentaCentroCosto)
                                            ? parametroOrganizacion.Valor
                                            : string.Empty,
                                    PesoOrigen      = pesoOrigen,
                                    Division        = divisionOrigen,
                                    ComplementoRef1 = COMPLEMENTO_REF1,
                                    TipoDocumento   = textoDocumento,
                                    Concepto        =
                                        String.Format("{0}-{1} ,{2} {3}, {4} {5}", prefijoConcepto,
                                                      folioTraspaso,
                                                      cabezas, DESCRIPCION_MOVIMIENTO,
                                                      pesoOrigen.ToString("N0"), UNIDAD_MOVIMIENTO),
                                    Sociedad = organizacionDestino.Sociedad,
                                    Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacionDestino.Sociedad),
                                };
                                polizaSalida = GeneraRegistroPoliza(datos);
                                polizasSalidaTraspaso.Add(polizaSalida);

                                datos = new DatosPolizaInfo
                                {
                                    NumeroReferencia = numeroDocumento,
                                    FechaEntrada     = fechaEnvio,
                                    Folio            = folioTraspaso.ToString(),
                                    CabezasRecibidas = cabezas.ToString(),
                                    NumeroDocumento  = folioTraspaso.ToString(),
                                    ClaseDocumento   = postFijoRef3,
                                    Importe          =
                                        string.Format("{0}", Cancelacion ? animalCosto.Importe.ToString("F2")
                                                                         : (animalCosto.Importe * -1).ToString("F2")),
                                    IndicadorImpuesto = String.Empty,
                                    Renglon           = Convert.ToString(renglon++),
                                    Cabezas           = Convert.ToString(cabezas),
                                    ImporteIva        = "0",
                                    Ref3             = ref3.ToString(),
                                    ArchivoFolio     = archivoFolio.ToString(),
                                    DescripcionCosto = cuentaSapDestino.Descripcion,
                                    Cuenta           = cuentaSapDestino.CuentaSAP,
                                    PesoOrigen       = pesoOrigen,
                                    Division         = divisionOrigen,
                                    ComplementoRef1  = COMPLEMENTO_REF1,
                                    TipoDocumento    = textoDocumento,
                                    Concepto         =
                                        String.Format("{0}-{1} ,{2} {3}, {4} {5}", prefijoConcepto,
                                                      folioTraspaso,
                                                      cabezas, DESCRIPCION_MOVIMIENTO,
                                                      pesoOrigen.ToString("N0"), UNIDAD_MOVIMIENTO),
                                    Sociedad = organizacionDestino.Sociedad,
                                    Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacionDestino.Sociedad),
                                };
                                polizaSalida = GeneraRegistroPoliza(datos);
                                polizasSalidaTraspaso.Add(polizaSalida);
                            }
                        }
                    }
                }
            }
            return(polizasSalidaTraspaso);
        }
        /// <summary>
        /// Obtiene
        /// </summary>
        /// <param name="organizacionID"> </param>
        /// <param name="folioOrigen"> </param>
        /// <returns></returns>
        internal EntradaGanadoCosteoInfo ObtenerDatosInterfaceSalidaTraspaso(int organizacionID, int folioOrigen)
        {
            EntradaGanadoCosteoInfo entradaGanadoCosteo = null;

            try
            {
                Logger.Info();
                var interfaceSalidaTraspaspBl = new InterfaceSalidaTraspasoDAL();
                InterfaceSalidaTraspasoInfo interfaceSalidaTraspaso =
                    interfaceSalidaTraspaspBl.ObtenerDatosInterfaceSalidaTraspaso(organizacionID, folioOrigen);
                if (interfaceSalidaTraspaso != null)
                {
                    entradaGanadoCosteo = new EntradaGanadoCosteoInfo
                    {
                        ListaCalidadGanado  = new List <EntradaGanadoCalidadInfo>(),
                        ListaCostoEntrada   = new List <EntradaGanadoCostoInfo>(),
                        ListaEntradaDetalle = new List <EntradaDetalleInfo>(),
                    };
                    var animalBL = new AnimalBL();
                    var interfaceSalidaTraspasoCostoBL = new InterfaceSalidaTraspasoCostoBL();
                    List <InterfaceSalidaTraspasoCostoInfo> interfaceSalidaTraspasoCosto =
                        interfaceSalidaTraspasoCostoBL.ObtenerCostosInterfacePorDetalle(interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle);
                    var animalesID = new HashSet <long>(interfaceSalidaTraspasoCosto.Select(id => id.AnimalID));
                    List <AnimalInfo> animalesTraspaso = animalesID.Select(ani => new AnimalInfo
                    {
                        AnimalID = ani,
                        Activo   = false
                    }).ToList();
                    List <AnimalInfo> animalesMovimientoSalidaTraspaso = animalBL.ObtenerMovimientosPorXML(animalesTraspaso);
                    if (animalesMovimientoSalidaTraspaso != null && animalesMovimientoSalidaTraspaso.Any())
                    {
                        var animalesMovimiento = new List <AnimalMovimientoInfo>();
                        animalesMovimientoSalidaTraspaso.ForEach(
                            movs => animalesMovimiento.AddRange(movs.ListaAnimalesMovimiento));

                        int     pesoNeto     = interfaceSalidaTraspaso.PesoBruto - interfaceSalidaTraspaso.PesoTara;
                        decimal pesoLote     = 0;
                        int     totalCabezas = interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle.Sum(cab => cab.Cabezas);

                        var costoBL = new CostoBL();
                        IList <CostoInfo> costos = costoBL.ObtenerTodos(EstatusEnum.Activo);
                        int cabezas = interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle.Sum(cabe => cabe.Cabezas);
                        entradaGanadoCosteo.ListaCalidadGanado.AddRange(
                            animalesMovimientoSalidaTraspaso.GroupBy(tipo => tipo.TipoGanado.TipoGanadoID).Select(
                                calidad => new EntradaGanadoCalidadInfo
                        {
                            CalidadGanado
                                = new CalidadGanadoInfo
                                {
                                    CalidadGanadoID =
                                        calidad.Select(
                                            id =>
                                            id.CalidadGanado.CalidadGanadoID).
                                        FirstOrDefault(),
                                    Calidad     = calidad.Select(cal => cal.CalidadGanado.Calidad).FirstOrDefault(),
                                    Descripcion = calidad.Select(cal => cal.CalidadGanado.Descripcion).FirstOrDefault(),
                                    Sexo        =
                                        calidad.Select(
                                            id => id.CalidadGanado.Sexo).
                                        FirstOrDefault()
                                },
                            Valor = calidad.Count(),
                        }));
                        pesoLote = (pesoNeto * cabezas) / totalCabezas;
                        int pesoPromedio = Convert.ToInt32(pesoLote / totalCabezas);
                        entradaGanadoCosteo.ListaEntradaDetalle.AddRange(
                            interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle.GroupBy(tipo => tipo.TipoGanado.TipoGanadoID).Select(
                                detalle => new EntradaDetalleInfo
                        {
                            TipoGanado = new TipoGanadoInfo
                            {
                                TipoGanadoID = detalle.Key,
                                Descripcion  = detalle.Select(des => des.TipoGanado.Descripcion).FirstOrDefault()
                            },
                            Cabezas              = detalle.Select(des => des.Cabezas).FirstOrDefault(),
                            PesoOrigen           = detalle.Select(des => des.Cabezas).FirstOrDefault() * pesoPromedio,
                            FechaSalidaInterface = interfaceSalidaTraspaso.FechaEnvio,
                        }));
                        int pesoTotalAgrupado = Convert.ToInt32(entradaGanadoCosteo.ListaEntradaDetalle.Sum(det => det.PesoOrigen));
                        if (pesoTotalAgrupado != pesoNeto)
                        {
                            int diferencia = pesoNeto - pesoTotalAgrupado;
                            EntradaDetalleInfo primerDetalle = entradaGanadoCosteo.ListaEntradaDetalle.FirstOrDefault();
                            if (primerDetalle != null)
                            {
                                primerDetalle.PesoOrigen = primerDetalle.PesoOrigen + diferencia;
                            }
                        }
                        //entradaGanadoCosteo.ListaEntradaDetalle.AddRange(
                        //    animalesMovimientoSalidaTraspaso.GroupBy(tipo => tipo.TipoGanado.TipoGanadoID).Select(
                        //        detalle => new EntradaDetalleInfo
                        //        {
                        //            TipoGanado = new TipoGanadoInfo
                        //            {
                        //                TipoGanadoID = detalle.Key,
                        //                Descripcion =
                        //                    detalle.Select(
                        //                        des =>
                        //                        des.TipoGanado.Descripcion).
                        //                    FirstOrDefault()
                        //            },
                        //            Cabezas = detalle.Count(),
                        //            PesoOrigen = pesoLote,
                        //            FechaSalidaInterface = interfaceSalidaTraspaso.FechaEnvio,
                        //        }));
                        entradaGanadoCosteo.ListaCostoEntrada.AddRange(interfaceSalidaTraspasoCosto
                                                                       .GroupBy(cos => cos.Costo.CostoID).Select(grp =>
                                                                                                                 new EntradaGanadoCostoInfo
                        {
                            Costo = new CostoInfo
                            {
                                CostoID       = grp.Key,
                                ImporteCosto  = grp.Sum(imp => imp.Importe),
                                ClaveContable = costos.Where(id => id.CostoID == grp.Key)
                                                .Select(clave => clave.ClaveContable)
                                                .FirstOrDefault(),
                                Descripcion = costos.Where(id => id.CostoID == grp.Key)
                                              .Select(desc => desc.Descripcion)
                                              .FirstOrDefault()
                            },
                            Importe = grp.Sum(imp => imp.Importe),
                        }));
                        ValidarPeso(entradaGanadoCosteo, pesoNeto);
                        AgruparValoresInterfaz(entradaGanadoCosteo, organizacionID, interfaceSalidaTraspaso, interfaceSalidaTraspasoCosto);
                        CompletarCalidadGanado(entradaGanadoCosteo);
                        AsignarProveedorSuKarne300(entradaGanadoCosteo);
                    }
                }
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(entradaGanadoCosteo);
        }
 /// <summary>
 /// Obtiene el listado de organizaciones que se han registrado del dia
 /// </summary>
 /// <returns></returns>
 internal InterfaceSalidaTraspasoInfo ObtenerInterfaceSalidaTraspasoPorFolioOrganizacion(InterfaceSalidaTraspasoInfo interfaceSalidaTraspasoInfo)
 {
     try
     {
         Logger.Info();
         var interfaceSalidaTraspaspBl = new InterfaceSalidaTraspasoDAL();
         return(interfaceSalidaTraspaspBl.ObtenerInterfaceSalidaTraspasoPorFolioOrganizacion(interfaceSalidaTraspasoInfo));
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
Esempio n. 19
0
        private IList <PolizaInfo> GeneraDatosPoliza(InterfaceSalidaTraspasoInfo interfaceSalidaTraspaso)
        {
            var polizasSalidaTraspaso = new List <PolizaInfo>();

            IList <CuentaSAPInfo> cuentasSap = ObtenerCuentasSAP();

            TipoPolizaInfo tipoPoliza =
                TiposPoliza.FirstOrDefault(clave => clave.TipoPolizaID == TipoPoliza.SalidaGanado.GetHashCode());

            if (tipoPoliza == null)
            {
                throw new ExcepcionServicio(string.Format("{0} {1}", "EL TIPO DE POLIZA",
                                                          TipoPoliza.SalidaGanado));
            }
            string textoDocumento  = tipoPoliza.TextoDocumento;
            string postFijoRef3    = tipoPoliza.PostFijoRef3;
            string prefijoConcepto = tipoPoliza.ClavePoliza;

            OrganizacionInfo organizacionDestino =
                ObtenerOrganizacionIVA(interfaceSalidaTraspaso.OrganizacionDestino.OrganizacionID);

            OrganizacionInfo organizacionOrigen =
                ObtenerOrganizacionIVA(interfaceSalidaTraspaso.OrganizacionId);
            string divisionOrigen = organizacionOrigen.Division;

            long folioTraspaso = interfaceSalidaTraspaso.FolioTraspaso;

            var             animalBL = new AnimalBL();
            List <LoteInfo> lotes    =
                interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle.Select(lote => lote.Lote).ToList();
            List <AnimalInfo> animalesMovimientoSalidaTraspaso = animalBL.ObtenerMovimientosPorLoteXML(lotes);

            List <AnimalInfo> animalesMovimientoSacrificadosLote = animalBL.ObtenerMovimientosPorLoteSacrificadosXML(lotes);

            if (animalesMovimientoSacrificadosLote == null)
            {
                animalesMovimientoSacrificadosLote = new List <AnimalInfo>();
            }

            if (animalesMovimientoSalidaTraspaso != null && animalesMovimientoSalidaTraspaso.Any())
            {
                var costosGanadoTransferido = new List <InterfaceSalidaTraspasoCostoInfo>();
                var animalesMovimiento      = new List <AnimalMovimientoInfo>();
                animalesMovimientoSalidaTraspaso.ForEach(
                    movs => animalesMovimiento.AddRange(movs.ListaAnimalesMovimiento));

                var animalCostoBL = new AnimalCostoBL();
                List <AnimalCostoInfo> costosAnimal =
                    animalCostoBL.ObtenerCostosAnimal(animalesMovimientoSalidaTraspaso);

                var costoBL = new CostoBL();
                IList <CostoInfo> costos = costoBL.ObtenerTodos(EstatusEnum.Activo);

                List <AnimalInfo> animalesPorLote;
                List <AnimalInfo> animalesSacrificadosPorLote;

                int loteID;

                const string COMPLEMENTO_REF1       = "czas.";
                const string UNIDAD_MOVIMIENTO      = "Kgs.";
                const string DESCRIPCION_MOVIMIENTO = "CABEZAS";

                DateTime fechaEnvio = interfaceSalidaTraspaso.FechaEnvio;

                for (var indexLotes = 0; indexLotes < lotes.Count; indexLotes++)
                {
                    Thread.Sleep(999);
                    var ref3 = new StringBuilder();
                    ref3.Append("03");
                    ref3.Append(Convert.ToString(folioTraspaso).PadLeft(10, ' '));
                    ref3.Append(new Random(10).Next(10, 20));
                    ref3.Append(new Random(30).Next(30, 40));
                    ref3.Append(DateTime.Now.Millisecond);
                    ref3.Append(postFijoRef3);

                    var archivoFolio =
                        new StringBuilder(ObtenerArchivoFolio(fechaEnvio));
                    //var numeroDocumento =
                    //    new StringBuilder(string.Format("{0}{1}", folioTraspaso, ObtenerNumeroReferencia));
                    var numeroDocumento = ObtenerNumeroReferenciaFolio(folioTraspaso);

                    loteID          = lotes[indexLotes].LoteID;
                    animalesPorLote = (from ani in animalesMovimientoSalidaTraspaso
                                       from movs in animalesMovimiento
                                       where ani.AnimalID == movs.AnimalID &&
                                       movs.LoteID == loteID
                                       orderby ani.AnimalID
                                       select ani).ToList();
                    animalesSacrificadosPorLote =
                        animalesMovimientoSacrificadosLote.Where(lote => lote.LoteID == loteID).ToList();
                    var renglon = 1;
                    if (animalesPorLote.Any())
                    {
                        int cabezas = interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle.Where(
                            loteId => loteId.Lote.LoteID == loteID).Select(
                            cabe => cabe.Cabezas).FirstOrDefault();
                        int interfaceSalidaTraspasoDetalleID =
                            interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle.Where(
                                loteId => loteId.Lote.LoteID == loteID).Select(
                                cabe => cabe.InterfaceSalidaTraspasoDetalleID).FirstOrDefault();
                        animalesPorLote = EliminarAnimalesSacrificados(animalesPorLote,
                                                                       animalesSacrificadosPorLote);
                        animalesPorLote = animalesPorLote.Take(cabezas).ToList();
                        if (animalesPorLote.Any())
                        {
                            List <AnimalCostoInfo> costosAnimalesTraspasados =
                                costosAnimal.Join(animalesPorLote, info => info.AnimalID, cos => cos.AnimalID,
                                                  (info, cos) => info).ToList();
                            List <AnimalCostoInfo> costosAnimalesTraspasadosIndividual;
                            if (costosAnimalesTraspasados.Any())
                            {
                                costosAnimalesTraspasadosIndividual = costosAnimalesTraspasados
                                                                      .GroupBy(costoAnimal => new { costoAnimal.CostoID, costoAnimal.AnimalID })
                                                                      .Select(dinero => new AnimalCostoInfo
                                {
                                    AnimalCostoID =
                                        dinero.Select(id => id.AnimalCostoID).FirstOrDefault(),
                                    AnimalID   = dinero.Key.AnimalID,
                                    CostoID    = dinero.Key.CostoID,
                                    FechaCosto =
                                        dinero.Select(fecha => fecha.FechaCosto).
                                        FirstOrDefault(),
                                    FolioReferencia =
                                        dinero.Select(folio => folio.FolioReferencia).
                                        FirstOrDefault(),
                                    Importe        = dinero.Sum(imp => imp.Importe),
                                    OrganizacionID =
                                        dinero.Select(org => org.OrganizacionID).
                                        FirstOrDefault(),
                                    TipoReferencia =
                                        dinero.Select(tipo => tipo.TipoReferencia).
                                        FirstOrDefault()
                                }).ToList();

                                costosAnimalesTraspasados = costosAnimalesTraspasados
                                                            .GroupBy(costoAnimal => costoAnimal.CostoID)
                                                            .Select(dinero => new AnimalCostoInfo
                                {
                                    AnimalCostoID =
                                        dinero.Select(id => id.AnimalCostoID).FirstOrDefault(),
                                    AnimalID =
                                        dinero.Select(id => id.AnimalID).FirstOrDefault(),
                                    CostoID    = dinero.Select(id => id.CostoID).FirstOrDefault(),
                                    FechaCosto =
                                        dinero.Select(fecha => fecha.FechaCosto).
                                        FirstOrDefault(),
                                    FolioReferencia =
                                        dinero.Select(folio => folio.FolioReferencia).
                                        FirstOrDefault(),
                                    Importe        = dinero.Sum(imp => imp.Importe),
                                    OrganizacionID =
                                        dinero.Select(org => org.OrganizacionID).
                                        FirstOrDefault(),
                                    TipoReferencia =
                                        dinero.Select(tipo => tipo.TipoReferencia).
                                        FirstOrDefault()
                                }).ToList();
                                costosGanadoTransferido.AddRange(
                                    costosAnimalesTraspasadosIndividual.Select(
                                        dato => new InterfaceSalidaTraspasoCostoInfo
                                {
                                    AnimalID          = dato.AnimalID,
                                    Activo            = EstatusEnum.Activo,
                                    Importe           = dato.Importe,
                                    UsuarioCreacionID =
                                        interfaceSalidaTraspaso.
                                        UsuarioModificacionID.Value,
                                    Costo = new CostoInfo
                                    {
                                        CostoID =
                                            dato.CostoID
                                    },
                                    InterfaceSalidaTraspasoDetalle =
                                        new InterfaceSalidaTraspasoDetalleInfo
                                    {
                                        InterfaceSalidaTraspasoDetalleID
                                            =
                                                interfaceSalidaTraspasoDetalleID
                                    }
                                }));
                                ClaveContableInfo claveContableDestino;
                                ClaveContableInfo claveContableOrigen;
                                CostoInfo         costo;

                                CuentaSAPInfo   cuentaSapDestino;
                                CuentaSAPInfo   cuentaSapOrigen;
                                DatosPolizaInfo datos;
                                PolizaInfo      polizaSalida;

                                int cabezasRecibidas =
                                    interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle.Sum(cab => cab.Cabezas);
                                decimal         pesoOrigen = interfaceSalidaTraspaso.PesoBruto - interfaceSalidaTraspaso.PesoTara;
                                AnimalCostoInfo animalCosto;
                                for (var indexCostos = 0; indexCostos < costosAnimalesTraspasados.Count; indexCostos++)
                                {
                                    animalCosto = costosAnimalesTraspasados[indexCostos];
                                    costo       =
                                        costos.FirstOrDefault(
                                            id => id.CostoID == animalCosto.CostoID);
                                    claveContableDestino = ObtenerCuentaInventario(costo
                                                                                   , organizacionOrigen.OrganizacionID
                                                                                   ,
                                                                                   TipoOrganizacion.Ganadera.GetHashCode
                                                                                       ());
                                    claveContableOrigen = ObtenerCuentaInventario(costo
                                                                                  , organizacionDestino.OrganizacionID
                                                                                  , TipoPoliza.SalidaGanado);
                                    cuentaSapDestino =
                                        cuentasSap.FirstOrDefault(
                                            clave => clave.CuentaSAP.Equals(claveContableDestino.Valor));
                                    if (cuentaSapDestino == null)
                                    {
                                        throw new ExcepcionServicio(string.Format("{0} {1}",
                                                                                  "NO SE CUENTA CON CONFIGURACIÓN PARA CUENTA DE INVENTARIO",
                                                                                  claveContableDestino.Valor));
                                    }
                                    cuentaSapOrigen =
                                        cuentasSap.FirstOrDefault(
                                            clave => clave.CuentaSAP.Equals(claveContableOrigen.Valor));
                                    if (cuentaSapOrigen == null)
                                    {
                                        throw new ExcepcionServicio(string.Format("{0} {1}",
                                                                                  "NO SE CUENTA CON CONFIGURACIÓN PARA CUENTA DE TRANSITO",
                                                                                  claveContableOrigen.Valor));
                                    }
                                    datos = new DatosPolizaInfo
                                    {
                                        NumeroReferencia = numeroDocumento,
                                        FechaEntrada     = fechaEnvio,
                                        Folio            = folioTraspaso.ToString(),
                                        CabezasRecibidas = cabezasRecibidas.ToString(),
                                        NumeroDocumento  = folioTraspaso.ToString(),
                                        ClaseDocumento   = postFijoRef3,
                                        Importe          =
                                            string.Format("{0}", Cancelacion ? (animalCosto.Importe * -1).ToString("F2")
                                                                             : animalCosto.Importe.ToString("F2")),
                                        IndicadorImpuesto = String.Empty,
                                        Renglon           = Convert.ToString(renglon++),
                                        Cabezas           = Convert.ToString(cabezasRecibidas),
                                        ImporteIva        = "0",
                                        Ref3             = ref3.ToString(),
                                        ArchivoFolio     = archivoFolio.ToString(),
                                        DescripcionCosto = cuentaSapOrigen.Descripcion,
                                        Cuenta           = cuentaSapOrigen.CuentaSAP,
                                        PesoOrigen       = pesoOrigen,
                                        Division         = divisionOrigen,
                                        ComplementoRef1  = COMPLEMENTO_REF1,
                                        TipoDocumento    = textoDocumento,
                                        Concepto         =
                                            String.Format("{0}-{1} ,{2} {3}, {4} {5}", prefijoConcepto,
                                                          folioTraspaso,
                                                          cabezasRecibidas, DESCRIPCION_MOVIMIENTO,
                                                          pesoOrigen.ToString("N0"), UNIDAD_MOVIMIENTO),
                                        Sociedad = organizacionDestino.Sociedad,
                                        Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacionDestino.Sociedad),
                                    };
                                    polizaSalida = GeneraRegistroPoliza(datos);
                                    polizasSalidaTraspaso.Add(polizaSalida);

                                    datos = new DatosPolizaInfo
                                    {
                                        NumeroReferencia = numeroDocumento,
                                        FechaEntrada     = fechaEnvio,
                                        Folio            = folioTraspaso.ToString(),
                                        CabezasRecibidas = cabezasRecibidas.ToString(),
                                        NumeroDocumento  = folioTraspaso.ToString(),
                                        ClaseDocumento   = postFijoRef3,
                                        Importe          =
                                            string.Format("{0}", Cancelacion ? animalCosto.Importe.ToString("F2")
                                                                             : (animalCosto.Importe * -1).ToString("F2")),
                                        IndicadorImpuesto = String.Empty,
                                        Renglon           = Convert.ToString(renglon++),
                                        Cabezas           = Convert.ToString(cabezasRecibidas),
                                        ImporteIva        = "0",
                                        Ref3             = ref3.ToString(),
                                        ArchivoFolio     = archivoFolio.ToString(),
                                        DescripcionCosto = cuentaSapDestino.Descripcion,
                                        Cuenta           = cuentaSapDestino.CuentaSAP,
                                        PesoOrigen       = pesoOrigen,
                                        Division         = divisionOrigen,
                                        ComplementoRef1  = COMPLEMENTO_REF1,
                                        TipoDocumento    = textoDocumento,
                                        Concepto         =
                                            String.Format("{0}-{1} ,{2} {3}, {4} {5}", prefijoConcepto,
                                                          folioTraspaso,
                                                          cabezasRecibidas, DESCRIPCION_MOVIMIENTO,
                                                          pesoOrigen.ToString("N0"), UNIDAD_MOVIMIENTO),
                                        Sociedad = organizacionDestino.Sociedad,
                                        Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacionDestino.Sociedad),
                                    };
                                    polizaSalida = GeneraRegistroPoliza(datos);
                                    polizasSalidaTraspaso.Add(polizaSalida);
                                }
                            }
                        }
                    }
                }
                if (costosGanadoTransferido.Any())
                {
                    var interfaceSalidaTraspasoCostoBL = new InterfaceSalidaTraspasoCostoBL();
                    interfaceSalidaTraspasoCostoBL.Guardar(costosGanadoTransferido);
                }
            }
            return(polizasSalidaTraspaso);
        }
Esempio n. 20
0
        /// <summary>
        /// Recalcula los importes de Canal, Piel y Viscera
        /// </summary>
        /// <param name="polizasSacrificioSukarne"></param>
        /// <param name="polizasSacrificioTraspaso"> </param>
        /// <param name="lotesSacrificioFolios"></param>
        /// <param name="interfaceSalidaTraspaso"></param>
        /// <param name="cancelacion"> </param>
        private void GenerarImportesSacrificioLucero(IList <PolizaInfo> polizasSacrificioSukarne
                                                     , IList <PolizaInfo> polizasSacrificioTraspaso
                                                     , List <PolizaSacrificioModel> lotesSacrificioFolios
                                                     , List <InterfaceSalidaTraspasoInfo> interfaceSalidaTraspaso
                                                     , bool cancelacion)
        {
            polizasSacrificioTraspaso =
                polizasSacrificioTraspaso.Where(
                    imp => imp.Importe.IndexOf("-", StringComparison.CurrentCultureIgnoreCase) < 0).ToList();
            if (polizasSacrificioTraspaso.Any())
            {
                int folioTraspaso =
                    polizasSacrificioTraspaso.Select(folio => Convert.ToInt32(folio.TextoAsignado)).FirstOrDefault();
                InterfaceSalidaTraspasoInfo traspaso =
                    interfaceSalidaTraspaso.FirstOrDefault(id => id.FolioTraspaso == folioTraspaso);
                if (traspaso != null)
                {
                    var           precioPACBL = new PrecioPACDAL();
                    PrecioPACInfo precioPac   =
                        precioPACBL.ObtenerPrecioPACActivo(traspaso.OrganizacionDestino.OrganizacionID);
                    if (precioPac == null)
                    {
                        precioPac = new PrecioPACInfo();
                    }
                    decimal importe = polizasSacrificioTraspaso.Sum(imp => Convert.ToDecimal(imp.Importe));
                    traspaso.ListaInterfaceSalidaTraspasoDetalle
                    .ForEach(datos =>
                    {
                        PolizaSacrificioModel polizaSacrificioModel =
                            lotesSacrificioFolios.FirstOrDefault(
                                detId =>
                                detId.InterfaceSalidaTraspasoDetalleID ==
                                datos.InterfaceSalidaTraspasoDetalleID);
                        if (polizaSacrificioModel != null)
                        {
                            List <PolizaInfo> polizasAModificar =
                                polizasSacrificioSukarne.Where(
                                    folio =>
                                    folio.Concepto
                                    .IndexOf(string.Format("{0}-{1}", polizaSacrificioModel.Serie,
                                                           polizaSacrificioModel.Folio),
                                             StringComparison.CurrentCultureIgnoreCase) >= 0).
                                OrderBy(linea => Convert.ToInt32(linea.NumeroLinea)).ToList();
                            if (polizasAModificar.Any())
                            {
                                decimal importeTotal   = importe + (datos.Cabezas * 320);
                                decimal importeCanal   = 0;
                                decimal importePiel    = polizaSacrificioModel.PesoPiel * precioPac.Precio;
                                decimal importeViscera = datos.Cabezas * precioPac.PrecioViscera;

                                const int CANAL   = 1;
                                const int PIEL    = 2;
                                const int VISCERA = 3;
                                polizasAModificar.ForEach(poliza =>
                                {
                                    switch (Convert.ToInt32(poliza.NumeroLinea))
                                    {
                                    case CANAL:
                                        importeCanal = importeTotal -
                                                       (importePiel +
                                                        importeViscera);
                                        poliza.Importe =
                                            string.Format("{0}{1:F2}", cancelacion ? string.Empty : "-",
                                                          importeCanal);
                                        polizaSacrificioModel.
                                        ImporteCanal =
                                            importeCanal;
                                        break;

                                    case PIEL:
                                        poliza.Importe =
                                            string.Format("{0}{1:F2}", cancelacion ? string.Empty : "-",
                                                          importePiel);
                                        polizaSacrificioModel.
                                        ImportePiel = importePiel;
                                        break;

                                    case VISCERA:
                                        poliza.Importe =
                                            string.Format("{0}{1:F2}", cancelacion ? string.Empty : "-",
                                                          importeViscera);
                                        polizaSacrificioModel.
                                        ImporteViscera =
                                            importeViscera;
                                        break;

                                    case 4:
                                        poliza.Importe =
                                            string.Format("{0}{1:F2}", cancelacion ? "-" : string.Empty,
                                                          importeCanal +
                                                          importePiel +
                                                          importeViscera);
                                        break;
                                    }
                                });
                            }
                        }
                    });
                }
            }
        }