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(PolizaConsumoAlimentoModel contenedor) { var polizasConsumo = new List <PolizaInfo>(); TipoPolizaInfo tipoPoliza = TiposPoliza.FirstOrDefault(clave => clave.TipoPolizaID == TipoPoliza.ConsumoAlimento.GetHashCode()); if (tipoPoliza == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "EL TIPO DE POLIZA", TipoPoliza.ConsumoAlimento)); } string textoDocumento = tipoPoliza.TextoDocumento; string tipoMovimiento = tipoPoliza.ClavePoliza; string postFijoRef3 = tipoPoliza.PostFijoRef3; var linea = 1; var ref3 = new StringBuilder(); ref3.Append("03"); ref3.Append( string.Format("{0}{1}{2}", DateTime.Today.Day, DateTime.Today.Month, DateTime.Today.Year).PadLeft( 10, ' ')); ref3.Append(new Random(10).Next(10, 20)); ref3.Append(new Random(30).Next(30, 40)); ref3.Append(DateTime.Now.Millisecond); ref3.Append(postFijoRef3); string numeroDocumento = ObtenerNumeroReferenciaFolio(contenedor.AlmacenMovimiento.FolioMovimiento); DateTime fecha = contenedor.Reparto.Fecha; string archivoFolio = ObtenerArchivoFolio(fecha); IList <CostoInfo> costos = ObtenerCostos(); IList <FormulaInfo> formulas = ObtenerFormulas(); OrganizacionInfo organizacion; List <RepartoDetalleInfo> repatoAgrupado = null; List <ProduccionFormulaDetalleInfo> produccionAgrupado; CostoInfo costo = costos.FirstOrDefault( tipo => "002".Equals(tipo.ClaveContable)); if (costo == null) { costo = new CostoInfo(); } PolizaInfo polizaConsumo; IList <CuentaSAPInfo> cuentasSAP = ObtenerCuentasSAP(); if (cuentasSAP == null) { cuentasSAP = new List <CuentaSAPInfo>(); } CuentaSAPInfo cuentaSap; if (contenedor.Reparto != null && contenedor.Reparto.DetalleReparto != null && contenedor.Reparto.DetalleReparto.Any()) { repatoAgrupado = contenedor.Reparto.DetalleReparto .GroupBy(formu => formu.FormulaIDServida) .Select(agrupado => new RepartoDetalleInfo { OrganizacionID = agrupado.Select(org => org.OrganizacionID).FirstOrDefault(), Importe = agrupado.Sum(imp => imp.Importe), FormulaIDServida = agrupado.Select(form => form.FormulaIDServida).FirstOrDefault() }).Where(imp => imp.Importe > 0).ToList(); for (var indexReparto = 0; indexReparto < repatoAgrupado.Count; indexReparto++) { RepartoDetalleInfo detalle = repatoAgrupado[indexReparto]; organizacion = ObtenerOrganizacionIVA(detalle.OrganizacionID); cuentaSap = cuentasSAP.FirstOrDefault(clave => clave.CuentaSAP.Equals("1151401002")); if (cuentaSap == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "CUENTA NO CONFIGURADA PARA", costo.Descripcion)); } var datos = new DatosPolizaInfo { NumeroReferencia = numeroDocumento, FechaEntrada = fecha, Folio = numeroDocumento, Importe = string.Format("{0}", detalle.Importe.ToString("F2")), Renglon = Convert.ToString(linea), ImporteIva = "0", Ref3 = ref3.ToString(), ClaseDocumento = postFijoRef3, Cuenta = cuentaSap.CuentaSAP, ArchivoFolio = archivoFolio, DescripcionCosto = cuentaSap.Descripcion, PesoOrigen = 0, Division = organizacion.Division, TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1} {2}", tipoMovimiento, numeroDocumento, cuentaSap.CuentaSAP), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; linea++; polizaConsumo = GeneraRegistroPoliza(datos); polizasConsumo.Add(polizaConsumo); } } int almacenID = 0; if (contenedor.ProduccionFormula != null && contenedor.ProduccionFormula.ProduccionFormulaDetalle != null && contenedor.ProduccionFormula.ProduccionFormulaDetalle.Any()) { produccionAgrupado = contenedor.ProduccionFormula.ProduccionFormulaDetalle .GroupBy(formu => formu.ProduccionFormulaId) .Select(agrupado => new ProduccionFormulaDetalleInfo { ProduccionFormulaId = agrupado.Key, OrganizacionID = agrupado.Select(org => org.OrganizacionID).FirstOrDefault(), AlmacenID = agrupado.Select(alm => alm.AlmacenID).FirstOrDefault() }).ToList(); ClaseCostoProductoInfo producto; IList <ClaseCostoProductoInfo> almacenesProductosCuentas; FormulaInfo formula; for (var indexFormula = 0; indexFormula < produccionAgrupado.Count; indexFormula++) { ProduccionFormulaDetalleInfo detalle = produccionAgrupado[indexFormula]; almacenID = detalle.AlmacenID; almacenesProductosCuentas = ObtenerCostosProducto(almacenID); organizacion = ObtenerOrganizacionIVA(detalle.OrganizacionID); formula = formulas.FirstOrDefault(clave => clave.FormulaId == detalle.ProduccionFormulaId); if (formula == null) { formula = formulas.FirstOrDefault(clave => clave.Producto.ProductoId == detalle.ProduccionFormulaId); if (formula == null) { formula = new FormulaInfo { Producto = new ProductoInfo() }; } } decimal importe = 0; if (repatoAgrupado != null) { importe = repatoAgrupado.Where(formu => formu.FormulaIDServida == formula.FormulaId).Sum( imp => imp.Importe); if (importe == 0) { importe = repatoAgrupado.Where(formu => formu.FormulaIDServida == formula.Producto.ProductoId).Sum (imp => imp.Importe); } } if (importe == 0) { continue; } producto = almacenesProductosCuentas.FirstOrDefault(p => p.ProductoID == formula.Producto.ProductoId); if (producto == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "CUENTA NO CONFIGURADA PARA EL PRODUCTO", formula.Producto.Descripcion)); } cuentaSap = cuentasSAP.FirstOrDefault(cuenta => cuenta.CuentaSAPID == producto.CuentaSAPID); if (cuentaSap == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "CUENTA NO CONFIGURADA PARA EL PRODUCTO", formula.Producto.Descripcion)); } var datos = new DatosPolizaInfo { NumeroReferencia = numeroDocumento, FechaEntrada = fecha, Importe = string.Format("{0}", (importe * -1).ToString("F2")), Renglon = Convert.ToString(linea), ImporteIva = "0", Ref3 = ref3.ToString(), Cuenta = cuentaSap.CuentaSAP, ClaseDocumento = postFijoRef3, ArchivoFolio = archivoFolio, DescripcionCosto = cuentaSap.Descripcion, PesoOrigen = 0, Division = organizacion.Division, TipoDocumento = textoDocumento, Folio = numeroDocumento, Concepto = String.Format("{0}-{1} {2}", tipoMovimiento, numeroDocumento, cuentaSap.CuentaSAP), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; linea++; polizaConsumo = GeneraRegistroPoliza(datos); polizasConsumo.Add(polizaConsumo); } } return(polizasConsumo); }
private IList <PolizaInfo> ObtenerPoliza(SalidaProductoInfo salidaProducto) { var polizasSalida = new List <PolizaInfo>(); TipoPolizaInfo tipoPoliza = TiposPoliza.FirstOrDefault(clave => clave.TipoPolizaID == TipoPoliza.SalidaVentaProducto.GetHashCode()); if (tipoPoliza == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "EL TIPO DE POLIZA", TipoPoliza.SalidaVentaProducto)); } string textoDocumento = tipoPoliza.TextoDocumento; string tipoMovimiento = tipoPoliza.ClavePoliza; string postFijoRef3 = tipoPoliza.PostFijoRef3; var linea = 1; var ref3 = new StringBuilder(); ref3.Append("03"); ref3.Append( string.Format("{0}{1}{2}", DateTime.Today.Day, DateTime.Today.Month, DateTime.Today.Year).PadLeft( 10, ' ')); ref3.Append(new Random(10).Next(10, 20)); ref3.Append(new Random(30).Next(30, 40)); ref3.Append(DateTime.Now.Millisecond); ref3.Append(postFijoRef3); //string numeroReferencia = string.Format("{0}{1}", salidaProducto.FolioSalida, ObtenerNumeroReferencia); string numeroReferencia = ObtenerNumeroReferenciaFolio(salidaProducto.FolioSalida); IList <CuentaSAPInfo> cuentasSAP = ObtenerCuentasSAP(); IList <ClaseCostoProductoInfo> almacenesProductos = ObtenerCostosProducto(salidaProducto.Almacen.AlmacenID); OrganizacionInfo organizacion = ObtenerOrganizacionIVA(salidaProducto.Organizacion.OrganizacionID); if (organizacion == null) { organizacion = new OrganizacionInfo { TipoOrganizacion = new TipoOrganizacionInfo() }; } ClaseCostoProductoInfo almacenProducto = almacenesProductos.FirstOrDefault(prod => prod.ProductoID == salidaProducto.Producto.ProductoId); if (almacenProducto == null) { throw new ExcepcionServicio(string.Format("{0} {1} {2}", "CUENTA PARA PRODUCTO", salidaProducto.Producto.Descripcion, "NO CONFIGURADA")); } CuentaSAPInfo cuentaSAP = cuentasSAP.FirstOrDefault(cuenta => cuenta.CuentaSAPID == almacenProducto.CuentaSAPID); if (cuentaSAP == null) { cuentaSAP = new CuentaSAPInfo { Descripcion = string.Empty, CuentaSAP = string.Empty }; } ClaveContableInfo claveContableCosto = ObtenerCuentaInventario(salidaProducto.Organizacion. OrganizacionID, TipoPoliza.ConsumoAlimento); if (claveContableCosto == null) { throw new ExcepcionServicio(string.Format("{0}", "CUENTA DE COSTO NO CONFIGURADA")); } ClaveContableInfo claveContableBeneficios = ObtenerCuentaInventario(salidaProducto.Organizacion. OrganizacionID, TipoPoliza.SalidaVentaProducto); if (claveContableBeneficios == null) { throw new ExcepcionServicio(string.Format("{0}", "CUENTA DE BENEFICIOS NO CONFIGURADA")); } ParametroOrganizacionInfo parametroCentroCosto = ObtenerParametroOrganizacionPorClave(organizacion.OrganizacionID, ParametrosEnum.CTACENTROCOSTOMP.ToString()); if (parametroCentroCosto == null) { throw new ExcepcionServicio(string.Format("{0}", "CENTRO DE COSTO NO CONFIGURADO")); } ParametroOrganizacionInfo parametroCentroBeneficio = ObtenerParametroOrganizacionPorClave(organizacion.OrganizacionID, ParametrosEnum.CTACENTROBENEFICIOMP.ToString()); if (parametroCentroBeneficio == null) { throw new ExcepcionServicio(string.Format("{0}", "CENTRO DE BENEFICIO NO CONFIGURADO")); } string archivoFolio = ObtenerArchivoFolio(salidaProducto.FechaSalida); int cantidad = salidaProducto.PesoBruto - salidaProducto.PesoTara; var almacenMovimientoDetalleBL = new AlmacenMovimientoDetalleBL(); AlmacenMovimientoDetalle detalleMovimiento = almacenMovimientoDetalleBL.ObtenerPorAlmacenMovimientoID( salidaProducto.AlmacenMovimiento.AlmacenMovimientoID); if (detalleMovimiento == null) { detalleMovimiento = new AlmacenMovimientoDetalle(); } if (unidades == null) { unidades = ObtenerUnidadesMedicion(); } if (productos == null) { productos = ObtenerProductos(); } ProductoInfo producto = productos.FirstOrDefault(clave => clave.ProductoId == salidaProducto.Producto.ProductoId); if (producto == null) { producto = new ProductoInfo(); } switch ((SubFamiliasEnum)producto.SubfamiliaId) { case SubFamiliasEnum.Granos: claveContableBeneficios.Valor = string.Concat(claveContableBeneficios.Valor, PostFijoSubFamiliaGranos); claveContableCosto.Valor = string.Concat(claveContableCosto.Valor, PostFijoSubFamiliaGranos); break; default: claveContableBeneficios.Valor = string.Concat(claveContableBeneficios.Valor, PostFijoSubFamiliaNoGranos); claveContableCosto.Valor = string.Concat(claveContableCosto.Valor, PostFijoSubFamiliaNoGranos); break; } var traspaso = false; if (salidaProducto.TipoMovimiento.TipoMovimientoID == TipoMovimiento.ProductoSalidaTraspaso.GetHashCode() || salidaProducto.TipoMovimiento.Descripcion.Equals("salida por traspaso", StringComparison.InvariantCultureIgnoreCase)) { salidaProducto.Cliente = new ClienteInfo { CodigoSAP = salidaProducto.CuentaSAP.CuentaSAP, Descripcion = salidaProducto.CuentaSAP.Descripcion }; traspaso = true; } string unidad = unidades.Where(clave => clave.UnidadID == producto.UnidadId). Select(uni => uni.ClaveUnidad).FirstOrDefault(); var datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = salidaProducto.FechaSalida, Folio = salidaProducto.FolioSalida.ToString(), Cliente = traspaso ? string.Empty : salidaProducto.Cliente.CodigoSAP, Cuenta = traspaso ? salidaProducto.Cliente.CodigoSAP : string.Empty, Importe = string.Format("{0}", salidaProducto.Importe.ToString("F2")), Renglon = Convert.ToString(linea++), ImporteIva = "0", ClaseDocumento = postFijoRef3, Ref3 = ref3.ToString(), Division = organizacion.Division, ArchivoFolio = archivoFolio, DescripcionCosto = salidaProducto.Cliente.Descripcion, PesoOrigen = cantidad, TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1} {2} {3} {4}", tipoMovimiento, salidaProducto.FolioSalida, cantidad.ToString("N0"), unidad, cuentaSAP.Descripcion), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad) }; PolizaInfo polizaSalida = GeneraRegistroPoliza(datos); polizasSalida.Add(polizaSalida); datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = salidaProducto.FechaSalida, Folio = salidaProducto.FolioSalida.ToString(), Importe = (detalleMovimiento.Importe * -1).ToString("F2"), Renglon = Convert.ToString(linea++), ImporteIva = "0", Ref3 = ref3.ToString(), Cuenta = cuentaSAP.CuentaSAP, DescripcionCosto = cuentaSAP.Descripcion, Division = organizacion.Division, ArchivoFolio = archivoFolio, PesoOrigen = cantidad, ClaseDocumento = postFijoRef3, TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1} {2} {3} {4}", tipoMovimiento, salidaProducto.FolioSalida, cantidad.ToString("N0"), unidad, cuentaSAP.Descripcion), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad) }; polizaSalida = GeneraRegistroPoliza(datos); polizasSalida.Add(polizaSalida); if (!traspaso) { cuentaSAP = cuentasSAP.FirstOrDefault(cuenta => cuenta.CuentaSAP == claveContableCosto.Valor); if (cuentaSAP == null) { throw new ExcepcionServicio("CUENTA DE COSTO NO CONFIGURADA"); } datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = salidaProducto.FechaSalida, Folio = salidaProducto.FolioSalida.ToString(), Importe = detalleMovimiento.Importe.ToString("F2"), Renglon = Convert.ToString(linea++), ImporteIva = "0", Ref3 = ref3.ToString(), Cuenta = cuentaSAP.CuentaSAP, Division = organizacion.Division, ArchivoFolio = archivoFolio, DescripcionCosto = cuentaSAP.Descripcion, CentroCosto = claveContableCosto.Valor.StartsWith(PrefijoCuentaCentroCosto) || claveContableCosto.Valor.StartsWith(PrefijoCuentaCentroGasto) ? parametroCentroCosto.Valor : string.Empty, //CentroBeneficio = // claveContableBeneficios.Valor.StartsWith(PrefijoCuentaCentroBeneficio) // ? parametroCentroBeneficio.Valor // : string.Empty, PesoOrigen = cantidad, ClaseDocumento = postFijoRef3, TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1} {2} {3} {4}", tipoMovimiento, salidaProducto.FolioSalida, cantidad.ToString("N0"), unidad, cuentaSAP.Descripcion), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad) }; polizaSalida = GeneraRegistroPoliza(datos); polizasSalida.Add(polizaSalida); cuentaSAP = cuentasSAP.FirstOrDefault(cuenta => cuenta.CuentaSAP == claveContableBeneficios.Valor); if (cuentaSAP == null) { throw new ExcepcionServicio("CUENTA DE BENEFICIOS NO CONFIGURADA"); } datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = salidaProducto.FechaSalida, Folio = salidaProducto.FolioSalida.ToString(), Importe = string.Format("{0}", (salidaProducto.Importe * -1).ToString("F2")), Renglon = Convert.ToString(linea), ImporteIva = "0", Ref3 = ref3.ToString(), Cuenta = cuentaSAP.CuentaSAP, Division = organizacion.Division, ArchivoFolio = archivoFolio, DescripcionCosto = cuentaSAP.Descripcion, //CentroCosto = // claveContableCosto.Valor.StartsWith(PrefijoCuentaCentroCosto) || // claveContableCosto.Valor.StartsWith(PrefijoCuentaCentroGasto) // ? parametroCentroCosto.Valor // : string.Empty, CentroBeneficio = claveContableBeneficios.Valor.StartsWith(PrefijoCuentaCentroBeneficio) ? parametroCentroBeneficio.Valor : string.Empty, PesoOrigen = cantidad, ClaseDocumento = postFijoRef3, TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1} {2} {3} {4}", tipoMovimiento, salidaProducto.FolioSalida, cantidad.ToString("N0"), unidad, cuentaSAP.Descripcion), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad) }; polizaSalida = GeneraRegistroPoliza(datos); polizasSalida.Add(polizaSalida); } return(polizasSalida); }
private IList <PolizaInfo> GeneraDatosPoliza(InterfaceSalidaTraspasoInfo interfaceSalidaTraspaso) { var polizasSalidaTraspaso = new List <PolizaInfo>(); IList <CuentaSAPInfo> cuentasSap = ObtenerCuentasSAP(); TipoPolizaInfo tipoPoliza = TiposPoliza.FirstOrDefault(clave => clave.TipoPolizaID == TipoPoliza.SalidaGanado.GetHashCode()); if (tipoPoliza == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "EL TIPO DE POLIZA", TipoPoliza.SalidaGanado)); } string textoDocumento = tipoPoliza.TextoDocumento; string postFijoRef3 = tipoPoliza.PostFijoRef3; string prefijoConcepto = tipoPoliza.ClavePoliza; OrganizacionInfo organizacionDestino = ObtenerOrganizacionIVA(interfaceSalidaTraspaso.OrganizacionDestino.OrganizacionID); OrganizacionInfo organizacionOrigen = ObtenerOrganizacionIVA(interfaceSalidaTraspaso.OrganizacionId); string divisionOrigen = organizacionOrigen.Division; long folioTraspaso = interfaceSalidaTraspaso.FolioTraspaso; var animalBL = new AnimalBL(); List <LoteInfo> lotes = interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle.Select(lote => lote.Lote).ToList(); List <AnimalInfo> animalesMovimientoSalidaTraspaso = animalBL.ObtenerMovimientosPorLoteXML(lotes); List <AnimalInfo> animalesMovimientoSacrificadosLote = animalBL.ObtenerMovimientosPorLoteSacrificadosXML(lotes); if (animalesMovimientoSacrificadosLote == null) { animalesMovimientoSacrificadosLote = new List <AnimalInfo>(); } if (animalesMovimientoSalidaTraspaso != null && animalesMovimientoSalidaTraspaso.Any()) { var costosGanadoTransferido = new List <InterfaceSalidaTraspasoCostoInfo>(); var animalesMovimiento = new List <AnimalMovimientoInfo>(); animalesMovimientoSalidaTraspaso.ForEach( movs => animalesMovimiento.AddRange(movs.ListaAnimalesMovimiento)); var animalCostoBL = new AnimalCostoBL(); List <AnimalCostoInfo> costosAnimal = animalCostoBL.ObtenerCostosAnimal(animalesMovimientoSalidaTraspaso); var costoBL = new CostoBL(); IList <CostoInfo> costos = costoBL.ObtenerTodos(EstatusEnum.Activo); List <AnimalInfo> animalesPorLote; List <AnimalInfo> animalesSacrificadosPorLote; int loteID; const string COMPLEMENTO_REF1 = "czas."; const string UNIDAD_MOVIMIENTO = "Kgs."; const string DESCRIPCION_MOVIMIENTO = "CABEZAS"; DateTime fechaEnvio = interfaceSalidaTraspaso.FechaEnvio; for (var indexLotes = 0; indexLotes < lotes.Count; indexLotes++) { Thread.Sleep(999); var ref3 = new StringBuilder(); ref3.Append("03"); ref3.Append(Convert.ToString(folioTraspaso).PadLeft(10, ' ')); ref3.Append(new Random(10).Next(10, 20)); ref3.Append(new Random(30).Next(30, 40)); ref3.Append(DateTime.Now.Millisecond); ref3.Append(postFijoRef3); var archivoFolio = new StringBuilder(ObtenerArchivoFolio(fechaEnvio)); //var numeroDocumento = // new StringBuilder(string.Format("{0}{1}", folioTraspaso, ObtenerNumeroReferencia)); var numeroDocumento = ObtenerNumeroReferenciaFolio(folioTraspaso); loteID = lotes[indexLotes].LoteID; animalesPorLote = (from ani in animalesMovimientoSalidaTraspaso from movs in animalesMovimiento where ani.AnimalID == movs.AnimalID && movs.LoteID == loteID orderby ani.AnimalID select ani).ToList(); animalesSacrificadosPorLote = animalesMovimientoSacrificadosLote.Where(lote => lote.LoteID == loteID).ToList(); var renglon = 1; if (animalesPorLote.Any()) { int cabezas = interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle.Where( loteId => loteId.Lote.LoteID == loteID).Select( cabe => cabe.Cabezas).FirstOrDefault(); int interfaceSalidaTraspasoDetalleID = interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle.Where( loteId => loteId.Lote.LoteID == loteID).Select( cabe => cabe.InterfaceSalidaTraspasoDetalleID).FirstOrDefault(); animalesPorLote = EliminarAnimalesSacrificados(animalesPorLote, animalesSacrificadosPorLote); animalesPorLote = animalesPorLote.Take(cabezas).ToList(); if (animalesPorLote.Any()) { List <AnimalCostoInfo> costosAnimalesTraspasados = costosAnimal.Join(animalesPorLote, info => info.AnimalID, cos => cos.AnimalID, (info, cos) => info).ToList(); List <AnimalCostoInfo> costosAnimalesTraspasadosIndividual; if (costosAnimalesTraspasados.Any()) { costosAnimalesTraspasadosIndividual = costosAnimalesTraspasados .GroupBy(costoAnimal => new { costoAnimal.CostoID, costoAnimal.AnimalID }) .Select(dinero => new AnimalCostoInfo { AnimalCostoID = dinero.Select(id => id.AnimalCostoID).FirstOrDefault(), AnimalID = dinero.Key.AnimalID, CostoID = dinero.Key.CostoID, FechaCosto = dinero.Select(fecha => fecha.FechaCosto). FirstOrDefault(), FolioReferencia = dinero.Select(folio => folio.FolioReferencia). FirstOrDefault(), Importe = dinero.Sum(imp => imp.Importe), OrganizacionID = dinero.Select(org => org.OrganizacionID). FirstOrDefault(), TipoReferencia = dinero.Select(tipo => tipo.TipoReferencia). FirstOrDefault() }).ToList(); costosAnimalesTraspasados = costosAnimalesTraspasados .GroupBy(costoAnimal => costoAnimal.CostoID) .Select(dinero => new AnimalCostoInfo { AnimalCostoID = dinero.Select(id => id.AnimalCostoID).FirstOrDefault(), AnimalID = dinero.Select(id => id.AnimalID).FirstOrDefault(), CostoID = dinero.Select(id => id.CostoID).FirstOrDefault(), FechaCosto = dinero.Select(fecha => fecha.FechaCosto). FirstOrDefault(), FolioReferencia = dinero.Select(folio => folio.FolioReferencia). FirstOrDefault(), Importe = dinero.Sum(imp => imp.Importe), OrganizacionID = dinero.Select(org => org.OrganizacionID). FirstOrDefault(), TipoReferencia = dinero.Select(tipo => tipo.TipoReferencia). FirstOrDefault() }).ToList(); costosGanadoTransferido.AddRange( costosAnimalesTraspasadosIndividual.Select( dato => new InterfaceSalidaTraspasoCostoInfo { AnimalID = dato.AnimalID, Activo = EstatusEnum.Activo, Importe = dato.Importe, UsuarioCreacionID = interfaceSalidaTraspaso. UsuarioModificacionID.Value, Costo = new CostoInfo { CostoID = dato.CostoID }, InterfaceSalidaTraspasoDetalle = new InterfaceSalidaTraspasoDetalleInfo { InterfaceSalidaTraspasoDetalleID = interfaceSalidaTraspasoDetalleID } })); ClaveContableInfo claveContableDestino; ClaveContableInfo claveContableOrigen; CostoInfo costo; CuentaSAPInfo cuentaSapDestino; CuentaSAPInfo cuentaSapOrigen; DatosPolizaInfo datos; PolizaInfo polizaSalida; int cabezasRecibidas = interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle.Sum(cab => cab.Cabezas); decimal pesoOrigen = interfaceSalidaTraspaso.PesoBruto - interfaceSalidaTraspaso.PesoTara; AnimalCostoInfo animalCosto; for (var indexCostos = 0; indexCostos < costosAnimalesTraspasados.Count; indexCostos++) { animalCosto = costosAnimalesTraspasados[indexCostos]; costo = costos.FirstOrDefault( id => id.CostoID == animalCosto.CostoID); claveContableDestino = ObtenerCuentaInventario(costo , organizacionOrigen.OrganizacionID , TipoOrganizacion.Ganadera.GetHashCode ()); claveContableOrigen = ObtenerCuentaInventario(costo , organizacionDestino.OrganizacionID , TipoPoliza.SalidaGanado); cuentaSapDestino = cuentasSap.FirstOrDefault( clave => clave.CuentaSAP.Equals(claveContableDestino.Valor)); if (cuentaSapDestino == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "NO SE CUENTA CON CONFIGURACIÓN PARA CUENTA DE INVENTARIO", claveContableDestino.Valor)); } cuentaSapOrigen = cuentasSap.FirstOrDefault( clave => clave.CuentaSAP.Equals(claveContableOrigen.Valor)); if (cuentaSapOrigen == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "NO SE CUENTA CON CONFIGURACIÓN PARA CUENTA DE TRANSITO", claveContableOrigen.Valor)); } datos = new DatosPolizaInfo { NumeroReferencia = numeroDocumento, FechaEntrada = fechaEnvio, Folio = folioTraspaso.ToString(), CabezasRecibidas = cabezasRecibidas.ToString(), NumeroDocumento = folioTraspaso.ToString(), ClaseDocumento = postFijoRef3, Importe = string.Format("{0}", Cancelacion ? (animalCosto.Importe * -1).ToString("F2") : animalCosto.Importe.ToString("F2")), IndicadorImpuesto = String.Empty, Renglon = Convert.ToString(renglon++), Cabezas = Convert.ToString(cabezasRecibidas), ImporteIva = "0", Ref3 = ref3.ToString(), ArchivoFolio = archivoFolio.ToString(), DescripcionCosto = cuentaSapOrigen.Descripcion, Cuenta = cuentaSapOrigen.CuentaSAP, PesoOrigen = pesoOrigen, Division = divisionOrigen, ComplementoRef1 = COMPLEMENTO_REF1, TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1} ,{2} {3}, {4} {5}", prefijoConcepto, folioTraspaso, cabezasRecibidas, DESCRIPCION_MOVIMIENTO, pesoOrigen.ToString("N0"), UNIDAD_MOVIMIENTO), Sociedad = organizacionDestino.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacionDestino.Sociedad), }; polizaSalida = GeneraRegistroPoliza(datos); polizasSalidaTraspaso.Add(polizaSalida); datos = new DatosPolizaInfo { NumeroReferencia = numeroDocumento, FechaEntrada = fechaEnvio, Folio = folioTraspaso.ToString(), CabezasRecibidas = cabezasRecibidas.ToString(), NumeroDocumento = folioTraspaso.ToString(), ClaseDocumento = postFijoRef3, Importe = string.Format("{0}", Cancelacion ? animalCosto.Importe.ToString("F2") : (animalCosto.Importe * -1).ToString("F2")), IndicadorImpuesto = String.Empty, Renglon = Convert.ToString(renglon++), Cabezas = Convert.ToString(cabezasRecibidas), ImporteIva = "0", Ref3 = ref3.ToString(), ArchivoFolio = archivoFolio.ToString(), DescripcionCosto = cuentaSapDestino.Descripcion, Cuenta = cuentaSapDestino.CuentaSAP, PesoOrigen = pesoOrigen, Division = divisionOrigen, ComplementoRef1 = COMPLEMENTO_REF1, TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1} ,{2} {3}, {4} {5}", prefijoConcepto, folioTraspaso, cabezasRecibidas, DESCRIPCION_MOVIMIENTO, pesoOrigen.ToString("N0"), UNIDAD_MOVIMIENTO), Sociedad = organizacionDestino.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacionDestino.Sociedad), }; polizaSalida = GeneraRegistroPoliza(datos); polizasSalidaTraspaso.Add(polizaSalida); } } } } } if (costosGanadoTransferido.Any()) { var interfaceSalidaTraspasoCostoBL = new InterfaceSalidaTraspasoCostoBL(); interfaceSalidaTraspasoCostoBL.Guardar(costosGanadoTransferido); } } return(polizasSalidaTraspaso); }
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); }
private IList <PolizaInfo> ObtenerPoliza(List <PolizaSacrificioModel> datosPoliza) { var polizasSacrificio = new List <PolizaInfo>(); TipoPolizaInfo tipoPoliza = TiposPoliza.FirstOrDefault(clave => clave.TipoPolizaID == TipoPoliza.PolizaSacrificio.GetHashCode()); if (tipoPoliza == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "EL TIPO DE POLIZA", TipoPoliza.PolizaSacrificio)); } string textoDocumento = tipoPoliza.TextoDocumento; string tipoMovimiento = tipoPoliza.ClavePoliza; string postFijoRef3 = tipoPoliza.PostFijoRef3; IList <CuentaSAPInfo> cuentasSap = ObtenerCuentasSAP(); int organizacionID = datosPoliza.Select(org => org.OrganizacionID).FirstOrDefault(); OrganizacionInfo organizacion = ObtenerOrganizacionIVA(organizacionID); IList <ProveedorInfo> proveedores = ObtenerProveedores(); string claveParametro = datosPoliza.Select(clave => clave.ParametroProveedor).FirstOrDefault(); ParametroGeneralInfo parametroGeneral = ObtenerParametroGeneralPorClave(claveParametro); if (parametroGeneral == null) { parametroGeneral = new ParametroGeneralInfo(); } var poliza212 = true; if (string.Compare(claveParametro, ParametrosEnum.PolizaSacrificio300.ToString() , StringComparison.InvariantCultureIgnoreCase) == 0) { ParametroGeneralInfo parametro300 = ObtenerParametroGeneralPorClave(ParametrosEnum.SociedadPolizaSacrificio.ToString()); organizacion.Sociedad = parametro300.Valor; poliza212 = false; } datosPoliza = datosPoliza.GroupBy(grupo => new { grupo.Serie, grupo.Folio, grupo.Corral, grupo.LoteID }) .Select(dato => new PolizaSacrificioModel { OrganizacionID = dato.Select(org => org.OrganizacionID).FirstOrDefault(), Canales = dato.Select(can => can.Canales).Sum(), Lote = dato.Select(lot => lot.Lote).FirstOrDefault(), Peso = dato.Select(peso => peso.Peso).Sum(), Fecha = dato.Select(fech => fech.Fecha).FirstOrDefault(), Folio = dato.Key.Folio, LoteID = dato.Select(lot => lot.LoteID).FirstOrDefault(), Codigo = dato.Select(cod => cod.Codigo).FirstOrDefault(), ImporteCanal = dato.Select(imp => imp.ImporteCanal).Sum(), Serie = dato.Select(ser => ser.Serie).FirstOrDefault(), ImportePiel = dato.Select(imp => imp.ImportePiel).Sum(), ImporteViscera = dato.Select(imp => imp.ImporteViscera).Sum(), Corral = dato.Key.Corral, }).ToList(); List <PolizaInfo> polizasGeneradas; ParametroOrganizacionInfo parametroOrganizacion = ObtenerParametroOrganizacionPorClave(organizacionID, ParametrosEnum. CTACENTROBENEFICIOENG .ToString()); if (poliza212) { polizasGeneradas = ObtenerPoliza212(datosPoliza, cuentasSap, proveedores, parametroGeneral, organizacion, textoDocumento, tipoMovimiento, postFijoRef3, parametroOrganizacion); } else { polizasGeneradas = ObtenerPoliza300(datosPoliza, cuentasSap, proveedores, parametroGeneral, organizacion, textoDocumento, tipoMovimiento, postFijoRef3); } polizasSacrificio.AddRange(polizasGeneradas); //} return(polizasSacrificio); }
private IList <PolizaInfo> ObtenerPoliza(GanadoIntensivoInfo ganadoIntensivo) { var polizasSalidaMuerteIntensiva = new List <PolizaInfo>(); if (ganadoIntensivo.ListaGanadoIntensivoCosto != null && ganadoIntensivo.ListaGanadoIntensivoCosto.Any()) { TipoPolizaInfo tipoPoliza = TiposPoliza.FirstOrDefault(clave => clave.TipoPolizaID == TipoPoliza.SalidaMuerteIntensiva.GetHashCode()); if (tipoPoliza == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "EL TIPO DE POLIZA", TipoPoliza.SalidaMuerteIntensiva)); } string textoDocumento = tipoPoliza.TextoDocumento; string tipoMovimiento = tipoPoliza.ClavePoliza; string postFijoRef3 = tipoPoliza.PostFijoRef3; int linea = 1; var ref3 = new StringBuilder(); ref3.Append("03"); ref3.Append( string.Format("{0}{1}{2}", DateTime.Today.Day, DateTime.Today.Month, DateTime.Today.Year).PadLeft( 10, ' ')); ref3.Append(new Random(10).Next(10, 20)); ref3.Append(new Random(30).Next(30, 40)); ref3.Append(DateTime.Now.Millisecond); ref3.Append(postFijoRef3); string numeroReferencia = ObtenerNumeroReferencia; if (costos == null) { costos = ObtenerCostos(); } foreach (var ganadoIntensivoCostoInfo in ganadoIntensivo.ListaGanadoIntensivoCosto) { CostoInfo costo = costos.FirstOrDefault(tipo => tipo.CostoID == ganadoIntensivoCostoInfo.Costos.CostoID); if (costo == null) { costo = new CostoInfo(); } //= ObtenerOrganizacionIVA(ganadoIntensivo.Organizacion.OrganizacionID); OrganizacionInfo organizacion = ObtenerOrganizacionSociedadDivision(ganadoIntensivo.Organizacion.OrganizacionID, SociedadEnum.SuKarne); if (organizacion == null) { organizacion = new OrganizacionInfo { TipoOrganizacion = new TipoOrganizacionInfo() }; } const int Corral_Intensivo = 4; const int Corral_Maquila = 6; int tipoOrganizacioID = 0; switch (ganadoIntensivo.Lote.TipoCorralID) { case Corral_Intensivo: tipoOrganizacioID = TipoOrganizacion.Intensivo.GetHashCode(); break; case Corral_Maquila: tipoOrganizacioID = TipoOrganizacion.Maquila.GetHashCode(); break; } if (tipoOrganizacioID > 0) { organizacion.TipoOrganizacion.TipoOrganizacionID = tipoOrganizacioID; } ClaveContableInfo claveContableAbono = ObtenerCuentaInventario(costo, organizacion.OrganizacionID, organizacion.TipoOrganizacion.TipoOrganizacionID); if (claveContableAbono == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "NO EXISTE CONFIGURACION PARA EL COSTO", costo.Descripcion)); } ClaveContableInfo claveContableCargo = ObtenerCuentaInventario(costo, organizacion.OrganizacionID, TipoPoliza.SalidaMuerteIntensiva); if (claveContableCargo == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "NO EXISTE CONFIGURACION PARA EL COSTO", costo.Descripcion)); } ParametroOrganizacionInfo parametroCentroCosto = ObtenerParametroOrganizacionPorClave(organizacion.OrganizacionID, ParametrosEnum.CTACENTROCTOINT.ToString()); if (parametroCentroCosto == null) { throw new ExcepcionServicio(string.Format("{0}", "CENTRO DE COSTO NO CONFIGURADO")); } EntradaGanadoInfo entradaGanado = ganadoIntensivo.EntradaGanado; var pesoMuerteTotal = Math.Round(((entradaGanado.PesoBruto - entradaGanado.PesoTara) / entradaGanado.CabezasRecibidas) * ganadoIntensivo.Cabezas, 0); //VALIDAR FECHA DateTime fecha = DateTime.Today; if (fecha != null) { string archivoFolio = ObtenerArchivoFolio(fecha); var datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = fecha, Folio = ganadoIntensivo.FolioTicket.ToString(), Importe = string.Format("{0}", ganadoIntensivoCostoInfo.Importe.ToString("F2")), Renglon = Convert.ToString(linea++), ImporteIva = "0", Ref3 = ref3.ToString(), Cuenta = claveContableCargo.Valor, Division = organizacion.Division, ArchivoFolio = archivoFolio, CentroCosto = claveContableCargo.Valor.StartsWith(PrefijoCuentaCentroCosto) || claveContableCargo.Valor.StartsWith(PrefijoCuentaCentroGasto) ? parametroCentroCosto.Valor : string.Empty, //PesoOrigen = peso, TipoDocumento = textoDocumento, ClaseDocumento = postFijoRef3, ComplementoRef1 = string.Empty, Concepto = String.Format("{0}-{1} CABEZAS {2} kgs", tipoMovimiento, ganadoIntensivo.Cabezas, pesoMuerteTotal), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; PolizaInfo polizaSalida = GeneraRegistroPoliza(datos); polizasSalidaMuerteIntensiva.Add(polizaSalida); datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = fecha, Folio = ganadoIntensivo.FolioTicket.ToString(), Importe = string.Format("{0}", (ganadoIntensivoCostoInfo.Importe * -1).ToString("F2")), Renglon = Convert.ToString(linea++), ImporteIva = "0", Ref3 = ref3.ToString(), Cuenta = claveContableAbono.Valor, ArchivoFolio = archivoFolio, Division = organizacion.Division, // PesoOrigen = peso, TipoDocumento = textoDocumento, ClaseDocumento = postFijoRef3, Concepto = String.Format("{0}-{1}, CABEZAS, {2} kgs", tipoMovimiento, ganadoIntensivo.Cabezas, pesoMuerteTotal), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; polizaSalida = GeneraRegistroPoliza(datos); polizasSalidaMuerteIntensiva.Add(polizaSalida); } } } return(polizasSalidaMuerteIntensiva); }
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); }
private IList <PolizaInfo> ObtenerPolizas(RecepcionProductoInfo recepcionProducto) { var polizaCompraMateriaPrima = new List <PolizaInfo>(); int organizacionID = recepcionProducto.Almacen.Organizacion.OrganizacionID; OrganizacionInfo organizacion = ObtenerOrganizacionIVA(organizacionID); if (organizacion == null) { organizacion = new OrganizacionInfo { TipoOrganizacion = new TipoOrganizacionInfo() }; } TipoPolizaInfo tipoPoliza = TiposPoliza.FirstOrDefault( clave => clave.TipoPolizaID == TipoPoliza.EntradaCompraMateriaPrima.GetHashCode()); if (tipoPoliza == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "EL TIPO DE POLIZA", TipoPoliza.EntradaCompraMateriaPrima)); } string postFijoRef3 = tipoPoliza.PostFijoRef3; var ref3 = new StringBuilder(); ref3.Append("03"); ref3.Append( string.Format("{0}{1}{2}", DateTime.Today.Day, DateTime.Today.Month, DateTime.Today.Year).PadLeft( 10, ' ')); ref3.Append(new Random(10).Next(10, 20)); ref3.Append(new Random(30).Next(30, 40)); ref3.Append(DateTime.Now.Millisecond); ref3.Append(postFijoRef3); string numeroDocumento = ObtenerNumeroReferencia; IList <CuentaSAPInfo> cuentasSAP = ObtenerCuentasSAP(); int almacenID = recepcionProducto.Almacen.AlmacenID; IList <ClaseCostoProductoInfo> almacenesProductos = ObtenerCostosProducto(almacenID); IList <UnidadMedicionInfo> unidadesMedicion = ObtenerUnidadesMedicion(); var linea = 1; string textoDocumento = tipoPoliza.TextoDocumento; string tipoMovimiento = tipoPoliza.ClavePoliza; DateTime fecha = recepcionProducto.FechaRecepcion; string archivoFolio = ObtenerArchivoFolio(fecha); int folio = recepcionProducto.FolioRecepcion; ParametroOrganizacionInfo parametroCentroCosto = ObtenerParametroOrganizacionPorClave(organizacion.OrganizacionID, ParametrosEnum.CTACENTROCOSTOMP.ToString()); if (parametroCentroCosto == null) { throw new ExcepcionServicio(string.Format("{0}", "CENTRO DE COSTO NO CONFIGURADO")); } IList <RecepcionProductoDetalleInfo> detallesProducto = recepcionProducto.ListaRecepcionProductoDetalle; RecepcionProductoDetalleInfo detalle; DatosPolizaInfo datos; PolizaInfo polizaSalida; CuentaSAPInfo cuentaSAP; ClaseCostoProductoInfo almacenProducto; CuentaSAPInfo cuentaIva; UnidadMedicionInfo unidadMedicion = null; for (int indexDetalle = 0; indexDetalle < detallesProducto.Count; indexDetalle++) { detalle = detallesProducto[indexDetalle]; almacenProducto = almacenesProductos.FirstOrDefault(prod => prod.ProductoID == detalle.Producto.ProductoId); if (almacenProducto == null) { throw new ExcepcionServicio(string.Format("{0} {1} {2}", "CUENTA PARA PRODUCTO", detalle.Producto.Descripcion, "NO CONFIGURADA")); } cuentaSAP = cuentasSAP.FirstOrDefault(cuenta => cuenta.CuentaSAPID == almacenProducto.CuentaSAPID); if (cuentaSAP == null) { throw new ExcepcionServicio(string.Format("{0} {1} {2}", "CUENTA PARA PRODUCTO", detalle.Producto.Descripcion, "NO CONFIGURADA")); } unidadMedicion = unidadesMedicion.FirstOrDefault(clave => clave.UnidadID == detalle.Producto.UnidadMedicion.UnidadID); datos = new DatosPolizaInfo { NumeroReferencia = numeroDocumento, FechaEntrada = fecha, Folio = folio.ToString(), ClaseDocumento = postFijoRef3, Importe = string.Format("{0}", detalle.Importe.ToString("F2")), IndicadorImpuesto = String.Empty, Renglon = Convert.ToString(linea++), ImporteIva = "0", Ref3 = ref3.ToString(), Division = organizacion.Division, ArchivoFolio = archivoFolio, Cuenta = cuentaSAP.CuentaSAP, DescripcionCosto = cuentaSAP.Descripcion, CentroCosto = cuentaSAP.CuentaSAP.StartsWith(PrefijoCuentaCentroCosto) ? parametroCentroCosto.Valor : string.Empty, PesoOrigen = Math.Round(detalle.Cantidad, 0), TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1} {2} {3} {4} {5}", tipoMovimiento, folio, detalle.Cantidad.ToString("N0") , unidadMedicion.ClaveUnidad , detalle.Producto.Descripcion, postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; polizaSalida = GeneraRegistroPoliza(datos); polizaCompraMateriaPrima.Add(polizaSalida); } cuentaIva = cuentasSAP.FirstOrDefault( clave => clave.CuentaSAP.Equals(organizacion.Iva.CuentaRecuperar.ClaveCuenta)); if (cuentaIva == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "NO EXISTE CONFIGURACIONES PARA LA CUENTA", organizacion.Iva.Descripcion)); } ParametroGeneralInfo parametroGeneralProductos = ObtenerParametroGeneralPorClave(ParametrosEnum.PRODIVAALM.ToString()); List <int> productosGeneranIVA = parametroGeneralProductos.Valor.Split('|').Select(x => Convert.ToInt32(x)).ToList(); var medicamentosConIva = productosGeneranIVA.Select(x => new RecepcionProductoDetalleInfo { Producto = new ProductoInfo { ProductoId = x } }).ToList(); decimal importe = detallesProducto.Where(fam => fam.Producto.Familia.FamiliaID != FamiliasEnum.Medicamento.GetHashCode()). Sum(imp => imp.Importe); decimal importeMedicamentosIva = (from det in detallesProducto join med in medicamentosConIva on det.Producto.ProductoId equals med.Producto.ProductoId select det.Importe).Sum(); importe = importe + importeMedicamentosIva; decimal importeIva = importe * (organizacion.Iva.TasaIva / 100); importe = importe + importeIva; decimal cantidad = detallesProducto.Where(fam => fam.Producto.Familia.FamiliaID != FamiliasEnum.Medicamento.GetHashCode()). Intersect(medicamentosConIva). Sum(kgs => kgs.Cantidad); decimal cantidadMedicamentosIva = (from det in detallesProducto join med in medicamentosConIva on det.Producto.ProductoId equals med.Producto.ProductoId select det.Cantidad).Sum(); cantidad += cantidadMedicamentosIva; if (importe > 0) { datos = new DatosPolizaInfo { NumeroReferencia = numeroDocumento, FechaEntrada = fecha, Folio = folio.ToString(), ClaseDocumento = postFijoRef3, Importe = string.Format("{0}", importeIva.ToString("F2")), IndicadorImpuesto = organizacion.Iva.IndicadorIvaRecuperar, Division = organizacion.Division, Renglon = Convert.ToString(linea++), ImporteIva = importe.ToString("F2"), Ref3 = ref3.ToString(), ArchivoFolio = archivoFolio, Cuenta = cuentaIva.CuentaSAP, DescripcionCosto = cuentaIva.Descripcion, PesoOrigen = Math.Round(cantidad, 0), TipoDocumento = textoDocumento, ClaveImpuesto = ClaveImpuesto, CondicionImpuesto = CondicionImpuesto, Concepto = String.Format("{0}-{1} {2} {3} {4}", tipoMovimiento, folio, cantidad.ToString("N0") , unidadMedicion.ClaveUnidad , postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; polizaSalida = GeneraRegistroPoliza(datos); polizaCompraMateriaPrima.Add(polizaSalida); } importe = detallesProducto.Sum(imp => imp.Importe); cantidad = detallesProducto.Sum(kgs => kgs.Cantidad); datos = new DatosPolizaInfo { NumeroReferencia = numeroDocumento, FechaEntrada = fecha, Folio = folio.ToString(), ClaveProveedor = recepcionProducto.Proveedor.CodigoSAP, ClaseDocumento = postFijoRef3, Importe = string.Format("{0}", ((importe + importeIva) * -1).ToString("F2")), IndicadorImpuesto = String.Empty, Renglon = Convert.ToString(linea), ImporteIva = "0", Ref3 = ref3.ToString(), Division = organizacion.Division, ArchivoFolio = archivoFolio, DescripcionCosto = recepcionProducto.Proveedor.Descripcion, PesoOrigen = Math.Round(cantidad, 0), TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1} {2} {3} {4}", tipoMovimiento, folio, cantidad.ToString("N0"), unidadMedicion.ClaveUnidad, postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; polizaSalida = GeneraRegistroPoliza(datos); polizaCompraMateriaPrima.Add(polizaSalida); return(polizaCompraMateriaPrima); }
private IList <PolizaInfo> ObtenerPoliza(DistribucionDeIngredientesInfo distribucionIngredientes) { var polizaPremezcla = new List <PolizaInfo>(); IList <CuentaSAPInfo> cuentasSap = ObtenerCuentasSAP(); IList <UnidadMedicionInfo> unidadesMedicion = ObtenerUnidadesMedicion(); TipoPolizaInfo tipoPoliza = TiposPoliza.FirstOrDefault(clave => clave.TipoPolizaID == TipoPoliza.PolizaPremezcla.GetHashCode()); if (tipoPoliza == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "EL TIPO DE POLIZA", TipoPoliza.PolizaPremezcla)); } string textoDocumento = tipoPoliza.TextoDocumento; string tipoMovimiento = tipoPoliza.ClavePoliza; string postFijoRef3 = tipoPoliza.PostFijoRef3; var renglon = 0; int milisegundo = DateTime.Now.Millisecond; ProductoInfo producto = distribucionIngredientes.Producto; DateTime fecha = distribucionIngredientes.FechaEntrada; int folio = producto.ProductoId; var ref3 = new StringBuilder(); ref3.Append("03"); ref3.Append(Convert.ToString(folio).PadLeft(10, ' ')); ref3.Append(new Random(10).Next(10, 20)); ref3.Append(new Random(30).Next(30, 40)); ref3.Append(milisegundo); ref3.Append(postFijoRef3); var almacenMovimientoBL = new AlmacenMovimientoBL(); string archivoFolio = ObtenerArchivoFolio(fecha); //string numeroReferencia = ObtenerNumeroReferencia; List <DistribucionDeIngredientesOrganizacionInfo> organizaciones = distribucionIngredientes.ListaOrganizaciones; DistribucionDeIngredientesOrganizacionInfo organizacionDistribucion; ClaseCostoProductoInfo claseCostoProducto; CuentaAlmacenSubFamiliaInfo almacenesSubFamilia; CuentaSAPInfo cuentaSap; PolizaInfo poliza; DatosPolizaInfo datos; bool tieneIva = distribucionIngredientes.Iva == 1; bool costosTienenIva = distribucionIngredientes.ListaPremezclaDistribucionCosto.Any(tieneIVA => tieneIVA.Iva); string unidad = unidadesMedicion.Where(clave => clave.UnidadID == producto.UnidadId).Select(uni => uni.ClaveUnidad). FirstOrDefault(); OrganizacionInfo organizacion = null; decimal totalIva = 0; /* Se calcula el costo extra y se proratea entre las organizaciones*/ decimal costoTotal = 0; decimal costoUnitario = 0; organizaciones = organizaciones.Where(cant => cant.CantidadSurtir > 0 || cant.CantidadNueva > 0).ToList(); int cantidad; string numeroReferencia = string.Empty; for (var indexOrganizaciones = 0; indexOrganizaciones < organizaciones.Count; indexOrganizaciones++) //Polizas por organizacion { organizacionDistribucion = organizaciones[indexOrganizaciones]; AlmacenMovimientoInfo movimientoGenerado = almacenMovimientoBL.ObtenerPorId(organizacionDistribucion.AlmaceMovimiento.AlmacenMovimientoID); numeroReferencia = ObtenerNumeroReferenciaFolio(movimientoGenerado.FolioMovimiento); cuentaSap = null; if (organizacionDistribucion.Lote.AlmacenInventario.Almacen.TipoAlmacenID == TipoAlmacenEnum.Enfermeria.GetHashCode() || organizacionDistribucion.Lote.AlmacenInventario.Almacen.TipoAlmacenID == TipoAlmacenEnum.ManejoGanado.GetHashCode()) { IList <CuentaAlmacenSubFamiliaInfo> cuentasAlmacenSubFamilia = ObtenerCostosSubFamilia(organizacionDistribucion.Lote.AlmacenInventario.Almacen.AlmacenID); almacenesSubFamilia = cuentasAlmacenSubFamilia.FirstOrDefault(sub => sub.SubFamiliaID == producto.SubfamiliaId); if (almacenesSubFamilia != null) { cuentaSap = cuentasSap.FirstOrDefault(cuenta => cuenta.CuentaSAPID == almacenesSubFamilia.CuentaSAPID); } } else { IList <ClaseCostoProductoInfo> claseCostosProductos = ObtenerCostosProducto(organizacionDistribucion.Lote.AlmacenInventario.Almacen.AlmacenID); claseCostoProducto = claseCostosProductos.FirstOrDefault(prod => prod.ProductoID == producto.ProductoId); if (claseCostoProducto != null) { cuentaSap = cuentasSap.FirstOrDefault(clave => clave.CuentaSAPID == claseCostoProducto.CuentaSAPID); } } if (cuentaSap == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "NO HAY CONFIGURACION PARA EL PRODUCTO", producto.Descripcion)); } organizacion = ObtenerOrganizacionIVA(organizacionDistribucion.Organizacion.OrganizacionID); cantidad = organizacionDistribucion.CantidadSurtir; if (cantidad == 0) { cantidad = organizacionDistribucion.CantidadNueva; } if (distribucionIngredientes.ListaOrganizaciones.Any()) { costoTotal = distribucionIngredientes.ListaPremezclaDistribucionCosto.Sum(c => c.Importe); costoUnitario = costoTotal / distribucionIngredientes.CantidadTotal; } //Polizas de Cargo por Organizacion datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = fecha, Folio = numeroReferencia, Importe = string.Format("{0}", (organizacionDistribucion.CostoTotal + (costoUnitario * organizacionDistribucion.CantidadSurtir)).ToString("F2")), IndicadorImpuesto = String.Empty, Renglon = Convert.ToString(++renglon), ImporteIva = "0", Ref3 = ref3.ToString(), Cuenta = cuentaSap.CuentaSAP, ArchivoFolio = archivoFolio, DescripcionCosto = cuentaSap.Descripcion, PesoOrigen = Math.Round(Convert.ToDecimal(organizacionDistribucion.CantidadSurtir), 2), Division = organizacion.Division, TipoDocumento = textoDocumento, ClaseDocumento = postFijoRef3, Concepto = String.Format("{0}-{1} {2} {3} {4} ${5} {6}", tipoMovimiento, numeroReferencia, cantidad.ToString("F0"), unidad, producto.Descripcion, (organizacionDistribucion.CostoTotal).ToString("F2"), postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; poliza = GeneraRegistroPoliza(datos); polizaPremezcla.Add(poliza); //Si el cabecero tiene IVA o los costos tienen iva, crea una linea de iva por organizacion en la poliza if (tieneIva || costosTienenIva) { decimal importeIva = tieneIva? organizacionDistribucion.CostoTotal * (organizacion.Iva.TasaIva / 100):0; totalIva += importeIva; CuentaSAPInfo cuentaIva = cuentasSap.FirstOrDefault( clave => clave.CuentaSAP.Equals(organizacion.Iva.CuentaRecuperar.ClaveCuenta)); if (cuentaIva == null) { throw new ExcepcionServicio( string.Format("CUENTA DE IVA NO CONFIGURADA PARA LA ORGANIZACION {0}", organizacion.Descripcion)); } decimal porcientoOrg = (decimal)organizacionDistribucion.CantidadSurtir / (decimal)distribucionIngredientes.CantidadTotal; var totalCostosIva = costosTienenIva? distribucionIngredientes.ListaPremezclaDistribucionCosto.Where(iva => iva.Iva).Sum(sumIva => sumIva.Importe * (organizacion.Iva.TasaIva / 100)):0; decimal porcientoIva = totalCostosIva * porcientoOrg; var totalImporteCostosIva = costosTienenIva ? distribucionIngredientes.ListaPremezclaDistribucionCosto.Where(iva => iva.Iva) .Sum(sumIva => sumIva.Importe) : 0; var porcentajeImporteCostosIva = costosTienenIva ? totalImporteCostosIva * porcientoOrg : 0; //Poliza de Iva de importe + Iva de costos var importeIVA = costosTienenIva && tieneIva ? (organizacionDistribucion.CostoTotal + porcentajeImporteCostosIva) : (costosTienenIva && !tieneIva) ? porcentajeImporteCostosIva : (!costosTienenIva && tieneIva) ? organizacionDistribucion.CostoTotal : 0; datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = fecha, Folio = numeroReferencia, Importe = string.Format("{0}", (importeIva + porcientoIva).ToString("F2")), IndicadorImpuesto = organizacion.Iva.IndicadorIvaRecuperar, Renglon = Convert.ToString(++renglon), ImporteIva = (importeIVA).ToString("F2"), Ref3 = ref3.ToString(), Cuenta = cuentaIva.CuentaSAP, ClaveImpuesto = ClaveImpuesto, CondicionImpuesto = CondicionImpuesto, ArchivoFolio = archivoFolio, DescripcionCosto = cuentaIva.Descripcion, PesoOrigen = Math.Round(Convert.ToDecimal(organizacionDistribucion.CantidadSurtir), 2), Division = organizacion.Division, TipoDocumento = textoDocumento, ClaseDocumento = postFijoRef3, Concepto = String.Format("{0}-{1} {2} {3} {4} ${5} {6}", tipoMovimiento, numeroReferencia, cantidad.ToString("F0"), unidad, producto.Descripcion, (organizacionDistribucion.CostoTotal).ToString("F2"), postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; poliza = GeneraRegistroPoliza(datos); polizaPremezcla.Add(poliza); //Poliza de Costo de la distribucion por organizacion mas IVA pagada al proveedor datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = fecha, Folio = numeroReferencia, Importe = string.Format("{0}", ((importeIva + organizacionDistribucion.CostoTotal) * -1).ToString("F2")), IndicadorImpuesto = String.Empty, Renglon = Convert.ToString(++renglon), ImporteIva = String.Empty, Ref3 = ref3.ToString(), ClaveProveedor = distribucionIngredientes.Proveedor.CodigoSAP, ClaveImpuesto = ClaveImpuesto, CondicionImpuesto = CondicionImpuesto, ArchivoFolio = archivoFolio, DescripcionCosto = distribucionIngredientes.Proveedor.CodigoSAP, PesoOrigen = Math.Round(Convert.ToDecimal(organizacionDistribucion.CantidadSurtir), 2), Division = organizacion.Division, TipoDocumento = textoDocumento, ClaseDocumento = postFijoRef3, Concepto = String.Format("{0}-{1} {2} {3} {4} ${5} {6}", tipoMovimiento, numeroReferencia, cantidad.ToString("F0"), unidad, producto.Descripcion, (organizacionDistribucion.CostoTotal).ToString("F2"), postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; poliza = GeneraRegistroPoliza(datos); polizaPremezcla.Add(poliza); } IList <int> costosConRetencion = distribucionIngredientes.ListaPremezclaDistribucionCosto.Where(x => x.Retencion) .Select(x => x.Costo.CostoID) .ToList(); foreach (var costo in distribucionIngredientes.ListaPremezclaDistribucionCosto) { if (costo.Retencion) { var retencionBL = new RetencionBL(); var retenciones = retencionBL.ObtenerRetencionesConCosto(costosConRetencion); RetencionInfo retencion = null; if (retenciones != null && retenciones.Any()) { retencion = retenciones.FirstOrDefault( costoRet => costoRet.CostoID == costo.Costo.CostoID); } if (retencion != null) { if (!costo.Iva) { renglon++; datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia.ToString(), FechaEntrada = distribucionIngredientes.FechaEntrada, Folio = numeroReferencia, Division = organizacion.Division, ClaveProveedor = costo.Proveedor.CodigoSAP, Importe = string.Format("{0}", (costo.Importe * -1).ToString("F2")), Renglon = Convert.ToString(renglon), ImporteIva = "0", Ref3 = ref3.ToString(), ArchivoFolio = archivoFolio.ToString(), DescripcionCosto = costo.Proveedor.Descripcion, PesoOrigen = organizacionDistribucion.CantidadSurtir, TipoDocumento = textoDocumento, ClaseDocumento = postFijoRef3, Concepto = String.Format("{0}-{1} {2} {3} {4} ${5} {6}", tipoMovimiento, numeroReferencia, organizacionDistribucion.CantidadExistente.ToString("N0"), unidad, costo.Costo.Descripcion, costoUnitario.ToString("N2"), postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; poliza = GeneraRegistroPoliza(datos); polizaPremezcla.Add(poliza); } var parametrosRetencion = new StringBuilder(); parametrosRetencion.Append(String.Format("{0}{1}" , retencion.IndicadorRetencion , retencion.TipoRetencion)); datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia.ToString(), FechaEntrada = distribucionIngredientes.FechaEntrada, Folio = numeroReferencia, Division = organizacion.Division, ClaveProveedor = costo.Proveedor.CodigoSAP, Importe = string.Format("-{0}", "0"), IndicadorImpuesto = parametrosRetencion.ToString(), Renglon = Convert.ToString(renglon), ImporteIva = "0", Ref3 = ref3.ToString(), CodigoRetencion = retencion.IndicadorImpuesto, TipoRetencion = retencion.IndicadorRetencion, ArchivoFolio = archivoFolio.ToString(), DescripcionCosto = costo.Proveedor.Descripcion, PesoOrigen = organizacionDistribucion.CantidadSurtir, TipoDocumento = textoDocumento, ClaseDocumento = postFijoRef3, Concepto = String.Format("{0}-{1} {2} {3} {4} ${5} {6}", tipoMovimiento, numeroReferencia, organizacionDistribucion.CantidadExistente.ToString("N0"), unidad, costo.Costo.Descripcion, costoUnitario.ToString("N2"), postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; poliza = GeneraRegistroPoliza(datos); polizaPremezcla.Add(poliza); } } decimal porcientoOrg = (decimal)organizacionDistribucion.CantidadSurtir / (decimal)distribucionIngredientes.CantidadTotal; var importePorciento = costo.Iva ? (costo.Importe * ((organizacion.Iva.TasaIva / 100) + 1)) * porcientoOrg : costo.Importe * porcientoOrg; var descripcion = costo.TieneCuenta ? costo.CuentaSAP.Descripcion : costo.Proveedor.Descripcion; var cuenta = costo.TieneCuenta ? costo.CuentaSAP.CuentaSAP : costo.Proveedor.CodigoSAP; datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = fecha, Folio = numeroReferencia, Importe = string.Format("{0}", ((importePorciento) * -1).ToString("F2")), IndicadorImpuesto = String.Empty, Renglon = Convert.ToString(++renglon), ImporteIva = String.Empty, Ref3 = ref3.ToString(), Cuenta = String.Empty, ClaveProveedor = String.Empty, ClaveImpuesto = ClaveImpuesto, CondicionImpuesto = CondicionImpuesto, ArchivoFolio = archivoFolio, DescripcionCosto = descripcion, PesoOrigen = Math.Round(Convert.ToDecimal(organizacionDistribucion.CantidadSurtir), 2), Division = organizacion.Division, TipoDocumento = textoDocumento, ClaseDocumento = postFijoRef3, Concepto = String.Format("{0}-{1} {2} {3} {4} ${5} {6}", tipoMovimiento, numeroReferencia, cantidad.ToString("F0"), unidad, descripcion, (organizacionDistribucion.CostoTotal).ToString("F2"), postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; if (costo.TieneCuenta) { datos.Cuenta = cuenta; } else { datos.ClaveProveedor = cuenta; } poliza = GeneraRegistroPoliza(datos); polizaPremezcla.Add(poliza); } } if (!tieneIva && !costosTienenIva) { decimal importe = organizaciones.Sum(imp => imp.CostoTotal) + totalIva; decimal peso = organizaciones.Sum(kg => kg.CantidadSurtir); if (peso == 0) { peso = organizaciones.Sum(kg => kg.CantidadNueva); } bool esCuenta = false; var proveedor = distribucionIngredientes.Proveedor.CodigoSAP; if (!proveedor.StartsWith("0")) { esCuenta = true; } //numeroReferencia = ObtenerNumeroReferencia; datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = fecha, Folio = numeroReferencia, Importe = string.Format("{0}", (distribucionIngredientes.CostoTotal * -1).ToString("F2")), IndicadorImpuesto = String.Empty, Renglon = Convert.ToString(++renglon), ImporteIva = "0", Ref3 = ref3.ToString(), ClaveProveedor = esCuenta ? String.Empty : distribucionIngredientes.Proveedor.CodigoSAP, Cuenta = esCuenta ? distribucionIngredientes.Proveedor.CodigoSAP : String.Empty, ArchivoFolio = archivoFolio, DescripcionCosto = distribucionIngredientes.Proveedor.Descripcion, PesoOrigen = Math.Round(peso, 2), Division = organizacion.Division, TipoDocumento = textoDocumento, ClaseDocumento = postFijoRef3, Concepto = String.Format("{0}-{1} {2} {3} {4} ${5} {6}", tipoMovimiento, numeroReferencia, (peso).ToString("F0"), unidad, producto.Descripcion, (importe).ToString("F2"), postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; poliza = GeneraRegistroPoliza(datos); polizaPremezcla.Add(poliza); } return(polizaPremezcla); }
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); }
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); }
private IList <PolizaInfo> ObtenerPoliza(ContenedorEntradaMateriaPrimaInfo premezcla) { var polizaPremezcla = new List <PolizaInfo>(); OrganizacionInfo organizacion = ObtenerOrganizacionIVA(premezcla.EntradaProducto.Organizacion.OrganizacionID); IList <CuentaSAPInfo> cuentasSap = ObtenerCuentasSAP(); IList <UnidadMedicionInfo> unidadesMedicion = ObtenerUnidadesMedicion(); TipoPolizaInfo tipoPoliza = TiposPoliza.FirstOrDefault(clave => clave.TipoPolizaID == TipoPoliza.PolizaSubProducto.GetHashCode()); if (tipoPoliza == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "EL TIPO DE POLIZA", TipoPoliza.PolizaSubProducto)); } string textoDocumento = tipoPoliza.TextoDocumento; string tipoMovimiento = tipoPoliza.ClavePoliza; string postFijoRef3 = tipoPoliza.PostFijoRef3; IList <ClaseCostoProductoInfo> clasesCostoProducto = ObtenerCostosProducto(premezcla.EntradaProducto.AlmacenMovimiento.Almacen.AlmacenID); ProductoInfo producto; PremezclaDetalleInfo premezclaDetalle; DatosPolizaInfo datos; int folio = premezcla.EntradaProducto.Folio; DateTime fecha = premezcla.EntradaProducto.Fecha; var renglon = 0; int milisegundo = DateTime.Now.Millisecond; var ref3 = new StringBuilder(); ref3.Append("03"); ref3.Append(Convert.ToString(folio).PadLeft(10, ' ')); ref3.Append(new Random(10).Next(10, 20)); ref3.Append(new Random(30).Next(30, 40)); ref3.Append(milisegundo); ref3.Append(postFijoRef3); string archivoFolio = ObtenerArchivoFolio(fecha); string unidad; //string numeroReferencia = string.Format("{0}{1}", folio, ObtenerNumeroReferencia); string numeroReferencia = ObtenerNumeroReferenciaFolio(folio); ClaseCostoProductoInfo costoProducto; CuentaSAPInfo cuentaSap; PolizaInfo poliza; decimal importe = 0; decimal importeDetalle = 0; for (var index = 0; index < premezcla.EntradaProducto.PremezclaInfo.ListaPremezclaDetalleInfos.Count; index++) { premezclaDetalle = premezcla.EntradaProducto.PremezclaInfo.ListaPremezclaDetalleInfos[index]; producto = premezclaDetalle.Producto; unidad = unidadesMedicion.Where(clave => clave.UnidadID == producto.UnidadMedicion.UnidadID).Select( uni => uni.ClaveUnidad).FirstOrDefault(); costoProducto = clasesCostoProducto.FirstOrDefault(clave => clave.ProductoID == producto.ProductoId); if (costoProducto == null) { costoProducto = new ClaseCostoProductoInfo(); } cuentaSap = cuentasSap.FirstOrDefault(cuenta => cuenta.CuentaSAPID == costoProducto.CuentaSAPID); if (cuentaSap == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "NO HAY CONFIGURACION PARA EL PRODUCTO", producto.Descripcion)); } importeDetalle = premezclaDetalle.Kilogramos * premezclaDetalle.Lote.PrecioPromedio; importe += importeDetalle; renglon++; datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = fecha, Folio = folio.ToString(), Importe = string.Format("{0}", (importeDetalle * -1). ToString("F2")), IndicadorImpuesto = String.Empty, Renglon = Convert.ToString(renglon), ImporteIva = "0", Ref3 = ref3.ToString(), Cuenta = cuentaSap.CuentaSAP, ArchivoFolio = archivoFolio, DescripcionCosto = producto.Descripcion, PesoOrigen = Math.Round(premezclaDetalle.Kilogramos, 2), Division = organizacion.Division, TipoDocumento = textoDocumento, ClaseDocumento = postFijoRef3, Concepto = String.Format("{0}-{1} {2} {3} {4} ${5} {6}", tipoMovimiento, folio, premezclaDetalle.Kilogramos.ToString("N2"), unidad, producto.Descripcion, (importeDetalle).ToString("F2"), postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad) }; poliza = GeneraRegistroPoliza(datos); polizaPremezcla.Add(poliza); } producto = premezcla.EntradaProducto.Producto; var productoBL = new ProductoBL(); producto = productoBL.ObtenerPorID(producto); unidad = unidadesMedicion.Where(clave => clave.UnidadID == producto.UnidadMedicion.UnidadID).Select( uni => uni.ClaveUnidad).FirstOrDefault(); costoProducto = clasesCostoProducto.FirstOrDefault(clave => clave.ProductoID == producto.ProductoId); if (costoProducto == null) { costoProducto = new ClaseCostoProductoInfo(); } cuentaSap = cuentasSap.FirstOrDefault(clave => clave.CuentaSAPID == costoProducto.CuentaSAPID); if (cuentaSap == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "NO HAY CONFIGURACION PARA EL PRODUCTO", producto.Descripcion)); } decimal peso = premezcla.EntradaProducto.PremezclaInfo.ListaPremezclaDetalleInfos.Sum( pre => Math.Abs(pre.Kilogramos)); renglon++; datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = fecha, Folio = folio.ToString(), Importe = string.Format("{0}", (importe).ToString("F2")), IndicadorImpuesto = String.Empty, Renglon = Convert.ToString(renglon), ImporteIva = "0", Ref3 = ref3.ToString(), Cuenta = cuentaSap.CuentaSAP, ArchivoFolio = archivoFolio, DescripcionCosto = premezcla.EntradaProducto.Producto.Descripcion, PesoOrigen = Math.Round(peso, 2), Division = organizacion.Division, TipoDocumento = textoDocumento, ClaseDocumento = postFijoRef3, Concepto = String.Format("{0}-{1} {2} {3} {4} ${5} {6}", tipoMovimiento, folio, (peso).ToString("N2"), unidad, premezcla.EntradaProducto.Producto.Descripcion, (importe).ToString("F2"), postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad) }; poliza = GeneraRegistroPoliza(datos); polizaPremezcla.Add(poliza); return(polizaPremezcla); }
private IList <PolizaInfo> ObtenerPoliza(TraspasoMpPaMedInfo traspasoMp) { var polizasSalidaTraspaso = new List <PolizaInfo>(); IList <ClaseCostoProductoInfo> cuentasAlmacenProductoSalida = ObtenerCostosProducto(traspasoMp.AlmacenOrigen.AlmacenID); IList <ClaseCostoProductoInfo> cuentasAlmacenProductoEntrada = ObtenerCostosProducto(traspasoMp.AlmacenDestino.AlmacenID); if (cuentasAlmacenProductoSalida == null) { throw new ExcepcionServicio("No se encuentran cuentas configuradas, para productos del almacén origen"); } if (cuentasAlmacenProductoEntrada == null) { throw new ExcepcionServicio("No se encuentran cuentas configuradas, para productos del almacén de destino"); } TipoPolizaInfo tipoPoliza = TiposPoliza.FirstOrDefault(clave => clave.TipoPolizaID == TipoPoliza.EntradaTraspaso.GetHashCode()); if (tipoPoliza == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "EL TIPO DE POLIZA", TipoPoliza.EntradaTraspaso)); } IList <CuentaSAPInfo> cuentasSap = ObtenerCuentasSAP(); string textoDocumento = tipoPoliza.TextoDocumento; string tipoMovimiento = tipoPoliza.ClavePoliza; string postFijoRef3 = tipoPoliza.PostFijoRef3; var linea = 1; //TO DO REVISAR SI CAMBIARA EL REF 3 var ref3 = new StringBuilder(); ref3.Append("03"); ref3.Append( string.Format("{0}{1}{2}", DateTime.Today.Day, DateTime.Today.Month, DateTime.Today.Year).PadLeft( 10, ' ')); ref3.Append(new Random(10).Next(10, 20)); ref3.Append(new Random(30).Next(30, 40)); ref3.Append(DateTime.Now.Millisecond); ref3.Append(postFijoRef3); var almacenMovimientoBL = new AlmacenMovimientoBL(); AlmacenMovimientoInfo almacenMovimiento = almacenMovimientoBL.ObtenerPorId(traspasoMp.AlmacenMovimientoID); string numeroReferencia = ObtenerNumeroReferenciaFolio(almacenMovimiento.FolioMovimiento); //string numeroReferencia = ObtenerNumeroReferencia; DateTime fecha = traspasoMp.FechaTraspaso; string archivoFolio = ObtenerArchivoFolio(fecha); var organizacionBL = new OrganizacionBL(); OrganizacionInfo organizacionOrigen = organizacionBL.ObtenerPorAlmacenID(traspasoMp.AlmacenOrigen.AlmacenID); if (organizacionOrigen == null) { organizacionOrigen = new OrganizacionInfo { TipoOrganizacion = new TipoOrganizacionInfo() }; } OrganizacionInfo organizacionDestino = organizacionBL.ObtenerPorAlmacenID(traspasoMp.AlmacenDestino.AlmacenID); if (organizacionDestino == null) { organizacionDestino = new OrganizacionInfo { TipoOrganizacion = new TipoOrganizacionInfo() }; } IList <CuentaAlmacenSubFamiliaInfo> cuentasSubFamiliaSalida = ObtenerCostosSubFamilia(traspasoMp.AlmacenOrigen.AlmacenID); IList <CuentaAlmacenSubFamiliaInfo> cuentasSubFamiliaEntrada = ObtenerCostosSubFamilia(traspasoMp.AlmacenDestino.AlmacenID); ParametroOrganizacionInfo parametroCentroCostoOrigen = ObtenerParametroOrganizacionPorClave(organizacionOrigen.OrganizacionID, ParametrosEnum.CTACENTROCOSTOMP.ToString()); if (parametroCentroCostoOrigen == null) { throw new ExcepcionServicio(string.Format("{0}", "CENTRO DE COSTO NO CONFIGURADO")); } ParametroOrganizacionInfo parametroCentroCostoDestino = ObtenerParametroOrganizacionPorClave(organizacionDestino.OrganizacionID, ParametrosEnum.CTACENTROCOSTOMP.ToString()); if (parametroCentroCostoDestino == null) { throw new ExcepcionServicio(string.Format("{0}", "CENTRO DE COSTO NO CONFIGURADO")); } bool afectaCosto; CuentaSAPInfo claveContableCargo; afectaCosto = ValidarAfectacionCuentaCosto(traspasoMp.ProductoOrigen); if (!afectaCosto && (traspasoMp.AlmacenDestino.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.Enfermeria.GetHashCode() || traspasoMp.AlmacenDestino.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.ManejoGanado.GetHashCode() || traspasoMp.AlmacenDestino.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.ReimplanteGanado.GetHashCode()) || traspasoMp.AlmacenDestino.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.GeneralGanadera.GetHashCode()) { var cuentaSapSubFamiliaEntrada = cuentasSubFamiliaEntrada.FirstOrDefault( cuenta => cuenta.SubFamiliaID == traspasoMp.ProductoOrigen.SubFamilia.SubFamiliaID); if (cuentaSapSubFamiliaEntrada == null) { cuentaSapSubFamiliaEntrada = new CuentaAlmacenSubFamiliaInfo(); } claveContableCargo = cuentasSap.FirstOrDefault(sap => sap.CuentaSAPID == cuentaSapSubFamiliaEntrada.CuentaSAPID); } else { var cuentaSapEntrada = cuentasAlmacenProductoEntrada.FirstOrDefault( cuenta => cuenta.ProductoID == traspasoMp.ProductoOrigen.ProductoId); if (cuentaSapEntrada == null) { cuentaSapEntrada = new ClaseCostoProductoInfo(); } claveContableCargo = cuentasSap.FirstOrDefault(sap => sap.CuentaSAPID == cuentaSapEntrada.CuentaSAPID); } if (traspasoMp.AlmacenDestino.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.CentroAcopio.GetHashCode()) { ParametroOrganizacionInfo cuentaMedicamento = ObtenerParametroOrganizacionPorClave(organizacionDestino.OrganizacionID, ParametrosEnum.CuentaMedicamentoTransito.ToString()); if (cuentaMedicamento == null) { cuentaMedicamento = new ParametroOrganizacionInfo { Valor = string.Empty }; } claveContableCargo = cuentasSap.FirstOrDefault( sap => sap.CuentaSAP.Equals(cuentaMedicamento.Valor, StringComparison.InvariantCultureIgnoreCase)); } if (claveContableCargo == null) { throw new ExcepcionServicio(string.Format("No se encontró configurada la cuenta del producto {0}", traspasoMp.ProductoOrigen.ProductoDescripcion)); } linea = 0; linea++; var datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = fecha, Folio = numeroReferencia, ClaseDocumento = postFijoRef3, Importe = string.Format("{0}", traspasoMp.ImporteTraspaso.ToString("F2")), Renglon = Convert.ToString(linea), ImporteIva = "0", Ref3 = ref3.ToString(), Cuenta = claveContableCargo.CuentaSAP, CentroCosto = claveContableCargo.CuentaSAP.StartsWith(PrefijoCuentaCentroCosto) ? parametroCentroCostoDestino.Valor : string.Empty, Division = organizacionDestino.Division, ArchivoFolio = archivoFolio, PesoOrigen = 0, TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1} {2} {3} {4}", tipoMovimiento, numeroReferencia, traspasoMp.ProductoOrigen.ProductoDescripcion, string.Format("{0} {1}.", traspasoMp.CantidadTraspasarDestino.ToString("N2"), traspasoMp.ProductoOrigen.UnidadMedicion.ClaveUnidad), traspasoMp.PrecioTraspasoDestino.ToString("C2")), Sociedad = organizacionDestino.Sociedad, DescripcionProducto = claveContableCargo.Descripcion, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacionDestino.Sociedad), }; PolizaInfo polizaSalida = GeneraRegistroPoliza(datos); polizasSalidaTraspaso.Add(polizaSalida); #region CuentaAbono CuentaSAPInfo claveContableAbono = null; afectaCosto = ValidarAfectacionCuentaCosto(traspasoMp.ProductoOrigen); if (!afectaCosto && (traspasoMp.AlmacenOrigen.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.Enfermeria.GetHashCode() || traspasoMp.AlmacenOrigen.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.ManejoGanado.GetHashCode() || traspasoMp.AlmacenOrigen.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.ReimplanteGanado.GetHashCode()) || traspasoMp.AlmacenDestino.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.GeneralGanadera.GetHashCode()) { var cuentaSapSubFamiliaSalida = cuentasSubFamiliaSalida.FirstOrDefault( cuenta => cuenta.SubFamiliaID == traspasoMp.ProductoOrigen.SubFamilia.SubFamiliaID); if (cuentaSapSubFamiliaSalida == null) { cuentaSapSubFamiliaSalida = new CuentaAlmacenSubFamiliaInfo(); } claveContableAbono = cuentasSap.FirstOrDefault(sap => sap.CuentaSAPID == cuentaSapSubFamiliaSalida.CuentaSAPID); } else { var cuentaSapSalida = cuentasAlmacenProductoSalida.FirstOrDefault( cuenta => cuenta.ProductoID == traspasoMp.ProductoOrigen.ProductoId); if (cuentaSapSalida == null) { cuentaSapSalida = new ClaseCostoProductoInfo(); } claveContableAbono = cuentasSap.FirstOrDefault(sap => sap.CuentaSAPID == cuentaSapSalida.CuentaSAPID); } if (traspasoMp.AlmacenOrigen.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.CentroAcopio.GetHashCode()) { ParametroOrganizacionInfo cuentaMedicamento = ObtenerParametroOrganizacionPorClave(organizacionOrigen.OrganizacionID, ParametrosEnum.CuentaMedicamentoTransito.ToString()); if (cuentaMedicamento == null) { cuentaMedicamento = new ParametroOrganizacionInfo { Valor = string.Empty }; } claveContableAbono = cuentasSap.FirstOrDefault( sap => sap.CuentaSAP.Equals(cuentaMedicamento.Valor, StringComparison.InvariantCultureIgnoreCase)); } if (claveContableAbono == null) { throw new ExcepcionServicio(string.Format("No se encontró configurada la cuenta del producto {0}", traspasoMp.ProductoOrigen.ProductoDescripcion)); } #endregion CuentaAbono linea++; datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = fecha, Folio = numeroReferencia, ClaseDocumento = postFijoRef3, Importe = string.Format("{0}", (traspasoMp.ImporteTraspaso * -1).ToString("F2")), Renglon = Convert.ToString(linea), ImporteIva = "0", Ref3 = ref3.ToString(), Cuenta = claveContableAbono.CuentaSAP, ArchivoFolio = archivoFolio, CentroCosto = claveContableAbono.CuentaSAP.StartsWith(PrefijoCuentaCentroCosto) ? parametroCentroCostoOrigen.Valor : string.Empty, Division = organizacionOrigen.Division, PesoOrigen = 0, TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1} {2} {3} {4}", tipoMovimiento, numeroReferencia, traspasoMp.ProductoOrigen.ProductoDescripcion, string.Format("{0} {1}.", traspasoMp.CantidadTraspasarOrigen.ToString("N2"), traspasoMp.ProductoOrigen.UnidadMedicion.ClaveUnidad), traspasoMp.PrecioTraspasoOrigen.ToString("C2")), Sociedad = organizacionOrigen.Sociedad, DescripcionProducto = claveContableAbono.Descripcion, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacionOrigen.Sociedad), }; polizaSalida = GeneraRegistroPoliza(datos); polizasSalidaTraspaso.Add(polizaSalida); return(polizasSalidaTraspaso); }
private IList <PolizaInfo> ObtenerPoliza(InterfaceSalidaTraspasoInfo interfaceSalidaTraspaso, List <InterfaceSalidaTraspasoCostoInfo> interfaceSalidaTraspasoCosto) { var polizasSalidaTraspaso = new List <PolizaInfo>(); IList <CuentaSAPInfo> cuentasSap = ObtenerCuentasSAP(); TipoPolizaInfo tipoPoliza = TiposPoliza.FirstOrDefault( clave => clave.TipoPolizaID == TipoPoliza.PolizaSacrificioTraspasoGanado.GetHashCode()); if (tipoPoliza == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "EL TIPO DE POLIZA", TipoPoliza.PolizaSacrificioTraspasoGanado)); } string textoDocumento = tipoPoliza.TextoDocumento; string postFijoRef3 = tipoPoliza.PostFijoRef3; string prefijoConcepto = tipoPoliza.ClavePoliza; OrganizacionInfo organizacionDestino = ObtenerOrganizacionIVA(interfaceSalidaTraspaso.OrganizacionDestino.OrganizacionID); OrganizacionInfo organizacionOrigen = ObtenerOrganizacionIVA(interfaceSalidaTraspaso.OrganizacionId); string divisionOrigen = organizacionOrigen.Division; long folioTraspaso = interfaceSalidaTraspaso.FolioTraspaso; List <LoteInfo> lotes = interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle.Select(lote => lote.Lote).ToList(); var costoBL = new CostoBL(); IList <CostoInfo> costos = costoBL.ObtenerTodos(EstatusEnum.Activo); List <InterfaceSalidaTraspasoCostoInfo> animalesPorLote; int loteID; const string COMPLEMENTO_REF1 = "czas."; const string UNIDAD_MOVIMIENTO = "Kgs."; const string DESCRIPCION_MOVIMIENTO = "CABEZAS"; DateTime fechaEnvio = interfaceSalidaTraspaso.FechaEnvio; ParametroOrganizacionInfo parametroOrganizacion = ObtenerParametroOrganizacionPorClave(organizacionOrigen.OrganizacionID, ParametrosEnum.CTACENTROCOSTOENG.ToString()); for (var indexLotes = 0; indexLotes < lotes.Count; indexLotes++) { Thread.Sleep(999); var ref3 = new StringBuilder(); ref3.Append("03"); ref3.Append(Convert.ToString(folioTraspaso).PadLeft(10, ' ')); ref3.Append(new Random(10).Next(10, 20)); ref3.Append(new Random(30).Next(30, 40)); ref3.Append(DateTime.Now.Millisecond); ref3.Append(postFijoRef3); var archivoFolio = new StringBuilder(ObtenerArchivoFolio(fechaEnvio)); //var numeroDocumento = // new StringBuilder(string.Format("{0}{1}", folioTraspaso, ObtenerNumeroReferencia)); var numeroDocumento = ObtenerNumeroReferenciaFolio(folioTraspaso); loteID = lotes[indexLotes].LoteID; animalesPorLote = (from ani in interfaceSalidaTraspasoCosto from movs in interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle where movs.Lote.LoteID == loteID && ani.InterfaceSalidaTraspasoDetalle.InterfaceSalidaTraspasoDetalleID == movs.InterfaceSalidaTraspasoDetalleID orderby ani.InterfaceSalidaTraspasoCostoID, ani.AnimalID select ani).ToList(); var renglon = 1; if (animalesPorLote.Any()) { int cabezas = interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle.Where( loteId => loteId.Lote.LoteID == loteID).Select( cabe => cabe.Cabezas).FirstOrDefault(); List <long> animalesAFacturar = ObtenerAnimalesPorFacturar(animalesPorLote, cabezas); animalesPorLote = animalesPorLote.Join(animalesAFacturar, lote => lote.AnimalID, id => id, (lote, id) => lote). ToList(); var interfaceSalidaTraspasoCostoBL = new InterfaceSalidaTraspasoCostoBL(); interfaceSalidaTraspasoCostoBL.ActualizarFacturado(animalesAFacturar); if (animalesPorLote.Any()) { if (animalesPorLote.Any()) { animalesPorLote = animalesPorLote .GroupBy(costoAnimal => costoAnimal.Costo.CostoID) .Select(dinero => new InterfaceSalidaTraspasoCostoInfo { AnimalID = dinero.Select(id => id.AnimalID).FirstOrDefault(), Costo = new CostoInfo { CostoID = dinero.Key }, Importe = dinero.Sum(imp => imp.Importe), }).ToList(); ClaveContableInfo claveContableDestino; ClaveContableInfo claveContableOrigen; CostoInfo costo; CuentaSAPInfo cuentaSapDestino; CuentaSAPInfo cuentaSapOrigen; DatosPolizaInfo datos; PolizaInfo polizaSalida; decimal pesoOrigen = interfaceSalidaTraspaso.PesoBruto - interfaceSalidaTraspaso.PesoTara; InterfaceSalidaTraspasoCostoInfo animalCosto; for (var indexCostos = 0; indexCostos < animalesPorLote.Count; indexCostos++) { animalCosto = animalesPorLote[indexCostos]; costo = costos.FirstOrDefault( id => id.CostoID == animalCosto.Costo.CostoID); claveContableDestino = ObtenerCuentaInventario(costo , organizacionDestino.OrganizacionID , TipoPoliza.SalidaGanado); claveContableOrigen = ObtenerCuentaInventario(costo , organizacionOrigen.OrganizacionID , TipoPoliza. PolizaSacrificioTraspasoGanado); cuentaSapDestino = cuentasSap.FirstOrDefault( clave => clave.CuentaSAP.Equals(claveContableDestino.Valor)); if (cuentaSapDestino == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "NO SE CUENTA CON CONFIGURACIÓN PARA CUENTA DE INVENTARIO", claveContableDestino.Valor)); } cuentaSapOrigen = cuentasSap.FirstOrDefault( clave => clave.CuentaSAP.Equals(claveContableOrigen.Valor)); if (cuentaSapOrigen == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "NO SE CUENTA CON CONFIGURACIÓN PARA CUENTA DE TRANSITO", claveContableOrigen.Valor)); } datos = new DatosPolizaInfo { NumeroReferencia = numeroDocumento, FechaEntrada = fechaEnvio, Folio = folioTraspaso.ToString(), CabezasRecibidas = cabezas.ToString(), NumeroDocumento = folioTraspaso.ToString(), ClaseDocumento = postFijoRef3, Importe = string.Format("{0}", Cancelacion ? (animalCosto.Importe * -1).ToString("F2") : animalCosto.Importe.ToString("F2")), IndicadorImpuesto = String.Empty, Renglon = Convert.ToString(renglon++), Cabezas = Convert.ToString(cabezas), ImporteIva = "0", Ref3 = ref3.ToString(), ArchivoFolio = archivoFolio.ToString(), DescripcionCosto = cuentaSapOrigen.Descripcion, Cuenta = cuentaSapOrigen.CuentaSAP, CentroCosto = cuentaSapOrigen.CuentaSAP.StartsWith(PrefijoCuentaCentroCosto) ? parametroOrganizacion.Valor : string.Empty, PesoOrigen = pesoOrigen, Division = divisionOrigen, ComplementoRef1 = COMPLEMENTO_REF1, TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1} ,{2} {3}, {4} {5}", prefijoConcepto, folioTraspaso, cabezas, DESCRIPCION_MOVIMIENTO, pesoOrigen.ToString("N0"), UNIDAD_MOVIMIENTO), Sociedad = organizacionDestino.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacionDestino.Sociedad), }; polizaSalida = GeneraRegistroPoliza(datos); polizasSalidaTraspaso.Add(polizaSalida); datos = new DatosPolizaInfo { NumeroReferencia = numeroDocumento, FechaEntrada = fechaEnvio, Folio = folioTraspaso.ToString(), CabezasRecibidas = cabezas.ToString(), NumeroDocumento = folioTraspaso.ToString(), ClaseDocumento = postFijoRef3, Importe = string.Format("{0}", Cancelacion ? animalCosto.Importe.ToString("F2") : (animalCosto.Importe * -1).ToString("F2")), IndicadorImpuesto = String.Empty, Renglon = Convert.ToString(renglon++), Cabezas = Convert.ToString(cabezas), ImporteIva = "0", Ref3 = ref3.ToString(), ArchivoFolio = archivoFolio.ToString(), DescripcionCosto = cuentaSapDestino.Descripcion, Cuenta = cuentaSapDestino.CuentaSAP, PesoOrigen = pesoOrigen, Division = divisionOrigen, ComplementoRef1 = COMPLEMENTO_REF1, TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1} ,{2} {3}, {4} {5}", prefijoConcepto, folioTraspaso, cabezas, DESCRIPCION_MOVIMIENTO, pesoOrigen.ToString("N0"), UNIDAD_MOVIMIENTO), Sociedad = organizacionDestino.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacionDestino.Sociedad), }; polizaSalida = GeneraRegistroPoliza(datos); polizasSalidaTraspaso.Add(polizaSalida); } } } } } return(polizasSalidaTraspaso); }
private IList <PolizaInfo> ObtenerPoliza(GastoInventarioInfo gastoInventario) { var polizasGastosInventario = new List <PolizaInfo>(); var costos = new List <int> { gastoInventario.Costo.CostoID }; var retencionBL = new RetencionBL(); var retenciones = retencionBL.ObtenerRetencionesConCosto(costos); IList <CuentaSAPInfo> cuentasSap = ObtenerCuentasSAP(); TipoPolizaInfo tipoPoliza = TiposPoliza.FirstOrDefault(clave => clave.TipoPolizaID == TipoPoliza.GastosInventario.GetHashCode()); if (tipoPoliza == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "EL TIPO DE POLIZA", TipoPoliza.GastosInventario)); } string textoDocumento = tipoPoliza.TextoDocumento; string tipoMovimiento = tipoPoliza.ClavePoliza; string postFijoRef3 = tipoPoliza.PostFijoRef3; var ref3 = new StringBuilder(); ref3.Append("03"); ref3.Append( string.Format("{0}{1}{2}", DateTime.Today.Day, DateTime.Today.Month, DateTime.Today.Year).PadLeft( 10, ' ')); ref3.Append(new Random(10).Next(10, 20)); ref3.Append(new Random(30).Next(30, 40)); ref3.Append(DateTime.Now.Millisecond); ref3.Append(postFijoRef3); //string numeroReferencia = ObtenerNumeroReferencia; string numeroReferencia = ObtenerNumeroReferenciaFolio(gastoInventario.FolioGasto); DateTime fecha = gastoInventario.FechaGasto; string archivoFolio = ObtenerArchivoFolio(fecha); OrganizacionInfo organizacion = ObtenerOrganizacionIVA(gastoInventario.Organizacion.OrganizacionID); if (organizacion == null) { organizacion = new OrganizacionInfo { TipoOrganizacion = new TipoOrganizacionInfo() }; } bool esProveedor = gastoInventario.Proveedor != null && gastoInventario.Proveedor.ProveedorID > 0; bool tieneRetencion = gastoInventario.Retencion; var renglon = 0; ClaveContableInfo claveContableInfo = ObtenerCuentaInventario(gastoInventario.Costo , gastoInventario.Organizacion.OrganizacionID , 0); CuentaSAPInfo cuentaSapProvision = null; if (!esProveedor) { cuentaSapProvision = cuentasSap.FirstOrDefault( clave => clave.CuentaSAPID == gastoInventario.CuentaSAP.CuentaSAPID); if (cuentaSapProvision == null) { cuentaSapProvision = cuentasSap.FirstOrDefault( clave => clave.CuentaSAP.Equals(gastoInventario.CuentaGasto, StringComparison.InvariantCultureIgnoreCase)); if (cuentaSapProvision == null) { throw new ExcepcionServicio( string.Format("No se encuentra configurada la cuenta de provisión, para el costo {0}", gastoInventario.Costo.Descripcion)); } } } string complementoConcepto; if (gastoInventario.Corral != null) { complementoConcepto = string.Format("Corral {0}", gastoInventario.Corral.Codigo); } else { complementoConcepto = string.Format("{0} Corrales", gastoInventario.TotalCorrales); } PolizaInfo polizaEntrada; if (esProveedor) { if (!gastoInventario.IVA && !tieneRetencion) { renglon++; var datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = gastoInventario.FechaGasto, Folio = gastoInventario.FolioGasto.ToString(CultureInfo.InvariantCulture), ClaseDocumento = postFijoRef3, Importe = string.Format("{0}", Cancelacion ? (gastoInventario.Importe * -1).ToString("F2") : gastoInventario.Importe.ToString("F2")), Renglon = Convert.ToString(renglon), Division = organizacion.Division, ImporteIva = "0", Ref3 = ref3.ToString(), Cuenta = claveContableInfo.Valor, ArchivoFolio = archivoFolio, DescripcionCosto = claveContableInfo.Descripcion, PesoOrigen = 0, TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1},{2}", tipoMovimiento, gastoInventario.FolioGasto , complementoConcepto), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; polizaEntrada = GeneraRegistroPoliza(datos); polizasGastosInventario.Add(polizaEntrada); renglon++; datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = gastoInventario.FechaGasto, Folio = gastoInventario.FolioGasto.ToString(CultureInfo.InvariantCulture), ClaveProveedor = gastoInventario.Proveedor.CodigoSAP, ClaseDocumento = postFijoRef3, Importe = string.Format("{0}", Cancelacion ? gastoInventario.Importe.ToString("F2") : (gastoInventario.Importe * -1).ToString("F2")), Renglon = Convert.ToString(renglon), ImporteIva = "0", Ref3 = ref3.ToString(), ArchivoFolio = archivoFolio, DescripcionCosto = gastoInventario.Proveedor.Descripcion, PesoOrigen = 0, Division = organizacion.Division, TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1},{2}", tipoMovimiento, gastoInventario.FolioGasto , complementoConcepto), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; polizaEntrada = GeneraRegistroPoliza(datos); polizasGastosInventario.Add(polizaEntrada); } else { if (gastoInventario.IVA) { CuentaSAPInfo cuentaIva = cuentasSap.FirstOrDefault( clave => clave.CuentaSAP.Equals(organizacion.Iva.CuentaRecuperar.ClaveCuenta)); if (cuentaIva == null) { throw new ExcepcionServicio(string.Format("No se encuentra configurada la cuenta de iva, para la organización.")); } renglon++; var importeIva = gastoInventario.Importe * (organizacion.Iva.TasaIva / 100); var datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = gastoInventario.FechaGasto, Folio = gastoInventario.FolioGasto.ToString(CultureInfo.InvariantCulture), Division = organizacion.Division, ClaseDocumento = postFijoRef3, Importe = string.Format("{0}", Cancelacion ? (gastoInventario.Importe * -1).ToString("F2") : gastoInventario.Importe.ToString("F2")), Renglon = Convert.ToString(renglon), ImporteIva = "0", Ref3 = ref3.ToString(), Cuenta = claveContableInfo.Valor, ArchivoFolio = archivoFolio, DescripcionCosto = claveContableInfo.Descripcion, PesoOrigen = 0, TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1},{2}", tipoMovimiento, gastoInventario.FolioGasto , complementoConcepto), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; polizaEntrada = GeneraRegistroPoliza(datos); polizasGastosInventario.Add(polizaEntrada); renglon++; datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = gastoInventario.FechaGasto, Folio = gastoInventario.FolioGasto.ToString(CultureInfo.InvariantCulture), ClaseDocumento = postFijoRef3, Importe = string.Format("{0}", Cancelacion ? (importeIva * -1).ToString("F2") : importeIva.ToString("F2")) , Renglon = Convert.ToString(renglon), ImporteIva = gastoInventario.Importe.ToString("F2"), ClaveImpuesto = ClaveImpuesto, CondicionImpuesto = CondicionImpuesto, IndicadorImpuesto = organizacion.Iva.IndicadorIvaRecuperar, Ref3 = ref3.ToString(), Division = organizacion.Division, Cuenta = organizacion.Iva.CuentaRecuperar.ClaveCuenta, ArchivoFolio = archivoFolio, DescripcionCosto = cuentaIva.Descripcion, PesoOrigen = 0, TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1},{2}", tipoMovimiento, gastoInventario.FolioGasto , complementoConcepto), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; polizaEntrada = GeneraRegistroPoliza(datos); polizasGastosInventario.Add(polizaEntrada); renglon++; datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = gastoInventario.FechaGasto, Folio = gastoInventario.FolioGasto.ToString(CultureInfo.InvariantCulture), Division = organizacion.Division, ClaveProveedor = gastoInventario.Proveedor.CodigoSAP, ClaseDocumento = postFijoRef3, Importe = string.Format("{0}", Cancelacion ? (gastoInventario.Importe + importeIva).ToString("F2") : ((gastoInventario.Importe + importeIva) * -1).ToString("F2")), Renglon = Convert.ToString(renglon), ImporteIva = "0", Ref3 = ref3.ToString(), ArchivoFolio = archivoFolio, DescripcionCosto = gastoInventario.Proveedor.Descripcion, PesoOrigen = 0, TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1},{2}", tipoMovimiento, gastoInventario.FolioGasto , complementoConcepto), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; polizaEntrada = GeneraRegistroPoliza(datos); polizasGastosInventario.Add(polizaEntrada); } if (tieneRetencion) { RetencionInfo retencion; if (retenciones != null && retenciones.Any()) { retencion = retenciones.Where( costo => costo.CostoID.Equals(gastoInventario.Costo.CostoID)). Select(ret => ret).FirstOrDefault(); if (retencion == null) { throw new ExcepcionServicio(string.Format("No se encuentra configurada retención para el costo {0}", gastoInventario.Costo.Descripcion)); } } else { throw new ExcepcionServicio(string.Format("No se encuentra configurada retención para el costo {0}", gastoInventario.Costo.Descripcion)); } var parametrosRetencion = new StringBuilder(); parametrosRetencion.Append(String.Format("{0}{1}" , retencion.IndicadorRetencion , retencion.TipoRetencion)); var datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = gastoInventario.FechaGasto, Folio = gastoInventario.FolioGasto.ToString(CultureInfo.InvariantCulture), Division = organizacion.Division, ClaveProveedor = gastoInventario.Proveedor.CodigoSAP, ClaseDocumento = postFijoRef3, IndicadorImpuesto = parametrosRetencion.ToString(), Importe = string.Format("{0}{1}", Cancelacion ? string.Empty : "-", "0"), Renglon = Convert.ToString(renglon), ImporteIva = "0", Ref3 = ref3.ToString(), CodigoRetencion = retencion.IndicadorImpuesto, TipoRetencion = retencion.IndicadorRetencion, ArchivoFolio = archivoFolio, DescripcionCosto = gastoInventario.Proveedor.Descripcion, PesoOrigen = 0, TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1},{2}", tipoMovimiento, gastoInventario.FolioGasto , complementoConcepto), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; polizaEntrada = GeneraRegistroPoliza(datos); polizasGastosInventario.Add(polizaEntrada); if (!gastoInventario.IVA) { renglon++; datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = gastoInventario.FechaGasto, Folio = gastoInventario.FolioGasto.ToString(CultureInfo.InvariantCulture), Division = organizacion.Division, ClaveProveedor = gastoInventario.Proveedor.CodigoSAP, ClaseDocumento = postFijoRef3, Importe = string.Format("{0}", Cancelacion ? gastoInventario.Importe.ToString("F2") : (gastoInventario.Importe * -1).ToString("F2")) , Renglon = Convert.ToString(renglon), ImporteIva = "0", Ref3 = ref3.ToString(), ArchivoFolio = archivoFolio, DescripcionCosto = gastoInventario.Proveedor.Descripcion, PesoOrigen = 0, TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1},{2}", tipoMovimiento, gastoInventario.FolioGasto , complementoConcepto), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; polizaEntrada = GeneraRegistroPoliza(datos); polizasGastosInventario.Add(polizaEntrada); renglon++; datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = gastoInventario.FechaGasto, Folio = gastoInventario.FolioGasto.ToString(CultureInfo.InvariantCulture), Division = organizacion.Division, ClaseDocumento = postFijoRef3, Importe = string.Format("{0}", Cancelacion ? (gastoInventario.Importe * -1).ToString("F2") : gastoInventario.Importe.ToString("F2")), Renglon = Convert.ToString(renglon), ImporteIva = "0", Ref3 = ref3.ToString(), Cuenta = claveContableInfo.Valor, ArchivoFolio = archivoFolio, DescripcionCosto = claveContableInfo.Descripcion, PesoOrigen = 0, TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1},{2}", tipoMovimiento, gastoInventario.FolioGasto , complementoConcepto), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; polizaEntrada = GeneraRegistroPoliza(datos); polizasGastosInventario.Add(polizaEntrada); } } } } else { renglon++; var datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = gastoInventario.FechaGasto, Folio = gastoInventario.FolioGasto.ToString(CultureInfo.InvariantCulture), Division = organizacion.Division, ClaseDocumento = postFijoRef3, Importe = string.Format("{0}", Cancelacion ? (gastoInventario.Importe * -1).ToString("F2") : gastoInventario.Importe.ToString("F2")), Renglon = Convert.ToString(renglon), ImporteIva = "0", Ref3 = ref3.ToString(), Cuenta = claveContableInfo.Valor, ArchivoFolio = archivoFolio, DescripcionCosto = claveContableInfo.Descripcion, PesoOrigen = 0, TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1},{2}", tipoMovimiento, gastoInventario.FolioGasto , complementoConcepto), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; polizaEntrada = GeneraRegistroPoliza(datos); polizasGastosInventario.Add(polizaEntrada); renglon++; datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = gastoInventario.FechaGasto, Folio = gastoInventario.FolioGasto.ToString(CultureInfo.InvariantCulture), Division = organizacion.Division, ClaseDocumento = postFijoRef3, Importe = string.Format("{0}", Cancelacion ? gastoInventario.Importe.ToString("F2") : (gastoInventario.Importe * -1).ToString("F2")), CentroCosto = gastoInventario.CentroCosto, Renglon = Convert.ToString(renglon), ImporteIva = "0", Ref3 = ref3.ToString(), Cuenta = cuentaSapProvision.CuentaSAP, ArchivoFolio = archivoFolio, DescripcionCosto = cuentaSapProvision.Descripcion, PesoOrigen = 0, TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1},{2}", tipoMovimiento, gastoInventario.FolioGasto , complementoConcepto), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; polizaEntrada = GeneraRegistroPoliza(datos); polizasGastosInventario.Add(polizaEntrada); } return(polizasGastosInventario); }
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(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); }
private IList <PolizaInfo> ObtenerPoliza(PolizaContratoModel datosContrato) { var polizasContrato = new List <PolizaInfo>(); long folioPedido = datosContrato.AlmacenMovimiento.FolioMovimiento; int organizacionID = datosContrato.Contrato.Organizacion.OrganizacionID; DateTime fechaPedido = datosContrato.Contrato.Fecha; int miliSegunda = DateTime.Now.Millisecond; string archivoFolio = ObtenerArchivoFolio(fechaPedido); OrganizacionInfo organizacion = ObtenerOrganizacionIVA(organizacionID); TipoPolizaInfo tipoPoliza = TiposPoliza.FirstOrDefault( clave => clave.TipoPolizaID == TipoPoliza.PolizaContratoOtrosCostos.GetHashCode()); if (tipoPoliza == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "EL TIPO DE POLIZA", TipoPoliza.PolizaContratoOtrosCostos)); } string textoDocumento = tipoPoliza.TextoDocumento; string tipoMovimiento = tipoPoliza.ClavePoliza; string postFijoRef3 = tipoPoliza.PostFijoRef3; PolizaInfo poliza; var renglon = 0; var ref3 = new StringBuilder(); ref3.Append("03"); ref3.Append(Convert.ToString(folioPedido).PadLeft(10, ' ')); ref3.Append(new Random(10).Next(10, 20)); ref3.Append(new Random(30).Next(30, 40)); ref3.Append(miliSegunda); ref3.Append(postFijoRef3); //string numeroDocumento = ObtenerNumeroReferencia; string numeroDocumento = ObtenerNumeroReferenciaFolio(datosContrato.AlmacenMovimiento.FolioMovimiento); IList <CuentaSAPInfo> cuentasSap = ObtenerCuentasSAP(); List <CostoInfo> costos = datosContrato.OtrosCostos; CostoInfo costo; IList <UnidadMedicionInfo> unidadesMedicion = ObtenerUnidadesMedicion(); UnidadMedicionInfo unidadMedicion; IList <ProductoInfo> productos = ObtenerProductos(); ProductoInfo producto; DatosPolizaInfo datos; IList <int> costosConRetencion = costos.Select(cos => cos.CostoID).ToList(); for (var indexCostos = 0; indexCostos < costos.Count; indexCostos++) { costo = costos[indexCostos]; bool esProveedor = costo.Proveedor != null && !string.IsNullOrWhiteSpace(costo.Proveedor.CodigoSAP); bool tieneIva = costo.AplicaIva; bool tieneRetencion = costo.AplicaRetencion; fechaPedido = costo.FechaCosto != DateTime.MinValue ? costo.FechaCosto : fechaPedido; producto = productos.FirstOrDefault(id => id.ProductoId == datosContrato.Contrato.Producto.ProductoId); unidadMedicion = unidadesMedicion.FirstOrDefault(uni => uni.UnidadID == producto.UnidadId); #region Es Proveedor if (esProveedor) { #region Sin IVA ni Retencion if (!tieneIva && !tieneRetencion) { renglon++; datos = new DatosPolizaInfo { NumeroReferencia = numeroDocumento, FechaEntrada = fechaPedido, Folio = folioPedido.ToString(), Importe = string.Format("{0}", costo.ImporteCosto.ToString("F2")), IndicadorImpuesto = String.Empty, Renglon = Convert.ToString(renglon), ImporteIva = "0", Ref3 = ref3.ToString(), Cuenta = datosContrato.Contrato.Cuenta.CuentaSAP, ArchivoFolio = archivoFolio, DescripcionCosto = datosContrato.Contrato.Cuenta.Descripcion, PesoOrigen = Math.Round(Convert.ToDecimal(datosContrato.Contrato.Cantidad), 0), Division = organizacion.Division, TipoDocumento = textoDocumento, ClaseDocumento = postFijoRef3, Concepto = String.Format("{0}-{1} {2} {3} {4} {5} {6}", tipoMovimiento, folioPedido, costo.ToneladasCosto.ToString("N0"), unidadMedicion.ClaveUnidad, string.IsNullOrWhiteSpace(producto.Descripcion) ? producto.ProductoDescripcion : producto.Descripcion, costo.ImporteCosto.ToString("C2"), postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; poliza = GeneraRegistroPoliza(datos); polizasContrato.Add(poliza); renglon++; datos = new DatosPolizaInfo { NumeroReferencia = numeroDocumento, FechaEntrada = fechaPedido, Folio = folioPedido.ToString(), ClaveProveedor = costo.Proveedor.CodigoSAP, Importe = string.Format("{0}", (costo.ImporteCosto * -1).ToString("F2")), IndicadorImpuesto = String.Empty, Renglon = Convert.ToString(renglon), Division = organizacion.Division, ImporteIva = "0", Ref3 = ref3.ToString(), ArchivoFolio = archivoFolio, DescripcionCosto = costo.Proveedor.Descripcion, PesoOrigen = Math.Round(Convert.ToDecimal(datosContrato.Contrato.Cantidad), 0), ClaseDocumento = postFijoRef3, TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1} {2} {3} {4} {5} {6}", tipoMovimiento, folioPedido, costo.ToneladasCosto.ToString("N0"), unidadMedicion.ClaveUnidad, string.IsNullOrWhiteSpace(producto.Descripcion) ? producto.ProductoDescripcion : producto.Descripcion, costo.ImporteCosto.ToString("C2"), postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; poliza = GeneraRegistroPoliza(datos); polizasContrato.Add(poliza); } #endregion Sin IVA ni Retencion else { #region Con IVA if (tieneIva) { CuentaSAPInfo cuentaIva = cuentasSap.FirstOrDefault( clave => clave.CuentaSAP.Equals(organizacion.Iva.CuentaRecuperar.ClaveCuenta)); if (cuentaIva == null) { cuentaIva = new CuentaSAPInfo { Descripcion = string.Empty }; } renglon++; var importeIva = (costo.ImporteCosto) * (organizacion.Iva.TasaIva / 100); datos = new DatosPolizaInfo { NumeroReferencia = numeroDocumento, FechaEntrada = fechaPedido, Folio = folioPedido.ToString(), Division = organizacion.Division, ClaveProveedor = String.Empty, Importe = string.Format("{0}", costo.ImporteCosto.ToString("F2")), IndicadorImpuesto = String.Empty, Renglon = Convert.ToString(renglon), ImporteIva = "0", Ref3 = ref3.ToString(), Cuenta = datosContrato.Contrato.Cuenta.CuentaSAP, ArchivoFolio = archivoFolio, DescripcionCosto = producto.Descripcion, PesoOrigen = Math.Round(Convert.ToDecimal(datosContrato.Contrato.Cantidad), 0), TipoDocumento = textoDocumento, ClaseDocumento = postFijoRef3, Concepto = String.Format("{0}-{1} {2} {3} {4} {5} {6}", tipoMovimiento, folioPedido, costo.ToneladasCosto.ToString("N0"), unidadMedicion.ClaveUnidad, string.IsNullOrWhiteSpace(producto.Descripcion) ? producto.ProductoDescripcion : producto.Descripcion, costo.ImporteCosto.ToString("C2"), postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; poliza = GeneraRegistroPoliza(datos); polizasContrato.Add(poliza); renglon++; datos = new DatosPolizaInfo { NumeroReferencia = numeroDocumento, FechaEntrada = fechaPedido, Folio = folioPedido.ToString(), ClaveProveedor = String.Empty, Importe = string.Format("{0}", importeIva.ToString("F2")), Renglon = Convert.ToString(renglon), ImporteIva = costo.ImporteCosto.ToString("F2"), IndicadorImpuesto = organizacion.Iva.IndicadorIvaRecuperar, ClaveImpuesto = ClaveImpuesto, CondicionImpuesto = CondicionImpuesto, Ref3 = ref3.ToString(), Division = organizacion.Division, Cuenta = organizacion.Iva.CuentaRecuperar.ClaveCuenta, ArchivoFolio = archivoFolio, DescripcionCosto = cuentaIva.Descripcion, PesoOrigen = Math.Round(Convert.ToDecimal(datosContrato.Contrato.Cantidad), 0), TipoDocumento = textoDocumento, ClaseDocumento = postFijoRef3, Concepto = String.Format("{0}-{1} {2} {3} {4} {5} {6}", tipoMovimiento, folioPedido, costo.ToneladasCosto.ToString("N0"), unidadMedicion.ClaveUnidad, string.IsNullOrWhiteSpace(producto.Descripcion) ? producto.ProductoDescripcion : producto.Descripcion, costo.ImporteCosto.ToString("C2"), postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; poliza = GeneraRegistroPoliza(datos); polizasContrato.Add(poliza); renglon++; datos = new DatosPolizaInfo { NumeroReferencia = numeroDocumento.ToString(), FechaEntrada = fechaPedido, Folio = folioPedido.ToString(), Division = organizacion.Division, ClaveProveedor = costo.Proveedor.CodigoSAP, Importe = string.Format("{0}", ((costo.ImporteCosto + importeIva) * -1).ToString("F2")), IndicadorImpuesto = String.Empty, Renglon = Convert.ToString(renglon), ImporteIva = "0", Ref3 = ref3.ToString(), ArchivoFolio = archivoFolio, DescripcionCosto = costo.Proveedor.Descripcion, PesoOrigen = Math.Round(Convert.ToDecimal(datosContrato.Contrato.Cantidad), 0), TipoDocumento = textoDocumento, ClaseDocumento = postFijoRef3, Concepto = String.Format("{0}-{1} {2} {3} {4} {5} {6}", tipoMovimiento, folioPedido, costo.ToneladasCosto.ToString("N0"), unidadMedicion.ClaveUnidad, string.IsNullOrWhiteSpace(producto.Descripcion) ? producto.ProductoDescripcion : producto.Descripcion, costo.ImporteCosto.ToString("C2"), postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; poliza = GeneraRegistroPoliza(datos); polizasContrato.Add(poliza); } #endregion Con IVA #region Con Retencion if (tieneRetencion) { var retencionBL = new RetencionBL(); var retenciones = retencionBL.ObtenerRetencionesConCosto(costosConRetencion); RetencionInfo retencion = null; if (retenciones != null && retenciones.Any()) { retencion = retenciones.FirstOrDefault( costoRet => costoRet.CostoID == costo.CostoID); } if (retencion != null) { var parametrosRetencion = new StringBuilder(); parametrosRetencion.Append(String.Format("{0}{1}" , retencion.IndicadorRetencion , retencion.TipoRetencion)); datos = new DatosPolizaInfo { NumeroReferencia = numeroDocumento, FechaEntrada = fechaPedido, Folio = folioPedido.ToString(CultureInfo.InvariantCulture), Division = organizacion.Division, ClaveProveedor = costo.Proveedor.CodigoSAP, Importe = string.Format("-{0}", "0"), IndicadorImpuesto = parametrosRetencion.ToString(), Renglon = Convert.ToString(renglon), ImporteIva = "0", Ref3 = ref3.ToString(), CodigoRetencion = retencion.IndicadorImpuesto, TipoRetencion = retencion.IndicadorRetencion, ArchivoFolio = archivoFolio, DescripcionCosto = costo.Proveedor.Descripcion, PesoOrigen = Math.Round(Convert.ToDecimal(datosContrato.Contrato.Cantidad), 0), TipoDocumento = textoDocumento, ClaseDocumento = postFijoRef3, Concepto = String.Format("{0}-{1} {2} {3} {4} {5} {6}", tipoMovimiento, folioPedido, costo.ToneladasCosto.ToString("N0"), unidadMedicion.ClaveUnidad, string.IsNullOrWhiteSpace(producto.Descripcion) ? producto.ProductoDescripcion : producto.Descripcion, costo.ImporteCosto.ToString("C2"), postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; poliza = GeneraRegistroPoliza(datos); polizasContrato.Add(poliza); if (!tieneIva) { renglon++; datos = new DatosPolizaInfo { NumeroReferencia = numeroDocumento, FechaEntrada = fechaPedido, Folio = folioPedido.ToString(CultureInfo.InvariantCulture), Division = organizacion.Division, ClaveProveedor = costo.Proveedor.CodigoSAP, Importe = string.Format("{0}", (costo.ImporteCosto * -1).ToString("F2")), Renglon = Convert.ToString(renglon), ImporteIva = "0", Ref3 = ref3.ToString(), ArchivoFolio = archivoFolio, DescripcionCosto = costo.Proveedor.Descripcion, PesoOrigen = Math.Round(Convert.ToDecimal(datosContrato.Contrato.Cantidad), 0), TipoDocumento = textoDocumento, ClaseDocumento = postFijoRef3, Concepto = String.Format("{0}-{1} {2} {3} {4} {5} {6}", tipoMovimiento, folioPedido, costo.ToneladasCosto.ToString("N0"), unidadMedicion.ClaveUnidad, string.IsNullOrWhiteSpace(producto.Descripcion) ? producto.ProductoDescripcion : producto.Descripcion, costo.ImporteCosto.ToString("C2"), postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; poliza = GeneraRegistroPoliza(datos); polizasContrato.Add(poliza); renglon++; datos = new DatosPolizaInfo { NumeroReferencia = numeroDocumento, FechaEntrada = fechaPedido, Folio = folioPedido.ToString(CultureInfo.InvariantCulture), Division = organizacion.Division, ClaveProveedor = String.Empty, Importe = string.Format("{0}", costo.ImporteCosto.ToString("F2")), IndicadorImpuesto = String.Empty, Renglon = Convert.ToString(renglon), ImporteIva = "0", Ref3 = ref3.ToString(), Cuenta = datosContrato.Contrato.Cuenta.CuentaSAP, ArchivoFolio = archivoFolio, DescripcionCosto = datosContrato.Contrato.Cuenta.Descripcion, PesoOrigen = Math.Round(Convert.ToDecimal(datosContrato.Contrato.Cantidad), 0), TipoDocumento = textoDocumento, ClaseDocumento = postFijoRef3, ComplementoRef1 = string.Empty, Concepto = String.Format("{0}-{1} {2} {3} {4} {5} {6}", tipoMovimiento, folioPedido, costo.ToneladasCosto.ToString("N0"), unidadMedicion.ClaveUnidad, string.IsNullOrWhiteSpace(producto.Descripcion) ? producto.ProductoDescripcion : producto.Descripcion, costo.ImporteCosto.ToString("C2"), postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; poliza = GeneraRegistroPoliza(datos); polizasContrato.Add(poliza); } } } #endregion Con Retencion } } #endregion Es Proveedor #region Es Cuenta else { renglon++; datos = new DatosPolizaInfo { NumeroReferencia = numeroDocumento, FechaEntrada = fechaPedido, Folio = folioPedido.ToString(CultureInfo.InvariantCulture), Division = organizacion.Division, ClaveProveedor = String.Empty, Importe = string.Format("{0}", (costo.ImporteCosto * -1).ToString("F2")), IndicadorImpuesto = String.Empty, Renglon = Convert.ToString(renglon), Cabezas = string.Empty, ImporteIva = "0", Ref3 = ref3.ToString(), Cuenta = costo.CuentaSap.CuentaSAP, ArchivoFolio = archivoFolio, DescripcionCosto = costo.CuentaSap.Descripcion, PesoOrigen = Math.Round(Convert.ToDecimal(datosContrato.Contrato.Cantidad), 0), TipoDocumento = textoDocumento, ClaseDocumento = postFijoRef3, Concepto = String.Format("{0}-{1} {2} {3} {4} {5} {6}", tipoMovimiento, folioPedido, costo.ToneladasCosto.ToString("N0"), unidadMedicion.ClaveUnidad, string.IsNullOrWhiteSpace(producto.Descripcion) ? producto.ProductoDescripcion : producto.Descripcion, costo.ImporteCosto.ToString("C2"), postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; poliza = GeneraRegistroPoliza(datos); polizasContrato.Add(poliza); renglon++; datos = new DatosPolizaInfo { NumeroReferencia = numeroDocumento, FechaEntrada = fechaPedido, Folio = folioPedido.ToString(CultureInfo.InvariantCulture), Division = organizacion.Division, Importe = string.Format("{0}", costo.ImporteCosto.ToString("F2")), IndicadorImpuesto = String.Empty, Renglon = Convert.ToString(renglon), ImporteIva = "0", Ref3 = ref3.ToString(), Cuenta = datosContrato.Contrato.Cuenta.CuentaSAP, ArchivoFolio = archivoFolio, DescripcionCosto = producto.Descripcion, PesoOrigen = Math.Round(Convert.ToDecimal(datosContrato.Contrato.Cantidad), 0), TipoDocumento = textoDocumento, ClaseDocumento = postFijoRef3, Concepto = String.Format("{0}-{1} {2} {3} {4} {5} {6}", tipoMovimiento, folioPedido, costo.ToneladasCosto.ToString("N0"), unidadMedicion.ClaveUnidad, string.IsNullOrWhiteSpace(producto.Descripcion) ? producto.ProductoDescripcion : producto.Descripcion, costo.ImporteCosto.ToString("C2"), postFijoRef3), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; poliza = GeneraRegistroPoliza(datos); polizasContrato.Add(poliza); } #endregion Es Cuenta } return(polizasContrato); }