Пример #1
0
        private IList <PolizaInfo> ObtenerPoliza(PolizaContratoModel datosContrato)
        {
            var polizasContrato = new List <PolizaInfo>();

            int      folioPedido    = datosContrato.Contrato.Folio;
            int      organizacionID = datosContrato.Contrato.Organizacion.OrganizacionID;
            DateTime fechaPedido    = datosContrato.Contrato.Fecha;

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

            OrganizacionInfo organizacion = ObtenerOrganizacionIVA(organizacionID);

            var tipoContrato   = (TipoContratoEnum)datosContrato.Contrato.TipoContrato.TipoContratoId;
            var tipoPolizaEnum = TipoPoliza.PolizaContratoTerceros;

            switch (tipoContrato)
            {
            case TipoContratoEnum.EnTransito:
                tipoPolizaEnum = TipoPoliza.PolizaContratoTransito;
                break;
            }
            TipoPolizaInfo tipoPoliza =
                TiposPoliza.FirstOrDefault(clave => clave.TipoPolizaID == tipoPolizaEnum.GetHashCode());

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

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

            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);

            var proveedorAlmacenBL = new ProveedorAlmacenBL();
            ProveedorAlmacenInfo proveedorAlmacen =
                proveedorAlmacenBL.ObtenerPorProveedorId(datosContrato.Contrato.Proveedor);

            if (proveedorAlmacen == null)
            {
                throw new ExcepcionServicio(string.Format("EL PROVEEDOR {0} NO TIENE ALMACEN ASIGNADO",
                                                          datosContrato.Contrato.Proveedor.Descripcion));
            }
            decimal importe = datosContrato.Contrato.Precio * datosContrato.Contrato.Cantidad;
            var     renglon = 1;
            var     datos   = new DatosPolizaInfo
            {
                NumeroReferencia = numeroDocumento,
                FechaEntrada     = datosContrato.Contrato.Fecha,
                Folio            = datosContrato.Contrato.Folio.ToString(),
                Importe          =
                    string.Format("{0}", importe.ToString("F2")),
                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,
                                                 datosContrato.Contrato.Folio,
                                                 datosContrato.Contrato.Cantidad.ToString("N0"),
                                                 "KGS", datosContrato.Contrato.Producto.Descripcion,
                                                 importe.ToString("N2"), postFijoRef3),
                Sociedad = organizacion.Sociedad,
                Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
            };
            PolizaInfo poliza = GeneraRegistroPoliza(datos);

            polizasContrato.Add(poliza);

            renglon++;
            datos = new DatosPolizaInfo
            {
                NumeroReferencia = numeroDocumento,
                FechaEntrada     = datosContrato.Contrato.Fecha,
                Folio            = datosContrato.Contrato.Folio.ToString(),
                ClaveProveedor   = datosContrato.Contrato.Proveedor.CodigoSAP,
                Importe          =
                    string.Format("{0}", (importe * -1).ToString("F2")),
                Renglon          = Convert.ToString(renglon),
                Division         = organizacion.Division,
                ImporteIva       = "0",
                Ref3             = ref3.ToString(),
                ArchivoFolio     = archivoFolio,
                DescripcionCosto = datosContrato.Contrato.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,
                                                 datosContrato.Contrato.Folio,
                                                 datosContrato.Contrato.Cantidad.ToString("N0"),
                                                 "KGS", datosContrato.Contrato.Producto.Descripcion,
                                                 importe.ToString("N2"), postFijoRef3),
                Sociedad = organizacion.Sociedad,
                Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
            };
            poliza = GeneraRegistroPoliza(datos);
            polizasContrato.Add(poliza);

            return(polizasContrato);
        }
Пример #2
0
        private IList <PolizaInfo> ObtenerPoliza(PolizaConsumoAlimentoModel contenedor)
        {
            var polizasConsumo = new List <PolizaInfo>();

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

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

            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 numeroDocumento = ObtenerNumeroReferenciaFolio(contenedor.AlmacenMovimiento.FolioMovimiento);

            DateTime            fecha        = contenedor.Reparto.Fecha;
            string              archivoFolio = ObtenerArchivoFolio(fecha);
            IList <CostoInfo>   costos       = ObtenerCostos();
            IList <FormulaInfo> formulas     = ObtenerFormulas();

            OrganizacionInfo                    organizacion;
            List <RepartoDetalleInfo>           repatoAgrupado = null;
            List <ProduccionFormulaDetalleInfo> produccionAgrupado;

            CostoInfo costo =
                costos.FirstOrDefault(
                    tipo => "002".Equals(tipo.ClaveContable));

            if (costo == null)
            {
                costo = new CostoInfo();
            }
            PolizaInfo polizaConsumo;

            IList <CuentaSAPInfo> cuentasSAP = ObtenerCuentasSAP();

            if (cuentasSAP == null)
            {
                cuentasSAP = new List <CuentaSAPInfo>();
            }
            CuentaSAPInfo cuentaSap;

            if (contenedor.Reparto != null && contenedor.Reparto.DetalleReparto != null &&
                contenedor.Reparto.DetalleReparto.Any())
            {
                repatoAgrupado = contenedor.Reparto.DetalleReparto
                                 .GroupBy(formu => formu.FormulaIDServida)
                                 .Select(agrupado => new RepartoDetalleInfo
                {
                    OrganizacionID =
                        agrupado.Select(org => org.OrganizacionID).FirstOrDefault(),
                    Importe          = agrupado.Sum(imp => imp.Importe),
                    FormulaIDServida =
                        agrupado.Select(form => form.FormulaIDServida).FirstOrDefault()
                }).Where(imp => imp.Importe > 0).ToList();
                for (var indexReparto = 0; indexReparto < repatoAgrupado.Count; indexReparto++)
                {
                    RepartoDetalleInfo detalle = repatoAgrupado[indexReparto];

                    organizacion = ObtenerOrganizacionIVA(detalle.OrganizacionID);
                    cuentaSap    = cuentasSAP.FirstOrDefault(clave => clave.CuentaSAP.Equals("1151401002"));
                    if (cuentaSap == null)
                    {
                        throw new ExcepcionServicio(string.Format("{0} {1}", "CUENTA NO CONFIGURADA PARA",
                                                                  costo.Descripcion));
                    }
                    var datos = new DatosPolizaInfo
                    {
                        NumeroReferencia = numeroDocumento,
                        FechaEntrada     = fecha,
                        Folio            = numeroDocumento,
                        Importe          = string.Format("{0}", detalle.Importe.ToString("F2")),
                        Renglon          = Convert.ToString(linea),
                        ImporteIva       = "0",
                        Ref3             = ref3.ToString(),
                        ClaseDocumento   = postFijoRef3,
                        Cuenta           = cuentaSap.CuentaSAP,
                        ArchivoFolio     = archivoFolio,
                        DescripcionCosto = cuentaSap.Descripcion,
                        PesoOrigen       = 0,
                        Division         = organizacion.Division,
                        TipoDocumento    = textoDocumento,
                        Concepto         = String.Format("{0}-{1} {2}",
                                                         tipoMovimiento,
                                                         numeroDocumento,
                                                         cuentaSap.CuentaSAP),
                        Sociedad = organizacion.Sociedad,
                        Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                    };
                    linea++;
                    polizaConsumo = GeneraRegistroPoliza(datos);
                    polizasConsumo.Add(polizaConsumo);
                }
            }
            int almacenID = 0;

            if (contenedor.ProduccionFormula != null && contenedor.ProduccionFormula.ProduccionFormulaDetalle != null &&
                contenedor.ProduccionFormula.ProduccionFormulaDetalle.Any())
            {
                produccionAgrupado =
                    contenedor.ProduccionFormula.ProduccionFormulaDetalle
                    .GroupBy(formu => formu.ProduccionFormulaId)
                    .Select(agrupado => new ProduccionFormulaDetalleInfo
                {
                    ProduccionFormulaId = agrupado.Key,
                    OrganizacionID      =
                        agrupado.Select(org => org.OrganizacionID).FirstOrDefault(),
                    AlmacenID = agrupado.Select(alm => alm.AlmacenID).FirstOrDefault()
                }).ToList();
                ClaseCostoProductoInfo         producto;
                IList <ClaseCostoProductoInfo> almacenesProductosCuentas;
                FormulaInfo formula;
                for (var indexFormula = 0; indexFormula < produccionAgrupado.Count; indexFormula++)
                {
                    ProduccionFormulaDetalleInfo detalle = produccionAgrupado[indexFormula];

                    almacenID = detalle.AlmacenID;
                    almacenesProductosCuentas = ObtenerCostosProducto(almacenID);
                    organizacion = ObtenerOrganizacionIVA(detalle.OrganizacionID);
                    formula      = formulas.FirstOrDefault(clave => clave.FormulaId == detalle.ProduccionFormulaId);
                    if (formula == null)
                    {
                        formula =
                            formulas.FirstOrDefault(clave => clave.Producto.ProductoId == detalle.ProduccionFormulaId);
                        if (formula == null)
                        {
                            formula = new FormulaInfo
                            {
                                Producto = new ProductoInfo()
                            };
                        }
                    }
                    decimal importe = 0;
                    if (repatoAgrupado != null)
                    {
                        importe =
                            repatoAgrupado.Where(formu => formu.FormulaIDServida == formula.FormulaId).Sum(
                                imp => imp.Importe);
                        if (importe == 0)
                        {
                            importe =
                                repatoAgrupado.Where(formu => formu.FormulaIDServida == formula.Producto.ProductoId).Sum
                                    (imp => imp.Importe);
                        }
                    }
                    if (importe == 0)
                    {
                        continue;
                    }
                    producto =
                        almacenesProductosCuentas.FirstOrDefault(p => p.ProductoID == formula.Producto.ProductoId);
                    if (producto == null)
                    {
                        throw new ExcepcionServicio(string.Format("{0} {1}", "CUENTA NO CONFIGURADA PARA EL PRODUCTO",
                                                                  formula.Producto.Descripcion));
                    }
                    cuentaSap = cuentasSAP.FirstOrDefault(cuenta => cuenta.CuentaSAPID == producto.CuentaSAPID);
                    if (cuentaSap == null)
                    {
                        throw new ExcepcionServicio(string.Format("{0} {1}", "CUENTA NO CONFIGURADA PARA EL PRODUCTO",
                                                                  formula.Producto.Descripcion));
                    }
                    var datos = new DatosPolizaInfo
                    {
                        NumeroReferencia = numeroDocumento,
                        FechaEntrada     = fecha,
                        Importe          = string.Format("{0}", (importe * -1).ToString("F2")),
                        Renglon          = Convert.ToString(linea),
                        ImporteIva       = "0",
                        Ref3             = ref3.ToString(),
                        Cuenta           = cuentaSap.CuentaSAP,
                        ClaseDocumento   = postFijoRef3,
                        ArchivoFolio     = archivoFolio,
                        DescripcionCosto = cuentaSap.Descripcion,
                        PesoOrigen       = 0,
                        Division         = organizacion.Division,
                        TipoDocumento    = textoDocumento,
                        Folio            = numeroDocumento,
                        Concepto         = String.Format("{0}-{1} {2}",
                                                         tipoMovimiento,
                                                         numeroDocumento,
                                                         cuentaSap.CuentaSAP),
                        Sociedad = organizacion.Sociedad,
                        Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                    };
                    linea++;
                    polizaConsumo = GeneraRegistroPoliza(datos);
                    polizasConsumo.Add(polizaConsumo);
                }
            }
            return(polizasConsumo);
        }
        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);
        }
