示例#1
0
 /// <summary>
 /// Obtiene la lista para mostrar en el grid
 /// </summary>
 private void ObtenerListaCuenta(int inicio, int limite)
 {
     try
     {
         var           cuentaSAPPL = new CuentaSAPPL();
         CuentaSAPInfo filtros     = ObtenerFiltros();
         var           pagina      = new PaginacionInfo {
             Inicio = inicio, Limite = limite
         };
         ResultadoInfo <CuentaSAPInfo> resultadoInfo = cuentaSAPPL.ObtenerPorPaginaCuentasSap(pagina, filtros);
         if (resultadoInfo != null && resultadoInfo.Lista != null &&
             resultadoInfo.Lista.Count > 0)
         {
             gridDatos.ItemsSource       = resultadoInfo.Lista;
             ucPaginacion.TotalRegistros = resultadoInfo.TotalRegistros;
         }
         else
         {
             ucPaginacion.TotalRegistros = 0;
             ucPaginacion.AsignarValoresIniciales();
             gridDatos.ItemsSource = new List <Cuenta>();
         }
     }
     catch (ExcepcionGenerica ex)
     {
         Logger.Error(ex);
         SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal], Properties.Resources.CuentaSAP_ErrorBuscar, MessageBoxButton.OK, MessageImage.Error);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal], Properties.Resources.CuentaSAP_ErrorBuscar, MessageBoxButton.OK, MessageImage.Error);
     }
 }
