예제 #1
0
        /// <summary>
        /// Metodo que inicializa las polizas con datos generales apra cada linea
        /// </summary>
        /// <param name="input">SalidaGanadoEnTransitoInfo</param>
        /// <param name="ref3">StringBuilder</param>
        /// <param name="archivoFolio">StringBuilder</param>
        /// <param name="noLinea">Numero de linea</param>
        /// <returns>linea de la poliza inicializada</returns>
        private PolizaInfo InicializarPolizaInfo(SalidaGanadoEnTransitoInfo input, StringBuilder ref3, StringBuilder archivoFolio, int noLinea)
        {
            var lista = new PolizaInfo
            {
                FechaCreacion     = DateTime.Now,
                OrganizacionID    = input.OrganizacionID,
                UsuarioCreacionID = input.UsuarioCreacionID,
                NumeroReferencia  = input.Folio.ToString(CultureInfo.InvariantCulture),
                FechaDocumento    = input.Fecha.ToString("yyyyMMdd"),
                ClaseDocumento    = datos.PostFijoRef3,
                Sociedad          = datos.Sociedad,
                Moneda            = MONEDA,
                TipoCambio        = TIPOCAMBIO,
                TextoDocumento    = datos.TipoPolizaDescripcion,
                Mes               = input.FechaCreacion.Month.ToString(CultureInfo.InvariantCulture),
                TextoAsignado     = input.Folio.ToString(CultureInfo.InvariantCulture),
                Concepto          = string.Format("VT-{0} {1} CABEZAS {2} kgs", input.Folio, input.NumCabezas, input.Kilos),
                Division          = datos.Division,
                BusAct            = BUSACT,
                Periodo           = input.FechaCreacion.Year.ToString(CultureInfo.InvariantCulture),
                NumeroLinea       = noLinea.ToString(CultureInfo.InvariantCulture),
                Referencia1       = input.NumCabezas.ToString(CultureInfo.InvariantCulture),
                Referencia3       = ref3.ToString(),
                FechaImpuesto     = input.Fecha.ToString("yyyyMMdd"),
                ImpuestoRetencion = 0,
                ImpuestoIva       = 0.ToString(CultureInfo.InvariantCulture),
                ArchivoFolio      = archivoFolio.ToString(),
                Segmento          = "S" + datos.Sociedad,
                FechaContabilidad = input.Fecha.ToString("yyyyMMdd"),
            };

            return(lista);
        }
        /// <summary>
        /// Genera un nodo generico de una salida de ganado en transito por muerte
        /// </summary>
        /// <param name="input">Salida de ganado en transito al cual se le generara el nodo para la poliza</param>
        /// <param name="noLinea">Numero de linea correspondiente al nodo</param>
        /// <param name="ref3"></param>
        /// <param name="archivoFolio">Folio del archivo de la poliza de salida de ganado en transito</param>
        /// <returns>Regresa un nodo de poliza de salida de ganado en transito parcialmente inicializado</returns>
        PolizaInfo GenerarNodoPlantillaPolizaMuerteTransito(SalidaGanadoEnTransitoInfo input, int noLinea, string ref3, string archivoFolio)
        {
            try
            {
                var result = new PolizaInfo
                {
                    OrganizacionID    = input.OrganizacionID,
                    UsuarioCreacionID = input.UsuarioCreacionID,
                    NumeroReferencia  = input.Folio.ToString(CultureInfo.InvariantCulture),
                    FechaCreacion     = DateTime.Now,
                    FechaDocumento    = input.Fecha.ToString("yyyyMMdd"),
                    FechaContabilidad = input.Fecha.ToString("yyyyMMdd"),
                    ClaseDocumento    = datos.PostFijoRef3,
                    Sociedad          = datos.Sociedad,
                    Moneda            = MONEDA,
                    TipoCambio        = TIPOCAMBIO,
                    TextoDocumento    = datos.TipoPolizaDescripcion,
                    Mes               = input.FechaCreacion.Month.ToString(CultureInfo.InvariantCulture),
                    TextoAsignado     = input.Folio.ToString(CultureInfo.InvariantCulture),
                    Concepto          = string.Format("MT-{0} {1} CABEZAS {2} kgs", input.Folio, input.NumCabezas, input.Kilos),
                    Division          = datos.Division,
                    BusAct            = BUSACT,
                    Periodo           = input.FechaCreacion.Year.ToString(CultureInfo.InvariantCulture),
                    NumeroLinea       = noLinea.ToString(CultureInfo.InvariantCulture),
                    Referencia1       = input.NumCabezas.ToString(CultureInfo.InvariantCulture),
                    Referencia3       = ref3,
                    FechaImpuesto     = input.Fecha.ToString("yyyyMMdd"),
                    ImpuestoRetencion = 0,
                    ImpuestoIva       = 0.ToString(CultureInfo.InvariantCulture),
                    ArchivoFolio      = archivoFolio,
                    Segmento          = "S" + datos.Sociedad
                };

                return(result);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
예제 #3
0
        /// <summary>
        /// Obtiene un StackPanel que para mostrar las
        /// cuentas
        /// </summary>
        /// <param name="indexFormularios"></param>
        /// <param name="poliza"></param>
        /// <param name="tiposPoliza"> </param>
        /// <returns></returns>
        private System.Windows.Controls.StackPanel ObtenerPanelItem(int indexFormularios, PolizaInfo poliza, IList <TipoPolizaInfo> tiposPoliza)
        {
            Brush colorItem;

            if (indexFormularios % 2 == 0)
            {
                colorItem = new SolidColorBrush(Colors.LavenderBlush);
            }
            else
            {
                colorItem = new SolidColorBrush(Colors.White);
            }

            var grdDetalles = new System.Windows.Controls.Grid();

            grdDetalles.SetValue(System.Windows.Controls.Grid.BackgroundProperty, colorItem);
            var columnaDescripcion = new System.Windows.Controls.ColumnDefinition {
                Width = new GridLength(300)
            };
            var columnaLectura = new System.Windows.Controls.ColumnDefinition {
                Width = new GridLength(435)
            };
            var columnaEscritura = new System.Windows.Controls.ColumnDefinition {
                Width = new GridLength(50)
            };

            grdDetalles.ColumnDefinitions.Add(columnaDescripcion);
            grdDetalles.ColumnDefinitions.Add(columnaLectura);
            grdDetalles.ColumnDefinitions.Add(columnaEscritura);

            var row = new System.Windows.Controls.RowDefinition {
                Height = new GridLength(20)
            };

            grdDetalles.RowDefinitions.Add(row);

            TipoPolizaInfo tipoPoliza = tiposPoliza.FirstOrDefault(x => x.TipoPolizaID == poliza.TipoPolizaID);

            if (tipoPoliza == null)
            {
                tipoPoliza = new TipoPolizaInfo();
            }

            var lbl = new System.Windows.Controls.Label
            {
                Content =
                    string.Format("{0}\t\t{1}\t{2}\t{3}", poliza.FechaDocumento, tipoPoliza.Descripcion,
                                  poliza.Concepto,
                                  Math.Abs(Convert.ToDecimal(poliza.Importe)).ToString("C2"))
            };

            System.Windows.Controls.Grid.SetColumn(lbl, 0);
            System.Windows.Controls.Grid.SetColumnSpan(lbl, 2);
            System.Windows.Controls.Grid.SetRow(lbl, 0);

            var chkGenera = new System.Windows.Controls.CheckBox
            {
                HorizontalAlignment = HorizontalAlignment.Right,
            };
            var bindGenera = new Binding("Generar")
            {
                Mode = BindingMode.TwoWay,
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                Source = poliza,
            };

            chkGenera.SetBinding(System.Windows.Controls.CheckBox.IsCheckedProperty, bindGenera);

            System.Windows.Controls.Grid.SetColumn(chkGenera, 2);
            System.Windows.Controls.Grid.SetRow(chkGenera, 0);

            grdDetalles.Children.Add(lbl);
            grdDetalles.Children.Add(chkGenera);

            var stack = new System.Windows.Controls.StackPanel
            {
                HorizontalAlignment = HorizontalAlignment.Center,
                Width = 1050,
            };

            stack.Children.Add(grdDetalles);

            return(stack);
        }
예제 #4
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);
        }