Пример #4
0
        private IList <PolizaInfo> GeneraDatosPoliza(InterfaceSalidaTraspasoInfo interfaceSalidaTraspaso)
        {
            var polizasSalidaTraspaso = new List <PolizaInfo>();

            IList <CuentaSAPInfo> cuentasSap = ObtenerCuentasSAP();

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

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

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

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

            long folioTraspaso = interfaceSalidaTraspaso.FolioTraspaso;

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

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

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

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

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

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

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

                int loteID;

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

                DateTime fechaEnvio = interfaceSalidaTraspaso.FechaEnvio;

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

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

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

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

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

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

                                    datos = new DatosPolizaInfo
                                    {
                                        NumeroReferencia = numeroDocumento,
                                        FechaEntrada     = fechaEnvio,
                                        Folio            = folioTraspaso.ToString(),
                                        CabezasRecibidas = cabezasRecibidas.ToString(),
                                        NumeroDocumento  = folioTraspaso.ToString(),
                                        ClaseDocumento   = postFijoRef3,
                                        Importe          =
                                            string.Format("{0}", Cancelacion ? animalCosto.Importe.ToString("F2")
                                                                             : (animalCosto.Importe * -1).ToString("F2")),
                                        IndicadorImpuesto = String.Empty,
                                        Renglon           = Convert.ToString(renglon++),
                                        Cabezas           = Convert.ToString(cabezasRecibidas),
                                        ImporteIva        = "0",
                                        Ref3             = ref3.ToString(),
                                        ArchivoFolio     = archivoFolio.ToString(),
                                        DescripcionCosto = cuentaSapDestino.Descripcion,
                                        Cuenta           = cuentaSapDestino.CuentaSAP,
                                        PesoOrigen       = pesoOrigen,
                                        Division         = divisionOrigen,
                                        ComplementoRef1  = COMPLEMENTO_REF1,
                                        TipoDocumento    = textoDocumento,
                                        Concepto         =
                                            String.Format("{0}-{1} ,{2} {3}, {4} {5}", prefijoConcepto,
                                                          folioTraspaso,
                                                          cabezasRecibidas, DESCRIPCION_MOVIMIENTO,
                                                          pesoOrigen.ToString("N0"), UNIDAD_MOVIMIENTO),
                                        Sociedad = organizacionDestino.Sociedad,
                                        Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacionDestino.Sociedad),
                                    };
                                    polizaSalida = GeneraRegistroPoliza(datos);
                                    polizasSalidaTraspaso.Add(polizaSalida);
                                }
                            }
                        }
                    }
                }
                if (costosGanadoTransferido.Any())
                {
                    var interfaceSalidaTraspasoCostoBL = new InterfaceSalidaTraspasoCostoBL();
                    interfaceSalidaTraspasoCostoBL.Guardar(costosGanadoTransferido);
                }
            }
            return(polizasSalidaTraspaso);
        }
Пример #5
0
        private IList <PolizaInfo> ObtenerPoliza(SolicitudProductoReplicaInfo solicitud)
        {
            var polizasEntradaTraspaso = new List <PolizaInfo>();

            IList <ClaseCostoProductoInfo> cuentasAlmacenProductoEntrada =
                ObtenerCostosProducto(solicitud.AlmacenDestino.AlmacenID);

            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.EntradaTraspasoSAP.GetHashCode());

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

            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);

            //string numeroReferencia = ObtenerNumeroReferencia;
            string numeroReferencia = ObtenerNumeroReferenciaFolio(solicitud.FolioSolicitud);

            FechaBL  fec      = new FechaBL();
            var      fechaObj = fec.ObtenerFechaActual();
            DateTime fecha    = fechaObj.FechaActual;

            string archivoFolio = ObtenerArchivoFolio(fecha);

            var organizacionBL            = new OrganizacionBL();
            OrganizacionInfo organizacion = organizacionBL.ObtenerPorAlmacenID(solicitud.AlmacenDestino.AlmacenID);

            if (organizacion == null)
            {
                organizacion = new OrganizacionInfo
                {
                    TipoOrganizacion = new TipoOrganizacionInfo()
                };
            }
            IList <CuentaAlmacenSubFamiliaInfo> cuentasSubFamilia =
                ObtenerCostosSubFamilia(solicitud.AlmacenDestino.AlmacenID);

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

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

            foreach (var solicitudDetalle in solicitud.Detalle.Where(a => a.Activo).ToList())
            {
                CuentaSAPInfo claveContableCargo;
                afectaCosto = ValidarAfectacionCuentaCosto(solicitudDetalle.Producto);
                if (!afectaCosto && (solicitud.AlmacenDestino.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.Enfermeria.GetHashCode() ||
                                     solicitud.AlmacenDestino.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.ManejoGanado.GetHashCode() ||
                                     solicitud.AlmacenDestino.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.ReimplanteGanado.GetHashCode()))
                {
                    var cuentaSapSubFamiliaEntrada = cuentasSubFamilia.FirstOrDefault(
                        cuenta => cuenta.SubFamiliaID == solicitudDetalle.Producto.SubFamilia.SubFamiliaID);

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

                if (solicitud.AlmacenDestino.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.CentroAcopio.GetHashCode())
                {
                    ParametroOrganizacionInfo cuentaMedicamento = ObtenerParametroOrganizacionPorClave(organizacion.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}",
                                                              solicitudDetalle.Producto.Descripcion));
                }
                if ((solicitudDetalle.Cantidad * solicitudDetalle.PrecioUnitario) <= 0)
                {
                    continue;
                }
                var datos = new DatosPolizaInfo
                {
                    NumeroReferencia = numeroReferencia,
                    FechaEntrada     = fecha,
                    Folio            = solicitud.FolioSolicitud.ToString(CultureInfo.InvariantCulture),
                    ClaseDocumento   = postFijoRef3,
                    Importe          =
                        string.Format("{0}",
                                      Math.Round(
                                          solicitudDetalle.Cantidad * solicitudDetalle.PrecioUnitario, 2).
                                      ToString("F2")),
                    Renglon     = Convert.ToString(linea++),
                    ImporteIva  = "0",
                    Ref3        = ref3.ToString(),
                    Cuenta      = claveContableCargo.CuentaSAP,
                    CentroCosto =
                        claveContableCargo.CuentaSAP.StartsWith(PrefijoCuentaCentroCosto)
                            ? parametroCentroCosto.Valor
                            : string.Empty,
                    Division      = organizacion.Division,
                    ArchivoFolio  = archivoFolio,
                    PesoOrigen    = 0,
                    TipoDocumento = textoDocumento,
                    Concepto      = String.Format("{0}-{1} {2} {3} {4}",
                                                  tipoMovimiento,
                                                  solicitud.FolioSolicitud.ToString(
                                                      CultureInfo.InvariantCulture),
                                                  solicitudDetalle.Producto.Descripcion,
                                                  string.Format("{0} {1}.",
                                                                solicitudDetalle.Cantidad.ToString("N2"),
                                                                solicitudDetalle.Producto.UnidadMedicion.
                                                                ClaveUnidad),
                                                  solicitudDetalle.PrecioUnitario.ToString("C2")),
                    Sociedad            = organizacion.Sociedad,
                    DescripcionProducto = claveContableCargo.Descripcion,
                    Segmento            = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                };
                PolizaInfo polizaSalida = GeneraRegistroPoliza(datos);
                polizasEntradaTraspaso.Add(polizaSalida);

                var claveContableAbono = cuentasSap.FirstOrDefault(sap => sap.CuentaSAP == solicitudDetalle.CuentaSAP);
                if (claveContableAbono == null)
                {
                    throw new ExcepcionServicio(string.Format("No se encontró configurada la cuenta {0}, del producto {1}",
                                                              solicitudDetalle.CuentaSAP, solicitudDetalle.Producto.ProductoDescripcion));
                }

                datos = new DatosPolizaInfo
                {
                    NumeroReferencia = numeroReferencia,
                    FechaEntrada     = fecha,

                    Folio          = solicitud.FolioSolicitud.ToString(CultureInfo.InvariantCulture),
                    ClaseDocumento = postFijoRef3,
                    Importe        =
                        string.Format("{0}",
                                      Math.Round((solicitudDetalle.Cantidad * solicitudDetalle.PrecioUnitario) * -1, 2).ToString("F2")),
                    Renglon      = Convert.ToString(linea++),
                    ImporteIva   = "0",
                    Ref3         = ref3.ToString(),
                    Cuenta       = claveContableAbono.CuentaSAP,
                    ArchivoFolio = archivoFolio,
                    CentroCosto  =
                        claveContableAbono.CuentaSAP.StartsWith(PrefijoCuentaCentroCosto)
                            ? parametroCentroCosto.Valor
                            : string.Empty,
                    Division      = organizacion.Division,
                    PesoOrigen    = 0,
                    TipoDocumento = textoDocumento,
                    Concepto      = String.Format("{0}-{1} {2} {3} {4}",
                                                  tipoMovimiento,
                                                  solicitud.FolioSolicitud.ToString(CultureInfo.InvariantCulture),
                                                  solicitudDetalle.Producto.Descripcion,
                                                  string.Format("{0} {1}.",
                                                                solicitudDetalle.Cantidad.ToString("N2"),
                                                                solicitudDetalle.Producto.UnidadMedicion.
                                                                ClaveUnidad),
                                                  solicitudDetalle.PrecioUnitario.ToString("C2")),
                    Sociedad            = organizacion.Sociedad,
                    DescripcionProducto = claveContableAbono.Descripcion,
                    Segmento            = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                };
                polizaSalida = GeneraRegistroPoliza(datos);
                polizasEntradaTraspaso.Add(polizaSalida);
            }
            return(polizasEntradaTraspaso);
        }
