/// <summary> /// Actualiza el estatus para indicar si ya se genero ó no poliza /// </summary> /// <param name="movimientos"></param> /// <returns></returns> public void ActualizarGeneracionPoliza(List <ContenedorAlmacenMovimientoCierreDia> movimientos) { try { Logger.Info(); var almacenMovimientoDal = new AlmacenMovimientoBL(); almacenMovimientoDal.ActualizarGeneracionPoliza(movimientos); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Guarda el Cierre de Dia /// </summary> /// <param name="almacenID"></param> public bool ValidarEjecucionCierreDia(int almacenID) { try { Logger.Info(); var almacenMovimientoBl = new AlmacenMovimientoBL(); return(almacenMovimientoBl.ValidarEjecucionCierreDia(almacenID)); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Actualiza el estatus de un movimiento /// </summary> /// <param name="almacenMovimientoInfo"></param> public void ActualizarEstatus(AlmacenMovimientoInfo almacenMovimientoInfo) { try { Logger.Info(); var almacenMovimientoBl = new AlmacenMovimientoBL(); almacenMovimientoBl.ActualizarEstatus(almacenMovimientoInfo); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Guarda el Cierre de Dia /// </summary> /// <param name="cierreDiaInventarioPA"></param> public void GuardarAutorizarCierreDiaInventarioPA(CierreDiaInventarioPAInfo cierreDiaInventarioPA) { try { Logger.Info(); var almacenMovimientoBl = new AlmacenMovimientoBL(); almacenMovimientoBl.GuardarAutorizarCierreDiaInventarioPA(cierreDiaInventarioPA); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Obtiene los movimientos pendientes pro autorizar del cierre de dia de inventario de planta de alimentos /// </summary> /// <returns></returns> public List <MovimientosAutorizarCierreDiaPAModel> ObtenerMovimientosPendientesAutorizar( FiltrosAutorizarCierreDiaInventarioPA filtrosAutorizarCierreDia) { try { Logger.Info(); var almacenMovimientoBl = new AlmacenMovimientoBL(); return(almacenMovimientoBl.ObtenerMovimientosPendientesAutorizar(filtrosAutorizarCierreDia)); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Obtiene los movimientos de inventario para generar /// poliza de consumo de producto /// </summary> /// <param name="almacenID"></param> /// <param name="organizacionID"></param> /// <param name="fecha"> </param> /// <returns></returns> public List <ContenedorAlmacenMovimientoCierreDia> ObtenerMovimientosInventario(int almacenID, int organizacionID, DateTime fecha) { List <ContenedorAlmacenMovimientoCierreDia> result; try { Logger.Info(); var almacenMovimientoDal = new AlmacenMovimientoBL(); result = almacenMovimientoDal.ObtenerMovimientosInventario(almacenID, organizacionID, fecha); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } return(result); }
/// <summary> /// Guarda el Cierre de Dia /// </summary> /// <param name="cierreDiaInventarioPA"></param> public IList <ResultadoPolizaModel> GuardarCierreDiaInventarioPA(CierreDiaInventarioPAInfo cierreDiaInventarioPA) { try { Logger.Info(); var almacenMovimientoBl = new AlmacenMovimientoBL(); return(almacenMovimientoBl.GuardarCierreDiaInventarioPA(cierreDiaInventarioPA)); } catch (ExcepcionServicio) { throw; } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
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); }
public override MemoryStream ImprimePoliza(object datosPoliza, IList <PolizaInfo> polizas) { try { var ajustesDeInventario = datosPoliza as List <PolizaEntradaSalidaPorAjusteModel>; PolizaModel = new PolizaModel(); polizaImpresion = new PolizaImpresion <PolizaModel>(PolizaModel, TipoPoliza.EntradaAjuste); var almacenMovimientoBL = new AlmacenMovimientoBL(); List <AlmacenMovimientoDetalle> almancenMovimientosDetalle = ajustesDeInventario.Select(mov => new AlmacenMovimientoDetalle { AlmacenMovimientoDetalleID = mov.AlmacenMovimientoDetalleID }).ToList(); AlmacenMovimientoInfo almacenMovimiento = almacenMovimientoBL.ObtenerMovimientoPorClaveDetalle(almancenMovimientosDetalle); if (almacenMovimiento == null) { almacenMovimiento = new AlmacenMovimientoInfo(); } AlmacenInfo almacen = ObtenerAlmacen(almacenMovimiento.AlmacenID); if (almacen == null) { almacen = new AlmacenInfo { Organizacion = new OrganizacionInfo() }; } OrganizacionInfo organizacion = ObtenerOrganizacionIVA(almacen.Organizacion.OrganizacionID); if (organizacion == null) { organizacion = new OrganizacionInfo { TipoOrganizacion = new TipoOrganizacionInfo() }; } PolizaModel.Encabezados = new List <PolizaEncabezadoModel> { new PolizaEncabezadoModel { Descripcion = organizacion.Descripcion, Desplazamiento = 0 }, }; polizaImpresion.GeneraCabecero(new[] { "100" }, "NombreGanadera"); PolizaModel.Encabezados = new List <PolizaEncabezadoModel> { new PolizaEncabezadoModel { Descripcion = "Entrada De Almacen por Ajuste", Desplazamiento = 0 }, }; polizaImpresion.GeneraCabecero(new[] { "100" }, "NombreGanadera"); PolizaModel.Encabezados = new List <PolizaEncabezadoModel> { new PolizaEncabezadoModel { Descripcion = string.Format("{0} {1}", "FECHA:", almacenMovimiento.FechaMovimiento.ToShortDateString()), Desplazamiento = 0 }, new PolizaEncabezadoModel { Descripcion = string.Format("{0} {1}", "FOLIO No.", almacenMovimiento.FolioMovimiento), Desplazamiento = 0 }, }; polizaImpresion.GeneraCabecero(new[] { "50", "50" }, "Folio"); GeneraLinea(2); polizaImpresion.GeneraCabecero(new[] { "100" }, "Folio"); GenerarLineasEncabezadoDetalleEntrada(); GenerarLineasDetalle(ajustesDeInventario); polizaImpresion.GenerarDetalles("Detalle"); polizaImpresion.GenerarLineaEnBlanco("Detalle", 11); GeneraLineaTotalDetalle(ajustesDeInventario); GeneraLinea(11); polizaImpresion.GeneraCabecero(new[] { "100" }, "Detalle"); GeneraLineaObservaciones(ajustesDeInventario); GeneraLinea(2); polizaImpresion.GeneraCabecero(new[] { "100" }, "Observaciones"); polizaImpresion.GenerarLineaEnBlanco(); GeneraLineaEncabezadoRegistroContable(almacenMovimiento.FolioMovimiento); polizaImpresion.GeneraCabecero(new[] { "30", "60", "65", "25", "25" }, "RegistroContable"); GeneraLineaSubEncabezadoRegistroContable(true, "Código", "Debe", "Haber"); polizaImpresion.GeneraCabecero(new[] { "30", "60", "65", "25", "25" }, "RegistroContable"); GeneraLinea(5); polizaImpresion.GeneraCabecero(new[] { "100" }, "RegistroContable"); IList <PolizaInfo> cargos; IList <PolizaInfo> abonos; GeneraLineaRegistroContable(polizas, out cargos, out abonos); polizaImpresion.GenerarRegistroContable("RegistroContable"); GeneraLinea(5); polizaImpresion.GeneraCabecero(new[] { "100" }, "RegistroContable"); GenerarLineaSumaRegistroContable(polizas, "Total=====>"); polizaImpresion.GeneraCabecero(new[] { "30", "60", "65", "25", "25" }, "RegistroContable"); GeneraLinea(5); polizaImpresion.GeneraCabecero(new[] { "100" }, "RegistroContable"); return(polizaImpresion.GenerarArchivo()); } catch (Exception ex) { Logger.Error(ex); throw; } }
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(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(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); }