예제 #5
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);
        }
예제 #6
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);
        }
예제 #7
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);
        }
        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);
        }
예제 #9
0
        /// <summary>
        /// Genera la estructura de la poliza de la 300
        /// </summary>
        /// <param name="polizaSacrificioModel"></param>
        /// <param name="cuentasSap"></param>
        /// <param name="proveedores"></param>
        /// <param name="parametroGeneral"></param>
        /// <param name="organizacion"></param>
        /// <param name="textoDocumento"></param>
        /// <param name="tipoMovimiento"></param>
        /// <param name="postFijoRef3"></param>
        /// <returns></returns>
        private List <PolizaInfo> ObtenerPoliza300(List <PolizaSacrificioModel> datosPoliza
                                                   , IList <CuentaSAPInfo> cuentasSap
                                                   , IList <ProveedorInfo> proveedores
                                                   , ParametroGeneralInfo parametroGeneral
                                                   , OrganizacionInfo organizacion
                                                   , string textoDocumento, string tipoMovimiento
                                                   , string postFijoRef3)
        {
            var     polizasSacrificio = new List <PolizaInfo>();
            decimal importe           = 0;
            int     linea             = 0;

            var sbRef3 = new StringBuilder();

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

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

            Thread.Sleep(1000);

            PolizaSacrificioModel polizaSacrificioModel = new PolizaSacrificioModel();

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


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

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


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

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

                ProveedorInfo proveedor = proveedores.FirstOrDefault(codigo => codigo.CodigoSAP.Equals(parametroGeneral.Valor));
                if (proveedor == null)
                {
                    throw new ExcepcionServicio(string.Format("EL PROVEEDOR CON CODIGO {0} SE ENCUENTRA INACTIVO",
                                                              parametroGeneral.Valor));
                }
                datos = new DatosPolizaInfo
                {
                    NumeroReferencia = numeroReferencia,
                    FechaEntrada     = polizaSacrificioModel.Fecha,
                    Folio            = polizaSacrificioModel.Folio.ToString(CultureInfo.InvariantCulture),
                    ClaseDocumento   = postFijoRef3,
                    Importe          =
                        string.Format("{0}", Cancelacion ? (importe).ToString("F2")
                                                         : (importe * -1).ToString("F2")),
                    IndicadorImpuesto = String.Empty,
                    Renglon           = Convert.ToString(++linea),
                    Ref3             = sbRef3.ToString(),
                    ImporteIva       = "0",
                    ClaveProveedor   = proveedor.CodigoSAP,
                    DescripcionCosto = proveedor.Descripcion,
                    Division         = organizacion.Division,
                    ArchivoFolio     = sbArchivo.ToString(),
                    PesoOrigen       = polizaSacrificioModel.Peso,
                    TipoDocumento    = textoDocumento,
                    Concepto         = String.Format("{0}-{1} {2} {3} CANALES {4} Fecha: {5}",
                                                     polizaSacrificioModel.Serie, polizaSacrificioModel.Folio,
                                                     tipoMovimiento
                                                     , polizaSacrificioModel.Canales
                                                     , polizaSacrificioModel.Peso
                                                     , polizaSacrificioModel.Fecha.ToString("yyyyMMdd")),
                    Sociedad = organizacion.Sociedad,
                    ArchivoEnviadoServidor = 1,
                    Segmento = "S300",
                };
                polizaSacrificio = GeneraRegistroPoliza(datos);
                polizasSacrificio.Add(polizaSacrificio);
            }
            return(polizasSacrificio);
        }