Пример #6
0
        private IList <PolizaInfo> ObtenerPoliza(List <PolizaSacrificioModel> datosPoliza)
        {
            var polizasSacrificio = new List <PolizaInfo>();

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

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

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


            IList <CuentaSAPInfo> cuentasSap = ObtenerCuentasSAP();

            int organizacionID            = datosPoliza.Select(org => org.OrganizacionID).FirstOrDefault();
            OrganizacionInfo organizacion = ObtenerOrganizacionIVA(organizacionID);

            IList <ProveedorInfo> proveedores = ObtenerProveedores();

            string claveParametro = datosPoliza.Select(clave => clave.ParametroProveedor).FirstOrDefault();
            ParametroGeneralInfo parametroGeneral = ObtenerParametroGeneralPorClave(claveParametro);

            if (parametroGeneral == null)
            {
                parametroGeneral = new ParametroGeneralInfo();
            }

            var poliza212 = true;

            if (string.Compare(claveParametro, ParametrosEnum.PolizaSacrificio300.ToString()
                               , StringComparison.InvariantCultureIgnoreCase) == 0)
            {
                ParametroGeneralInfo parametro300 =
                    ObtenerParametroGeneralPorClave(ParametrosEnum.SociedadPolizaSacrificio.ToString());
                organizacion.Sociedad = parametro300.Valor;
                poliza212             = false;
            }

            datosPoliza = datosPoliza.GroupBy(grupo => new { grupo.Serie, grupo.Folio, grupo.Corral, grupo.LoteID })
                          .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.Select(ser => ser.Serie).FirstOrDefault(),
                ImportePiel    = dato.Select(imp => imp.ImportePiel).Sum(),
                ImporteViscera = dato.Select(imp => imp.ImporteViscera).Sum(),
                Corral         = dato.Key.Corral,
            }).ToList();
            List <PolizaInfo> polizasGeneradas;

            ParametroOrganizacionInfo parametroOrganizacion = ObtenerParametroOrganizacionPorClave(organizacionID,
                                                                                                   ParametrosEnum.
                                                                                                   CTACENTROBENEFICIOENG
                                                                                                   .ToString());

            if (poliza212)
            {
                polizasGeneradas = ObtenerPoliza212(datosPoliza, cuentasSap, proveedores,
                                                    parametroGeneral, organizacion, textoDocumento,
                                                    tipoMovimiento, postFijoRef3, parametroOrganizacion);
            }
            else
            {
                polizasGeneradas = ObtenerPoliza300(datosPoliza, cuentasSap, proveedores,
                                                    parametroGeneral, organizacion, textoDocumento,
                                                    tipoMovimiento, postFijoRef3);
            }
            polizasSacrificio.AddRange(polizasGeneradas);
            //}
            return(polizasSacrificio);
        }
        private IList <PolizaInfo> ObtenerPoliza(GanadoIntensivoInfo ganadoIntensivo)
        {
            var polizasSalidaMuerteIntensiva = new List <PolizaInfo>();

            if (ganadoIntensivo.ListaGanadoIntensivoCosto != null && ganadoIntensivo.ListaGanadoIntensivoCosto.Any())
            {
                TipoPolizaInfo tipoPoliza =
                    TiposPoliza.FirstOrDefault(clave => clave.TipoPolizaID == TipoPoliza.SalidaMuerteIntensiva.GetHashCode());
                if (tipoPoliza == null)
                {
                    throw new ExcepcionServicio(string.Format("{0} {1}", "EL TIPO DE POLIZA",
                                                              TipoPoliza.SalidaMuerteIntensiva));
                }
                string textoDocumento = tipoPoliza.TextoDocumento;
                string tipoMovimiento = tipoPoliza.ClavePoliza;
                string postFijoRef3   = tipoPoliza.PostFijoRef3;

                int 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 = ObtenerNumeroReferencia;

                if (costos == null)
                {
                    costos = ObtenerCostos();
                }

                foreach (var ganadoIntensivoCostoInfo in ganadoIntensivo.ListaGanadoIntensivoCosto)
                {
                    CostoInfo costo =
                        costos.FirstOrDefault(tipo => tipo.CostoID == ganadoIntensivoCostoInfo.Costos.CostoID);
                    if (costo == null)
                    {
                        costo = new CostoInfo();
                    }
                    //= ObtenerOrganizacionIVA(ganadoIntensivo.Organizacion.OrganizacionID);


                    OrganizacionInfo organizacion = ObtenerOrganizacionSociedadDivision(ganadoIntensivo.Organizacion.OrganizacionID, SociedadEnum.SuKarne);
                    if (organizacion == null)
                    {
                        organizacion = new OrganizacionInfo
                        {
                            TipoOrganizacion = new TipoOrganizacionInfo()
                        };
                    }

                    const int Corral_Intensivo = 4;
                    const int Corral_Maquila   = 6;

                    int tipoOrganizacioID = 0;

                    switch (ganadoIntensivo.Lote.TipoCorralID)
                    {
                    case Corral_Intensivo:
                        tipoOrganizacioID = TipoOrganizacion.Intensivo.GetHashCode();
                        break;

                    case Corral_Maquila:
                        tipoOrganizacioID = TipoOrganizacion.Maquila.GetHashCode();
                        break;
                    }
                    if (tipoOrganizacioID > 0)
                    {
                        organizacion.TipoOrganizacion.TipoOrganizacionID = tipoOrganizacioID;
                    }


                    ClaveContableInfo claveContableAbono = ObtenerCuentaInventario(costo, organizacion.OrganizacionID,
                                                                                   organizacion.TipoOrganizacion.TipoOrganizacionID);
                    if (claveContableAbono == null)
                    {
                        throw new ExcepcionServicio(string.Format("{0} {1}", "NO EXISTE CONFIGURACION PARA EL COSTO",
                                                                  costo.Descripcion));
                    }

                    ClaveContableInfo claveContableCargo = ObtenerCuentaInventario(costo, organizacion.OrganizacionID,
                                                                                   TipoPoliza.SalidaMuerteIntensiva);
                    if (claveContableCargo == null)
                    {
                        throw new ExcepcionServicio(string.Format("{0} {1}", "NO EXISTE CONFIGURACION PARA EL COSTO",
                                                                  costo.Descripcion));
                    }
                    ParametroOrganizacionInfo parametroCentroCosto =
                        ObtenerParametroOrganizacionPorClave(organizacion.OrganizacionID,
                                                             ParametrosEnum.CTACENTROCTOINT.ToString());
                    if (parametroCentroCosto == null)
                    {
                        throw new ExcepcionServicio(string.Format("{0}", "CENTRO DE COSTO NO CONFIGURADO"));
                    }
                    EntradaGanadoInfo entradaGanado = ganadoIntensivo.EntradaGanado;
                    var pesoMuerteTotal             = Math.Round(((entradaGanado.PesoBruto - entradaGanado.PesoTara) / entradaGanado.CabezasRecibidas) * ganadoIntensivo.Cabezas, 0);
                    //VALIDAR FECHA
                    DateTime fecha = DateTime.Today;
                    if (fecha != null)
                    {
                        string archivoFolio = ObtenerArchivoFolio(fecha);
                        var    datos        = new DatosPolizaInfo
                        {
                            NumeroReferencia = numeroReferencia,
                            FechaEntrada     = fecha,
                            Folio            = ganadoIntensivo.FolioTicket.ToString(),
                            Importe          = string.Format("{0}", ganadoIntensivoCostoInfo.Importe.ToString("F2")),
                            Renglon          = Convert.ToString(linea++),
                            ImporteIva       = "0",
                            Ref3             = ref3.ToString(),
                            Cuenta           = claveContableCargo.Valor,
                            Division         = organizacion.Division,
                            ArchivoFolio     = archivoFolio,
                            CentroCosto      =
                                claveContableCargo.Valor.StartsWith(PrefijoCuentaCentroCosto) ||
                                claveContableCargo.Valor.StartsWith(PrefijoCuentaCentroGasto)
                                    ? parametroCentroCosto.Valor
                                    : string.Empty,
                            //PesoOrigen = peso,
                            TipoDocumento   = textoDocumento,
                            ClaseDocumento  = postFijoRef3,
                            ComplementoRef1 = string.Empty,
                            Concepto        = String.Format("{0}-{1} CABEZAS {2} kgs",
                                                            tipoMovimiento,
                                                            ganadoIntensivo.Cabezas, pesoMuerteTotal),
                            Sociedad = organizacion.Sociedad,
                            Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                        };
                        PolizaInfo polizaSalida = GeneraRegistroPoliza(datos);
                        polizasSalidaMuerteIntensiva.Add(polizaSalida);

                        datos = new DatosPolizaInfo
                        {
                            NumeroReferencia = numeroReferencia,
                            FechaEntrada     = fecha,
                            Folio            = ganadoIntensivo.FolioTicket.ToString(),
                            Importe          = string.Format("{0}", (ganadoIntensivoCostoInfo.Importe * -1).ToString("F2")),
                            Renglon          = Convert.ToString(linea++),
                            ImporteIva       = "0",
                            Ref3             = ref3.ToString(),
                            Cuenta           = claveContableAbono.Valor,
                            ArchivoFolio     = archivoFolio,
                            Division         = organizacion.Division,
                            // PesoOrigen = peso,
                            TipoDocumento  = textoDocumento,
                            ClaseDocumento = postFijoRef3,
                            Concepto       = String.Format("{0}-{1}, CABEZAS, {2} kgs",
                                                           tipoMovimiento,
                                                           ganadoIntensivo.Cabezas, pesoMuerteTotal),
                            Sociedad = organizacion.Sociedad,
                            Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                        };
                        polizaSalida = GeneraRegistroPoliza(datos);
                        polizasSalidaMuerteIntensiva.Add(polizaSalida);
                    }
                }
            }

            return(polizasSalidaMuerteIntensiva);
        }
