コード例 #1
0
 /// <summary>
 /// Metodo para Guardar/Modificar una entidad Retencion
 /// </summary>
 /// <param name="info">Representa la entidad que se va a grabar</param>
 public void Guardar(RetencionInfo info)
 {
     try
     {
         Logger.Info();
         var tRetencionBL = new RetencionBL();
         tRetencionBL.Guardar(info);
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
コード例 #2
0
        /// <summary>
        ///     Obtiene una lista de Retencion filtrando por el estatus Activo = 1, Inactivo = 0
        /// </summary>
        /// <returns></returns>
        public IList <RetencionInfo> ObtenerTodos(EstatusEnum estatus)
        {
            try
            {
                Logger.Info();
                var retencionBL = new RetencionBL();
                IList <RetencionInfo> result = retencionBL.ObtenerTodos(estatus);

                return(result);
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
コード例 #3
0
        /// <summary>
        ///     Obtiene un lista paginada
        /// </summary>
        /// <param name="pagina"></param>
        /// <param name="filtro"></param>
        /// <returns></returns>
        public ResultadoInfo <RetencionInfo> ObtenerPorPagina(PaginacionInfo pagina, RetencionInfo filtro)
        {
            try
            {
                Logger.Info();
                var retencionBL = new RetencionBL();
                ResultadoInfo <RetencionInfo> result = retencionBL.ObtenerPorPagina(pagina, filtro);

                return(result);
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
コード例 #4
0
        /// <summary>
        ///     Obtiene una entidad Retencion por su Id
        /// </summary>
        /// <param name="retencionID"></param>
        /// <returns></returns>
        public RetencionInfo ObtenerPorID(int retencionID)
        {
            try
            {
                Logger.Info();
                var           retencionBL = new RetencionBL();
                RetencionInfo result      = retencionBL.ObtenerPorID(retencionID);

                return(result);
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        private IList <PolizaInfo> ObtenerPoliza(DistribucionDeIngredientesInfo distribucionIngredientes)
        {
            var polizaPremezcla = new List <PolizaInfo>();

            IList <CuentaSAPInfo>      cuentasSap       = ObtenerCuentasSAP();
            IList <UnidadMedicionInfo> unidadesMedicion = ObtenerUnidadesMedicion();

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

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

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

            var renglon     = 0;
            int milisegundo = DateTime.Now.Millisecond;

            ProductoInfo producto = distribucionIngredientes.Producto;

            DateTime fecha = distribucionIngredientes.FechaEntrada;
            int      folio = producto.ProductoId;

            var ref3 = new StringBuilder();

            ref3.Append("03");
            ref3.Append(Convert.ToString(folio).PadLeft(10, ' '));
            ref3.Append(new Random(10).Next(10, 20));
            ref3.Append(new Random(30).Next(30, 40));
            ref3.Append(milisegundo);
            ref3.Append(postFijoRef3);

            var almacenMovimientoBL = new AlmacenMovimientoBL();

            string archivoFolio = ObtenerArchivoFolio(fecha);
            //string numeroReferencia = ObtenerNumeroReferencia;

            List <DistribucionDeIngredientesOrganizacionInfo> organizaciones = distribucionIngredientes.ListaOrganizaciones;
            DistribucionDeIngredientesOrganizacionInfo        organizacionDistribucion;
            ClaseCostoProductoInfo      claseCostoProducto;
            CuentaAlmacenSubFamiliaInfo almacenesSubFamilia;
            CuentaSAPInfo   cuentaSap;
            PolizaInfo      poliza;
            DatosPolizaInfo datos;

            bool tieneIva        = distribucionIngredientes.Iva == 1;
            bool costosTienenIva =
                distribucionIngredientes.ListaPremezclaDistribucionCosto.Any(tieneIVA => tieneIVA.Iva);

            string unidad =
                unidadesMedicion.Where(clave => clave.UnidadID == producto.UnidadId).Select(uni => uni.ClaveUnidad).
                FirstOrDefault();

            OrganizacionInfo organizacion = null;
            decimal          totalIva     = 0;

            /* Se calcula el costo extra y se proratea entre las organizaciones*/
            decimal costoTotal    = 0;
            decimal costoUnitario = 0;

            organizaciones = organizaciones.Where(cant => cant.CantidadSurtir > 0 || cant.CantidadNueva > 0).ToList();
            int    cantidad;
            string numeroReferencia = string.Empty;

            for (var indexOrganizaciones = 0; indexOrganizaciones < organizaciones.Count; indexOrganizaciones++) //Polizas por organizacion
            {
                organizacionDistribucion = organizaciones[indexOrganizaciones];
                AlmacenMovimientoInfo movimientoGenerado = almacenMovimientoBL.ObtenerPorId(organizacionDistribucion.AlmaceMovimiento.AlmacenMovimientoID);
                numeroReferencia = ObtenerNumeroReferenciaFolio(movimientoGenerado.FolioMovimiento);
                cuentaSap        = null;
                if (organizacionDistribucion.Lote.AlmacenInventario.Almacen.TipoAlmacenID ==
                    TipoAlmacenEnum.Enfermeria.GetHashCode()
                    ||
                    organizacionDistribucion.Lote.AlmacenInventario.Almacen.TipoAlmacenID ==
                    TipoAlmacenEnum.ManejoGanado.GetHashCode())
                {
                    IList <CuentaAlmacenSubFamiliaInfo> cuentasAlmacenSubFamilia =
                        ObtenerCostosSubFamilia(organizacionDistribucion.Lote.AlmacenInventario.Almacen.AlmacenID);

                    almacenesSubFamilia =
                        cuentasAlmacenSubFamilia.FirstOrDefault(sub => sub.SubFamiliaID == producto.SubfamiliaId);
                    if (almacenesSubFamilia != null)
                    {
                        cuentaSap =
                            cuentasSap.FirstOrDefault(cuenta => cuenta.CuentaSAPID == almacenesSubFamilia.CuentaSAPID);
                    }
                }
                else
                {
                    IList <ClaseCostoProductoInfo> claseCostosProductos =
                        ObtenerCostosProducto(organizacionDistribucion.Lote.AlmacenInventario.Almacen.AlmacenID);
                    claseCostoProducto =
                        claseCostosProductos.FirstOrDefault(prod => prod.ProductoID == producto.ProductoId);
                    if (claseCostoProducto != null)
                    {
                        cuentaSap =
                            cuentasSap.FirstOrDefault(clave => clave.CuentaSAPID == claseCostoProducto.CuentaSAPID);
                    }
                }


                if (cuentaSap == null)
                {
                    throw new ExcepcionServicio(string.Format("{0} {1}", "NO HAY CONFIGURACION PARA EL PRODUCTO",
                                                              producto.Descripcion));
                }
                organizacion = ObtenerOrganizacionIVA(organizacionDistribucion.Organizacion.OrganizacionID);
                cantidad     = organizacionDistribucion.CantidadSurtir;
                if (cantidad == 0)
                {
                    cantidad = organizacionDistribucion.CantidadNueva;
                }

                if (distribucionIngredientes.ListaOrganizaciones.Any())
                {
                    costoTotal    = distribucionIngredientes.ListaPremezclaDistribucionCosto.Sum(c => c.Importe);
                    costoUnitario = costoTotal / distribucionIngredientes.CantidadTotal;
                }
                //Polizas de Cargo por Organizacion
                datos = new DatosPolizaInfo
                {
                    NumeroReferencia = numeroReferencia,
                    FechaEntrada     = fecha,
                    Folio            = numeroReferencia,
                    Importe          =
                        string.Format("{0}",
                                      (organizacionDistribucion.CostoTotal + (costoUnitario * organizacionDistribucion.CantidadSurtir)).ToString("F2")),
                    IndicadorImpuesto = String.Empty,
                    Renglon           = Convert.ToString(++renglon),
                    ImporteIva        = "0",
                    Ref3             = ref3.ToString(),
                    Cuenta           = cuentaSap.CuentaSAP,
                    ArchivoFolio     = archivoFolio,
                    DescripcionCosto = cuentaSap.Descripcion,
                    PesoOrigen       =
                        Math.Round(Convert.ToDecimal(organizacionDistribucion.CantidadSurtir), 2),
                    Division       = organizacion.Division,
                    TipoDocumento  = textoDocumento,
                    ClaseDocumento = postFijoRef3,
                    Concepto       = String.Format("{0}-{1} {2} {3} {4} ${5} {6}",
                                                   tipoMovimiento,
                                                   numeroReferencia,
                                                   cantidad.ToString("F0"),
                                                   unidad, producto.Descripcion,
                                                   (organizacionDistribucion.CostoTotal).ToString("F2"),
                                                   postFijoRef3),
                    Sociedad = organizacion.Sociedad,
                    Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                };
                poliza = GeneraRegistroPoliza(datos);
                polizaPremezcla.Add(poliza);

                //Si el cabecero tiene IVA o los costos tienen iva, crea una linea de iva por organizacion en la poliza
                if (tieneIva || costosTienenIva)
                {
                    decimal importeIva = tieneIva?
                                         organizacionDistribucion.CostoTotal * (organizacion.Iva.TasaIva / 100):0;
                    totalIva += importeIva;
                    CuentaSAPInfo cuentaIva = cuentasSap.FirstOrDefault(
                        clave => clave.CuentaSAP.Equals(organizacion.Iva.CuentaRecuperar.ClaveCuenta));
                    if (cuentaIva == null)
                    {
                        throw new ExcepcionServicio(
                                  string.Format("CUENTA DE IVA NO CONFIGURADA PARA LA ORGANIZACION {0}",
                                                organizacion.Descripcion));
                    }

                    decimal porcientoOrg = (decimal)organizacionDistribucion.CantidadSurtir / (decimal)distribucionIngredientes.CantidadTotal;

                    var totalCostosIva = costosTienenIva?
                                         distribucionIngredientes.ListaPremezclaDistribucionCosto.Where(iva => iva.Iva).Sum(sumIva => sumIva.Importe * (organizacion.Iva.TasaIva / 100)):0;
                    decimal porcientoIva          = totalCostosIva * porcientoOrg;
                    var     totalImporteCostosIva = costosTienenIva
                        ? distribucionIngredientes.ListaPremezclaDistribucionCosto.Where(iva => iva.Iva)
                                                    .Sum(sumIva => sumIva.Importe)
                        : 0;
                    var porcentajeImporteCostosIva = costosTienenIva ? totalImporteCostosIva * porcientoOrg : 0;
                    //Poliza de Iva de importe + Iva de costos

                    var importeIVA = costosTienenIva && tieneIva
                        ? (organizacionDistribucion.CostoTotal + porcentajeImporteCostosIva)
                        : (costosTienenIva && !tieneIva) ? porcentajeImporteCostosIva : (!costosTienenIva && tieneIva) ? organizacionDistribucion.CostoTotal : 0;

                    datos = new DatosPolizaInfo
                    {
                        NumeroReferencia = numeroReferencia,
                        FechaEntrada     = fecha,
                        Folio            = numeroReferencia,
                        Importe          =
                            string.Format("{0}",
                                          (importeIva + porcientoIva).ToString("F2")),
                        IndicadorImpuesto = organizacion.Iva.IndicadorIvaRecuperar,
                        Renglon           = Convert.ToString(++renglon),
                        ImporteIva        = (importeIVA).ToString("F2"),
                        Ref3              = ref3.ToString(),
                        Cuenta            = cuentaIva.CuentaSAP,
                        ClaveImpuesto     = ClaveImpuesto,
                        CondicionImpuesto = CondicionImpuesto,
                        ArchivoFolio      = archivoFolio,
                        DescripcionCosto  = cuentaIva.Descripcion,
                        PesoOrigen        =
                            Math.Round(Convert.ToDecimal(organizacionDistribucion.CantidadSurtir), 2),
                        Division       = organizacion.Division,
                        TipoDocumento  = textoDocumento,
                        ClaseDocumento = postFijoRef3,
                        Concepto       = String.Format("{0}-{1} {2} {3} {4} ${5} {6}",
                                                       tipoMovimiento,
                                                       numeroReferencia,
                                                       cantidad.ToString("F0"),
                                                       unidad, producto.Descripcion,
                                                       (organizacionDistribucion.CostoTotal).ToString("F2"),
                                                       postFijoRef3),
                        Sociedad = organizacion.Sociedad,
                        Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                    };
                    poliza = GeneraRegistroPoliza(datos);
                    polizaPremezcla.Add(poliza);
                    //Poliza de Costo de la distribucion por organizacion mas IVA pagada al proveedor
                    datos = new DatosPolizaInfo
                    {
                        NumeroReferencia = numeroReferencia,
                        FechaEntrada     = fecha,
                        Folio            = numeroReferencia,
                        Importe          =
                            string.Format("{0}",
                                          ((importeIva + organizacionDistribucion.CostoTotal) * -1).ToString("F2")),
                        IndicadorImpuesto = String.Empty,
                        Renglon           = Convert.ToString(++renglon),
                        ImporteIva        = String.Empty,
                        Ref3           = ref3.ToString(),
                        ClaveProveedor = distribucionIngredientes.Proveedor.CodigoSAP,

                        ClaveImpuesto     = ClaveImpuesto,
                        CondicionImpuesto = CondicionImpuesto,
                        ArchivoFolio      = archivoFolio,
                        DescripcionCosto  = distribucionIngredientes.Proveedor.CodigoSAP,
                        PesoOrigen        =
                            Math.Round(Convert.ToDecimal(organizacionDistribucion.CantidadSurtir), 2),
                        Division       = organizacion.Division,
                        TipoDocumento  = textoDocumento,
                        ClaseDocumento = postFijoRef3,
                        Concepto       = String.Format("{0}-{1} {2} {3} {4} ${5} {6}",
                                                       tipoMovimiento,
                                                       numeroReferencia,
                                                       cantidad.ToString("F0"),
                                                       unidad, producto.Descripcion,
                                                       (organizacionDistribucion.CostoTotal).ToString("F2"),
                                                       postFijoRef3),
                        Sociedad = organizacion.Sociedad,
                        Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                    };
                    poliza = GeneraRegistroPoliza(datos);
                    polizaPremezcla.Add(poliza);
                }

                IList <int> costosConRetencion =
                    distribucionIngredientes.ListaPremezclaDistribucionCosto.Where(x => x.Retencion)
                    .Select(x => x.Costo.CostoID)
                    .ToList();
                foreach (var costo in distribucionIngredientes.ListaPremezclaDistribucionCosto)
                {
                    if (costo.Retencion)
                    {
                        var           retencionBL = new RetencionBL();
                        var           retenciones = retencionBL.ObtenerRetencionesConCosto(costosConRetencion);
                        RetencionInfo retencion   = null;
                        if (retenciones != null && retenciones.Any())
                        {
                            retencion =
                                retenciones.FirstOrDefault(
                                    costoRet => costoRet.CostoID == costo.Costo.CostoID);
                        }
                        if (retencion != null)
                        {
                            if (!costo.Iva)
                            {
                                renglon++;
                                datos = new DatosPolizaInfo
                                {
                                    NumeroReferencia = numeroReferencia.ToString(),
                                    FechaEntrada     = distribucionIngredientes.FechaEntrada,
                                    Folio            = numeroReferencia,
                                    Division         = organizacion.Division,
                                    ClaveProveedor   = costo.Proveedor.CodigoSAP,
                                    Importe          = string.Format("{0}", (costo.Importe * -1).ToString("F2")),
                                    Renglon          = Convert.ToString(renglon),
                                    ImporteIva       = "0",
                                    Ref3             = ref3.ToString(),
                                    ArchivoFolio     = archivoFolio.ToString(),
                                    DescripcionCosto = costo.Proveedor.Descripcion,
                                    PesoOrigen       = organizacionDistribucion.CantidadSurtir,
                                    TipoDocumento    = textoDocumento,
                                    ClaseDocumento   = postFijoRef3,
                                    Concepto         = String.Format("{0}-{1} {2} {3} {4} ${5} {6}",
                                                                     tipoMovimiento,
                                                                     numeroReferencia,
                                                                     organizacionDistribucion.CantidadExistente.ToString("N0"),
                                                                     unidad, costo.Costo.Descripcion,
                                                                     costoUnitario.ToString("N2"), postFijoRef3),
                                    Sociedad = organizacion.Sociedad,
                                    Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                                };
                                poliza = GeneraRegistroPoliza(datos);
                                polizaPremezcla.Add(poliza);
                            }
                            var parametrosRetencion = new StringBuilder();
                            parametrosRetencion.Append(String.Format("{0}{1}"
                                                                     , retencion.IndicadorRetencion
                                                                     , retencion.TipoRetencion));
                            datos = new DatosPolizaInfo
                            {
                                NumeroReferencia  = numeroReferencia.ToString(),
                                FechaEntrada      = distribucionIngredientes.FechaEntrada,
                                Folio             = numeroReferencia,
                                Division          = organizacion.Division,
                                ClaveProveedor    = costo.Proveedor.CodigoSAP,
                                Importe           = string.Format("-{0}", "0"),
                                IndicadorImpuesto = parametrosRetencion.ToString(),
                                Renglon           = Convert.ToString(renglon),
                                ImporteIva        = "0",
                                Ref3             = ref3.ToString(),
                                CodigoRetencion  = retencion.IndicadorImpuesto,
                                TipoRetencion    = retencion.IndicadorRetencion,
                                ArchivoFolio     = archivoFolio.ToString(),
                                DescripcionCosto = costo.Proveedor.Descripcion,
                                PesoOrigen       = organizacionDistribucion.CantidadSurtir,
                                TipoDocumento    = textoDocumento,
                                ClaseDocumento   = postFijoRef3,
                                Concepto         = String.Format("{0}-{1} {2} {3} {4} ${5} {6}",
                                                                 tipoMovimiento,
                                                                 numeroReferencia,
                                                                 organizacionDistribucion.CantidadExistente.ToString("N0"),
                                                                 unidad, costo.Costo.Descripcion,
                                                                 costoUnitario.ToString("N2"), postFijoRef3),
                                Sociedad = organizacion.Sociedad,
                                Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                            };
                            poliza = GeneraRegistroPoliza(datos);
                            polizaPremezcla.Add(poliza);
                        }
                    }
                    decimal porcientoOrg = (decimal)organizacionDistribucion.CantidadSurtir /
                                           (decimal)distribucionIngredientes.CantidadTotal;
                    var importePorciento = costo.Iva
                            ? (costo.Importe * ((organizacion.Iva.TasaIva / 100) + 1)) * porcientoOrg
                            : costo.Importe * porcientoOrg;

                    var descripcion = costo.TieneCuenta ? costo.CuentaSAP.Descripcion : costo.Proveedor.Descripcion;
                    var cuenta      = costo.TieneCuenta ? costo.CuentaSAP.CuentaSAP : costo.Proveedor.CodigoSAP;


                    datos = new DatosPolizaInfo
                    {
                        NumeroReferencia = numeroReferencia,
                        FechaEntrada     = fecha,
                        Folio            = numeroReferencia,
                        Importe          =
                            string.Format("{0}",
                                          ((importePorciento) * -1).ToString("F2")),
                        IndicadorImpuesto = String.Empty,
                        Renglon           = Convert.ToString(++renglon),
                        ImporteIva        = String.Empty,
                        Ref3              = ref3.ToString(),
                        Cuenta            = String.Empty,
                        ClaveProveedor    = String.Empty,
                        ClaveImpuesto     = ClaveImpuesto,
                        CondicionImpuesto = CondicionImpuesto,
                        ArchivoFolio      = archivoFolio,
                        DescripcionCosto  = descripcion,
                        PesoOrigen        =
                            Math.Round(Convert.ToDecimal(organizacionDistribucion.CantidadSurtir), 2),
                        Division       = organizacion.Division,
                        TipoDocumento  = textoDocumento,
                        ClaseDocumento = postFijoRef3,
                        Concepto       = String.Format("{0}-{1} {2} {3} {4} ${5} {6}",
                                                       tipoMovimiento,
                                                       numeroReferencia,
                                                       cantidad.ToString("F0"),
                                                       unidad, descripcion,
                                                       (organizacionDistribucion.CostoTotal).ToString("F2"),
                                                       postFijoRef3),
                        Sociedad = organizacion.Sociedad,
                        Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                    };
                    if (costo.TieneCuenta)
                    {
                        datos.Cuenta = cuenta;
                    }
                    else
                    {
                        datos.ClaveProveedor = cuenta;
                    }
                    poliza = GeneraRegistroPoliza(datos);
                    polizaPremezcla.Add(poliza);
                }
            }
            if (!tieneIva && !costosTienenIva)
            {
                decimal importe = organizaciones.Sum(imp => imp.CostoTotal) + totalIva;
                decimal peso    = organizaciones.Sum(kg => kg.CantidadSurtir);
                if (peso == 0)
                {
                    peso = organizaciones.Sum(kg => kg.CantidadNueva);
                }
                bool esCuenta  = false;
                var  proveedor = distribucionIngredientes.Proveedor.CodigoSAP;
                if (!proveedor.StartsWith("0"))
                {
                    esCuenta = true;
                }
                //numeroReferencia = ObtenerNumeroReferencia;
                datos = new DatosPolizaInfo
                {
                    NumeroReferencia = numeroReferencia,
                    FechaEntrada     = fecha,
                    Folio            = numeroReferencia,
                    Importe          =
                        string.Format("{0}",
                                      (distribucionIngredientes.CostoTotal * -1).ToString("F2")),
                    IndicadorImpuesto = String.Empty,
                    Renglon           = Convert.ToString(++renglon),
                    ImporteIva        = "0",
                    Ref3             = ref3.ToString(),
                    ClaveProveedor   = esCuenta ? String.Empty : distribucionIngredientes.Proveedor.CodigoSAP,
                    Cuenta           = esCuenta ? distribucionIngredientes.Proveedor.CodigoSAP : String.Empty,
                    ArchivoFolio     = archivoFolio,
                    DescripcionCosto = distribucionIngredientes.Proveedor.Descripcion,
                    PesoOrigen       =
                        Math.Round(peso, 2),
                    Division       = organizacion.Division,
                    TipoDocumento  = textoDocumento,
                    ClaseDocumento = postFijoRef3,
                    Concepto       = String.Format("{0}-{1} {2} {3} {4} ${5} {6}",
                                                   tipoMovimiento,
                                                   numeroReferencia,
                                                   (peso).ToString("F0"),
                                                   unidad, producto.Descripcion,
                                                   (importe).ToString("F2"),
                                                   postFijoRef3),
                    Sociedad = organizacion.Sociedad,
                    Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                };
                poliza = GeneraRegistroPoliza(datos);
                polizaPremezcla.Add(poliza);
            }
            return(polizaPremezcla);
        }
コード例 #7
0
        private IList <PolizaInfo> ObtenerPoliza(PolizaContratoModel datosContrato)
        {
            var polizasContrato = new List <PolizaInfo>();

            long     folioPedido    = datosContrato.AlmacenMovimiento.FolioMovimiento;
            int      organizacionID = datosContrato.Contrato.Organizacion.OrganizacionID;
            DateTime fechaPedido    = datosContrato.Contrato.Fecha;

            int    miliSegunda  = DateTime.Now.Millisecond;
            string archivoFolio = ObtenerArchivoFolio(fechaPedido);

            OrganizacionInfo organizacion = ObtenerOrganizacionIVA(organizacionID);

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

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

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

            PolizaInfo poliza;
            var        renglon = 0;

            var ref3 = new StringBuilder();

            ref3.Append("03");
            ref3.Append(Convert.ToString(folioPedido).PadLeft(10, ' '));
            ref3.Append(new Random(10).Next(10, 20));
            ref3.Append(new Random(30).Next(30, 40));
            ref3.Append(miliSegunda);
            ref3.Append(postFijoRef3);

            //string numeroDocumento = ObtenerNumeroReferencia;
            string numeroDocumento = ObtenerNumeroReferenciaFolio(datosContrato.AlmacenMovimiento.FolioMovimiento);

            IList <CuentaSAPInfo> cuentasSap = ObtenerCuentasSAP();

            List <CostoInfo>           costos = datosContrato.OtrosCostos;
            CostoInfo                  costo;
            IList <UnidadMedicionInfo> unidadesMedicion = ObtenerUnidadesMedicion();
            UnidadMedicionInfo         unidadMedicion;
            IList <ProductoInfo>       productos = ObtenerProductos();
            ProductoInfo               producto;
            DatosPolizaInfo            datos;
            IList <int>                costosConRetencion = costos.Select(cos => cos.CostoID).ToList();

            for (var indexCostos = 0; indexCostos < costos.Count; indexCostos++)
            {
                costo = costos[indexCostos];
                bool esProveedor    = costo.Proveedor != null && !string.IsNullOrWhiteSpace(costo.Proveedor.CodigoSAP);
                bool tieneIva       = costo.AplicaIva;
                bool tieneRetencion = costo.AplicaRetencion;

                fechaPedido = costo.FechaCosto != DateTime.MinValue
                                  ? costo.FechaCosto
                                  : fechaPedido;

                producto       = productos.FirstOrDefault(id => id.ProductoId == datosContrato.Contrato.Producto.ProductoId);
                unidadMedicion =
                    unidadesMedicion.FirstOrDefault(uni => uni.UnidadID == producto.UnidadId);
                #region Es Proveedor
                if (esProveedor)
                {
                    #region Sin IVA ni Retencion
                    if (!tieneIva && !tieneRetencion)
                    {
                        renglon++;
                        datos = new DatosPolizaInfo
                        {
                            NumeroReferencia  = numeroDocumento,
                            FechaEntrada      = fechaPedido,
                            Folio             = folioPedido.ToString(),
                            Importe           = string.Format("{0}", costo.ImporteCosto.ToString("F2")),
                            IndicadorImpuesto = String.Empty,
                            Renglon           = Convert.ToString(renglon),
                            ImporteIva        = "0",
                            Ref3             = ref3.ToString(),
                            Cuenta           = datosContrato.Contrato.Cuenta.CuentaSAP,
                            ArchivoFolio     = archivoFolio,
                            DescripcionCosto = datosContrato.Contrato.Cuenta.Descripcion,
                            PesoOrigen       = Math.Round(Convert.ToDecimal(datosContrato.Contrato.Cantidad), 0),
                            Division         = organizacion.Division,
                            TipoDocumento    = textoDocumento,
                            ClaseDocumento   = postFijoRef3,
                            Concepto         = String.Format("{0}-{1} {2} {3} {4} {5} {6}",
                                                             tipoMovimiento,
                                                             folioPedido,
                                                             costo.ToneladasCosto.ToString("N0"),
                                                             unidadMedicion.ClaveUnidad, string.IsNullOrWhiteSpace(producto.Descripcion) ? producto.ProductoDescripcion : producto.Descripcion,
                                                             costo.ImporteCosto.ToString("C2"), postFijoRef3),
                            Sociedad = organizacion.Sociedad,
                            Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                        };
                        poliza = GeneraRegistroPoliza(datos);
                        polizasContrato.Add(poliza);

                        renglon++;
                        datos = new DatosPolizaInfo
                        {
                            NumeroReferencia  = numeroDocumento,
                            FechaEntrada      = fechaPedido,
                            Folio             = folioPedido.ToString(),
                            ClaveProveedor    = costo.Proveedor.CodigoSAP,
                            Importe           = string.Format("{0}", (costo.ImporteCosto * -1).ToString("F2")),
                            IndicadorImpuesto = String.Empty,
                            Renglon           = Convert.ToString(renglon),
                            Division          = organizacion.Division,
                            ImporteIva        = "0",
                            Ref3             = ref3.ToString(),
                            ArchivoFolio     = archivoFolio,
                            DescripcionCosto = costo.Proveedor.Descripcion,
                            PesoOrigen       = Math.Round(Convert.ToDecimal(datosContrato.Contrato.Cantidad), 0),
                            ClaseDocumento   = postFijoRef3,
                            TipoDocumento    = textoDocumento,
                            Concepto         = String.Format("{0}-{1} {2} {3} {4} {5} {6}",
                                                             tipoMovimiento,
                                                             folioPedido,
                                                             costo.ToneladasCosto.ToString("N0"),
                                                             unidadMedicion.ClaveUnidad, string.IsNullOrWhiteSpace(producto.Descripcion) ? producto.ProductoDescripcion : producto.Descripcion,
                                                             costo.ImporteCosto.ToString("C2"), postFijoRef3),
                            Sociedad = organizacion.Sociedad,
                            Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                        };
                        poliza = GeneraRegistroPoliza(datos);
                        polizasContrato.Add(poliza);
                    }
                    #endregion Sin IVA ni Retencion
                    else
                    {
                        #region Con IVA

                        if (tieneIva)
                        {
                            CuentaSAPInfo cuentaIva = cuentasSap.FirstOrDefault(
                                clave => clave.CuentaSAP.Equals(organizacion.Iva.CuentaRecuperar.ClaveCuenta));
                            if (cuentaIva == null)
                            {
                                cuentaIva = new CuentaSAPInfo {
                                    Descripcion = string.Empty
                                };
                            }
                            renglon++;
                            var importeIva = (costo.ImporteCosto) * (organizacion.Iva.TasaIva / 100);
                            datos = new DatosPolizaInfo
                            {
                                NumeroReferencia  = numeroDocumento,
                                FechaEntrada      = fechaPedido,
                                Folio             = folioPedido.ToString(),
                                Division          = organizacion.Division,
                                ClaveProveedor    = String.Empty,
                                Importe           = string.Format("{0}", costo.ImporteCosto.ToString("F2")),
                                IndicadorImpuesto = String.Empty,
                                Renglon           = Convert.ToString(renglon),
                                ImporteIva        = "0",
                                Ref3             = ref3.ToString(),
                                Cuenta           = datosContrato.Contrato.Cuenta.CuentaSAP,
                                ArchivoFolio     = archivoFolio,
                                DescripcionCosto = producto.Descripcion,
                                PesoOrigen       = Math.Round(Convert.ToDecimal(datosContrato.Contrato.Cantidad), 0),
                                TipoDocumento    = textoDocumento,
                                ClaseDocumento   = postFijoRef3,
                                Concepto         = String.Format("{0}-{1} {2} {3} {4} {5} {6}",
                                                                 tipoMovimiento,
                                                                 folioPedido,
                                                                 costo.ToneladasCosto.ToString("N0"),
                                                                 unidadMedicion.ClaveUnidad, string.IsNullOrWhiteSpace(producto.Descripcion) ? producto.ProductoDescripcion : producto.Descripcion,
                                                                 costo.ImporteCosto.ToString("C2"), postFijoRef3),
                                Sociedad = organizacion.Sociedad,
                                Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                            };
                            poliza = GeneraRegistroPoliza(datos);
                            polizasContrato.Add(poliza);

                            renglon++;
                            datos = new DatosPolizaInfo
                            {
                                NumeroReferencia  = numeroDocumento,
                                FechaEntrada      = fechaPedido,
                                Folio             = folioPedido.ToString(),
                                ClaveProveedor    = String.Empty,
                                Importe           = string.Format("{0}", importeIva.ToString("F2")),
                                Renglon           = Convert.ToString(renglon),
                                ImporteIva        = costo.ImporteCosto.ToString("F2"),
                                IndicadorImpuesto = organizacion.Iva.IndicadorIvaRecuperar,
                                ClaveImpuesto     = ClaveImpuesto,
                                CondicionImpuesto = CondicionImpuesto,
                                Ref3             = ref3.ToString(),
                                Division         = organizacion.Division,
                                Cuenta           = organizacion.Iva.CuentaRecuperar.ClaveCuenta,
                                ArchivoFolio     = archivoFolio,
                                DescripcionCosto = cuentaIva.Descripcion,
                                PesoOrigen       = Math.Round(Convert.ToDecimal(datosContrato.Contrato.Cantidad), 0),
                                TipoDocumento    = textoDocumento,
                                ClaseDocumento   = postFijoRef3,
                                Concepto         = String.Format("{0}-{1} {2} {3} {4} {5} {6}",
                                                                 tipoMovimiento,
                                                                 folioPedido,
                                                                 costo.ToneladasCosto.ToString("N0"),
                                                                 unidadMedicion.ClaveUnidad, string.IsNullOrWhiteSpace(producto.Descripcion) ? producto.ProductoDescripcion : producto.Descripcion,
                                                                 costo.ImporteCosto.ToString("C2"), postFijoRef3),
                                Sociedad = organizacion.Sociedad,
                                Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                            };
                            poliza = GeneraRegistroPoliza(datos);
                            polizasContrato.Add(poliza);

                            renglon++;

                            datos = new DatosPolizaInfo
                            {
                                NumeroReferencia  = numeroDocumento.ToString(),
                                FechaEntrada      = fechaPedido,
                                Folio             = folioPedido.ToString(),
                                Division          = organizacion.Division,
                                ClaveProveedor    = costo.Proveedor.CodigoSAP,
                                Importe           = string.Format("{0}", ((costo.ImporteCosto + importeIva) * -1).ToString("F2")),
                                IndicadorImpuesto = String.Empty,
                                Renglon           = Convert.ToString(renglon),
                                ImporteIva        = "0",
                                Ref3             = ref3.ToString(),
                                ArchivoFolio     = archivoFolio,
                                DescripcionCosto = costo.Proveedor.Descripcion,
                                PesoOrigen       = Math.Round(Convert.ToDecimal(datosContrato.Contrato.Cantidad), 0),
                                TipoDocumento    = textoDocumento,
                                ClaseDocumento   = postFijoRef3,
                                Concepto         = String.Format("{0}-{1} {2} {3} {4} {5} {6}",
                                                                 tipoMovimiento,
                                                                 folioPedido,
                                                                 costo.ToneladasCosto.ToString("N0"),
                                                                 unidadMedicion.ClaveUnidad, string.IsNullOrWhiteSpace(producto.Descripcion) ? producto.ProductoDescripcion : producto.Descripcion,
                                                                 costo.ImporteCosto.ToString("C2"), postFijoRef3),
                                Sociedad = organizacion.Sociedad,
                                Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                            };
                            poliza = GeneraRegistroPoliza(datos);
                            polizasContrato.Add(poliza);
                        }
                        #endregion Con IVA

                        #region Con Retencion

                        if (tieneRetencion)
                        {
                            var           retencionBL = new RetencionBL();
                            var           retenciones = retencionBL.ObtenerRetencionesConCosto(costosConRetencion);
                            RetencionInfo retencion   = null;
                            if (retenciones != null && retenciones.Any())
                            {
                                retencion =
                                    retenciones.FirstOrDefault(
                                        costoRet => costoRet.CostoID == costo.CostoID);
                            }
                            if (retencion != null)
                            {
                                var parametrosRetencion = new StringBuilder();
                                parametrosRetencion.Append(String.Format("{0}{1}"
                                                                         , retencion.IndicadorRetencion
                                                                         , retencion.TipoRetencion));
                                datos = new DatosPolizaInfo
                                {
                                    NumeroReferencia  = numeroDocumento,
                                    FechaEntrada      = fechaPedido,
                                    Folio             = folioPedido.ToString(CultureInfo.InvariantCulture),
                                    Division          = organizacion.Division,
                                    ClaveProveedor    = costo.Proveedor.CodigoSAP,
                                    Importe           = string.Format("-{0}", "0"),
                                    IndicadorImpuesto = parametrosRetencion.ToString(),
                                    Renglon           = Convert.ToString(renglon),
                                    ImporteIva        = "0",
                                    Ref3             = ref3.ToString(),
                                    CodigoRetencion  = retencion.IndicadorImpuesto,
                                    TipoRetencion    = retencion.IndicadorRetencion,
                                    ArchivoFolio     = archivoFolio,
                                    DescripcionCosto = costo.Proveedor.Descripcion,
                                    PesoOrigen       = Math.Round(Convert.ToDecimal(datosContrato.Contrato.Cantidad), 0),
                                    TipoDocumento    = textoDocumento,
                                    ClaseDocumento   = postFijoRef3,
                                    Concepto         = String.Format("{0}-{1} {2} {3} {4} {5} {6}",
                                                                     tipoMovimiento,
                                                                     folioPedido,
                                                                     costo.ToneladasCosto.ToString("N0"),
                                                                     unidadMedicion.ClaveUnidad, string.IsNullOrWhiteSpace(producto.Descripcion) ? producto.ProductoDescripcion : producto.Descripcion,
                                                                     costo.ImporteCosto.ToString("C2"), postFijoRef3),
                                    Sociedad = organizacion.Sociedad,
                                    Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                                };
                                poliza = GeneraRegistroPoliza(datos);
                                polizasContrato.Add(poliza);
                                if (!tieneIva)
                                {
                                    renglon++;
                                    datos = new DatosPolizaInfo
                                    {
                                        NumeroReferencia = numeroDocumento,
                                        FechaEntrada     = fechaPedido,
                                        Folio            = folioPedido.ToString(CultureInfo.InvariantCulture),
                                        Division         = organizacion.Division,
                                        ClaveProveedor   = costo.Proveedor.CodigoSAP,
                                        Importe          = string.Format("{0}", (costo.ImporteCosto * -1).ToString("F2")),
                                        Renglon          = Convert.ToString(renglon),
                                        ImporteIva       = "0",
                                        Ref3             = ref3.ToString(),
                                        ArchivoFolio     = archivoFolio,
                                        DescripcionCosto = costo.Proveedor.Descripcion,
                                        PesoOrigen       = Math.Round(Convert.ToDecimal(datosContrato.Contrato.Cantidad), 0),
                                        TipoDocumento    = textoDocumento,
                                        ClaseDocumento   = postFijoRef3,
                                        Concepto         = String.Format("{0}-{1} {2} {3} {4} {5} {6}",
                                                                         tipoMovimiento,
                                                                         folioPedido,
                                                                         costo.ToneladasCosto.ToString("N0"),
                                                                         unidadMedicion.ClaveUnidad, string.IsNullOrWhiteSpace(producto.Descripcion) ? producto.ProductoDescripcion : producto.Descripcion,
                                                                         costo.ImporteCosto.ToString("C2"), postFijoRef3),
                                        Sociedad = organizacion.Sociedad,
                                        Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                                    };
                                    poliza = GeneraRegistroPoliza(datos);
                                    polizasContrato.Add(poliza);
                                    renglon++;
                                    datos = new DatosPolizaInfo
                                    {
                                        NumeroReferencia  = numeroDocumento,
                                        FechaEntrada      = fechaPedido,
                                        Folio             = folioPedido.ToString(CultureInfo.InvariantCulture),
                                        Division          = organizacion.Division,
                                        ClaveProveedor    = String.Empty,
                                        Importe           = string.Format("{0}", costo.ImporteCosto.ToString("F2")),
                                        IndicadorImpuesto = String.Empty,
                                        Renglon           = Convert.ToString(renglon),
                                        ImporteIva        = "0",
                                        Ref3             = ref3.ToString(),
                                        Cuenta           = datosContrato.Contrato.Cuenta.CuentaSAP,
                                        ArchivoFolio     = archivoFolio,
                                        DescripcionCosto = datosContrato.Contrato.Cuenta.Descripcion,
                                        PesoOrigen       = Math.Round(Convert.ToDecimal(datosContrato.Contrato.Cantidad), 0),
                                        TipoDocumento    = textoDocumento,
                                        ClaseDocumento   = postFijoRef3,
                                        ComplementoRef1  = string.Empty,
                                        Concepto         = String.Format("{0}-{1} {2} {3} {4} {5} {6}",
                                                                         tipoMovimiento,
                                                                         folioPedido,
                                                                         costo.ToneladasCosto.ToString("N0"),
                                                                         unidadMedicion.ClaveUnidad, string.IsNullOrWhiteSpace(producto.Descripcion) ? producto.ProductoDescripcion : producto.Descripcion,
                                                                         costo.ImporteCosto.ToString("C2"), postFijoRef3),
                                        Sociedad = organizacion.Sociedad,
                                        Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                                    };
                                    poliza = GeneraRegistroPoliza(datos);
                                    polizasContrato.Add(poliza);
                                }
                            }
                        }

                        #endregion Con Retencion
                    }
                }
                #endregion Es Proveedor

                #region Es Cuenta
                else
                {
                    renglon++;
                    datos = new DatosPolizaInfo
                    {
                        NumeroReferencia  = numeroDocumento,
                        FechaEntrada      = fechaPedido,
                        Folio             = folioPedido.ToString(CultureInfo.InvariantCulture),
                        Division          = organizacion.Division,
                        ClaveProveedor    = String.Empty,
                        Importe           = string.Format("{0}", (costo.ImporteCosto * -1).ToString("F2")),
                        IndicadorImpuesto = String.Empty,
                        Renglon           = Convert.ToString(renglon),
                        Cabezas           = string.Empty,
                        ImporteIva        = "0",
                        Ref3             = ref3.ToString(),
                        Cuenta           = costo.CuentaSap.CuentaSAP,
                        ArchivoFolio     = archivoFolio,
                        DescripcionCosto = costo.CuentaSap.Descripcion,
                        PesoOrigen       = Math.Round(Convert.ToDecimal(datosContrato.Contrato.Cantidad), 0),
                        TipoDocumento    = textoDocumento,
                        ClaseDocumento   = postFijoRef3,
                        Concepto         = String.Format("{0}-{1} {2} {3} {4} {5} {6}",
                                                         tipoMovimiento,
                                                         folioPedido,
                                                         costo.ToneladasCosto.ToString("N0"),
                                                         unidadMedicion.ClaveUnidad, string.IsNullOrWhiteSpace(producto.Descripcion) ? producto.ProductoDescripcion : producto.Descripcion,
                                                         costo.ImporteCosto.ToString("C2"), postFijoRef3),
                        Sociedad = organizacion.Sociedad,
                        Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                    };
                    poliza = GeneraRegistroPoliza(datos);
                    polizasContrato.Add(poliza);

                    renglon++;
                    datos = new DatosPolizaInfo
                    {
                        NumeroReferencia  = numeroDocumento,
                        FechaEntrada      = fechaPedido,
                        Folio             = folioPedido.ToString(CultureInfo.InvariantCulture),
                        Division          = organizacion.Division,
                        Importe           = string.Format("{0}", costo.ImporteCosto.ToString("F2")),
                        IndicadorImpuesto = String.Empty,
                        Renglon           = Convert.ToString(renglon),
                        ImporteIva        = "0",
                        Ref3             = ref3.ToString(),
                        Cuenta           = datosContrato.Contrato.Cuenta.CuentaSAP,
                        ArchivoFolio     = archivoFolio,
                        DescripcionCosto = producto.Descripcion,
                        PesoOrigen       = Math.Round(Convert.ToDecimal(datosContrato.Contrato.Cantidad), 0),
                        TipoDocumento    = textoDocumento,
                        ClaseDocumento   = postFijoRef3,
                        Concepto         = String.Format("{0}-{1} {2} {3} {4} {5} {6}",
                                                         tipoMovimiento,
                                                         folioPedido,
                                                         costo.ToneladasCosto.ToString("N0"),
                                                         unidadMedicion.ClaveUnidad, string.IsNullOrWhiteSpace(producto.Descripcion) ? producto.ProductoDescripcion : producto.Descripcion,
                                                         costo.ImporteCosto.ToString("C2"), postFijoRef3),
                        Sociedad = organizacion.Sociedad,
                        Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                    };
                    poliza = GeneraRegistroPoliza(datos);
                    polizasContrato.Add(poliza);
                }
                #endregion Es Cuenta
            }
            return(polizasContrato);
        }