예제 #10
0
        /// <summary>
        /// Genera la estructura de la poliza de la 212
        /// </summary>
        /// <param name="polizaSacrificioModel"></param>
        /// <param name="cuentasSap"></param>
        /// <param name="proveedores"></param>
        /// <param name="parametroGeneral"></param>
        /// <param name="organizacion"></param>
        /// <param name="textoDocumento"></param>
        /// <param name="tipoMovimiento"></param>
        /// <param name="postFijoRef3"></param>
        /// <param name="parametroOrganizacion"> </param>
        /// <returns></returns>
        private List <PolizaInfo> ObtenerPoliza212(List <PolizaSacrificioModel> datosPoliza
                                                   , IList <CuentaSAPInfo> cuentasSap
                                                   , IList <ProveedorInfo> proveedores
                                                   , ParametroGeneralInfo parametroGeneral
                                                   , OrganizacionInfo organizacion
                                                   , string textoDocumento, string tipoMovimiento
                                                   , string postFijoRef3, ParametroOrganizacionInfo parametroOrganizacion)
        {
            var             polizasSacrificio = new List <PolizaInfo>();
            DatosPolizaInfo datoCliente;
            bool            datoClienteRegistrado = false;
            int             linea   = 0;
            int             canales = 0;
            decimal         peso    = 0;
            PolizaInfo      polizaSacrificioCliente = new PolizaInfo();


            var sbRef3 = new StringBuilder();

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

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

            Thread.Sleep(1000);

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

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

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

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

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

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

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

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

            return(polizasSacrificio);
        }
예제 #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);
        }
        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);
        }
예제 #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);
        }
예제 #14
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);
        }
예제 #15
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);
        }