Пример #8
0
        private IList <PolizaInfo> ObtenerPoliza(List <PolizaEntradaSalidaPorAjusteModel> ajustesDeInventario)
        {
            var polizasSalidaAjuste = new List <PolizaInfo>();

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

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

            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);

            IList <CuentaSAPInfo>          cuentasSAP         = ObtenerCuentasSAP();
            IList <ClaseCostoProductoInfo> almacenesProductos = ObtenerCostosProducto(almacen.AlmacenID);

            ParametroOrganizacionInfo parametroOrganizacionSuperavit;

            if (almacen.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.Enfermeria.GetHashCode() ||
                almacen.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.ManejoGanado.GetHashCode() ||
                almacen.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.ReimplanteGanado.GetHashCode())
            {
                parametroOrganizacionSuperavit =
                    ObtenerParametroOrganizacionPorClave(organizacion.OrganizacionID,
                                                         ParametrosEnum.CTASUPERAVITENG.ToString());
            }
            else
            {
                parametroOrganizacionSuperavit =
                    ObtenerParametroOrganizacionPorClave(organizacion.OrganizacionID, ParametrosEnum.CTASUPERAVIT.ToString());
            }
            if (parametroOrganizacionSuperavit == null)
            {
                throw new ExcepcionServicio(string.Format("{0}", "CUENTA DE SUPERAVIT NO CONFIGURADA"));
            }

            IList <ProductoInfo>                productos           = ObtenerProductos();
            IList <UnidadMedicionInfo>          unidades            = ObtenerUnidadesMedicion();
            IList <CuentaAlmacenSubFamiliaInfo> almacenesSubFamilia = ObtenerCostosSubFamilia(almacen.AlmacenID);
            ProductoInfo producto;
            PolizaEntradaSalidaPorAjusteModel ajuste;
            ClaseCostoProductoInfo            almacenProducto;
            CuentaSAPInfo cuentaSAP;
            CuentaAlmacenSubFamiliaInfo almacenSubFamilia;
            ParametroOrganizacionInfo   parametroCentroCosto =
                ObtenerParametroOrganizacionPorClave(organizacion.OrganizacionID,
                                                     ParametrosEnum.CTACENTROCOSTOMP.ToString());

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

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

                producto    = productos.FirstOrDefault(clave => clave.ProductoId == 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} {2}", "CUENTA PARA PRODUCTO",
                                                              producto.ProductoDescripcion, "NO CONFIGURADA"));
                }
                UnidadMedicionInfo unidad = unidades.FirstOrDefault(uni => uni.UnidadID == producto.UnidadId);
                if (unidad == null)
                {
                    unidad = new UnidadMedicionInfo();
                }
                var datos = new DatosPolizaInfo
                {
                    NumeroReferencia = numeroReferencia,
                    FechaEntrada     = almacenMovimiento.FechaMovimiento,
                    Folio            = almacenMovimiento.FolioMovimiento.ToString(),
                    ClaseDocumento   = postFijoRef3,
                    Importe          = string.Format("{0}", ajuste.Importe.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,
                    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           = parametroOrganizacionSuperavit.Valor,
                    CentroCosto      =
                        parametroOrganizacionSuperavit.Valor.StartsWith(PrefijoCuentaCentroCosto) ||
                        parametroOrganizacionSuperavit.Valor.StartsWith(PrefijoCuentaCentroGasto)
                                        ? parametroCentroCosto.Valor
                                        : string.Empty,
                    Division         = organizacion.Division,
                    ArchivoFolio     = archivoFolio,
                    DescripcionCosto = cuentaSAP.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),
                };
                polizaSalida = GeneraRegistroPoliza(datos);
                polizasSalidaAjuste.Add(polizaSalida);
            }

            return(polizasSalidaAjuste);
        }
Пример #9
0
        private IList <PolizaInfo> ObtenerPolizas(RecepcionProductoInfo recepcionProducto)
        {
            var polizaCompraMateriaPrima = new List <PolizaInfo>();

            int organizacionID            = recepcionProducto.Almacen.Organizacion.OrganizacionID;
            OrganizacionInfo organizacion = ObtenerOrganizacionIVA(organizacionID);

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

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

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

            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 numeroDocumento = ObtenerNumeroReferencia;

            IList <CuentaSAPInfo> cuentasSAP = ObtenerCuentasSAP();
            int almacenID = recepcionProducto.Almacen.AlmacenID;
            IList <ClaseCostoProductoInfo> almacenesProductos = ObtenerCostosProducto(almacenID);
            IList <UnidadMedicionInfo>     unidadesMedicion   = ObtenerUnidadesMedicion();

            var    linea          = 1;
            string textoDocumento = tipoPoliza.TextoDocumento;
            string tipoMovimiento = tipoPoliza.ClavePoliza;

            DateTime fecha        = recepcionProducto.FechaRecepcion;
            string   archivoFolio = ObtenerArchivoFolio(fecha);
            int      folio        = recepcionProducto.FolioRecepcion;

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

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

            IList <RecepcionProductoDetalleInfo> detallesProducto = recepcionProducto.ListaRecepcionProductoDetalle;
            RecepcionProductoDetalleInfo         detalle;
            DatosPolizaInfo        datos;
            PolizaInfo             polizaSalida;
            CuentaSAPInfo          cuentaSAP;
            ClaseCostoProductoInfo almacenProducto;
            CuentaSAPInfo          cuentaIva;
            UnidadMedicionInfo     unidadMedicion = null;

            for (int indexDetalle = 0; indexDetalle < detallesProducto.Count; indexDetalle++)
            {
                detalle         = detallesProducto[indexDetalle];
                almacenProducto =
                    almacenesProductos.FirstOrDefault(prod => prod.ProductoID == detalle.Producto.ProductoId);
                if (almacenProducto == null)
                {
                    throw new ExcepcionServicio(string.Format("{0} {1} {2}", "CUENTA PARA PRODUCTO",
                                                              detalle.Producto.Descripcion, "NO CONFIGURADA"));
                }
                cuentaSAP =
                    cuentasSAP.FirstOrDefault(cuenta => cuenta.CuentaSAPID == almacenProducto.CuentaSAPID);
                if (cuentaSAP == null)
                {
                    throw new ExcepcionServicio(string.Format("{0} {1} {2}", "CUENTA PARA PRODUCTO",
                                                              detalle.Producto.Descripcion, "NO CONFIGURADA"));
                }
                unidadMedicion =
                    unidadesMedicion.FirstOrDefault(clave => clave.UnidadID == detalle.Producto.UnidadMedicion.UnidadID);
                datos = new DatosPolizaInfo
                {
                    NumeroReferencia  = numeroDocumento,
                    FechaEntrada      = fecha,
                    Folio             = folio.ToString(),
                    ClaseDocumento    = postFijoRef3,
                    Importe           = string.Format("{0}", detalle.Importe.ToString("F2")),
                    IndicadorImpuesto = String.Empty,
                    Renglon           = Convert.ToString(linea++),
                    ImporteIva        = "0",
                    Ref3             = ref3.ToString(),
                    Division         = organizacion.Division,
                    ArchivoFolio     = archivoFolio,
                    Cuenta           = cuentaSAP.CuentaSAP,
                    DescripcionCosto = cuentaSAP.Descripcion,
                    CentroCosto      =
                        cuentaSAP.CuentaSAP.StartsWith(PrefijoCuentaCentroCosto)
                                        ? parametroCentroCosto.Valor
                                        : string.Empty,
                    PesoOrigen    = Math.Round(detalle.Cantidad, 0),
                    TipoDocumento = textoDocumento,
                    Concepto      = String.Format("{0}-{1} {2} {3} {4} {5}",
                                                  tipoMovimiento,
                                                  folio, detalle.Cantidad.ToString("N0")
                                                  , unidadMedicion.ClaveUnidad
                                                  , detalle.Producto.Descripcion, postFijoRef3),
                    Sociedad = organizacion.Sociedad,
                    Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                };
                polizaSalida = GeneraRegistroPoliza(datos);
                polizaCompraMateriaPrima.Add(polizaSalida);
            }
            cuentaIva = cuentasSAP.FirstOrDefault(
                clave => clave.CuentaSAP.Equals(organizacion.Iva.CuentaRecuperar.ClaveCuenta));
            if (cuentaIva == null)
            {
                throw new ExcepcionServicio(string.Format("{0} {1}", "NO EXISTE CONFIGURACIONES PARA LA CUENTA",
                                                          organizacion.Iva.Descripcion));
            }
            ParametroGeneralInfo parametroGeneralProductos =
                ObtenerParametroGeneralPorClave(ParametrosEnum.PRODIVAALM.ToString());
            List <int> productosGeneranIVA =
                parametroGeneralProductos.Valor.Split('|').Select(x => Convert.ToInt32(x)).ToList();
            var medicamentosConIva = productosGeneranIVA.Select(x => new RecepcionProductoDetalleInfo
            {
                Producto = new ProductoInfo
                {
                    ProductoId =
                        x
                }
            }).ToList();
            decimal importe =
                detallesProducto.Where(fam => fam.Producto.Familia.FamiliaID != FamiliasEnum.Medicamento.GetHashCode()).
                Sum(imp => imp.Importe);
            decimal importeMedicamentosIva = (from det in detallesProducto
                                              join med in medicamentosConIva on det.Producto.ProductoId equals
                                              med.Producto.ProductoId
                                              select det.Importe).Sum();

            importe = importe + importeMedicamentosIva;
            decimal importeIva = importe * (organizacion.Iva.TasaIva / 100);

            importe = importe + importeIva;
            decimal cantidad =
                detallesProducto.Where(fam => fam.Producto.Familia.FamiliaID != FamiliasEnum.Medicamento.GetHashCode()).
                Intersect(medicamentosConIva).
                Sum(kgs => kgs.Cantidad);
            decimal cantidadMedicamentosIva = (from det in detallesProducto
                                               join med in medicamentosConIva on det.Producto.ProductoId equals
                                               med.Producto.ProductoId
                                               select det.Cantidad).Sum();

            cantidad += cantidadMedicamentosIva;
            if (importe > 0)
            {
                datos = new DatosPolizaInfo
                {
                    NumeroReferencia  = numeroDocumento,
                    FechaEntrada      = fecha,
                    Folio             = folio.ToString(),
                    ClaseDocumento    = postFijoRef3,
                    Importe           = string.Format("{0}", importeIva.ToString("F2")),
                    IndicadorImpuesto = organizacion.Iva.IndicadorIvaRecuperar,
                    Division          = organizacion.Division,
                    Renglon           = Convert.ToString(linea++),
                    ImporteIva        = importe.ToString("F2"),
                    Ref3              = ref3.ToString(),
                    ArchivoFolio      = archivoFolio,
                    Cuenta            = cuentaIva.CuentaSAP,
                    DescripcionCosto  = cuentaIva.Descripcion,
                    PesoOrigen        = Math.Round(cantidad, 0),
                    TipoDocumento     = textoDocumento,
                    ClaveImpuesto     = ClaveImpuesto,
                    CondicionImpuesto = CondicionImpuesto,
                    Concepto          = String.Format("{0}-{1} {2} {3} {4}",
                                                      tipoMovimiento,
                                                      folio, cantidad.ToString("N0")
                                                      , unidadMedicion.ClaveUnidad
                                                      , postFijoRef3),
                    Sociedad = organizacion.Sociedad,
                    Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                };
                polizaSalida = GeneraRegistroPoliza(datos);
                polizaCompraMateriaPrima.Add(polizaSalida);
            }
            importe  = detallesProducto.Sum(imp => imp.Importe);
            cantidad = detallesProducto.Sum(kgs => kgs.Cantidad);
            datos    = new DatosPolizaInfo
            {
                NumeroReferencia  = numeroDocumento,
                FechaEntrada      = fecha,
                Folio             = folio.ToString(),
                ClaveProveedor    = recepcionProducto.Proveedor.CodigoSAP,
                ClaseDocumento    = postFijoRef3,
                Importe           = string.Format("{0}", ((importe + importeIva) * -1).ToString("F2")),
                IndicadorImpuesto = String.Empty,
                Renglon           = Convert.ToString(linea),
                ImporteIva        = "0",
                Ref3             = ref3.ToString(),
                Division         = organizacion.Division,
                ArchivoFolio     = archivoFolio,
                DescripcionCosto = recepcionProducto.Proveedor.Descripcion,
                PesoOrigen       = Math.Round(cantidad, 0),
                TipoDocumento    = textoDocumento,
                Concepto         = String.Format("{0}-{1} {2} {3} {4}",
                                                 tipoMovimiento,
                                                 folio, cantidad.ToString("N0"),
                                                 unidadMedicion.ClaveUnidad, postFijoRef3),
                Sociedad = organizacion.Sociedad,
                Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
            };
            polizaSalida = GeneraRegistroPoliza(datos);
            polizaCompraMateriaPrima.Add(polizaSalida);

            return(polizaCompraMateriaPrima);
        }