示例#2
0
 /// <summary>
 ///     Método  que obtiene una lista de todos los registros
 /// </summary>
 /// <param name="ds"></param>
 /// <returns></returns>
 internal static CuentaSAPInfo ObtenerPorFiltro(DataSet ds)
 {
     try
     {
         Logger.Info();
         DataTable     dt     = ds.Tables[ConstantesDAL.DtDatos];
         CuentaSAPInfo result =
             (from info in dt.AsEnumerable()
              select
              new CuentaSAPInfo
         {
             CuentaSAPID = info.Field <int>("CuentaSAPId"),
             CuentaSAP = info.Field <string>("CuentaSAP"),
             Descripcion = info.Field <string>("Descripcion"),
             TipoCuenta =
                 new TipoCuentaInfo
             {
                 TipoCuentaID = info.Field <int>("TipoCuentaID"),
                 Descripcion = info.Field <string>("TipoCuenta")
             },
             Activo = info.Field <bool>("Activo").BoolAEnum(),
         }).First();
         return(result);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
        /// <summary>
        /// Guarda los costos de los movimientos
        /// </summary>
        /// <param name="distribucionDeIngredientes"></param>
        /// <param name="almacenMovimientoID"></param>
        /// <param name="distribucionorganizaciones"></param>
        /// <returns></returns>
        internal bool GuardarCosto(DistribucionDeIngredientesInfo distribucionDeIngredientes, long almacenMovimientoID, DistribucionDeIngredientesOrganizacionInfo distribucionorganizaciones)
        {
            bool regreso = true;

            try
            {
                var cuentaSAPBL = new CuentaSAPBL();
                IList <CuentaSAPInfo> cuentasSAP = cuentaSAPBL.ObtenerTodos(EstatusEnum.Activo);
                var almacenMovimientoCostoBl     = new AlmacenMovimientoCostoBL();
                if (almacenMovimientoID > 0)
                {
                    //Se obtiene el porcentaje a cobrar cargar por organizacion
                    decimal porcentajeSurtido = distribucionDeIngredientes.CantidadTotal > 0 ?
                                                (decimal)distribucionorganizaciones.CantidadSurtir / (decimal)distribucionDeIngredientes.CantidadTotal : 0;
                    foreach (var costoDistribucion in distribucionDeIngredientes.ListaPremezclaDistribucionCosto)
                    {
                        var almacenMovimientoCosto = new AlmacenMovimientoCostoInfo
                        {
                            AlmacenMovimientoId = almacenMovimientoID,
                            Iva               = costoDistribucion.Iva,
                            Retencion         = costoDistribucion.Retencion,
                            CostoId           = costoDistribucion.Costo.CostoID,
                            Importe           = costoDistribucion.Importe * porcentajeSurtido,
                            UsuarioCreacionId = costoDistribucion.UsuarioCreacionID
                        };

                        if (costoDistribucion.TieneCuenta)
                        {
                            CuentaSAPInfo cuenta =
                                cuentasSAP.FirstOrDefault(
                                    sap => sap.CuentaSAP.Trim().Equals(costoDistribucion.CuentaSAP.CuentaSAP.Trim()));
                            if (cuenta != null)
                            {
                                almacenMovimientoCosto.CuentaSAPID = cuenta.CuentaSAPID;
                                almacenMovimientoCosto.TieneCuenta = costoDistribucion.TieneCuenta;
                            }
                        }
                        else
                        {
                            almacenMovimientoCosto.ProveedorId = costoDistribucion.Proveedor.ProveedorID;
                        }

                        almacenMovimientoCostoBl.Crear(almacenMovimientoCosto);
                    }
                }
            }
            catch (ExcepcionGenerica)
            {
                regreso = false;
                throw;
            }
            catch (Exception ex)
            {
                regreso = false;
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }

            return(regreso);
        }
示例#4
0
 public CuentaSAPEdicion(CuentaSAPInfo cuentaSAPInfo)
 {
     InitializeComponent();
     CargaComboTipoCuenta();
     cuentaSAPInfo.UsuarioModificacionID = AuxConfiguracion.ObtenerUsuarioLogueado();
     Contexto = cuentaSAPInfo;
 }
示例#5
0
 /// <summary>
 ///     Obtiene Parametros por filtro
 /// </summary>
 /// <param name="filtro"> </param>
 /// <returns></returns>
 internal static Dictionary <string, object> ObtenerParametrosPorFiltro(CuentaSAPInfo filtro)
 {
     try
     {
         Logger.Info();
         var parametros =
             new Dictionary <string, object>
         {
             { "@CuentaSAPID", filtro.CuentaSAPID },
             { "@CuentaSAP", filtro.CuentaSAP },
             { "@Descripcion", filtro.Descripcion },
             { "@Activo", filtro.Activo },
         };
         var element = new XElement("ROOT",
                                    from tipoCuenta in filtro.ListaTiposCuenta
                                    select new XElement("Datos",
                                                        new XElement("tipoCuenta",
                                                                     tipoCuenta.TipoCuentaID)));
         parametros.Add("@xmlTipoCuenta", element.ToString());
         return(parametros);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
示例#6
0
 /// <summary>
 /// Obtiene por filtro sin tipo
 /// </summary>
 /// <param name="cuentaSAP"></param>
 /// <returns></returns>
 internal CuentaSAPInfo ObtenerPorFiltroSinTipo(CuentaSAPInfo cuentaSAP)
 {
     try
     {
         Logger.Info();
         Dictionary <string, object> parameters = AuxCuentaSAPDAL.ObtenerParametrosPorFiltroSinTipo(cuentaSAP);
         DataSet       ds     = Retrieve("CuentaSAP_ObtenerPorFiltroSinTipo", parameters);
         CuentaSAPInfo result = null;
         if (ValidateDataSet(ds))
         {
             result = MapCuentaSAPDAL.ObtenerPorFiltro(ds);
         }
         return(result);
     }
     catch (SqlException ex)
     {
         Logger.Error(ex);
         throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex);
     }
     catch (DataException ex)
     {
         Logger.Error(ex);
         throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
示例#7
0
 /// <summary>
 /// Metodo para Guardar/Modificar una entidad CuentaSAP
 /// </summary>
 /// <param name="info"></param>
 /// <returns></returns>
 public int Guardar(CuentaSAPInfo info)
 {
     try
     {
         Logger.Info();
         var id = 0;
         if (info.CuentaSAPID > 0)
         {
             id = da.Actualizar <CuentaSAPInfo>(info);
         }
         else
         {
             id = da.Insertar <CuentaSAPInfo>(info);
         }
         return(id);
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
示例#8
0
 /// <summary>
 /// Metodo para Guardar/Modificar una entidad CuentaSAP
 /// </summary>
 /// <param name="info"></param>
 internal void Guardar(CuentaSAPInfo info)
 {
     try
     {
         Logger.Info();
         var cuentaSAPDAL = new CuentaSAPDAL();
         if (info.CuentaSAPID == 0)
         {
             cuentaSAPDAL.Crear(info);
         }
         else
         {
             cuentaSAPDAL.Actualizar(info);
         }
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
示例#9
0
 /// <summary>
 /// Inicializa el Contexto
 /// </summary>
 private void InicializaContexto()
 {
     Contexto = new CuentaSAPInfo
     {
         UsuarioCreacionID = AuxConfiguracion.ObtenerUsuarioLogueado(),
         TipoCuenta        = new TipoCuentaInfo()
     };
 }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="info"></param>
 /// <param name="cuentaSAP"></param>
 public ClaseCostoProductoInfo(ClaseCostoProductoInfo info, CuentaSAPInfo cuentaSAP)
 {
     ClaseCostoProductoID = info.ClaseCostoProductoID;
     AlmacenID            = info.AlmacenID;
     ProductoID           = info.ProductoID;
     CuentaSAPID          = info.CuentaSAPID;
     Activo                = info.Activo;
     FechaCreacion         = info.FechaCreacion;
     UsuarioCreacionID     = info.UsuarioCreacionID;
     FechaModificacion     = info.FechaModificacion;
     UsuarioModificacionID = info.UsuarioModificacionID;
     CuentaSAP             = cuentaSAP;
 }
示例#11
0
        internal CuentaSAPInfo ObtenerCuentaSAP(CuentaSAPInfo cuentaSAPInfo)
        {
            var cuentaSAP = new CuentaSAPInfo();

            try
            {
                Logger.Info();
                // Nombre de la Función RFC
                IRfcFunction func = destino.Repository.CreateFunction("Z_FI_CUENTA_SIAP");

                //parametros de entrada (Import)
                func.SetValue("COD_CUENTA", cuentaSAPInfo.CuentaSAP);
                func.SetValue("SOCIEDAD", cuentaSAPInfo.Sociedad);
                func.SetValue("PLAN_CUENTA", cuentaSAPInfo.PlanCuenta);

                //resultado (Changin)
                var tablaResultado = func.GetTable("ITAB");

                //Ejecutar
                func.Invoke(destino);

                var listaCuentas = new List <CuentaSAPInfo>();

                foreach (IRfcStructure row in tablaResultado)
                {
                    var cuenta = new CuentaSAPInfo();

                    cuenta.Sociedad    = row.GetValue("BUKRS") as string ?? string.Empty;
                    cuenta.CuentaSAP   = row.GetValue("SAKNR") as string ?? string.Empty;
                    cuenta.Descripcion = row.GetValue("TXT50") as string ?? string.Empty;
                    string bloqueo = row.GetValue("XSPEB") as string ?? string.Empty;
                    cuenta.Bloqueada         = bloqueo.Trim().ToUpper().Equals("X");
                    cuenta.TipoCuenta        = new TipoCuentaInfo();
                    cuenta.UsuarioCreacionID = cuentaSAPInfo.UsuarioCreacionID;
                    listaCuentas.Add(cuenta);
                }
                cuentaSAP = listaCuentas.FirstOrDefault();
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }

            return(cuentaSAP);
        }
示例#12
0
 /// <summary>
 /// Evento que se ejecuta mientras se esta cerrando la ventana
 /// </summary>
 /// <param name="e"></param>
 protected override void OnClosing(CancelEventArgs e)
 {
     if (confirmaSalir)
     {
         MessageBoxResult result = SkMessageBox.Show(this, Properties.Resources.Msg_CerrarSinGuardar, MessageBoxButton.YesNo,
                                                     MessageImage.Question);
         if (result == MessageBoxResult.Yes)
         {
             Contexto = null;
         }
         else
         {
             e.Cancel = true;
         }
     }
 }
示例#13
0
 /// <summary>
 /// Obtiene una entidad de CuentaSAP por su cuenta contable
 /// </summary>
 /// <param name="cuentaSAP">Obtiene una entidad CuentaSAP por su cuenta contable</param>
 /// <returns></returns>
 public CuentaSAPInfo ObtenerPorCuentaSAP(CuentaSAPInfo cuentaSAP)
 {
     try
     {
         Logger.Info();
         return(ObtenerTodos().FirstOrDefault(e => e.CuentaSAP == cuentaSAP.CuentaSAP));
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
示例#14
0
 /// <summary>
 /// Metodo para Guardar/Modificar una entidad CuentaSAP
 /// </summary>
 /// <param name="info">Representa la entidad que se va a grabar</param>
 public void Guardar(CuentaSAPInfo info)
 {
     try
     {
         Logger.Info();
         var cuentaSAPBL = new CuentaSAPBL();
         cuentaSAPBL.Guardar(info);
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
示例#15
0
        /// <summary>
        /// Obtiene una lista paginada de CuentaSAP
        /// </summary>
        /// <param name="pagina"></param>
        /// <param name="filtro"></param>
        /// <returns></returns>
        public ResultadoInfo <CuentaSAPInfo> ObtenerPorPagina(PaginacionInfo pagina, CuentaSAPInfo filtro)
        {
            try
            {
                Logger.Info();
                var result    = new ResultadoInfo <CuentaSAPInfo>();
                var condicion = da.Tabla <CuentaSAPInfo>().Where(e => e.Activo == filtro.Activo);
                if (filtro.CuentaSAPID > 0)
                {
                    condicion = condicion.Where(e => e.CuentaSAPID == filtro.CuentaSAPID);
                }
                if (!string.IsNullOrEmpty(filtro.Descripcion))
                {
                    condicion = condicion.Where(e => e.Descripcion.Contains(filtro.Descripcion));
                }
                result.TotalRegistros = condicion.Count();

                int inicio = pagina.Inicio;
                int limite = pagina.Limite;
                if (inicio > 1)
                {
                    int limiteReal = (limite - inicio) + 1;
                    inicio = (limite / limiteReal);
                    limite = limiteReal;
                }
                var paginado = condicion
                               .OrderBy(e => e.Descripcion)
                               .Skip((inicio - 1) * limite)
                               .Take(limite);

                result.Lista = paginado.ToList();

                return(result);
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
示例#16
0
        /// <summary>
        /// Metodo para buscar la Cuenta en SAP
        /// </summary>
        private void Buscar()
        {
            try
            {
                if (!string.IsNullOrWhiteSpace(Contexto.Sociedad) && !string.IsNullOrWhiteSpace(Contexto.CuentaSAP))
                {
                    var cuentaSAPPL = new CuentaSAPPL();
                    Contexto.CuentaSAP = Contexto.CuentaSAP.PadLeft(10, '0');

                    CuentaSAPInfo cuentaSAPExiste = cuentaSAPPL.ObtenerPorCuentaSAP(Contexto);

                    if (cuentaSAPExiste != null && cuentaSAPExiste.CuentaSAPID > 0)
                    {
                        SkMessageBox.Show(this, Properties.Resources.CuentaSAPNuevo_CuentaExiste, MessageBoxButton.OK,
                                          MessageImage.Warning);
                        return;
                    }
                    Contexto.PlanCuenta = PlanCuenta;
                    Contexto            = cuentaSAPPL.ObtenerCuentaSAPInterfaz(Contexto);

                    if (Contexto == null)
                    {
                        SkMessageBox.Show(this, Properties.Resources.CuentaSAPNuevo_CuentaNoExiste, MessageBoxButton.OK,
                                          MessageImage.Warning);
                        InicializaContexto();
                        return;
                    }
                    if (Contexto.Bloqueada)
                    {
                        SkMessageBox.Show(this, Properties.Resources.CuentaSAPNuevo_CuentaBloqueada, MessageBoxButton.OK,
                                          MessageImage.Warning);
                        return;
                    }
                    btnGuardar.IsEnabled = true;
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                SkMessageBox.Show(this, Properties.Resources.CuentaSAPNuevo_ErrorBuscar, MessageBoxButton.OK,
                                  MessageImage.Error);
            }
        }
示例#17
0
 /// <summary>
 /// Obtiene una cuenta sap por filtro sin tipo de cuenta
 /// </summary>
 /// <param name="cuentaSAP"></param>
 /// <returns></returns>
 internal CuentaSAPInfo ObtenerPorFiltroSinTipo(CuentaSAPInfo cuentaSAP)
 {
     try
     {
         Logger.Info();
         var           cuentaSAPDAL = new CuentaSAPDAL();
         CuentaSAPInfo result       = cuentaSAPDAL.ObtenerPorFiltroSinTipo(cuentaSAP);
         return(result);
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
示例#18
0
        /// <summary>
        ///     Obtiene un lista paginada
        /// </summary>
        /// <param name="pagina"></param>
        /// <param name="filtro"></param>
        /// <returns></returns>
        public ResultadoInfo <CuentaSAPInfo> ObtenerPorPagina(PaginacionInfo pagina, CuentaSAPInfo filtro)
        {
            try
            {
                Logger.Info();
                var cuentaSAPBL = new CuentaSAPBL();
                ResultadoInfo <CuentaSAPInfo> result = cuentaSAPBL.ObtenerPorPagina(pagina, filtro);

                return(result);
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
示例#19
0
        /// <summary>
        /// Obtiene una cuenta mediante la interfaz con SAP
        /// </summary>
        /// <param name="cuentaSAP"></param>
        /// <returns></returns>
        public CuentaSAPInfo ObtenerCuentaSAPInterfaz(CuentaSAPInfo cuentaSAP)
        {
            try
            {
                Logger.Info();
                var           cuentaSAPBL = new CuentaSAPBL();
                CuentaSAPInfo result      = cuentaSAPBL.ObtenerCuentaSAPInterfaz(cuentaSAP);

                return(result);
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
示例#20
0
 /// <summary>
 ///     Obtiene parametros para crear
 /// </summary>
 /// <param name="info">Valores de la entidad</param>
 /// <returns></returns>
 internal static Dictionary <string, object> ObtenerParametrosCrear(CuentaSAPInfo info)
 {
     try
     {
         Logger.Info();
         var parametros =
             new Dictionary <string, object>
         {
             { "@CuentaSAP", info.CuentaSAP },
             { "@Descripcion", info.Descripcion },
             { "@TipoCuentaID", info.TipoCuenta.TipoCuentaID },
             { "@Activo", info.Activo },
             { "@UsuarioCreacionID", info.UsuarioCreacionID },
         };
         return(parametros);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
示例#21
0
 /// <summary>
 ///     Metodo para Actualizar un nuevo registro de CuentaSAP
 /// </summary>
 /// <param name="info">Valores de la entidad que se actualizarán</param>
 internal void Actualizar(CuentaSAPInfo info)
 {
     try
     {
         Logger.Info();
         Dictionary <string, object> parameters = AuxCuentaSAPDAL.ObtenerParametrosActualizar(info);
         Update("CuentaSAP_Actualizar", parameters);
     }
     catch (SqlException ex)
     {
         Logger.Error(ex);
         throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex);
     }
     catch (DataException ex)
     {
         Logger.Error(ex);
         throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
示例#22
0
        private IList <PolizaInfo> ObtenerPoliza(TraspasoMpPaMedInfo traspasoMp)
        {
            var polizasSalidaTraspaso = new List <PolizaInfo>();

            IList <ClaseCostoProductoInfo> cuentasAlmacenProductoSalida =
                ObtenerCostosProducto(traspasoMp.AlmacenOrigen.AlmacenID);
            IList <ClaseCostoProductoInfo> cuentasAlmacenProductoEntrada =
                ObtenerCostosProducto(traspasoMp.AlmacenDestino.AlmacenID);

            if (cuentasAlmacenProductoSalida == null)
            {
                throw new ExcepcionServicio("No se encuentran cuentas configuradas, para productos del almacén origen");
            }
            if (cuentasAlmacenProductoEntrada == null)
            {
                throw new ExcepcionServicio("No se encuentran cuentas configuradas, para productos del almacén  de destino");
            }

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

            if (tipoPoliza == null)
            {
                throw new ExcepcionServicio(string.Format("{0} {1}", "EL TIPO DE POLIZA",
                                                          TipoPoliza.EntradaTraspaso));
            }

            IList <CuentaSAPInfo> cuentasSap = ObtenerCuentasSAP();
            string textoDocumento            = tipoPoliza.TextoDocumento;
            string tipoMovimiento            = tipoPoliza.ClavePoliza;
            string postFijoRef3 = tipoPoliza.PostFijoRef3;

            var linea = 1;

            //TO DO REVISAR SI CAMBIARA EL REF 3
            var ref3 = new StringBuilder();

            ref3.Append("03");
            ref3.Append(
                string.Format("{0}{1}{2}", DateTime.Today.Day, DateTime.Today.Month, DateTime.Today.Year).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 almacenMovimientoBL = new AlmacenMovimientoBL();
            AlmacenMovimientoInfo almacenMovimiento = almacenMovimientoBL.ObtenerPorId(traspasoMp.AlmacenMovimientoID);

            string numeroReferencia = ObtenerNumeroReferenciaFolio(almacenMovimiento.FolioMovimiento);
            //string numeroReferencia = ObtenerNumeroReferencia;

            DateTime fecha        = traspasoMp.FechaTraspaso;
            string   archivoFolio = ObtenerArchivoFolio(fecha);

            var organizacionBL = new OrganizacionBL();
            OrganizacionInfo organizacionOrigen = organizacionBL.ObtenerPorAlmacenID(traspasoMp.AlmacenOrigen.AlmacenID);

            if (organizacionOrigen == null)
            {
                organizacionOrigen = new OrganizacionInfo
                {
                    TipoOrganizacion = new TipoOrganizacionInfo()
                };
            }
            OrganizacionInfo organizacionDestino = organizacionBL.ObtenerPorAlmacenID(traspasoMp.AlmacenDestino.AlmacenID);

            if (organizacionDestino == null)
            {
                organizacionDestino = new OrganizacionInfo
                {
                    TipoOrganizacion = new TipoOrganizacionInfo()
                };
            }
            IList <CuentaAlmacenSubFamiliaInfo> cuentasSubFamiliaSalida =
                ObtenerCostosSubFamilia(traspasoMp.AlmacenOrigen.AlmacenID);

            IList <CuentaAlmacenSubFamiliaInfo> cuentasSubFamiliaEntrada =
                ObtenerCostosSubFamilia(traspasoMp.AlmacenDestino.AlmacenID);

            ParametroOrganizacionInfo parametroCentroCostoOrigen =
                ObtenerParametroOrganizacionPorClave(organizacionOrigen.OrganizacionID,
                                                     ParametrosEnum.CTACENTROCOSTOMP.ToString());

            if (parametroCentroCostoOrigen == null)
            {
                throw new ExcepcionServicio(string.Format("{0}", "CENTRO DE COSTO NO CONFIGURADO"));
            }
            ParametroOrganizacionInfo parametroCentroCostoDestino =
                ObtenerParametroOrganizacionPorClave(organizacionDestino.OrganizacionID,
                                                     ParametrosEnum.CTACENTROCOSTOMP.ToString());

            if (parametroCentroCostoDestino == null)
            {
                throw new ExcepcionServicio(string.Format("{0}", "CENTRO DE COSTO NO CONFIGURADO"));
            }
            bool          afectaCosto;
            CuentaSAPInfo claveContableCargo;

            afectaCosto = ValidarAfectacionCuentaCosto(traspasoMp.ProductoOrigen);
            if (!afectaCosto && (traspasoMp.AlmacenDestino.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.Enfermeria.GetHashCode() ||
                                 traspasoMp.AlmacenDestino.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.ManejoGanado.GetHashCode() ||
                                 traspasoMp.AlmacenDestino.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.ReimplanteGanado.GetHashCode()) ||
                traspasoMp.AlmacenDestino.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.GeneralGanadera.GetHashCode())
            {
                var cuentaSapSubFamiliaEntrada = cuentasSubFamiliaEntrada.FirstOrDefault(
                    cuenta => cuenta.SubFamiliaID == traspasoMp.ProductoOrigen.SubFamilia.SubFamiliaID);

                if (cuentaSapSubFamiliaEntrada == null)
                {
                    cuentaSapSubFamiliaEntrada = new CuentaAlmacenSubFamiliaInfo();
                }
                claveContableCargo =
                    cuentasSap.FirstOrDefault(sap => sap.CuentaSAPID == cuentaSapSubFamiliaEntrada.CuentaSAPID);
            }
            else
            {
                var cuentaSapEntrada = cuentasAlmacenProductoEntrada.FirstOrDefault(
                    cuenta => cuenta.ProductoID == traspasoMp.ProductoOrigen.ProductoId);
                if (cuentaSapEntrada == null)
                {
                    cuentaSapEntrada = new ClaseCostoProductoInfo();
                }
                claveContableCargo =
                    cuentasSap.FirstOrDefault(sap => sap.CuentaSAPID == cuentaSapEntrada.CuentaSAPID);
            }

            if (traspasoMp.AlmacenDestino.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.CentroAcopio.GetHashCode())
            {
                ParametroOrganizacionInfo cuentaMedicamento = ObtenerParametroOrganizacionPorClave(organizacionDestino.OrganizacionID,
                                                                                                   ParametrosEnum.CuentaMedicamentoTransito.ToString());

                if (cuentaMedicamento == null)
                {
                    cuentaMedicamento = new ParametroOrganizacionInfo
                    {
                        Valor = string.Empty
                    };
                }

                claveContableCargo =
                    cuentasSap.FirstOrDefault(
                        sap =>
                        sap.CuentaSAP.Equals(cuentaMedicamento.Valor, StringComparison.InvariantCultureIgnoreCase));
            }
            if (claveContableCargo == null)
            {
                throw new ExcepcionServicio(string.Format("No se encontró configurada la cuenta del producto {0}",
                                                          traspasoMp.ProductoOrigen.ProductoDescripcion));
            }
            linea = 0;
            linea++;
            var datos = new DatosPolizaInfo
            {
                NumeroReferencia = numeroReferencia,
                FechaEntrada     = fecha,
                Folio            = numeroReferencia,
                ClaseDocumento   = postFijoRef3,
                Importe          = string.Format("{0}", traspasoMp.ImporteTraspaso.ToString("F2")),
                Renglon          = Convert.ToString(linea),
                ImporteIva       = "0",
                Ref3             = ref3.ToString(),
                Cuenta           = claveContableCargo.CuentaSAP,
                CentroCosto      =
                    claveContableCargo.CuentaSAP.StartsWith(PrefijoCuentaCentroCosto)
                        ? parametroCentroCostoDestino.Valor
                        : string.Empty,
                Division      = organizacionDestino.Division,
                ArchivoFolio  = archivoFolio,
                PesoOrigen    = 0,
                TipoDocumento = textoDocumento,
                Concepto      = String.Format("{0}-{1} {2} {3} {4}",
                                              tipoMovimiento,
                                              numeroReferencia,
                                              traspasoMp.ProductoOrigen.ProductoDescripcion,
                                              string.Format("{0} {1}.",
                                                            traspasoMp.CantidadTraspasarDestino.ToString("N2"),
                                                            traspasoMp.ProductoOrigen.UnidadMedicion.ClaveUnidad),
                                              traspasoMp.PrecioTraspasoDestino.ToString("C2")),
                Sociedad            = organizacionDestino.Sociedad,
                DescripcionProducto = claveContableCargo.Descripcion,
                Segmento            = string.Format("{0}{1}", PrefijoSegmento, organizacionDestino.Sociedad),
            };
            PolizaInfo polizaSalida = GeneraRegistroPoliza(datos);

            polizasSalidaTraspaso.Add(polizaSalida);

            #region CuentaAbono

            CuentaSAPInfo claveContableAbono = null;
            afectaCosto = ValidarAfectacionCuentaCosto(traspasoMp.ProductoOrigen);
            if (!afectaCosto && (traspasoMp.AlmacenOrigen.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.Enfermeria.GetHashCode() ||
                                 traspasoMp.AlmacenOrigen.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.ManejoGanado.GetHashCode() ||
                                 traspasoMp.AlmacenOrigen.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.ReimplanteGanado.GetHashCode()) ||
                traspasoMp.AlmacenDestino.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.GeneralGanadera.GetHashCode())
            {
                var cuentaSapSubFamiliaSalida = cuentasSubFamiliaSalida.FirstOrDefault(
                    cuenta => cuenta.SubFamiliaID == traspasoMp.ProductoOrigen.SubFamilia.SubFamiliaID);

                if (cuentaSapSubFamiliaSalida == null)
                {
                    cuentaSapSubFamiliaSalida = new CuentaAlmacenSubFamiliaInfo();
                }
                claveContableAbono =
                    cuentasSap.FirstOrDefault(sap => sap.CuentaSAPID == cuentaSapSubFamiliaSalida.CuentaSAPID);
            }
            else
            {
                var cuentaSapSalida = cuentasAlmacenProductoSalida.FirstOrDefault(
                    cuenta => cuenta.ProductoID == traspasoMp.ProductoOrigen.ProductoId);
                if (cuentaSapSalida == null)
                {
                    cuentaSapSalida = new ClaseCostoProductoInfo();
                }
                claveContableAbono =
                    cuentasSap.FirstOrDefault(sap => sap.CuentaSAPID == cuentaSapSalida.CuentaSAPID);
            }

            if (traspasoMp.AlmacenOrigen.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.CentroAcopio.GetHashCode())
            {
                ParametroOrganizacionInfo cuentaMedicamento = ObtenerParametroOrganizacionPorClave(organizacionOrigen.OrganizacionID,
                                                                                                   ParametrosEnum.CuentaMedicamentoTransito.ToString());

                if (cuentaMedicamento == null)
                {
                    cuentaMedicamento = new ParametroOrganizacionInfo
                    {
                        Valor = string.Empty
                    };
                }

                claveContableAbono =
                    cuentasSap.FirstOrDefault(
                        sap =>
                        sap.CuentaSAP.Equals(cuentaMedicamento.Valor, StringComparison.InvariantCultureIgnoreCase));
            }
            if (claveContableAbono == null)
            {
                throw new ExcepcionServicio(string.Format("No se encontró configurada la cuenta del producto {0}",
                                                          traspasoMp.ProductoOrigen.ProductoDescripcion));
            }
            #endregion CuentaAbono

            linea++;
            datos = new DatosPolizaInfo
            {
                NumeroReferencia = numeroReferencia,
                FechaEntrada     = fecha,
                Folio            = numeroReferencia,
                ClaseDocumento   = postFijoRef3,
                Importe          =
                    string.Format("{0}", (traspasoMp.ImporteTraspaso * -1).ToString("F2")),
                Renglon      = Convert.ToString(linea),
                ImporteIva   = "0",
                Ref3         = ref3.ToString(),
                Cuenta       = claveContableAbono.CuentaSAP,
                ArchivoFolio = archivoFolio,
                CentroCosto  =
                    claveContableAbono.CuentaSAP.StartsWith(PrefijoCuentaCentroCosto)
                        ? parametroCentroCostoOrigen.Valor
                        : string.Empty,
                Division      = organizacionOrigen.Division,
                PesoOrigen    = 0,
                TipoDocumento = textoDocumento,
                Concepto      = String.Format("{0}-{1} {2} {3} {4}",
                                              tipoMovimiento,
                                              numeroReferencia,
                                              traspasoMp.ProductoOrigen.ProductoDescripcion,
                                              string.Format("{0} {1}.",
                                                            traspasoMp.CantidadTraspasarOrigen.ToString("N2"),
                                                            traspasoMp.ProductoOrigen.UnidadMedicion.ClaveUnidad),
                                              traspasoMp.PrecioTraspasoOrigen.ToString("C2")),
                Sociedad            = organizacionOrigen.Sociedad,
                DescripcionProducto = claveContableAbono.Descripcion,
                Segmento            = string.Format("{0}{1}", PrefijoSegmento, organizacionOrigen.Sociedad),
            };
            polizaSalida = GeneraRegistroPoliza(datos);
            polizasSalidaTraspaso.Add(polizaSalida);

            return(polizasSalidaTraspaso);
        }
示例#23
0
        /// <summary>
        /// Genera la estructura de la poliza de la 212
        /// </summary>
        /// <param name="polizaSacrificioModel"></param>
        /// <param name="cuentasSap"></param>
        /// <param name="proveedores"></param>
        /// <param name="parametroGeneral"></param>
        /// <param name="organizacion"></param>
        /// <param name="textoDocumento"></param>
        /// <param name="tipoMovimiento"></param>
        /// <param name="postFijoRef3"></param>
        /// <param name="parametroOrganizacion"> </param>
        /// <returns></returns>
        private List <PolizaInfo> ObtenerPoliza212(List <PolizaSacrificioModel> datosPoliza
                                                   , IList <CuentaSAPInfo> cuentasSap
                                                   , IList <ProveedorInfo> proveedores
                                                   , ParametroGeneralInfo parametroGeneral
                                                   , OrganizacionInfo organizacion
                                                   , string textoDocumento, string tipoMovimiento
                                                   , string postFijoRef3, ParametroOrganizacionInfo parametroOrganizacion)
        {
            var             polizasSacrificio = new List <PolizaInfo>();
            DatosPolizaInfo datoCliente;
            bool            datoClienteRegistrado = false;
            int             linea   = 0;
            int             canales = 0;
            decimal         peso    = 0;
            PolizaInfo      polizaSacrificioCliente = new PolizaInfo();


            var sbRef3 = new StringBuilder();

            sbRef3.Append("03");
            sbRef3.Append(
                string.Format("{0}{1}{2}", DateTime.Today.Day, DateTime.Today.Month, DateTime.Today.Year).PadLeft(
                    10, ' '));
            sbRef3.Append(new Random(10).Next(10, 20));
            sbRef3.Append(new Random(30).Next(30, 40));
            sbRef3.Append(DateTime.Now.Millisecond);
            sbRef3.Append(postFijoRef3);
            PolizaSacrificioModel polizaSacrificioModel = new PolizaSacrificioModel();

            var sbArchivo = new StringBuilder(ObtenerArchivoFolio(datosPoliza.FirstOrDefault().Fecha));

            Thread.Sleep(1000);

            for (var indexSacrificio = 0; indexSacrificio < datosPoliza.Count; indexSacrificio++)
            {
                polizaSacrificioModel = datosPoliza[indexSacrificio];
                long folio = 0;
                long.TryParse(polizaSacrificioModel.Folio, out folio);
                //var numeroReferencia = new StringBuilder(string.Format("{0}{1}", polizaSacrificioModel.Folio, ObtenerNumeroReferencia));
                var numeroReferencia = ObtenerNumeroReferenciaFolio(Convert.ToInt64(folio));

                CuentaSAPInfo cuentaSAP = cuentasSap.FirstOrDefault(cuenta => cuenta.CuentaSAP.Equals(ObtenerCuentaCanal));
                if (cuentaSAP == null)
                {
                    throw new ExcepcionServicio("CUENTA PARA CANAL NO CONFIGURADA");
                }

                var datos = new DatosPolizaInfo
                {
                    NumeroReferencia = numeroReferencia,
                    FechaEntrada     = polizaSacrificioModel.Fecha,
                    Folio            = polizaSacrificioModel.Folio.ToString(CultureInfo.InvariantCulture),
                    ClaseDocumento   = postFijoRef3,
                    Importe          =
                        string.Format("{0}", Cancelacion ? polizaSacrificioModel.ImporteCanal.ToString("F2")
                                                         : (polizaSacrificioModel.ImporteCanal * -1).ToString("F2")),
                    IndicadorImpuesto = String.Empty,
                    Renglon           = Convert.ToString(++linea),
                    Ref3             = sbRef3.ToString(),
                    Cuenta           = cuentaSAP.CuentaSAP,
                    CentroBeneficio  = parametroOrganizacion.Valor,
                    DescripcionCosto = cuentaSAP.Descripcion,
                    Division         = organizacion.Division,
                    ArchivoFolio     = sbArchivo.ToString(),
                    ImporteIva       = "0",
                    PesoOrigen       = polizaSacrificioModel.Peso,
                    TipoDocumento    = textoDocumento,
                    Concepto         = String.Format("{0}-{1} {2}-{3} {4} CANALES {5}",
                                                     polizaSacrificioModel.Serie, polizaSacrificioModel.Folio,
                                                     tipoMovimiento, polizaSacrificioModel.Lote
                                                     , polizaSacrificioModel.Canales
                                                     , polizaSacrificioModel.Peso),
                    Sociedad = organizacion.Sociedad,
                    Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                };
                PolizaInfo polizaSacrificio = GeneraRegistroPoliza(datos);
                polizaSacrificio.Corral = polizaSacrificioModel.Corral;
                polizasSacrificio.Add(polizaSacrificio);

                cuentaSAP = cuentasSap.FirstOrDefault(cuenta => cuenta.CuentaSAP.Equals(ObtenerCuentaPiel));
                if (cuentaSAP == null)
                {
                    throw new ExcepcionServicio("CUENTA PARA PIEL NO CONFIGURADA");
                }
                datos = new DatosPolizaInfo
                {
                    NumeroReferencia = numeroReferencia,
                    FechaEntrada     = polizaSacrificioModel.Fecha,
                    Folio            = polizaSacrificioModel.Folio.ToString(CultureInfo.InvariantCulture),
                    ClaseDocumento   = postFijoRef3,
                    Importe          =
                        string.Format("{0}", Cancelacion ? polizaSacrificioModel.ImportePiel.ToString("F2")
                                                         : (polizaSacrificioModel.ImportePiel * -1).ToString("F2")),
                    IndicadorImpuesto = String.Empty,
                    Renglon           = Convert.ToString(++linea),
                    Ref3             = sbRef3.ToString(),
                    Cuenta           = cuentaSAP.CuentaSAP,
                    ImporteIva       = "0",
                    CentroBeneficio  = parametroOrganizacion.Valor,
                    DescripcionCosto = cuentaSAP.Descripcion,
                    Division         = organizacion.Division,
                    ArchivoFolio     = sbArchivo.ToString(),
                    PesoOrigen       = polizaSacrificioModel.Peso,
                    TipoDocumento    = textoDocumento,
                    Concepto         = String.Format("{0}-{1} {2}-{3} {4} CANALES {5}",
                                                     polizaSacrificioModel.Serie, polizaSacrificioModel.Folio,
                                                     tipoMovimiento, polizaSacrificioModel.Lote
                                                     , polizaSacrificioModel.Canales
                                                     , polizaSacrificioModel.Peso),
                    Sociedad = organizacion.Sociedad,
                    Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                };
                polizaSacrificio        = GeneraRegistroPoliza(datos);
                polizaSacrificio.Corral = polizaSacrificioModel.Corral;
                polizasSacrificio.Add(polizaSacrificio);

                cuentaSAP = cuentasSap.FirstOrDefault(cuenta => cuenta.CuentaSAP.Equals(ObtenerCuentaViscera));
                if (cuentaSAP == null)
                {
                    throw new ExcepcionServicio("CUENTA PARA VISCERA NO CONFIGURADA");
                }
                datos = new DatosPolizaInfo
                {
                    NumeroReferencia = numeroReferencia,
                    FechaEntrada     = polizaSacrificioModel.Fecha,
                    Folio            = polizaSacrificioModel.Folio.ToString(CultureInfo.InvariantCulture),
                    ClaseDocumento   = postFijoRef3,
                    Importe          =
                        string.Format("{0}", Cancelacion ? polizaSacrificioModel.ImporteViscera.ToString("F2")
                                                         : (polizaSacrificioModel.ImporteViscera * -1).ToString("F2")),
                    IndicadorImpuesto = String.Empty,
                    Renglon           = Convert.ToString(++linea),
                    Ref3             = sbRef3.ToString(),
                    ImporteIva       = "0",
                    Cuenta           = cuentaSAP.CuentaSAP,
                    CentroBeneficio  = parametroOrganizacion.Valor,
                    DescripcionCosto = cuentaSAP.Descripcion,
                    Division         = organizacion.Division,
                    ArchivoFolio     = sbArchivo.ToString(),
                    PesoOrigen       = polizaSacrificioModel.Peso,
                    TipoDocumento    = textoDocumento,
                    Concepto         = String.Format("{0}-{1} {2}-{3} {4} CANALES {5}",
                                                     polizaSacrificioModel.Serie, polizaSacrificioModel.Folio,
                                                     tipoMovimiento, polizaSacrificioModel.Lote
                                                     , polizaSacrificioModel.Canales
                                                     , polizaSacrificioModel.Peso),
                    Sociedad = organizacion.Sociedad,
                    Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                };
                polizaSacrificio        = GeneraRegistroPoliza(datos);
                polizaSacrificio.Corral = polizaSacrificioModel.Corral;
                polizasSacrificio.Add(polizaSacrificio);

                ProveedorInfo proveedor = proveedores.FirstOrDefault(codigo => codigo.CodigoSAP.Equals(parametroGeneral.Valor));
                if (proveedor == null)
                {
                    throw new ExcepcionServicio(string.Format("EL PROVEEDOR CON CODIGO {0} SE ENCUENTRA INACTIVO",
                                                              parametroGeneral.Valor));
                }

                if (datoClienteRegistrado)
                {
                    polizaSacrificioCliente.Importe =
                        string.Format("{0}", Cancelacion ? (Convert.ToDecimal(polizaSacrificioCliente.Importe) + ((polizaSacrificioModel.ImporteViscera
                                                                                                                   + polizaSacrificioModel.ImporteCanal
                                                                                                                   + polizaSacrificioModel.ImportePiel) * -1)).ToString("F2")
                                                            : (Convert.ToDecimal(polizaSacrificioCliente.Importe) + (polizaSacrificioModel.ImporteViscera
                                                                                                                     + polizaSacrificioModel.ImporteCanal
                                                                                                                     + polizaSacrificioModel.ImportePiel)).ToString("F2"));

                    canales = canales + polizaSacrificioModel.Canales;
                    peso    = peso + polizaSacrificioModel.Peso;
                    polizaSacrificioCliente.Concepto = String.Format("{0}-{1} {2} {3} CANALES {4} Fecha:{5}",
                                                                     polizaSacrificioModel.Serie, polizaSacrificioModel.Folio,
                                                                     tipoMovimiento
                                                                     , canales
                                                                     , peso, polizaSacrificioModel.Fecha.ToString("yyyyMMdd"));
                }
                else
                {
                    datoCliente = new DatosPolizaInfo
                    {
                        NumeroReferencia = numeroReferencia,
                        FechaEntrada     = polizaSacrificioModel.Fecha,
                        Folio            = polizaSacrificioModel.Folio.ToString(CultureInfo.InvariantCulture),
                        ClaseDocumento   = postFijoRef3,
                        Importe          =
                            string.Format("{0}", Cancelacion ? ((polizaSacrificioModel.ImporteViscera
                                                                 + polizaSacrificioModel.ImporteCanal
                                                                 + polizaSacrificioModel.ImportePiel) * -1).ToString("F2")
                                                                : (polizaSacrificioModel.ImporteViscera
                                                                   + polizaSacrificioModel.ImporteCanal
                                                                   + polizaSacrificioModel.ImportePiel).ToString("F2")),
                        IndicadorImpuesto = String.Empty,
                        //Renglon = Convert.ToString(++linea),
                        Ref3             = sbRef3.ToString(),
                        Cliente          = proveedor.CodigoSAP,
                        DescripcionCosto = proveedor.Descripcion,
                        Division         = organizacion.Division,
                        ArchivoFolio     = sbArchivo.ToString(),
                        PesoOrigen       = polizaSacrificioModel.Peso,
                        ImporteIva       = "0",
                        TipoDocumento    = textoDocumento,
                        Concepto         = String.Format("{0}-{1} {2} {3} CANALES {4} Fecha:{5}",
                                                         polizaSacrificioModel.Serie, polizaSacrificioModel.Folio,
                                                         tipoMovimiento
                                                         , polizaSacrificioModel.Canales
                                                         , polizaSacrificioModel.Peso, polizaSacrificioModel.Fecha.ToString("yyyyMMdd")),
                        Sociedad = organizacion.Sociedad,
                        Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                    };
                    datoClienteRegistrado   = true;
                    polizaSacrificioCliente = GeneraRegistroPoliza(datoCliente);
                    peso    = polizaSacrificioModel.Peso;
                    canales = polizaSacrificioModel.Canales;
                }
            }
            polizaSacrificioCliente.NumeroLinea = (++linea).ToString();
            polizaSacrificioCliente.Corral      = "A";
            polizasSacrificio.Add(polizaSacrificioCliente);

            return(polizasSacrificio);
        }
示例#24
0
        private IList <PolizaInfo> ObtenerPoliza(List <PolizaEntradaSalidaPorAjusteModel> ajustesDeInventario)
        {
            var polizasSalidaAjuste = new List <PolizaInfo>();

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

            if (tipoPoliza == null)
            {
                throw new ExcepcionServicio(string.Format("{0} {1}", "EL TIPO DE POLIZA",
                                                          TipoPoliza.SalidaAjuste));
            }

            string textoDocumento = tipoPoliza.TextoDocumento;
            string tipoMovimiento = tipoPoliza.ClavePoliza;
            string postFijoRef3   = tipoPoliza.PostFijoRef3;

            var linea = 1;

            var almacenMovimientoBL = new AlmacenMovimientoBL();
            List <AlmacenMovimientoDetalle> almancenMovimientosDetalle =
                ajustesDeInventario.Select(mov => new AlmacenMovimientoDetalle
            {
                AlmacenMovimientoDetalleID = mov.AlmacenMovimientoDetalleID
            }).ToList();
            AlmacenMovimientoInfo almacenMovimiento =
                almacenMovimientoBL.ObtenerMovimientoPorClaveDetalle(almancenMovimientosDetalle);

            if (almacenMovimiento == null)
            {
                almacenMovimiento = new AlmacenMovimientoInfo();
            }
            string      archivoFolio = ObtenerArchivoFolio(almacenMovimiento.FechaMovimiento);
            AlmacenInfo almacen      = ObtenerAlmacen(almacenMovimiento.AlmacenID);

            if (almacen == null)
            {
                almacen = new AlmacenInfo
                {
                    Organizacion = new OrganizacionInfo()
                };
            }
            OrganizacionInfo organizacion = ObtenerOrganizacionIVA(almacen.Organizacion.OrganizacionID);

            if (organizacion == null)
            {
                organizacion = new OrganizacionInfo
                {
                    TipoOrganizacion = new TipoOrganizacionInfo()
                };
            }

            var ref3 = new StringBuilder();

            ref3.Append("03");
            ref3.Append(
                string.Format("{0}{1}{2}", DateTime.Today.Day, DateTime.Today.Month, DateTime.Today.Year).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);

            //string numeroReferencia = ObtenerNumeroReferencia;
            string numeroReferencia = ObtenerNumeroReferenciaFolio(almacenMovimiento.FolioMovimiento);

            ParametroOrganizacionInfo parametroOrganizacionMerma;

            if (almacen.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.Enfermeria.GetHashCode() ||
                almacen.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.ManejoGanado.GetHashCode() ||
                almacen.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.ReimplanteGanado.GetHashCode())
            {
                parametroOrganizacionMerma =
                    ObtenerParametroOrganizacionPorClave(organizacion.OrganizacionID,
                                                         ParametrosEnum.CTAMERMAENG.ToString());
            }
            else
            {
                parametroOrganizacionMerma =
                    ObtenerParametroOrganizacionPorClave(organizacion.OrganizacionID, ParametrosEnum.CTAMERMA.ToString());
            }
            if (parametroOrganizacionMerma == null)
            {
                throw new ExcepcionServicio("CUENTA DE MERMA NO CONFIGURADA");
            }

            IList <CuentaSAPInfo> cuentasSAP = ObtenerCuentasSAP();
            IList <CuentaAlmacenSubFamiliaInfo> almacenesSubFamilia = ObtenerCostosSubFamilia(almacen.AlmacenID);
            IList <ClaseCostoProductoInfo>      almacenesProductos  = ObtenerCostosProducto(almacen.AlmacenID);
            IList <ProductoInfo>       productos = ObtenerProductos();
            IList <UnidadMedicionInfo> unidades  = ObtenerUnidadesMedicion();
            ProductoInfo producto;
            ParametroOrganizacionInfo parametroCentroCosto =
                ObtenerParametroOrganizacionPorClave(organizacion.OrganizacionID,
                                                     ParametrosEnum.CTACENTROCOSTOMP.ToString());

            if (parametroCentroCosto == null)
            {
                throw new ExcepcionServicio(string.Format("{0}", "CENTRO DE COSTO NO CONFIGURADO"));
            }
            ClaseCostoProductoInfo      almacenProducto;
            CuentaAlmacenSubFamiliaInfo almacenSubFamilia;
            CuentaSAPInfo cuentaSAP;

            bool afectaCosto;

            for (var indexAjustes = 0; indexAjustes < ajustesDeInventario.Count; indexAjustes++)
            {
                PolizaEntradaSalidaPorAjusteModel ajuste = ajustesDeInventario[indexAjustes];
                cuentaSAP = null;

                producto = productos.FirstOrDefault(clave => clave.ProductoId == ajuste.ProductoID);
                if (producto == null)
                {
                    throw new ExcepcionServicio(string.Format("CUENTA DE MERMA NO CONFIGURADA {0}", ajuste.ProductoID));
                }
                afectaCosto = ValidarAfectacionCuentaCosto(producto);
                if (!afectaCosto && (almacen.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.Enfermeria.GetHashCode() ||
                                     almacen.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.ManejoGanado.GetHashCode() ||
                                     almacen.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.ReimplanteGanado.GetHashCode()))
                {
                    almacenSubFamilia =
                        almacenesSubFamilia.FirstOrDefault(sub => sub.SubFamiliaID == producto.SubfamiliaId);
                    if (almacenSubFamilia != null)
                    {
                        cuentaSAP =
                            cuentasSAP.FirstOrDefault(cuenta => cuenta.CuentaSAPID == almacenSubFamilia.CuentaSAPID);
                    }
                }
                else
                {
                    almacenProducto =
                        almacenesProductos.FirstOrDefault(prod => prod.ProductoID == producto.ProductoId);
                    if (almacenProducto != null)
                    {
                        cuentaSAP =
                            cuentasSAP.FirstOrDefault(cuenta => cuenta.CuentaSAPID == almacenProducto.CuentaSAPID);
                    }
                }
                if (cuentaSAP == null)
                {
                    throw new ExcepcionServicio(string.Format("{0} {1}", "CUENTA NO CONFIGURADA PARA EL PRODUCTO",
                                                              producto.ProductoDescripcion));
                }
                UnidadMedicionInfo unidad = unidades.FirstOrDefault(uni => uni.UnidadID == producto.UnidadId);
                if (unidad == null)
                {
                    unidad = new UnidadMedicionInfo();
                }
                CuentaSAPInfo cuentaCargo =
                    cuentasSAP.FirstOrDefault(
                        clave =>
                        clave.CuentaSAP.Equals(parametroOrganizacionMerma.Valor,
                                               StringComparison.CurrentCultureIgnoreCase));
                if (cuentaCargo == null)
                {
                    throw new ExcepcionServicio("CUENTA DE MERMA NO CONFIGURADA");
                }
                var datos = new DatosPolizaInfo
                {
                    NumeroReferencia = numeroReferencia,
                    FechaEntrada     = almacenMovimiento.FechaMovimiento,
                    Folio            = almacenMovimiento.FolioMovimiento.ToString(),
                    Importe          = string.Format("{0}", ajuste.Importe.ToString("F2")),
                    Renglon          = Convert.ToString(linea++),
                    ImporteIva       = "0",
                    Ref3             = ref3.ToString(),
                    Cuenta           = parametroOrganizacionMerma.Valor,
                    CentroCosto      =
                        parametroOrganizacionMerma.Valor.StartsWith(PrefijoCuentaCentroCosto) ||
                        parametroOrganizacionMerma.Valor.StartsWith(PrefijoCuentaCentroGasto)
                                            ? parametroCentroCosto.Valor
                                            : string.Empty,
                    Division         = organizacion.Division,
                    ArchivoFolio     = archivoFolio,
                    DescripcionCosto = cuentaCargo.Descripcion,
                    PesoOrigen       = Math.Round(ajuste.Cantidad, 0),
                    TipoDocumento    = textoDocumento,
                    ClaseDocumento   = postFijoRef3,
                    Concepto         = String.Format("{0}-{1} {2} {3} {4}",
                                                     tipoMovimiento,
                                                     almacenMovimiento.FolioMovimiento,
                                                     producto.ProductoDescripcion,
                                                     string.Format("{0} {1}", ajuste.Cantidad.ToString("N2"), unidad.ClaveUnidad),
                                                     ajuste.Precio.ToString("C2")),
                    Sociedad = organizacion.Sociedad,
                    Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                };
                PolizaInfo polizaSalida = GeneraRegistroPoliza(datos);
                polizasSalidaAjuste.Add(polizaSalida);

                datos = new DatosPolizaInfo
                {
                    NumeroReferencia = numeroReferencia,
                    FechaEntrada     = almacenMovimiento.FechaMovimiento,
                    Folio            = almacenMovimiento.FolioMovimiento.ToString(),
                    Importe          = string.Format("{0}", (ajuste.Importe * -1).ToString("F2")),
                    Renglon          = Convert.ToString(linea++),
                    ImporteIva       = "0",
                    Ref3             = ref3.ToString(),
                    Cuenta           = cuentaSAP.CuentaSAP,
                    Division         = organizacion.Division,
                    ArchivoFolio     = archivoFolio,
                    DescripcionCosto = cuentaSAP.Descripcion,
                    CentroCosto      =
                        cuentaSAP.CuentaSAP.StartsWith(PrefijoCuentaCentroCosto) ||
                        cuentaSAP.CuentaSAP.StartsWith(PrefijoCuentaCentroGasto)
                                            ? parametroCentroCosto.Valor
                                            : string.Empty,
                    PesoOrigen     = Math.Round(ajuste.Cantidad, 0),
                    TipoDocumento  = textoDocumento,
                    ClaseDocumento = postFijoRef3,
                    Concepto       = String.Format("{0}-{1} {2} {3} {4}",
                                                   tipoMovimiento,
                                                   almacenMovimiento.FolioMovimiento, producto.ProductoDescripcion,
                                                   string.Format("{0} {1}", ajuste.Cantidad.ToString("N2"), unidad.ClaveUnidad),
                                                   ajuste.Precio.ToString("C2")),
                    Sociedad = organizacion.Sociedad,
                    Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                };
                polizaSalida = GeneraRegistroPoliza(datos);
                polizasSalidaAjuste.Add(polizaSalida);
            }

            return(polizasSalidaAjuste);
        }
示例#25
0
 /// <summary>
 ///     Obtiene un lista paginada
 /// </summary>
 /// <param name="pagina"></param>
 /// <param name="filtro"></param>
 /// <returns></returns>
 internal ResultadoInfo <CuentaSAPInfo> ObtenerPorPagina(PaginacionInfo pagina, CuentaSAPInfo filtro)
 {
     try
     {
         Dictionary <string, object> parameters = AuxCuentaSAPDAL.ObtenerParametrosPorPagina(pagina, filtro);
         DataSet ds = Retrieve("[dbo].[CuentaSAP_ObtenerPorPagina]", parameters);
         ResultadoInfo <CuentaSAPInfo> result = null;
         if (ValidateDataSet(ds))
         {
             result = MapCuentaSAPDAL.ObtenerPorPagina(ds);
         }
         return(result);
     }
     catch (SqlException ex)
     {
         Logger.Error(ex);
         throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex);
     }
     catch (DataException ex)
     {
         Logger.Error(ex);
         throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
        /// <summary>
        /// Separa los nodos de las polizas en cargos y abonos
        /// </summary>
        /// <param name="polizas">nodos de la poliza que se separaran como registros</param>
        /// <param name="cargos">cargos encontrados en los nodos de la poliza</param>
        /// <param name="abonos">abonos encontrados en los nodos de la poliza</param>
        protected override void GeneraLineaRegistroContable(IList <PolizaInfo> polizas, out IList <PolizaInfo> cargos, out IList <PolizaInfo> abonos)
        {
            try
            {
                base.GeneraLineaRegistroContable(polizas, out cargos, out abonos);
                const int cadenaLarga = 50;

                //obtiene todos los costos activos:
                var costosActivos = ObtenerCostos();

                if (costosActivos == null)
                {
                    var ex = new Exception(Properties.ResourceServices.PolizaSalidaMuerteGanadoTransito_CostosNoEncontrados);
                    Logger.Error(ex);
                    throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
                }
                //filtra la lista de todos los costos activos, solo conservando los costos que se incluyen en la poliza
                var costoLista = (from costo in costosActivos let tempCosto = detalles.FirstOrDefault(detalle => detalle.CostoId == costo.CostoID)
                                                                              where tempCosto != null select new CostoInfo {
                    CostoID = tempCosto.CostoId, ClaveContable = costo.ClaveContable, Descripcion = costo.Descripcion
                }).ToList();
                costosActivos.Clear();
                costosActivos = costoLista;
                //

                PolizaModel.RegistroContable = new List <PolizaRegistroContableModel>();
                PolizaRegistroContableModel registroContable;
                foreach (var cargo in cargos)
                {
                    if (cargo.Descripcion == null)
                    {
                        //al nodo de la poliza le encuentra la descripcion del costo usando la clave contable del mismo:
                        var descripcionCosto =
                            costosActivos.FirstOrDefault(
                                costo =>
                                cargo.Cuenta.EndsWith(costo.ClaveContable));
                        //en caso de no encontrarse, no se asigna descripcion, en caso de encontrarse se asigna la descripcion del costo
                        cargo.Descripcion = descripcionCosto == null ? string.Empty : descripcionCosto.Descripcion;
                    }

                    //si la descripcion es demasiado larga, se solo muestra la cantidad de letras que cabe en la linea
                    var sbDescripcion = new StringBuilder();
                    sbDescripcion.Append(cargo.Descripcion.Length > cadenaLarga
                        ? cargo.Descripcion.Substring(0, cadenaLarga - 1).Trim()
                        : cargo.Descripcion.Trim());
                    registroContable = new PolizaRegistroContableModel
                    {
                        Cuenta =
                            Cancelacion
                                ? string.IsNullOrWhiteSpace(cargo.Proveedor)
                                    ? cargo.Cuenta
                                    : cargo.Proveedor
                                : cargo.Cuenta,
                        Descripcion = sbDescripcion.ToString(),
                        Cargo       =
                            Convert.ToDecimal(cargo.Importe.Replace("-", string.Empty)).ToString(
                                "N", CultureInfo.InvariantCulture)
                    };
                    PolizaModel.RegistroContable.Add(registroContable);
                }

                var cuentaSapBL = new CuentaSAPBL();
                var cuentaSap   = cuentaSapBL.ObtenerTodos();

                foreach (var abono in abonos)
                {
                    var cuenta = cuentaSap.FirstOrDefault(x => x.CuentaSAP == abono.Cuenta);

                    if (cuenta == null)
                    {
                        cuenta = new CuentaSAPInfo();
                    }
                    //al nodo de la poliza le encuentra la descripcion del costo usando la clave contable del mismo:

                    var sbDescripcion = new StringBuilder();
                    sbDescripcion.Append(cuenta.Descripcion.Length > cadenaLarga
                        ? cuenta.Descripcion.Substring(0, cadenaLarga - 1).Trim()
                        : cuenta.Descripcion.Trim());
                    registroContable = new PolizaRegistroContableModel
                    {
                        Cuenta =
                            (string.IsNullOrWhiteSpace(abono.Proveedor)
                                ? abono.Cuenta
                                : abono.Proveedor),
                        Descripcion = sbDescripcion.ToString(),
                        Concepto    = string.Empty,
                        Abono       =
                            Convert.ToDecimal(abono.Importe.Replace("-", string.Empty)).ToString(
                                "N", CultureInfo.CurrentCulture)
                    };
                    PolizaModel.RegistroContable.Add(registroContable);
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
示例#27
0
 /// <summary>
 /// Obtiene los parametros para obtner por filtro sin tipo de cuenta
 /// </summary>
 /// <param name="filtro"></param>
 /// <returns></returns>
 internal static Dictionary <string, object> ObtenerParametrosPorFiltroSinTipo(CuentaSAPInfo filtro)
 {
     try
     {
         Logger.Info();
         var parametros =
             new Dictionary <string, object>
         {
             { "@CuentaSAPID", filtro.CuentaSAPID },
             { "@CuentaSAP", filtro.CuentaSAP },
             { "@Descripcion", filtro.Descripcion },
             { "@Activo", filtro.Activo },
         };
         return(parametros);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
        private IList <PolizaInfo> ObtenerPoliza(SalidaProductoInfo salidaProducto)
        {
            var polizasSalida = new List <PolizaInfo>();

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

            if (tipoPoliza == null)
            {
                throw new ExcepcionServicio(string.Format("{0} {1}", "EL TIPO DE POLIZA",
                                                          TipoPoliza.SalidaVentaProducto));
            }

            string textoDocumento = tipoPoliza.TextoDocumento;
            string tipoMovimiento = tipoPoliza.ClavePoliza;
            string postFijoRef3   = tipoPoliza.PostFijoRef3;

            var linea = 1;
            var ref3  = new StringBuilder();

            ref3.Append("03");
            ref3.Append(
                string.Format("{0}{1}{2}", DateTime.Today.Day, DateTime.Today.Month, DateTime.Today.Year).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);

            //string numeroReferencia = string.Format("{0}{1}", salidaProducto.FolioSalida, ObtenerNumeroReferencia);
            string numeroReferencia = ObtenerNumeroReferenciaFolio(salidaProducto.FolioSalida);

            IList <CuentaSAPInfo>          cuentasSAP         = ObtenerCuentasSAP();
            IList <ClaseCostoProductoInfo> almacenesProductos = ObtenerCostosProducto(salidaProducto.Almacen.AlmacenID);
            OrganizacionInfo organizacion = ObtenerOrganizacionIVA(salidaProducto.Organizacion.OrganizacionID);

            if (organizacion == null)
            {
                organizacion = new OrganizacionInfo
                {
                    TipoOrganizacion = new TipoOrganizacionInfo()
                };
            }

            ClaseCostoProductoInfo almacenProducto =
                almacenesProductos.FirstOrDefault(prod => prod.ProductoID == salidaProducto.Producto.ProductoId);

            if (almacenProducto == null)
            {
                throw new ExcepcionServicio(string.Format("{0} {1} {2}", "CUENTA PARA PRODUCTO",
                                                          salidaProducto.Producto.Descripcion, "NO CONFIGURADA"));
            }
            CuentaSAPInfo cuentaSAP =
                cuentasSAP.FirstOrDefault(cuenta => cuenta.CuentaSAPID == almacenProducto.CuentaSAPID);

            if (cuentaSAP == null)
            {
                cuentaSAP = new CuentaSAPInfo
                {
                    Descripcion = string.Empty,
                    CuentaSAP   = string.Empty
                };
            }

            ClaveContableInfo claveContableCosto = ObtenerCuentaInventario(salidaProducto.Organizacion.
                                                                           OrganizacionID,
                                                                           TipoPoliza.ConsumoAlimento);

            if (claveContableCosto == null)
            {
                throw new ExcepcionServicio(string.Format("{0}", "CUENTA DE COSTO NO CONFIGURADA"));
            }
            ClaveContableInfo claveContableBeneficios = ObtenerCuentaInventario(salidaProducto.Organizacion.
                                                                                OrganizacionID,
                                                                                TipoPoliza.SalidaVentaProducto);

            if (claveContableBeneficios == null)
            {
                throw new ExcepcionServicio(string.Format("{0}", "CUENTA DE BENEFICIOS NO CONFIGURADA"));
            }

            ParametroOrganizacionInfo parametroCentroCosto =
                ObtenerParametroOrganizacionPorClave(organizacion.OrganizacionID,
                                                     ParametrosEnum.CTACENTROCOSTOMP.ToString());

            if (parametroCentroCosto == null)
            {
                throw new ExcepcionServicio(string.Format("{0}", "CENTRO DE COSTO NO CONFIGURADO"));
            }

            ParametroOrganizacionInfo parametroCentroBeneficio =
                ObtenerParametroOrganizacionPorClave(organizacion.OrganizacionID,
                                                     ParametrosEnum.CTACENTROBENEFICIOMP.ToString());

            if (parametroCentroBeneficio == null)
            {
                throw new ExcepcionServicio(string.Format("{0}", "CENTRO DE BENEFICIO NO CONFIGURADO"));
            }

            string archivoFolio = ObtenerArchivoFolio(salidaProducto.FechaSalida);
            int    cantidad     = salidaProducto.PesoBruto - salidaProducto.PesoTara;

            var almacenMovimientoDetalleBL = new AlmacenMovimientoDetalleBL();

            AlmacenMovimientoDetalle detalleMovimiento =
                almacenMovimientoDetalleBL.ObtenerPorAlmacenMovimientoID(
                    salidaProducto.AlmacenMovimiento.AlmacenMovimientoID);

            if (detalleMovimiento == null)
            {
                detalleMovimiento = new AlmacenMovimientoDetalle();
            }

            if (unidades == null)
            {
                unidades = ObtenerUnidadesMedicion();
            }
            if (productos == null)
            {
                productos = ObtenerProductos();
            }
            ProductoInfo producto =
                productos.FirstOrDefault(clave => clave.ProductoId == salidaProducto.Producto.ProductoId);

            if (producto == null)
            {
                producto = new ProductoInfo();
            }
            switch ((SubFamiliasEnum)producto.SubfamiliaId)
            {
            case SubFamiliasEnum.Granos:
                claveContableBeneficios.Valor = string.Concat(claveContableBeneficios.Valor,
                                                              PostFijoSubFamiliaGranos);
                claveContableCosto.Valor = string.Concat(claveContableCosto.Valor, PostFijoSubFamiliaGranos);
                break;

            default:
                claveContableBeneficios.Valor = string.Concat(claveContableBeneficios.Valor,
                                                              PostFijoSubFamiliaNoGranos);
                claveContableCosto.Valor = string.Concat(claveContableCosto.Valor, PostFijoSubFamiliaNoGranos);
                break;
            }
            var traspaso = false;

            if (salidaProducto.TipoMovimiento.TipoMovimientoID == TipoMovimiento.ProductoSalidaTraspaso.GetHashCode() ||
                salidaProducto.TipoMovimiento.Descripcion.Equals("salida por traspaso", StringComparison.InvariantCultureIgnoreCase))
            {
                salidaProducto.Cliente = new ClienteInfo
                {
                    CodigoSAP   = salidaProducto.CuentaSAP.CuentaSAP,
                    Descripcion = salidaProducto.CuentaSAP.Descripcion
                };
                traspaso = true;
            }
            string unidad = unidades.Where(clave => clave.UnidadID == producto.UnidadId).
                            Select(uni => uni.ClaveUnidad).FirstOrDefault();
            var datos = new DatosPolizaInfo
            {
                NumeroReferencia = numeroReferencia,
                FechaEntrada     = salidaProducto.FechaSalida,
                Folio            = salidaProducto.FolioSalida.ToString(),
                Cliente          = traspaso ? string.Empty : salidaProducto.Cliente.CodigoSAP,
                Cuenta           = traspaso ? salidaProducto.Cliente.CodigoSAP : string.Empty,
                Importe          = string.Format("{0}", salidaProducto.Importe.ToString("F2")),
                Renglon          = Convert.ToString(linea++),
                ImporteIva       = "0",
                ClaseDocumento   = postFijoRef3,
                Ref3             = ref3.ToString(),
                Division         = organizacion.Division,
                ArchivoFolio     = archivoFolio,
                DescripcionCosto = salidaProducto.Cliente.Descripcion,
                PesoOrigen       = cantidad,
                TipoDocumento    = textoDocumento,
                Concepto         = String.Format("{0}-{1} {2} {3} {4}",
                                                 tipoMovimiento,
                                                 salidaProducto.FolioSalida, cantidad.ToString("N0"),
                                                 unidad,
                                                 cuentaSAP.Descripcion),
                Sociedad = organizacion.Sociedad,
                Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad)
            };
            PolizaInfo polizaSalida = GeneraRegistroPoliza(datos);

            polizasSalida.Add(polizaSalida);

            datos = new DatosPolizaInfo
            {
                NumeroReferencia = numeroReferencia,
                FechaEntrada     = salidaProducto.FechaSalida,
                Folio            = salidaProducto.FolioSalida.ToString(),
                Importe          = (detalleMovimiento.Importe * -1).ToString("F2"),
                Renglon          = Convert.ToString(linea++),
                ImporteIva       = "0",
                Ref3             = ref3.ToString(),
                Cuenta           = cuentaSAP.CuentaSAP,
                DescripcionCosto = cuentaSAP.Descripcion,
                Division         = organizacion.Division,
                ArchivoFolio     = archivoFolio,
                PesoOrigen       = cantidad,
                ClaseDocumento   = postFijoRef3,
                TipoDocumento    = textoDocumento,
                Concepto         = String.Format("{0}-{1} {2} {3} {4}",
                                                 tipoMovimiento,
                                                 salidaProducto.FolioSalida, cantidad.ToString("N0"),
                                                 unidad,
                                                 cuentaSAP.Descripcion),
                Sociedad = organizacion.Sociedad,
                Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad)
            };
            polizaSalida = GeneraRegistroPoliza(datos);
            polizasSalida.Add(polizaSalida);

            if (!traspaso)
            {
                cuentaSAP = cuentasSAP.FirstOrDefault(cuenta => cuenta.CuentaSAP == claveContableCosto.Valor);
                if (cuentaSAP == null)
                {
                    throw new ExcepcionServicio("CUENTA DE COSTO NO CONFIGURADA");
                }
                datos = new DatosPolizaInfo
                {
                    NumeroReferencia = numeroReferencia,
                    FechaEntrada     = salidaProducto.FechaSalida,
                    Folio            = salidaProducto.FolioSalida.ToString(),
                    Importe          = detalleMovimiento.Importe.ToString("F2"),
                    Renglon          = Convert.ToString(linea++),
                    ImporteIva       = "0",
                    Ref3             = ref3.ToString(),
                    Cuenta           = cuentaSAP.CuentaSAP,
                    Division         = organizacion.Division,
                    ArchivoFolio     = archivoFolio,
                    DescripcionCosto = cuentaSAP.Descripcion,
                    CentroCosto      =
                        claveContableCosto.Valor.StartsWith(PrefijoCuentaCentroCosto) ||
                        claveContableCosto.Valor.StartsWith(PrefijoCuentaCentroGasto)
                                       ? parametroCentroCosto.Valor
                                       : string.Empty,
                    //CentroBeneficio =
                    //    claveContableBeneficios.Valor.StartsWith(PrefijoCuentaCentroBeneficio)
                    //        ? parametroCentroBeneficio.Valor
                    //        : string.Empty,
                    PesoOrigen     = cantidad,
                    ClaseDocumento = postFijoRef3,
                    TipoDocumento  = textoDocumento,
                    Concepto       = String.Format("{0}-{1} {2} {3} {4}",
                                                   tipoMovimiento,
                                                   salidaProducto.FolioSalida, cantidad.ToString("N0"),
                                                   unidad,
                                                   cuentaSAP.Descripcion),
                    Sociedad = organizacion.Sociedad,
                    Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad)
                };
                polizaSalida = GeneraRegistroPoliza(datos);
                polizasSalida.Add(polizaSalida);

                cuentaSAP = cuentasSAP.FirstOrDefault(cuenta => cuenta.CuentaSAP == claveContableBeneficios.Valor);
                if (cuentaSAP == null)
                {
                    throw new ExcepcionServicio("CUENTA DE BENEFICIOS NO CONFIGURADA");
                }
                datos = new DatosPolizaInfo
                {
                    NumeroReferencia = numeroReferencia,
                    FechaEntrada     = salidaProducto.FechaSalida,
                    Folio            = salidaProducto.FolioSalida.ToString(),
                    Importe          = string.Format("{0}", (salidaProducto.Importe * -1).ToString("F2")),
                    Renglon          = Convert.ToString(linea),
                    ImporteIva       = "0",
                    Ref3             = ref3.ToString(),
                    Cuenta           = cuentaSAP.CuentaSAP,
                    Division         = organizacion.Division,
                    ArchivoFolio     = archivoFolio,
                    DescripcionCosto = cuentaSAP.Descripcion,
                    //CentroCosto =
                    //    claveContableCosto.Valor.StartsWith(PrefijoCuentaCentroCosto) ||
                    //    claveContableCosto.Valor.StartsWith(PrefijoCuentaCentroGasto)
                    //        ? parametroCentroCosto.Valor
                    //        : string.Empty,
                    CentroBeneficio =
                        claveContableBeneficios.Valor.StartsWith(PrefijoCuentaCentroBeneficio)
                                        ? parametroCentroBeneficio.Valor
                                        : string.Empty,
                    PesoOrigen     = cantidad,
                    ClaseDocumento = postFijoRef3,
                    TipoDocumento  = textoDocumento,
                    Concepto       = String.Format("{0}-{1} {2} {3} {4}",
                                                   tipoMovimiento,
                                                   salidaProducto.FolioSalida, cantidad.ToString("N0"),
                                                   unidad,
                                                   cuentaSAP.Descripcion),
                    Sociedad = organizacion.Sociedad,
                    Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad)
                };
                polizaSalida = GeneraRegistroPoliza(datos);
                polizasSalida.Add(polizaSalida);
            }

            return(polizasSalida);
        }
示例#29
0
        /// <summary>
        /// Genera la estructura de la poliza de la 300
        /// </summary>
        /// <param name="polizaSacrificioModel"></param>
        /// <param name="cuentasSap"></param>
        /// <param name="proveedores"></param>
        /// <param name="parametroGeneral"></param>
        /// <param name="organizacion"></param>
        /// <param name="textoDocumento"></param>
        /// <param name="tipoMovimiento"></param>
        /// <param name="postFijoRef3"></param>
        /// <returns></returns>
        private List <PolizaInfo> ObtenerPoliza300(List <PolizaSacrificioModel> datosPoliza
                                                   , IList <CuentaSAPInfo> cuentasSap
                                                   , IList <ProveedorInfo> proveedores
                                                   , ParametroGeneralInfo parametroGeneral
                                                   , OrganizacionInfo organizacion
                                                   , string textoDocumento, string tipoMovimiento
                                                   , string postFijoRef3)
        {
            var     polizasSacrificio = new List <PolizaInfo>();
            decimal importe           = 0;
            int     linea             = 0;

            var sbRef3 = new StringBuilder();

            sbRef3.Append("03");
            sbRef3.Append(
                string.Format("{0}{1}{2}", DateTime.Today.Day, DateTime.Today.Month, DateTime.Today.Year).PadLeft(
                    10, ' '));
            sbRef3.Append(new Random(10).Next(10, 20));
            sbRef3.Append(new Random(30).Next(30, 40));
            sbRef3.Append(DateTime.Now.Millisecond);
            sbRef3.Append(postFijoRef3);

            var sbArchivo = new StringBuilder(ObtenerArchivoFolio(datosPoliza.FirstOrDefault().Fecha));

            Thread.Sleep(1000);

            PolizaSacrificioModel polizaSacrificioModel = new PolizaSacrificioModel();

            datosPoliza = datosPoliza.GroupBy(grupo => new { grupo.Serie, grupo.Folio })
                          .Select(dato => new PolizaSacrificioModel
            {
                OrganizacionID = dato.Select(org => org.OrganizacionID).FirstOrDefault(),
                Canales        = dato.Select(can => can.Canales).Sum(),
                //Lote = dato.Select(lot => lot.Lote).FirstOrDefault(),
                Peso  = dato.Select(peso => peso.Peso).Sum(),
                Fecha = dato.Select(fech => fech.Fecha).FirstOrDefault(),
                Folio = dato.Key.Folio,
                //LoteID = dato.Select(lot => lot.LoteID).FirstOrDefault(),
                //Codigo = dato.Select(cod => cod.Codigo).FirstOrDefault(),
                ImporteCanal   = dato.Select(imp => imp.ImporteCanal).Sum(),
                Serie          = dato.Key.Serie,
                ImportePiel    = dato.Select(imp => imp.ImportePiel).Sum(),
                ImporteViscera = dato.Select(imp => imp.ImporteViscera).Sum()
            }).ToList();


            for (var indexSacrificio = 0; indexSacrificio < datosPoliza.Count; indexSacrificio++)
            {
                polizaSacrificioModel = datosPoliza[indexSacrificio];

                importe = polizaSacrificioModel.ImporteViscera +
                          polizaSacrificioModel.ImporteCanal +
                          polizaSacrificioModel.ImportePiel;


                //var numeroReferencia = new StringBuilder(string.Format("{0}{1}", polizaSacrificioModel.Folio, ObtenerNumeroReferencia));
                var numeroReferencia = ObtenerNumeroReferenciaFolio(Convert.ToInt64(polizaSacrificioModel.Folio));

                CuentaSAPInfo cuentaSAP = cuentasSap.FirstOrDefault(cuenta => cuenta.CuentaSAP.Equals(ObtenerCuentaPoliza300));
                if (cuentaSAP == null)
                {
                    throw new ExcepcionServicio("CUENTA PARA CANAL NO CONFIGURADA");
                }
                var datos = new DatosPolizaInfo
                {
                    NumeroReferencia = numeroReferencia,
                    FechaEntrada     = polizaSacrificioModel.Fecha,
                    Folio            = polizaSacrificioModel.Folio.ToString(CultureInfo.InvariantCulture),
                    ClaseDocumento   = postFijoRef3,
                    Importe          =
                        string.Format("{0}", Cancelacion ? (importe * -1).ToString("F2")
                                                         : importe.ToString("F2")),
                    IndicadorImpuesto = String.Empty,
                    Renglon           = Convert.ToString(++linea),
                    ImporteIva        = "0",
                    Ref3             = sbRef3.ToString(),
                    Cuenta           = cuentaSAP.CuentaSAP,
                    Segmento         = "S300",
                    DescripcionCosto = cuentaSAP.Descripcion,
                    Division         = organizacion.Division,
                    ArchivoFolio     = sbArchivo.ToString(),
                    PesoOrigen       = polizaSacrificioModel.Peso,
                    TipoDocumento    = textoDocumento,
                    Concepto         = String.Format("{0}-{1} {2} {3} CANALES {4} Fecha: {5}",
                                                     polizaSacrificioModel.Serie, polizaSacrificioModel.Folio,
                                                     tipoMovimiento
                                                     , polizaSacrificioModel.Canales
                                                     , polizaSacrificioModel.Peso
                                                     , polizaSacrificioModel.Fecha.ToString("yyyyMMdd")),
                    Sociedad = organizacion.Sociedad,
                    ArchivoEnviadoServidor = 1
                };
                PolizaInfo polizaSacrificio = GeneraRegistroPoliza(datos);
                polizasSacrificio.Add(polizaSacrificio);

                ProveedorInfo proveedor = proveedores.FirstOrDefault(codigo => codigo.CodigoSAP.Equals(parametroGeneral.Valor));
                if (proveedor == null)
                {
                    throw new ExcepcionServicio(string.Format("EL PROVEEDOR CON CODIGO {0} SE ENCUENTRA INACTIVO",
                                                              parametroGeneral.Valor));
                }
                datos = new DatosPolizaInfo
                {
                    NumeroReferencia = numeroReferencia,
                    FechaEntrada     = polizaSacrificioModel.Fecha,
                    Folio            = polizaSacrificioModel.Folio.ToString(CultureInfo.InvariantCulture),
                    ClaseDocumento   = postFijoRef3,
                    Importe          =
                        string.Format("{0}", Cancelacion ? (importe).ToString("F2")
                                                         : (importe * -1).ToString("F2")),
                    IndicadorImpuesto = String.Empty,
                    Renglon           = Convert.ToString(++linea),
                    Ref3             = sbRef3.ToString(),
                    ImporteIva       = "0",
                    ClaveProveedor   = proveedor.CodigoSAP,
                    DescripcionCosto = proveedor.Descripcion,
                    Division         = organizacion.Division,
                    ArchivoFolio     = sbArchivo.ToString(),
                    PesoOrigen       = polizaSacrificioModel.Peso,
                    TipoDocumento    = textoDocumento,
                    Concepto         = String.Format("{0}-{1} {2} {3} CANALES {4} Fecha: {5}",
                                                     polizaSacrificioModel.Serie, polizaSacrificioModel.Folio,
                                                     tipoMovimiento
                                                     , polizaSacrificioModel.Canales
                                                     , polizaSacrificioModel.Peso
                                                     , polizaSacrificioModel.Fecha.ToString("yyyyMMdd")),
                    Sociedad = organizacion.Sociedad,
                    ArchivoEnviadoServidor = 1,
                    Segmento = "S300",
                };
                polizaSacrificio = GeneraRegistroPoliza(datos);
                polizasSacrificio.Add(polizaSacrificio);
            }
            return(polizasSacrificio);
        }
        private IList <PolizaInfo> ObtenerPoliza(GastoInventarioInfo gastoInventario)
        {
            var polizasGastosInventario = new List <PolizaInfo>();

            var costos = new List <int> {
                gastoInventario.Costo.CostoID
            };
            var retencionBL = new RetencionBL();
            var retenciones = retencionBL.ObtenerRetencionesConCosto(costos);
            IList <CuentaSAPInfo> cuentasSap = ObtenerCuentasSAP();

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

            if (tipoPoliza == null)
            {
                throw new ExcepcionServicio(string.Format("{0} {1}", "EL TIPO DE POLIZA",
                                                          TipoPoliza.GastosInventario));
            }

            string textoDocumento = tipoPoliza.TextoDocumento;
            string tipoMovimiento = tipoPoliza.ClavePoliza;
            string postFijoRef3   = tipoPoliza.PostFijoRef3;

            var ref3 = new StringBuilder();

            ref3.Append("03");
            ref3.Append(
                string.Format("{0}{1}{2}", DateTime.Today.Day, DateTime.Today.Month, DateTime.Today.Year).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);

            //string numeroReferencia = ObtenerNumeroReferencia;
            string numeroReferencia = ObtenerNumeroReferenciaFolio(gastoInventario.FolioGasto);

            DateTime fecha        = gastoInventario.FechaGasto;
            string   archivoFolio = ObtenerArchivoFolio(fecha);

            OrganizacionInfo organizacion = ObtenerOrganizacionIVA(gastoInventario.Organizacion.OrganizacionID);

            if (organizacion == null)
            {
                organizacion = new OrganizacionInfo
                {
                    TipoOrganizacion = new TipoOrganizacionInfo()
                };
            }

            bool esProveedor    = gastoInventario.Proveedor != null && gastoInventario.Proveedor.ProveedorID > 0;
            bool tieneRetencion = gastoInventario.Retencion;
            var  renglon        = 0;

            ClaveContableInfo claveContableInfo = ObtenerCuentaInventario(gastoInventario.Costo
                                                                          , gastoInventario.Organizacion.OrganizacionID
                                                                          , 0);

            CuentaSAPInfo cuentaSapProvision = null;

            if (!esProveedor)
            {
                cuentaSapProvision =
                    cuentasSap.FirstOrDefault(
                        clave => clave.CuentaSAPID == gastoInventario.CuentaSAP.CuentaSAPID);
                if (cuentaSapProvision == null)
                {
                    cuentaSapProvision =
                        cuentasSap.FirstOrDefault(
                            clave =>
                            clave.CuentaSAP.Equals(gastoInventario.CuentaGasto,
                                                   StringComparison.InvariantCultureIgnoreCase));

                    if (cuentaSapProvision == null)
                    {
                        throw new ExcepcionServicio(
                                  string.Format("No se encuentra configurada la cuenta de provisión, para el costo {0}",
                                                gastoInventario.Costo.Descripcion));
                    }
                }
            }
            string complementoConcepto;

            if (gastoInventario.Corral != null)
            {
                complementoConcepto = string.Format("Corral {0}", gastoInventario.Corral.Codigo);
            }
            else
            {
                complementoConcepto = string.Format("{0} Corrales", gastoInventario.TotalCorrales);
            }
            PolizaInfo polizaEntrada;

            if (esProveedor)
            {
                if (!gastoInventario.IVA && !tieneRetencion)
                {
                    renglon++;
                    var datos = new DatosPolizaInfo
                    {
                        NumeroReferencia = numeroReferencia,
                        FechaEntrada     = gastoInventario.FechaGasto,
                        Folio            = gastoInventario.FolioGasto.ToString(CultureInfo.InvariantCulture),
                        ClaseDocumento   = postFijoRef3,
                        Importe          =
                            string.Format("{0}",
                                          Cancelacion ? (gastoInventario.Importe * -1).ToString("F2")
                                                                      : gastoInventario.Importe.ToString("F2")),
                        Renglon          = Convert.ToString(renglon),
                        Division         = organizacion.Division,
                        ImporteIva       = "0",
                        Ref3             = ref3.ToString(),
                        Cuenta           = claveContableInfo.Valor,
                        ArchivoFolio     = archivoFolio,
                        DescripcionCosto = claveContableInfo.Descripcion,
                        PesoOrigen       = 0,
                        TipoDocumento    = textoDocumento,
                        Concepto         =
                            String.Format("{0}-{1},{2}", tipoMovimiento,
                                          gastoInventario.FolioGasto
                                          , complementoConcepto),
                        Sociedad = organizacion.Sociedad,
                        Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                    };
                    polizaEntrada = GeneraRegistroPoliza(datos);
                    polizasGastosInventario.Add(polizaEntrada);

                    renglon++;
                    datos = new DatosPolizaInfo
                    {
                        NumeroReferencia = numeroReferencia,
                        FechaEntrada     = gastoInventario.FechaGasto,
                        Folio            = gastoInventario.FolioGasto.ToString(CultureInfo.InvariantCulture),
                        ClaveProveedor   = gastoInventario.Proveedor.CodigoSAP,
                        ClaseDocumento   = postFijoRef3,
                        Importe          =
                            string.Format("{0}", Cancelacion ? gastoInventario.Importe.ToString("F2")
                                                                         : (gastoInventario.Importe * -1).ToString("F2")),
                        Renglon          = Convert.ToString(renglon),
                        ImporteIva       = "0",
                        Ref3             = ref3.ToString(),
                        ArchivoFolio     = archivoFolio,
                        DescripcionCosto = gastoInventario.Proveedor.Descripcion,
                        PesoOrigen       = 0,
                        Division         = organizacion.Division,
                        TipoDocumento    = textoDocumento,
                        Concepto         =
                            String.Format("{0}-{1},{2}", tipoMovimiento,
                                          gastoInventario.FolioGasto
                                          , complementoConcepto),
                        Sociedad = organizacion.Sociedad,
                        Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                    };
                    polizaEntrada = GeneraRegistroPoliza(datos);
                    polizasGastosInventario.Add(polizaEntrada);
                }
                else
                {
                    if (gastoInventario.IVA)
                    {
                        CuentaSAPInfo cuentaIva = cuentasSap.FirstOrDefault(
                            clave => clave.CuentaSAP.Equals(organizacion.Iva.CuentaRecuperar.ClaveCuenta));
                        if (cuentaIva == null)
                        {
                            throw new ExcepcionServicio(string.Format("No se encuentra configurada la cuenta de iva, para la organización."));
                        }
                        renglon++;
                        var importeIva = gastoInventario.Importe * (organizacion.Iva.TasaIva / 100);
                        var datos      = new DatosPolizaInfo
                        {
                            NumeroReferencia = numeroReferencia,
                            FechaEntrada     = gastoInventario.FechaGasto,
                            Folio            = gastoInventario.FolioGasto.ToString(CultureInfo.InvariantCulture),
                            Division         = organizacion.Division,
                            ClaseDocumento   = postFijoRef3,
                            Importe          = string.Format("{0}",
                                                             Cancelacion ? (gastoInventario.Importe * -1).ToString("F2")
                                                                                : gastoInventario.Importe.ToString("F2")),
                            Renglon          = Convert.ToString(renglon),
                            ImporteIva       = "0",
                            Ref3             = ref3.ToString(),
                            Cuenta           = claveContableInfo.Valor,
                            ArchivoFolio     = archivoFolio,
                            DescripcionCosto = claveContableInfo.Descripcion,
                            PesoOrigen       = 0,
                            TipoDocumento    = textoDocumento,
                            Concepto         =
                                String.Format("{0}-{1},{2}", tipoMovimiento,
                                              gastoInventario.FolioGasto
                                              , complementoConcepto),
                            Sociedad = organizacion.Sociedad,
                            Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                        };
                        polizaEntrada = GeneraRegistroPoliza(datos);
                        polizasGastosInventario.Add(polizaEntrada);
                        renglon++;
                        datos = new DatosPolizaInfo
                        {
                            NumeroReferencia = numeroReferencia,
                            FechaEntrada     = gastoInventario.FechaGasto,
                            Folio            = gastoInventario.FolioGasto.ToString(CultureInfo.InvariantCulture),
                            ClaseDocumento   = postFijoRef3,
                            Importe          = string.Format("{0}",
                                                             Cancelacion ? (importeIva * -1).ToString("F2")
                                                                            : importeIva.ToString("F2"))
                            ,
                            Renglon           = Convert.ToString(renglon),
                            ImporteIva        = gastoInventario.Importe.ToString("F2"),
                            ClaveImpuesto     = ClaveImpuesto,
                            CondicionImpuesto = CondicionImpuesto,
                            IndicadorImpuesto = organizacion.Iva.IndicadorIvaRecuperar,
                            Ref3             = ref3.ToString(),
                            Division         = organizacion.Division,
                            Cuenta           = organizacion.Iva.CuentaRecuperar.ClaveCuenta,
                            ArchivoFolio     = archivoFolio,
                            DescripcionCosto = cuentaIva.Descripcion,
                            PesoOrigen       = 0,
                            TipoDocumento    = textoDocumento,
                            Concepto         =
                                String.Format("{0}-{1},{2}", tipoMovimiento,
                                              gastoInventario.FolioGasto
                                              , complementoConcepto),
                            Sociedad = organizacion.Sociedad,
                            Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                        };
                        polizaEntrada = GeneraRegistroPoliza(datos);
                        polizasGastosInventario.Add(polizaEntrada);
                        renglon++;
                        datos = new DatosPolizaInfo
                        {
                            NumeroReferencia = numeroReferencia,
                            FechaEntrada     = gastoInventario.FechaGasto,
                            Folio            = gastoInventario.FolioGasto.ToString(CultureInfo.InvariantCulture),
                            Division         = organizacion.Division,
                            ClaveProveedor   = gastoInventario.Proveedor.CodigoSAP,
                            ClaseDocumento   = postFijoRef3,
                            Importe          = string.Format("{0}",
                                                             Cancelacion ? (gastoInventario.Importe + importeIva).ToString("F2")
                                                                            : ((gastoInventario.Importe + importeIva) * -1).ToString("F2")),
                            Renglon          = Convert.ToString(renglon),
                            ImporteIva       = "0",
                            Ref3             = ref3.ToString(),
                            ArchivoFolio     = archivoFolio,
                            DescripcionCosto = gastoInventario.Proveedor.Descripcion,
                            PesoOrigen       = 0,
                            TipoDocumento    = textoDocumento,
                            Concepto         =
                                String.Format("{0}-{1},{2}", tipoMovimiento,
                                              gastoInventario.FolioGasto
                                              , complementoConcepto),
                            Sociedad = organizacion.Sociedad,
                            Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                        };
                        polizaEntrada = GeneraRegistroPoliza(datos);
                        polizasGastosInventario.Add(polizaEntrada);
                    }
                    if (tieneRetencion)
                    {
                        RetencionInfo retencion;
                        if (retenciones != null && retenciones.Any())
                        {
                            retencion =
                                retenciones.Where(
                                    costo => costo.CostoID.Equals(gastoInventario.Costo.CostoID)).
                                Select(ret => ret).FirstOrDefault();

                            if (retencion == null)
                            {
                                throw new ExcepcionServicio(string.Format("No se encuentra configurada retención para el costo {0}", gastoInventario.Costo.Descripcion));
                            }
                        }
                        else
                        {
                            throw new ExcepcionServicio(string.Format("No se encuentra configurada retención para el costo {0}", gastoInventario.Costo.Descripcion));
                        }
                        var parametrosRetencion = new StringBuilder();
                        parametrosRetencion.Append(String.Format("{0}{1}"
                                                                 , retencion.IndicadorRetencion
                                                                 , retencion.TipoRetencion));
                        var datos = new DatosPolizaInfo
                        {
                            NumeroReferencia  = numeroReferencia,
                            FechaEntrada      = gastoInventario.FechaGasto,
                            Folio             = gastoInventario.FolioGasto.ToString(CultureInfo.InvariantCulture),
                            Division          = organizacion.Division,
                            ClaveProveedor    = gastoInventario.Proveedor.CodigoSAP,
                            ClaseDocumento    = postFijoRef3,
                            IndicadorImpuesto = parametrosRetencion.ToString(),
                            Importe           = string.Format("{0}{1}",
                                                              Cancelacion ? string.Empty : "-",
                                                              "0"),
                            Renglon          = Convert.ToString(renglon),
                            ImporteIva       = "0",
                            Ref3             = ref3.ToString(),
                            CodigoRetencion  = retencion.IndicadorImpuesto,
                            TipoRetencion    = retencion.IndicadorRetencion,
                            ArchivoFolio     = archivoFolio,
                            DescripcionCosto = gastoInventario.Proveedor.Descripcion,
                            PesoOrigen       = 0,
                            TipoDocumento    = textoDocumento,
                            Concepto         =
                                String.Format("{0}-{1},{2}", tipoMovimiento,
                                              gastoInventario.FolioGasto
                                              , complementoConcepto),
                            Sociedad = organizacion.Sociedad,
                            Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                        };
                        polizaEntrada = GeneraRegistroPoliza(datos);
                        polizasGastosInventario.Add(polizaEntrada);
                        if (!gastoInventario.IVA)
                        {
                            renglon++;
                            datos = new DatosPolizaInfo
                            {
                                NumeroReferencia = numeroReferencia,
                                FechaEntrada     = gastoInventario.FechaGasto,
                                Folio            = gastoInventario.FolioGasto.ToString(CultureInfo.InvariantCulture),
                                Division         = organizacion.Division,
                                ClaveProveedor   = gastoInventario.Proveedor.CodigoSAP,
                                ClaseDocumento   = postFijoRef3,
                                Importe          = string.Format("{0}",
                                                                 Cancelacion
                                                                        ? gastoInventario.Importe.ToString("F2")
                                                                        : (gastoInventario.Importe * -1).ToString("F2"))
                                ,
                                Renglon          = Convert.ToString(renglon),
                                ImporteIva       = "0",
                                Ref3             = ref3.ToString(),
                                ArchivoFolio     = archivoFolio,
                                DescripcionCosto = gastoInventario.Proveedor.Descripcion,
                                PesoOrigen       = 0,
                                TipoDocumento    = textoDocumento,
                                Concepto         =
                                    String.Format("{0}-{1},{2}", tipoMovimiento,
                                                  gastoInventario.FolioGasto
                                                  , complementoConcepto),
                                Sociedad = organizacion.Sociedad,
                                Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                            };
                            polizaEntrada = GeneraRegistroPoliza(datos);
                            polizasGastosInventario.Add(polizaEntrada);
                            renglon++;
                            datos = new DatosPolizaInfo
                            {
                                NumeroReferencia = numeroReferencia,
                                FechaEntrada     = gastoInventario.FechaGasto,
                                Folio            = gastoInventario.FolioGasto.ToString(CultureInfo.InvariantCulture),
                                Division         = organizacion.Division,
                                ClaseDocumento   = postFijoRef3,
                                Importe          = string.Format("{0}",
                                                                 Cancelacion
                                                                        ? (gastoInventario.Importe * -1).ToString("F2")
                                                                        : gastoInventario.Importe.ToString("F2")),
                                Renglon          = Convert.ToString(renglon),
                                ImporteIva       = "0",
                                Ref3             = ref3.ToString(),
                                Cuenta           = claveContableInfo.Valor,
                                ArchivoFolio     = archivoFolio,
                                DescripcionCosto = claveContableInfo.Descripcion,
                                PesoOrigen       = 0,
                                TipoDocumento    = textoDocumento,
                                Concepto         =
                                    String.Format("{0}-{1},{2}", tipoMovimiento,
                                                  gastoInventario.FolioGasto
                                                  , complementoConcepto),
                                Sociedad = organizacion.Sociedad,
                                Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                            };
                            polizaEntrada = GeneraRegistroPoliza(datos);
                            polizasGastosInventario.Add(polizaEntrada);
                        }
                    }
                }
            }
            else
            {
                renglon++;
                var datos = new DatosPolizaInfo
                {
                    NumeroReferencia = numeroReferencia,
                    FechaEntrada     = gastoInventario.FechaGasto,
                    Folio            = gastoInventario.FolioGasto.ToString(CultureInfo.InvariantCulture),
                    Division         = organizacion.Division,
                    ClaseDocumento   = postFijoRef3,
                    Importe          = string.Format("{0}", Cancelacion ? (gastoInventario.Importe * -1).ToString("F2")
                                                                               : gastoInventario.Importe.ToString("F2")),
                    Renglon          = Convert.ToString(renglon),
                    ImporteIva       = "0",
                    Ref3             = ref3.ToString(),
                    Cuenta           = claveContableInfo.Valor,
                    ArchivoFolio     = archivoFolio,
                    DescripcionCosto = claveContableInfo.Descripcion,
                    PesoOrigen       = 0,
                    TipoDocumento    = textoDocumento,
                    Concepto         =
                        String.Format("{0}-{1},{2}", tipoMovimiento,
                                      gastoInventario.FolioGasto
                                      , complementoConcepto),
                    Sociedad = organizacion.Sociedad,
                    Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                };
                polizaEntrada = GeneraRegistroPoliza(datos);
                polizasGastosInventario.Add(polizaEntrada);

                renglon++;

                datos = new DatosPolizaInfo
                {
                    NumeroReferencia = numeroReferencia,
                    FechaEntrada     = gastoInventario.FechaGasto,
                    Folio            = gastoInventario.FolioGasto.ToString(CultureInfo.InvariantCulture),
                    Division         = organizacion.Division,
                    ClaseDocumento   = postFijoRef3,
                    Importe          = string.Format("{0}", Cancelacion ? gastoInventario.Importe.ToString("F2")
                                                                           : (gastoInventario.Importe * -1).ToString("F2")),
                    CentroCosto      = gastoInventario.CentroCosto,
                    Renglon          = Convert.ToString(renglon),
                    ImporteIva       = "0",
                    Ref3             = ref3.ToString(),
                    Cuenta           = cuentaSapProvision.CuentaSAP,
                    ArchivoFolio     = archivoFolio,
                    DescripcionCosto = cuentaSapProvision.Descripcion,
                    PesoOrigen       = 0,
                    TipoDocumento    = textoDocumento,
                    Concepto         =
                        String.Format("{0}-{1},{2}", tipoMovimiento,
                                      gastoInventario.FolioGasto
                                      , complementoConcepto),
                    Sociedad = organizacion.Sociedad,
                    Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                };
                polizaEntrada = GeneraRegistroPoliza(datos);
                polizasGastosInventario.Add(polizaEntrada);
            }
            return(polizasGastosInventario);
        }