コード例 #1
0
 /// <summary>
 /// Actualiza el estatus para indicar si ya se genero ó no poliza
 /// </summary>
 /// <param name="movimientos"></param>
 /// <returns></returns>
 public void ActualizarGeneracionPoliza(List <ContenedorAlmacenMovimientoCierreDia> movimientos)
 {
     try
     {
         Logger.Info();
         var almacenMovimientoDal = new AlmacenMovimientoBL();
         almacenMovimientoDal.ActualizarGeneracionPoliza(movimientos);
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
コード例 #2
0
 /// <summary>
 /// Guarda el Cierre de Dia
 /// </summary>
 /// <param name="almacenID"></param>
 public bool ValidarEjecucionCierreDia(int almacenID)
 {
     try
     {
         Logger.Info();
         var almacenMovimientoBl = new AlmacenMovimientoBL();
         return(almacenMovimientoBl.ValidarEjecucionCierreDia(almacenID));
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
コード例 #3
0
 /// <summary>
 /// Actualiza el estatus de un movimiento
 /// </summary>
 /// <param name="almacenMovimientoInfo"></param>
 public void ActualizarEstatus(AlmacenMovimientoInfo almacenMovimientoInfo)
 {
     try
     {
         Logger.Info();
         var almacenMovimientoBl = new AlmacenMovimientoBL();
         almacenMovimientoBl.ActualizarEstatus(almacenMovimientoInfo);
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
コード例 #4
0
 /// <summary>
 /// Guarda el Cierre de Dia
 /// </summary>
 /// <param name="cierreDiaInventarioPA"></param>
 public void GuardarAutorizarCierreDiaInventarioPA(CierreDiaInventarioPAInfo cierreDiaInventarioPA)
 {
     try
     {
         Logger.Info();
         var almacenMovimientoBl = new AlmacenMovimientoBL();
         almacenMovimientoBl.GuardarAutorizarCierreDiaInventarioPA(cierreDiaInventarioPA);
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
コード例 #5
0
 /// <summary>
 /// Obtiene los movimientos pendientes pro autorizar del cierre de dia de inventario de planta de alimentos
 /// </summary>
 /// <returns></returns>
 public List <MovimientosAutorizarCierreDiaPAModel> ObtenerMovimientosPendientesAutorizar(
     FiltrosAutorizarCierreDiaInventarioPA filtrosAutorizarCierreDia)
 {
     try
     {
         Logger.Info();
         var almacenMovimientoBl = new AlmacenMovimientoBL();
         return(almacenMovimientoBl.ObtenerMovimientosPendientesAutorizar(filtrosAutorizarCierreDia));
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
コード例 #6
0
        /// <summary>
        /// Obtiene los movimientos de inventario para generar
        /// poliza de consumo de producto
        /// </summary>
        /// <param name="almacenID"></param>
        /// <param name="organizacionID"></param>
        /// <param name="fecha"> </param>
        /// <returns></returns>
        public List <ContenedorAlmacenMovimientoCierreDia> ObtenerMovimientosInventario(int almacenID, int organizacionID, DateTime fecha)
        {
            List <ContenedorAlmacenMovimientoCierreDia> result;

            try
            {
                Logger.Info();
                var almacenMovimientoDal = new AlmacenMovimientoBL();
                result = almacenMovimientoDal.ObtenerMovimientosInventario(almacenID, organizacionID, fecha);
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(result);
        }
コード例 #7
0
 /// <summary>
 /// Guarda el Cierre de Dia
 /// </summary>
 /// <param name="cierreDiaInventarioPA"></param>
 public IList <ResultadoPolizaModel> GuardarCierreDiaInventarioPA(CierreDiaInventarioPAInfo cierreDiaInventarioPA)
 {
     try
     {
         Logger.Info();
         var almacenMovimientoBl = new AlmacenMovimientoBL();
         return(almacenMovimientoBl.GuardarCierreDiaInventarioPA(cierreDiaInventarioPA));
     }
     catch (ExcepcionServicio)
     {
         throw;
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
コード例 #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
        public override MemoryStream ImprimePoliza(object datosPoliza, IList <PolizaInfo> polizas)
        {
            try
            {
                var ajustesDeInventario = datosPoliza as List <PolizaEntradaSalidaPorAjusteModel>;
                PolizaModel     = new PolizaModel();
                polizaImpresion = new PolizaImpresion <PolizaModel>(PolizaModel, TipoPoliza.EntradaAjuste);

                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();
                }
                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()
                    };
                }
                PolizaModel.Encabezados = new List <PolizaEncabezadoModel>
                {
                    new PolizaEncabezadoModel
                    {
                        Descripcion    = organizacion.Descripcion,
                        Desplazamiento = 0
                    },
                };
                polizaImpresion.GeneraCabecero(new[] { "100" }, "NombreGanadera");
                PolizaModel.Encabezados = new List <PolizaEncabezadoModel>
                {
                    new PolizaEncabezadoModel
                    {
                        Descripcion    = "Entrada De Almacen por Ajuste",
                        Desplazamiento = 0
                    },
                };
                polizaImpresion.GeneraCabecero(new[] { "100" }, "NombreGanadera");
                PolizaModel.Encabezados = new List <PolizaEncabezadoModel>
                {
                    new PolizaEncabezadoModel
                    {
                        Descripcion =
                            string.Format("{0} {1}", "FECHA:",
                                          almacenMovimiento.FechaMovimiento.ToShortDateString()),
                        Desplazamiento = 0
                    },
                    new PolizaEncabezadoModel
                    {
                        Descripcion =
                            string.Format("{0} {1}", "FOLIO No.",
                                          almacenMovimiento.FolioMovimiento),
                        Desplazamiento = 0
                    },
                };
                polizaImpresion.GeneraCabecero(new[] { "50", "50" }, "Folio");

                GeneraLinea(2);
                polizaImpresion.GeneraCabecero(new[] { "100" }, "Folio");

                GenerarLineasEncabezadoDetalleEntrada();
                GenerarLineasDetalle(ajustesDeInventario);

                polizaImpresion.GenerarDetalles("Detalle");
                polizaImpresion.GenerarLineaEnBlanco("Detalle", 11);
                GeneraLineaTotalDetalle(ajustesDeInventario);
                GeneraLinea(11);
                polizaImpresion.GeneraCabecero(new[] { "100" }, "Detalle");

                GeneraLineaObservaciones(ajustesDeInventario);
                GeneraLinea(2);
                polizaImpresion.GeneraCabecero(new[] { "100" }, "Observaciones");

                polizaImpresion.GenerarLineaEnBlanco();

                GeneraLineaEncabezadoRegistroContable(almacenMovimiento.FolioMovimiento);
                polizaImpresion.GeneraCabecero(new[] { "30", "60", "65", "25", "25" }, "RegistroContable");

                GeneraLineaSubEncabezadoRegistroContable(true, "Código", "Debe", "Haber");
                polizaImpresion.GeneraCabecero(new[] { "30", "60", "65", "25", "25" }, "RegistroContable");

                GeneraLinea(5);
                polizaImpresion.GeneraCabecero(new[] { "100" }, "RegistroContable");

                IList <PolizaInfo> cargos;
                IList <PolizaInfo> abonos;
                GeneraLineaRegistroContable(polizas, out cargos, out abonos);
                polizaImpresion.GenerarRegistroContable("RegistroContable");

                GeneraLinea(5);
                polizaImpresion.GeneraCabecero(new[] { "100" }, "RegistroContable");
                GenerarLineaSumaRegistroContable(polizas, "Total=====>");
                polizaImpresion.GeneraCabecero(new[] { "30", "60", "65", "25", "25" }, "RegistroContable");

                GeneraLinea(5);
                polizaImpresion.GeneraCabecero(new[] { "100" }, "RegistroContable");

                return(polizaImpresion.GenerarArchivo());
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw;
            }
        }
コード例 #10
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);
        }
コード例 #11
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);
        }
コード例 #12
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);
        }
コード例 #13
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);
        }