Пример #10
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);
        }
Пример #11
0
        private IList <PolizaInfo> ObtenerPoliza(List <ContenedorAlmacenMovimientoCierreDia> contenedor)
        {
            var polizasConsumo = new List <PolizaInfo>();
            IList <CuentaSAPInfo> cuentasSap = ObtenerCuentasSAP();

            int organizacionID            = contenedor[0].Almacen.Organizacion.OrganizacionID;
            int almacenID                 = contenedor[0].Almacen.AlmacenID;
            OrganizacionInfo organizacion = ObtenerOrganizacionIVA(organizacionID);
            int tipoOrigenID              = organizacion.TipoOrganizacion.TipoProceso.TipoProcesoID;

            IList <CostoInfo> costos = ObtenerCostos();

            IList <CuentaAlmacenSubFamiliaInfo> cuentasSubFamilia;

            var movimientos = contenedor.GroupBy(prod => new { prod.Producto.ProductoId, prod.Producto.Descripcion })
                              .Select(mov => new
            {
                Importe           = mov.Sum(det => det.AlmacenMovimientoDetalle.Importe),
                ProductoID        = mov.Key.ProductoId,
                Producto          = mov.Key.Descripcion,
                FechaMovimiento   = mov.Select(fech => fech.AlmacenMovimiento.FechaMovimiento).FirstOrDefault(),
                SubFamilia        = mov.Select(sf => sf.Producto.SubFamilia.Descripcion).FirstOrDefault(),
                SubFamiliaID      = mov.Select(sf => sf.Producto.SubFamilia.SubFamiliaID).FirstOrDefault(),
                Familia           = mov.Select(fam => fam.Producto.SubFamilia.Familia.Descripcion).FirstOrDefault(),
                TipoTratamientoID = mov.Select(trat => trat.AlmacenMovimientoDetalle.Tratamiento.TipoTratamientoInfo.TipoTratamientoID).FirstOrDefault(),
                TipoTratamiento   = mov.Select(trat => trat.AlmacenMovimientoDetalle.Tratamiento.TipoTratamientoInfo.Descripcion).FirstOrDefault(),
                Almacen           = mov.Select(alm => alm.Almacen.Descripcion).FirstOrDefault(),
                AlmacenID         = mov.Select(alm => alm.Almacen.AlmacenID).FirstOrDefault(),
                FolioAlmacen      = mov.Select(folio => folio.FolioAlmacen).FirstOrDefault()
            }).ToList();
            TipoPolizaInfo tipoPoliza =
                TiposPoliza.FirstOrDefault(clave => clave.TipoPolizaID == TipoPoliza.ConsumoProducto.GetHashCode());

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

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

            const int TIPO_COSTO = 3;
            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);

            ParametroOrganizacionInfo parametroOrganizacion =
                ObtenerParametroOrganizacionPorClave(organizacion.OrganizacionID,
                                                     ParametrosEnum.CTACENTROCOSTOENG.ToString());
            string numeroDocumento = ObtenerNumeroReferencia;

            var archivoFolio = string.Empty;
            var filtros      = new FiltroCierreDiaInventarioInfo
            {
                AlmacenID        = almacenID,
                TipoMovimientoID = TipoMovimiento.DiferenciasDeInventario.GetHashCode()
            };
            var almacenBL           = new AlmacenBL();
            int folioAlmacen        = almacenBL.ObtenerFolioAlmacenConsulta(filtros);
            var almacenMovimientoBL = new AlmacenMovimientoBL();

            almacenMovimientoBL.ActualizarFolioAlmacen(almacenID);
            if (movimientos.Any())
            {
                var folioRef = new StringBuilder();
                folioRef.Append(almacenID.ToString(CultureInfo.InvariantCulture).PadLeft(3, '0'));
                folioRef.Append(folioAlmacen.ToString(CultureInfo.InvariantCulture).PadLeft(7, '0'));
                DateTime fecha = movimientos[0].FechaMovimiento;
                archivoFolio    = ObtenerArchivoFolio(fecha);
                numeroDocumento = folioRef.ToString();

                for (var indexMovimientos = 0; indexMovimientos < movimientos.Count; indexMovimientos++)
                {
                    var       mov = movimientos[indexMovimientos];
                    string    descripcionMovimiento = ObtenerDescripcionMovimiento(mov.TipoTratamientoID);
                    CostoInfo costo =
                        costos.FirstOrDefault(
                            tipo =>
                            tipo.TipoCosto.TipoCostoID == TIPO_COSTO &&
                            tipo.Descripcion.IndexOf(descripcionMovimiento, StringComparison.InvariantCultureIgnoreCase) >=
                            0);
                    if (costo == null)
                    {
                        throw new ExcepcionServicio(string.Format("{0} {1}", "NO EXISTE CONFIGURACION PARA",
                                                                  descripcionMovimiento));
                    }
                    ClaveContableInfo claveContable = ObtenerCuentaInventario(costo, organizacionID, tipoOrigenID);
                    if (claveContable == null)
                    {
                        throw new ExcepcionServicio(string.Format("{0} {1}", "NO EXISTE CONFIGURACION PARA EL COSTO",
                                                                  costo.Descripcion));
                    }
                    var datos = new DatosPolizaInfo
                    {
                        NumeroReferencia = numeroDocumento,
                        FechaEntrada     = mov.FechaMovimiento,
                        Importe          = string.Format("{0}", mov.Importe.ToString("F2")),
                        Renglon          = Convert.ToString(linea++),
                        Division         = organizacion.Division,
                        ImporteIva       = "0",
                        ClaseDocumento   = postFijoRef3,
                        Ref3             = ref3.ToString(),
                        Cuenta           = claveContable.Valor,
                        ArchivoFolio     = archivoFolio,
                        DescripcionCosto = claveContable.Descripcion,
                        CentroCosto      =
                            claveContable.Valor.StartsWith(PrefijoCuentaCentroCosto)
                                                ? parametroOrganizacion.Valor
                                                : string.Empty,
                        PesoOrigen    = 0,
                        TipoDocumento = textoDocumento,
                        Folio         = folioAlmacen.ToString(),
                        Concepto      = String.Format("{0}-{1} {2}",
                                                      tipoMovimiento,
                                                      folioAlmacen,
                                                      mov.Producto),
                        Sociedad = organizacion.Sociedad,
                        Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                    };
                    PolizaInfo polizaConsumo = GeneraRegistroPoliza(datos);
                    polizasConsumo.Add(polizaConsumo);
                }
            }

            movimientos = contenedor.GroupBy(prod => new { prod.Producto.SubFamilia.SubFamiliaID }).Select(mov => new
            {
                Importe         = mov.Sum(det => det.AlmacenMovimientoDetalle.Importe),
                ProductoID      = 0,
                Producto        = string.Empty,
                FechaMovimiento = mov.Select(fech => fech.AlmacenMovimiento.FechaMovimiento).FirstOrDefault(),
                SubFamilia      = mov.Select(sf => sf.Producto.SubFamilia.Descripcion).FirstOrDefault(),
                mov.Key.SubFamiliaID,
                Familia           = mov.Select(fam => fam.Producto.SubFamilia.Familia.Descripcion).FirstOrDefault(),
                TipoTratamientoID = mov.Select(trat => trat.AlmacenMovimientoDetalle.Tratamiento.TipoTratamientoInfo.TipoTratamientoID).FirstOrDefault(),
                TipoTratamiento   = mov.Select(trat => trat.AlmacenMovimientoDetalle.Tratamiento.TipoTratamientoInfo.Descripcion).FirstOrDefault(),
                Almacen           = mov.Select(alm => alm.Almacen.Descripcion).FirstOrDefault(),
                AlmacenID         = mov.Select(alm => alm.Almacen.AlmacenID).FirstOrDefault(),
                FolioAlmacen      = mov.Select(folio => folio.FolioAlmacen).FirstOrDefault()
            }).ToList();
            if (movimientos != null && movimientos.Any())
            {
                CuentaSAPInfo cuentaSap;
                CuentaAlmacenSubFamiliaInfo cuentaSubFamilia;

                for (var indexMovimientos = 0; indexMovimientos < movimientos.Count; indexMovimientos++)
                {
                    var       mov = movimientos[indexMovimientos];
                    string    descripcionMovimiento = ObtenerDescripcionMovimiento(mov.TipoTratamientoID);
                    CostoInfo costo =
                        costos.FirstOrDefault(
                            tipo =>
                            tipo.TipoCosto.TipoCostoID == TIPO_COSTO &&
                            tipo.Descripcion.IndexOf(descripcionMovimiento, StringComparison.InvariantCultureIgnoreCase) >=
                            0);
                    if (costo == null)
                    {
                        costo = new CostoInfo();
                    }
                    ClaveContableInfo claveContable = ObtenerCuentaInventario(costo, organizacionID, tipoOrigenID);
                    if (claveContable == null)
                    {
                        throw new ExcepcionServicio(string.Format("{0} {1}", "NO EXISTE CONFIGURACION PARA EL COSTO",
                                                                  costo.Descripcion));
                    }
                    cuentasSubFamilia = ObtenerCostosSubFamilia(mov.AlmacenID);
                    if (cuentasSubFamilia == null)
                    {
                        cuentasSubFamilia = new List <CuentaAlmacenSubFamiliaInfo>();
                    }
                    cuentaSubFamilia = cuentasSubFamilia.FirstOrDefault(clave => clave.SubFamiliaID == mov.SubFamiliaID);
                    if (cuentaSubFamilia == null)
                    {
                        cuentaSubFamilia = new CuentaAlmacenSubFamiliaInfo();
                    }
                    cuentaSap = cuentasSap.FirstOrDefault(clave => clave.CuentaSAPID == cuentaSubFamilia.CuentaSAPID);
                    if (cuentaSap == null)
                    {
                        throw new ExcepcionServicio(string.Format("CUENTA NO CONFIGURADA PARA EL PRODUCTO {0}",
                                                                  mov.Producto));
                    }
                    var datos = new DatosPolizaInfo
                    {
                        NumeroReferencia = numeroDocumento,
                        FechaEntrada     = mov.FechaMovimiento,
                        Importe          = string.Format("{0}", (mov.Importe * -1).ToString("F2")),
                        Renglon          = Convert.ToString(linea++),
                        ImporteIva       = "0",
                        ClaseDocumento   = postFijoRef3,
                        Division         = organizacion.Division,
                        Ref3             = ref3.ToString(),
                        Cuenta           = cuentaSap.CuentaSAP,
                        ArchivoFolio     = archivoFolio,
                        CentroCosto      =
                            cuentaSap.CuentaSAP.StartsWith(PrefijoCuentaCentroCosto)
                                                ? parametroOrganizacion.Valor
                                                : string.Empty,
                        DescripcionCosto = cuentaSap.Descripcion,
                        PesoOrigen       = 0,
                        TipoDocumento    = textoDocumento,
                        ComplementoRef1  = string.Empty,
                        Folio            = folioAlmacen.ToString(),
                        Concepto         = String.Format("{0}-{1} {2}",
                                                         tipoMovimiento,
                                                         folioAlmacen,
                                                         mov.Producto),
                        Sociedad = organizacion.Sociedad,
                        Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                    };
                    PolizaInfo polizaConsumo = GeneraRegistroPoliza(datos);
                    polizasConsumo.Add(polizaConsumo);
                }
            }
            return(polizasConsumo);
        }
Пример #12
0
        private IList <PolizaInfo> ObtenerPoliza(SolicitudProductoInfo solicitud)
        {
            var polizasSalidaConsumo = new List <PolizaInfo>();

            IList <ClaseCostoProductoInfo> cuentasAlmacenProductoSalida =
                ObtenerCostosProducto(solicitud.AlmacenGeneralID);

            if (cuentasAlmacenProductoSalida == null)
            {
                throw new ExcepcionServicio("No se encuentran cuentas configuradas, para productos del almacén general");
            }
            IList <CuentaSAPInfo> cuentasSap = ObtenerCuentasSAP();

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

            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);

            string numeroReferencia = ObtenerNumeroReferencia;

            DateTime fecha        = solicitud.FechaEntrega.HasValue ? solicitud.FechaEntrega.Value : DateTime.MinValue;
            string   archivoFolio = ObtenerArchivoFolio(fecha);

            var organizacionBL            = new OrganizacionBL();
            OrganizacionInfo organizacion = organizacionBL.ObtenerPorAlmacenID(solicitud.AlmacenGeneralID);

            if (organizacion == null)
            {
                organizacion = new OrganizacionInfo
                {
                    TipoOrganizacion = new TipoOrganizacionInfo()
                };
            }
            string claveParametro;
            var    centrosCosto    = ObtenerCentrosCosto();
            var    camionesReparto = ObtenerCamionesRepartoPorOrganizacion(organizacion.OrganizacionID); //camionRepartoBL.ObtenerPorOrganizacionID(organizacion.OrganizacionID);

            var  primerDetalle = solicitud.Detalle.FirstOrDefault();
            bool esCamionReparto;

            if (primerDetalle != null && primerDetalle.CamionRepartoID.HasValue && primerDetalle.CamionRepartoID.Value > 0)
            {
                claveParametro  = ParametrosEnum.CuentaCostosDiesel.ToString();
                esCamionReparto = true;
            }
            else
            {
                claveParametro  = ParametrosEnum.CuentaCostosProductosAlmacen.ToString();
                esCamionReparto = false;
            }
            ParametroOrganizacionInfo parametroCuenta = ObtenerParametroOrganizacionPorClave(organizacion.OrganizacionID,
                                                                                             claveParametro);

            if (parametroCuenta == null)
            {
                throw new ExcepcionServicio(string.Format("No se encuentró valor de la cuenta, para el parámetro {0}, en la organización", claveParametro));
            }

            foreach (var solicitudDetalle in solicitud.Detalle)
            {
                int centroCostoID;
                if (esCamionReparto)
                {
                    CamionRepartoInfo camionReparto =
                        camionesReparto.FirstOrDefault(
                            camion => camion.CamionRepartoID == solicitudDetalle.CamionRepartoID);
                    if (camionReparto == null)
                    {
                        camionReparto = new CamionRepartoInfo();
                    }
                    centroCostoID = camionReparto.CentroCosto.CentroCostoID;
                }
                else
                {
                    centroCostoID = solicitud.CentroCostoID;
                }

                CentroCostoInfo centroCostoCargo =
                    centrosCosto.FirstOrDefault(centro => centro.CentroCostoID == centroCostoID);

                if (centroCostoCargo == null)
                {
                    throw new ExcepcionServicio("No se encuentró el centro de costo");
                }

                var datos = new DatosPolizaInfo
                {
                    NumeroReferencia  = numeroReferencia,
                    FechaEntrada      = solicitud.FechaEntrega.HasValue ? solicitud.FechaEntrega.Value : DateTime.MinValue,
                    Folio             = solicitud.FolioSolicitud.ToString(CultureInfo.InvariantCulture),
                    CabezasRecibidas  = string.Empty,
                    NumeroDocumento   = string.Empty,
                    ClaseDocumento    = postFijoRef3,
                    ClaveProveedor    = string.Empty,
                    Importe           = string.Format("{0}", Math.Round(solicitudDetalle.Cantidad * solicitudDetalle.PrecioPromedio, 2).ToString("F2")),
                    IndicadorImpuesto = String.Empty,
                    CentroCosto       = string.Format("{0}{1}{2}",
                                                      "SA0",
                                                      organizacion.OrganizacionID,
                                                      centroCostoCargo.CentroCostoSAP),
                    Renglon          = Convert.ToString(linea++),
                    Cabezas          = string.Empty,
                    ImporteIva       = "0",
                    Ref3             = ref3.ToString(),
                    Cuenta           = parametroCuenta.Valor,
                    CodigoRetencion  = string.Empty,
                    Division         = organizacion.Division,
                    TipoRetencion    = string.Empty,
                    ArchivoFolio     = archivoFolio,
                    DescripcionCosto = string.Empty,
                    PesoOrigen       = 0,
                    TipoDocumento    = textoDocumento,
                    ComplementoRef1  = string.Empty,
                    Concepto         = String.Format("{0}-{1} {2} {3} {4}",
                                                     tipoMovimiento,
                                                     solicitud.FolioSolicitud,
                                                     solicitudDetalle.Cantidad.ToString("N2"),
                                                     solicitudDetalle.Producto.Descripcion,
                                                     (Math.Round(solicitudDetalle.Cantidad * solicitudDetalle.PrecioPromedio, 2).ToString("C2"))),
                    Sociedad            = organizacion.Sociedad,
                    DescripcionProducto = solicitudDetalle.Producto.Descripcion,
                    Segmento            = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                };
                PolizaInfo polizaSalida = GeneraRegistroPoliza(datos);
                polizasSalidaConsumo.Add(polizaSalida);

                var cuentaSapSale = cuentasAlmacenProductoSalida.FirstOrDefault(
                    cuenta => cuenta.ProductoID == solicitudDetalle.Producto.ProductoId);

                if (cuentaSapSale == null)
                {
                    cuentaSapSale = new ClaseCostoProductoInfo();
                }
                var claveContableAbono = cuentasSap.FirstOrDefault(sap => sap.CuentaSAPID == cuentaSapSale.CuentaSAPID);

                if (claveContableAbono == null)
                {
                    throw new ExcepcionServicio(string.Format("No se encontró configurada la cuenta del producto {0}", solicitudDetalle.Producto.Descripcion));
                }

                datos = new DatosPolizaInfo
                {
                    NumeroReferencia  = numeroReferencia,
                    FechaEntrada      = solicitud.FechaEntrega.HasValue ? solicitud.FechaEntrega.Value : DateTime.MinValue,
                    Folio             = solicitud.FolioSolicitud.ToString(CultureInfo.InvariantCulture),
                    CabezasRecibidas  = string.Empty,
                    NumeroDocumento   = string.Empty,
                    ClaseDocumento    = postFijoRef3,
                    ClaveProveedor    = string.Empty,
                    Importe           = string.Format("{0}", (Math.Round(solicitudDetalle.Cantidad * solicitudDetalle.PrecioPromedio, 2) * -1).ToString("F2")),
                    IndicadorImpuesto = String.Empty,
                    CentroCosto       = string.Empty,
                    Renglon           = Convert.ToString(linea++),
                    Cabezas           = string.Empty,
                    ImporteIva        = "0",
                    Ref3             = ref3.ToString(),
                    Cuenta           = claveContableAbono.CuentaSAP,
                    CodigoRetencion  = string.Empty,
                    TipoRetencion    = string.Empty,
                    ArchivoFolio     = archivoFolio,
                    DescripcionCosto = string.Empty,
                    Division         = organizacion.Division,
                    PesoOrigen       = 0,
                    TipoDocumento    = textoDocumento,
                    ComplementoRef1  = string.Empty,
                    Concepto         = String.Format("{0}-{1} {2} {3} {4}",
                                                     tipoMovimiento,
                                                     solicitud.FolioSolicitud,
                                                     solicitudDetalle.Producto.Descripcion,
                                                     solicitudDetalle.Cantidad.ToString("N2"),
                                                     (Math.Round(solicitudDetalle.Cantidad * solicitudDetalle.PrecioPromedio, 2).ToString("C2"))),
                    Sociedad            = organizacion.Sociedad,
                    DescripcionProducto = solicitudDetalle.Producto.Descripcion,
                    Segmento            = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                };
                polizaSalida = GeneraRegistroPoliza(datos);
                polizasSalidaConsumo.Add(polizaSalida);
            }
            return(polizasSalidaConsumo);
        }
Пример #13
0
        private IList <PolizaInfo> ObtenerPoliza(ContenedorEntradaMateriaPrimaInfo premezcla)
        {
            var polizaPremezcla = new List <PolizaInfo>();

            OrganizacionInfo organizacion =
                ObtenerOrganizacionIVA(premezcla.EntradaProducto.Organizacion.OrganizacionID);

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

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

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

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

            IList <ClaseCostoProductoInfo> clasesCostoProducto =
                ObtenerCostosProducto(premezcla.EntradaProducto.AlmacenMovimiento.Almacen.AlmacenID);

            ProductoInfo         producto;
            PremezclaDetalleInfo premezclaDetalle;
            DatosPolizaInfo      datos;

            int      folio = premezcla.EntradaProducto.Folio;
            DateTime fecha = premezcla.EntradaProducto.Fecha;

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

            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);

            string archivoFolio = ObtenerArchivoFolio(fecha);
            string unidad;

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

            ClaseCostoProductoInfo costoProducto;
            CuentaSAPInfo          cuentaSap;
            PolizaInfo             poliza;
            decimal importe        = 0;
            decimal importeDetalle = 0;

            for (var index = 0; index < premezcla.EntradaProducto.PremezclaInfo.ListaPremezclaDetalleInfos.Count; index++)
            {
                premezclaDetalle = premezcla.EntradaProducto.PremezclaInfo.ListaPremezclaDetalleInfos[index];

                producto = premezclaDetalle.Producto;

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

                costoProducto =
                    clasesCostoProducto.FirstOrDefault(clave => clave.ProductoID == producto.ProductoId);
                if (costoProducto == null)
                {
                    costoProducto = new ClaseCostoProductoInfo();
                }
                cuentaSap =
                    cuentasSap.FirstOrDefault(cuenta => cuenta.CuentaSAPID == costoProducto.CuentaSAPID);
                if (cuentaSap == null)
                {
                    throw new ExcepcionServicio(string.Format("{0} {1}", "NO HAY CONFIGURACION PARA EL PRODUCTO",
                                                              producto.Descripcion));
                }

                importeDetalle = premezclaDetalle.Kilogramos * premezclaDetalle.Lote.PrecioPromedio;
                importe       += importeDetalle;
                renglon++;
                datos = new DatosPolizaInfo
                {
                    NumeroReferencia = numeroReferencia,
                    FechaEntrada     = fecha,
                    Folio            = folio.ToString(),
                    Importe          =
                        string.Format("{0}",
                                      (importeDetalle * -1).
                                      ToString("F2")),
                    IndicadorImpuesto = String.Empty,
                    Renglon           = Convert.ToString(renglon),
                    ImporteIva        = "0",
                    Ref3             = ref3.ToString(),
                    Cuenta           = cuentaSap.CuentaSAP,
                    ArchivoFolio     = archivoFolio,
                    DescripcionCosto = producto.Descripcion,
                    PesoOrigen       = Math.Round(premezclaDetalle.Kilogramos, 2),
                    Division         = organizacion.Division,
                    TipoDocumento    = textoDocumento,
                    ClaseDocumento   = postFijoRef3,
                    Concepto         = String.Format("{0}-{1} {2} {3} {4} ${5} {6}",
                                                     tipoMovimiento,
                                                     folio,
                                                     premezclaDetalle.Kilogramos.ToString("N2"),
                                                     unidad, producto.Descripcion,
                                                     (importeDetalle).ToString("F2"),
                                                     postFijoRef3),
                    Sociedad = organizacion.Sociedad,
                    Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad)
                };
                poliza = GeneraRegistroPoliza(datos);
                polizaPremezcla.Add(poliza);
            }
            producto = premezcla.EntradaProducto.Producto;

            var productoBL = new ProductoBL();

            producto = productoBL.ObtenerPorID(producto);

            unidad =
                unidadesMedicion.Where(clave => clave.UnidadID == producto.UnidadMedicion.UnidadID).Select(
                    uni => uni.ClaveUnidad).FirstOrDefault();
            costoProducto =
                clasesCostoProducto.FirstOrDefault(clave => clave.ProductoID == producto.ProductoId);
            if (costoProducto == null)
            {
                costoProducto = new ClaseCostoProductoInfo();
            }
            cuentaSap = cuentasSap.FirstOrDefault(clave => clave.CuentaSAPID == costoProducto.CuentaSAPID);
            if (cuentaSap == null)
            {
                throw new ExcepcionServicio(string.Format("{0} {1}", "NO HAY CONFIGURACION PARA EL PRODUCTO",
                                                          producto.Descripcion));
            }
            decimal peso = premezcla.EntradaProducto.PremezclaInfo.ListaPremezclaDetalleInfos.Sum(
                pre => Math.Abs(pre.Kilogramos));

            renglon++;
            datos = new DatosPolizaInfo
            {
                NumeroReferencia = numeroReferencia,
                FechaEntrada     = fecha,
                Folio            = folio.ToString(),
                Importe          =
                    string.Format("{0}",
                                  (importe).ToString("F2")),
                IndicadorImpuesto = String.Empty,
                Renglon           = Convert.ToString(renglon),
                ImporteIva        = "0",
                Ref3             = ref3.ToString(),
                Cuenta           = cuentaSap.CuentaSAP,
                ArchivoFolio     = archivoFolio,
                DescripcionCosto = premezcla.EntradaProducto.Producto.Descripcion,
                PesoOrigen       =
                    Math.Round(peso, 2),
                Division       = organizacion.Division,
                TipoDocumento  = textoDocumento,
                ClaseDocumento = postFijoRef3,
                Concepto       = String.Format("{0}-{1} {2} {3} {4} ${5} {6}",
                                               tipoMovimiento,
                                               folio,
                                               (peso).ToString("N2"),
                                               unidad, premezcla.EntradaProducto.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);
        }
Пример #14
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);
        }
        private IList <PolizaInfo> ObtenerPoliza(InterfaceSalidaTraspasoInfo interfaceSalidaTraspaso, List <InterfaceSalidaTraspasoCostoInfo> interfaceSalidaTraspasoCosto)
        {
            var polizasSalidaTraspaso = new List <PolizaInfo>();

            IList <CuentaSAPInfo> cuentasSap = ObtenerCuentasSAP();

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

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

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

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

            long folioTraspaso = interfaceSalidaTraspaso.FolioTraspaso;

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

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

            List <InterfaceSalidaTraspasoCostoInfo> animalesPorLote;
            int loteID;

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

            DateTime fechaEnvio = interfaceSalidaTraspaso.FechaEnvio;

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

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

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

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

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

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

                                datos = new DatosPolizaInfo
                                {
                                    NumeroReferencia = numeroDocumento,
                                    FechaEntrada     = fechaEnvio,
                                    Folio            = folioTraspaso.ToString(),
                                    CabezasRecibidas = cabezas.ToString(),
                                    NumeroDocumento  = folioTraspaso.ToString(),
                                    ClaseDocumento   = postFijoRef3,
                                    Importe          =
                                        string.Format("{0}", Cancelacion ? animalCosto.Importe.ToString("F2")
                                                                         : (animalCosto.Importe * -1).ToString("F2")),
                                    IndicadorImpuesto = String.Empty,
                                    Renglon           = Convert.ToString(renglon++),
                                    Cabezas           = Convert.ToString(cabezas),
                                    ImporteIva        = "0",
                                    Ref3             = ref3.ToString(),
                                    ArchivoFolio     = archivoFolio.ToString(),
                                    DescripcionCosto = cuentaSapDestino.Descripcion,
                                    Cuenta           = cuentaSapDestino.CuentaSAP,
                                    PesoOrigen       = pesoOrigen,
                                    Division         = divisionOrigen,
                                    ComplementoRef1  = COMPLEMENTO_REF1,
                                    TipoDocumento    = textoDocumento,
                                    Concepto         =
                                        String.Format("{0}-{1} ,{2} {3}, {4} {5}", prefijoConcepto,
                                                      folioTraspaso,
                                                      cabezas, DESCRIPCION_MOVIMIENTO,
                                                      pesoOrigen.ToString("N0"), UNIDAD_MOVIMIENTO),
                                    Sociedad = organizacionDestino.Sociedad,
                                    Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacionDestino.Sociedad),
                                };
                                polizaSalida = GeneraRegistroPoliza(datos);
                                polizasSalidaTraspaso.Add(polizaSalida);
                            }
                        }
                    }
                }
            }
            return(polizasSalidaTraspaso);
        }
Пример #16
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);
        }
Пример #17
0
        private IList <PolizaInfo> ObtenerPoliza(ProduccionFormulaInfo produccionFormula)
        {
            var polizasProduccionAlimento = new List <PolizaInfo>();

            IList <ClaseCostoProductoInfo> cuentasAlmacenProductoSalida =
                ObtenerCostosProducto(produccionFormula.Almacen.AlmacenID);

            if (cuentasAlmacenProductoSalida == null || !cuentasAlmacenProductoSalida.Any())
            {
                throw new ExcepcionServicio("No se encuentran cuentas configuradas, para productos del almacén  de planta de alimentos");
            }
            IList <CuentaSAPInfo> cuentasSap = ObtenerCuentasSAP();

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

            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);

            var almacenMovimientoBL = new AlmacenMovimientoBL();

            AlmacenMovimientoInfo almacenMovimiento =
                almacenMovimientoBL.ObtenerPorId(produccionFormula.AlmacenMovimientoEntradaID);

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

            DateTime fecha        = produccionFormula.FechaProduccion;
            string   archivoFolio = ObtenerArchivoFolio(fecha);

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

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

            foreach (var produccionDetalle in produccionFormula.ProduccionFormulaDetalle)
            {
                CuentaSAPInfo claveContableCargo;
                var           cuentaSapEntrada = cuentasAlmacenProductoSalida.FirstOrDefault(
                    cuenta => cuenta.ProductoID == produccionFormula.Formula.Producto.ProductoId);

                if (cuentaSapEntrada == null)
                {
                    cuentaSapEntrada = new ClaseCostoProductoInfo();
                }

                claveContableCargo = cuentasSap.FirstOrDefault(sap => sap.CuentaSAPID == cuentaSapEntrada.CuentaSAPID);

                if (claveContableCargo == null)
                {
                    throw new ExcepcionServicio(string.Format("No se encontró configurada la cuenta del producto {0}", produccionFormula.Formula.Producto.ProductoDescripcion));
                }

                var datos = new DatosPolizaInfo
                {
                    NumeroReferencia = numeroReferencia,
                    FechaEntrada     = produccionFormula.FechaProduccion,
                    Folio            = numeroReferencia,
                    CabezasRecibidas = string.Empty,
                    NumeroDocumento  = string.Empty,
                    ClaseDocumento   = postFijoRef3,
                    ClaveProveedor   = string.Empty,
                    Importe
                        = string.Format("{0}", Math.Round(produccionDetalle.CantidadProducto * produccionDetalle.PrecioPromedio, 2).ToString("F2")),
                    IndicadorImpuesto = String.Empty,
                    CentroCosto       = string.Empty,
                    Renglon           = Convert.ToString(linea++),
                    Cabezas           = string.Empty,
                    ImporteIva        = "0",
                    Ref3             = ref3.ToString(),
                    Cuenta           = claveContableCargo.CuentaSAP,
                    CodigoRetencion  = string.Empty,
                    Division         = organizacion.Division,
                    TipoRetencion    = string.Empty,
                    ArchivoFolio     = archivoFolio,
                    DescripcionCosto = string.Empty,
                    PesoOrigen       = 0,
                    TipoDocumento    = textoDocumento,
                    ComplementoRef1  = string.Empty,
                    Concepto         = String.Format("{0}-{1} {2} {3} {4}",
                                                     tipoMovimiento,
                                                     numeroReferencia,
                                                     produccionDetalle.Producto.ProductoDescripcion,
                                                     (string.Format("{0} {1}.", produccionDetalle.CantidadProducto.ToString("N2"), produccionDetalle.Producto.UnidadMedicion.ClaveUnidad)),
                                                     produccionDetalle.PrecioPromedio.ToString("C2")),
                    Sociedad            = organizacion.Sociedad,
                    DescripcionProducto = produccionDetalle.Producto.ProductoDescripcion,
                    Segmento            = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                };
                PolizaInfo polizaSalida = GeneraRegistroPoliza(datos);
                polizasProduccionAlimento.Add(polizaSalida);

                var cuentaSapSale = cuentasAlmacenProductoSalida.FirstOrDefault(
                    cuenta => cuenta.ProductoID == produccionDetalle.Producto.ProductoId);

                if (cuentaSapSale == null)
                {
                    cuentaSapSale = new ClaseCostoProductoInfo();
                }
                var claveContableAbono = cuentasSap.FirstOrDefault(sap => sap.CuentaSAPID == cuentaSapSale.CuentaSAPID);

                if (claveContableAbono == null)
                {
                    throw new ExcepcionServicio(string.Format("No se encontró configurada la cuenta del producto {0}", produccionDetalle.Producto.ProductoDescripcion));
                }

                datos = new DatosPolizaInfo
                {
                    NumeroReferencia  = numeroReferencia,
                    FechaEntrada      = produccionFormula.FechaProduccion,
                    Folio             = numeroReferencia,
                    CabezasRecibidas  = string.Empty,
                    NumeroDocumento   = string.Empty,
                    ClaseDocumento    = postFijoRef3,
                    ClaveProveedor    = string.Empty,
                    Importe           = string.Format("{0}", (Math.Round(produccionDetalle.CantidadProducto * produccionDetalle.PrecioPromedio, 2) * -1).ToString("F2")),
                    IndicadorImpuesto = String.Empty,
                    CentroCosto       = string.Empty,
                    Renglon           = Convert.ToString(linea++),
                    Cabezas           = string.Empty,
                    ImporteIva        = "0",
                    Ref3             = ref3.ToString(),
                    Cuenta           = claveContableAbono.CuentaSAP,
                    CodigoRetencion  = string.Empty,
                    TipoRetencion    = string.Empty,
                    ArchivoFolio     = archivoFolio,
                    DescripcionCosto = string.Empty,
                    Division         = organizacion.Division,
                    PesoOrigen       = 0,
                    TipoDocumento    = textoDocumento,
                    ComplementoRef1  = string.Empty,
                    Concepto         = String.Format("{0}-{1} {2} {3} {4}",
                                                     tipoMovimiento,
                                                     numeroReferencia,
                                                     produccionDetalle.Producto.ProductoDescripcion,
                                                     (string.Format("{0} {1}.", produccionDetalle.CantidadProducto.ToString("N2"), produccionDetalle.Producto.UnidadMedicion.ClaveUnidad)),
                                                     produccionDetalle.PrecioPromedio.ToString("C2")),
                    Sociedad            = organizacion.Sociedad,
                    DescripcionProducto = produccionDetalle.Producto.ProductoDescripcion,
                    Segmento            = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                };
                polizaSalida = GeneraRegistroPoliza(datos);
                polizasProduccionAlimento.Add(polizaSalida);
            }
            return(polizasProduccionAlimento);
        }
Пример #18
0
        private IList <PolizaInfo> ObtenerPoliza(List <AnimalCostoInfo> costosAnimales)
        {
            var polizasSalidaMuerte = new List <PolizaInfo>();

            var costosAgrupados =
                costosAnimales.Where(imp => imp.Importe > 0).GroupBy(costo => new { costo.CostoID, costo.AnimalID })
                .Select(animal => new
            {
                Importe = animal.Sum(imp => imp.Importe),
                animal.Key.CostoID,
                animal.Key.AnimalID,
                Arete           = animal.Select(ani => ani.Arete).FirstOrDefault(),
                FolioReferencia =
                    animal.Select(folio => folio.FolioReferencia).FirstOrDefault(),
                FechaCosto     = animal.Select(fecha => fecha.FechaCosto).FirstOrDefault(),
                OrganizacionID = animal.Select(org => org.OrganizacionID).FirstOrDefault()
            }).ToList();

            if (costosAgrupados != null && costosAgrupados.Any())
            {
                TipoPolizaInfo tipoPoliza =
                    TiposPoliza.FirstOrDefault(clave => clave.TipoPolizaID == TipoPoliza.SalidaMuerte.GetHashCode());
                if (tipoPoliza == null)
                {
                    throw new ExcepcionServicio(string.Format("{0} {1}", "EL TIPO DE POLIZA",
                                                              TipoPoliza.SalidaMuerte));
                }

                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 = ObtenerNumeroReferencia;

                if (costos == null)
                {
                    costos = ObtenerCostos();
                }

                List <AnimalInfo> animales = costosAgrupados.Select(ani => new AnimalInfo
                {
                    AnimalID = ani.AnimalID
                }).ToList();
                List <AnimalMovimientoInfo> animalesMovimiento = ObtenerUltimoMovimiento(animales);
                for (var indexCostos = 0; indexCostos < costosAgrupados.Count; indexCostos++)
                {
                    var       costoAnimal = costosAgrupados[indexCostos];
                    CostoInfo costo       =
                        costos.FirstOrDefault(
                            tipo =>
                            tipo.CostoID == costoAnimal.CostoID);
                    if (costo == null)
                    {
                        costo = new CostoInfo();
                    }

                    string numeroReferencia = costoAnimal.Arete;

                    OrganizacionInfo organizacion = ObtenerOrganizacionIVA(costoAnimal.OrganizacionID);
                    if (organizacion == null)
                    {
                        organizacion = new OrganizacionInfo
                        {
                            TipoOrganizacion = new TipoOrganizacionInfo()
                        };
                    }
                    ClaveContableInfo claveContableAbono = ObtenerCuentaInventario(costo, organizacion.OrganizacionID,
                                                                                   organizacion.TipoOrganizacion.TipoOrganizacionID);
                    if (claveContableAbono == null)
                    {
                        throw new ExcepcionServicio(string.Format("{0} {1}", "NO EXISTE CONFIGURACION PARA EL COSTO",
                                                                  costo.Descripcion));
                    }
                    ClaveContableInfo claveContableCargo = ObtenerCuentaInventario(costo, organizacion.OrganizacionID,
                                                                                   TipoPoliza.SalidaMuerte);
                    if (claveContableCargo == null)
                    {
                        throw new ExcepcionServicio(string.Format("{0} {1}", "NO EXISTE CONFIGURACION PARA EL COSTO",
                                                                  costo.Descripcion));
                    }
                    ParametroOrganizacionInfo parametroCentroCosto =
                        ObtenerParametroOrganizacionPorClave(organizacion.OrganizacionID,
                                                             ParametrosEnum.CTACENTROCOSTOENG.ToString());
                    if (parametroCentroCosto == null)
                    {
                        throw new ExcepcionServicio(string.Format("{0}", "CENTRO DE COSTO NO CONFIGURADO"));
                    }
                    int peso =
                        animalesMovimiento.Where(kilos => kilos.AnimalID == costoAnimal.AnimalID
                                                 &&
                                                 kilos.TipoMovimientoID == TipoMovimiento.Muerte.GetHashCode())
                        .Select(proyeccion => proyeccion.Peso).FirstOrDefault();
                    DateTime fecha =
                        animalesMovimiento.Where(kilos => kilos.AnimalID == costoAnimal.AnimalID
                                                 &&
                                                 kilos.TipoMovimientoID == TipoMovimiento.Muerte.GetHashCode())
                        .Select(proyeccion => proyeccion.FechaMovimiento).FirstOrDefault();
                    if (fecha != null && fecha > default(DateTime))
                    {
                        string archivoFolio = ObtenerArchivoFolio(fecha);
                        var    datos        = new DatosPolizaInfo
                        {
                            NumeroReferencia = numeroReferencia,
                            FechaEntrada     = fecha,
                            Folio            = numeroReferencia,
                            Importe          = string.Format("{0}", costoAnimal.Importe.ToString("F2")),
                            Renglon          = Convert.ToString(linea++),
                            ImporteIva       = "0",
                            Ref3             = ref3.ToString(),
                            Cuenta           = claveContableCargo.Valor,
                            Division         = organizacion.Division,
                            ArchivoFolio     = archivoFolio,
                            CentroCosto      =
                                claveContableCargo.Valor.StartsWith(PrefijoCuentaCentroCosto) ||
                                claveContableCargo.Valor.StartsWith(PrefijoCuentaCentroGasto)
                                    ? parametroCentroCosto.Valor
                                    : string.Empty,
                            PesoOrigen      = peso,
                            TipoDocumento   = textoDocumento,
                            ClaseDocumento  = postFijoRef3,
                            ComplementoRef1 = string.Empty,
                            Concepto        = String.Format("{0}-{1} {2} kgs",
                                                            tipoMovimiento,
                                                            numeroReferencia,
                                                            peso),
                            Sociedad = organizacion.Sociedad,
                            Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                        };
                        PolizaInfo polizaSalida = GeneraRegistroPoliza(datos);
                        polizasSalidaMuerte.Add(polizaSalida);

                        datos = new DatosPolizaInfo
                        {
                            NumeroReferencia = numeroReferencia,
                            FechaEntrada     = fecha,
                            Folio            = numeroReferencia,
                            Importe          = string.Format("{0}", (costoAnimal.Importe * -1).ToString("F2")),
                            Renglon          = Convert.ToString(linea++),
                            ImporteIva       = "0",
                            Ref3             = ref3.ToString(),
                            Cuenta           = claveContableAbono.Valor,
                            ArchivoFolio     = archivoFolio,
                            Division         = organizacion.Division,
                            PesoOrigen       = peso,
                            TipoDocumento    = textoDocumento,
                            ClaseDocumento   = postFijoRef3,
                            Concepto         = String.Format("{0}-{1} {2} kgs",
                                                             tipoMovimiento,
                                                             numeroReferencia,
                                                             peso),
                            Sociedad = organizacion.Sociedad,
                            Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                        };
                        polizaSalida = GeneraRegistroPoliza(datos);
                        polizasSalidaMuerte.Add(polizaSalida);
                    }
                }
            }
            return(polizasSalidaMuerte);
        }
Пример #19
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);
        }