/// <summary> /// Obtiene un registro de Retencion /// </summary> /// <param name="retencionID">Identificador de la Retencion</param> /// <returns></returns> internal RetencionInfo ObtenerPorID(int retencionID) { try { Logger.Info(); Dictionary <string, object> parameters = AuxRetencionDAL.ObtenerParametrosPorID(retencionID); DataSet ds = Retrieve("Retencion_ObtenerPorID", parameters); RetencionInfo result = null; if (ValidateDataSet(ds)) { result = MapRetencionDAL.ObtenerPorID(ds); } return(result); } catch (SqlException ex) { Logger.Error(ex); throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex); } catch (DataException ex) { Logger.Error(ex); throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex); } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Método que obtiene un registro de Retencion /// </summary> /// <param name="ds"></param> /// <returns></returns> internal static RetencionInfo ObtenerPorID(DataSet ds) { try { Logger.Info(); DataTable dt = ds.Tables[ConstantesDAL.DtDatos]; RetencionInfo result = (from info in dt.AsEnumerable() select new RetencionInfo { RetencionID = info.Field <int>("RetencionId"), Descripcion = info.Field <string>("Descripcion"), Activo = info.Field <bool>("Activo").BoolAEnum(), }).First(); return(result); } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Metodo para Guardar/Modificar una entidad Retencion /// </summary> /// <param name="info"></param> internal void Guardar(RetencionInfo info) { try { Logger.Info(); var tetencionDAL = new RetencionDAL(); if (info.RetencionID == 0) { tetencionDAL.Crear(info); } else { tetencionDAL.Actualizar(info); } } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
public void ObtenerRetencionPorId() { var retencionPL = new RetencionPL(); RetencionInfo retencion = retencionPL.ObtenerPorID(1); Assert.IsNotNull(retencion); Assert.IsTrue(retencion.Descripcion.Length > 0); }
/// <summary> /// Asigna valores al contexto despues /// de que se realice un guardado /// </summary> /// <param name="contextoClone"></param> private void AsignarValoresContexto(CostoInfo contextoClone) { if (contextoClone != null) { Contexto.ListaRetencion = contextoClone.ListaRetencion; Contexto.ListaTipoCostos = contextoClone.ListaTipoCostos; Contexto.ListaTipoProrrateo = contextoClone.ListaTipoProrrateo; Contexto.ListaTipoCostoCentro = contextoClone.ListaTipoCostoCentro; Contexto.UsuarioCreacionID = contextoClone.UsuarioCreacionID; Contexto.UsuarioModificacionID = contextoClone.UsuarioModificacionID; RetencionInfo retencion = contextoClone.ListaRetencion.FirstOrDefault(ret => ret.RetencionID == 0); if (retencion != null) { Contexto.Retencion = retencion; } TipoProrrateoInfo tipoProrrateo = contextoClone.ListaTipoProrrateo.FirstOrDefault(tip => tip.TipoProrrateoID == 0); if (tipoProrrateo != null) { Contexto.TipoProrrateo = tipoProrrateo; } TipoCostoInfo tipoCosto = contextoClone.ListaTipoCostos.FirstOrDefault(costo => costo.TipoCostoID == 0); if (tipoCosto != null) { Contexto.TipoCosto = tipoCosto; } TipoCostoCentroInfo tipoCostoCentro = contextoClone.ListaTipoCostoCentro.FirstOrDefault(CostoCentro => CostoCentro.TipoCostoCentroID == 0); if (tipoCostoCentro != null) { Contexto.TipoCostoCentro = tipoCostoCentro; } cboRetencion.ItemsSource = Contexto.ListaRetencion; cboTipoCosto.ItemsSource = Contexto.ListaTipoCostos; cboTipoProrrateo.ItemsSource = Contexto.ListaTipoProrrateo; cboTipoCostoCentro.ItemsSource = Contexto.ListaTipoCostoCentro; cboTipoCosto.SelectedItem = Contexto.TipoCosto; cboRetencion.SelectedItem = Contexto.Retencion; cboTipoProrrateo.SelectedItem = Contexto.TipoProrrateo; cboTipoCostoCentro.SelectedItem = Contexto.TipoCostoCentro; txtClaveContable.Focus(); } }
/// <summary> /// Remueve de la lista de retenciones, retencion /// con identificador cero /// </summary> private void AgregaRetencionVacia() { var retencionVacia = new RetencionInfo { RetencionID = 0, IndicadorRetencion = string.Empty, IndicadorImpuesto = Properties.Resources.cbo_Seleccione, TipoRetencion = string.Empty }; if (!Contexto.ListaRetencion.Contains(retencionVacia)) { Contexto.ListaRetencion.Insert(0, retencionVacia); } }
/// <summary> /// Metodo para Guardar/Modificar una entidad Retencion /// </summary> /// <param name="info">Representa la entidad que se va a grabar</param> public void Guardar(RetencionInfo info) { try { Logger.Info(); var tRetencionBL = new RetencionBL(); tRetencionBL.Guardar(info); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Obtiene una entidad Retencion por su Id /// </summary> /// <param name="retencionID">Obtiene uan entidad Retencion por su Id</param> /// <returns></returns> internal RetencionInfo ObtenerPorID(int retencionID) { try { Logger.Info(); var retencionDAL = new RetencionDAL(); RetencionInfo result = retencionDAL.ObtenerPorID(retencionID); return(result); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Obtiene un lista paginada /// </summary> /// <param name="pagina"></param> /// <param name="filtro"></param> /// <returns></returns> public ResultadoInfo <RetencionInfo> ObtenerPorPagina(PaginacionInfo pagina, RetencionInfo filtro) { try { Logger.Info(); var retencionBL = new RetencionBL(); ResultadoInfo <RetencionInfo> result = retencionBL.ObtenerPorPagina(pagina, filtro); return(result); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Obtiene parametros para crear /// </summary> /// <param name="info">Valores de la entidad</param> /// <returns></returns> internal static Dictionary <string, object> ObtenerParametrosCrear(RetencionInfo info) { try { Logger.Info(); var parametros = new Dictionary <string, object> { { "@Descripcion", info.Descripcion }, { "@Activo", info.Activo }, { "@UsuarioCreacionID", info.UsuarioCreacionID }, }; return(parametros); } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Metodo para Actualizar un nuevo registro de Retencion /// </summary> /// <param name="info">Valores de la entidad que se actualizarán</param> internal void Actualizar(RetencionInfo info) { try { Logger.Info(); Dictionary <string, object> parameters = AuxRetencionDAL.ObtenerParametrosActualizar(info); Update("Retencion_Actualizar", parameters); } catch (SqlException ex) { Logger.Error(ex); throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex); } catch (DataException ex) { Logger.Error(ex); throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex); } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Obtiene un lista paginada /// </summary> /// <param name="pagina"></param> /// <param name="filtro"></param> /// <returns></returns> internal ResultadoInfo <RetencionInfo> ObtenerPorPagina(PaginacionInfo pagina, RetencionInfo filtro) { try { Dictionary <string, object> parameters = AuxRetencionDAL.ObtenerParametrosPorPagina(pagina, filtro); DataSet ds = Retrieve("[dbo].[Retencion_ObtenerPorPagina]", parameters); ResultadoInfo <RetencionInfo> result = null; if (ValidateDataSet(ds)) { result = MapRetencionDAL.ObtenerPorPagina(ds); } return(result); } catch (SqlException ex) { Logger.Error(ex); throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex); } catch (DataException ex) { Logger.Error(ex); throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex); } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
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); }
/// <summary> /// Obtiene parametros para obtener lista paginada /// </summary> /// <param name="pagina"></param> /// <param name="filtro"></param> /// <returns></returns> internal static Dictionary <string, object> ObtenerParametrosPorPagina(PaginacionInfo pagina, RetencionInfo filtro) { try { Logger.Info(); var parametros = new Dictionary <string, object> { { "@RetencionID", filtro.RetencionID }, { "@Descripcion", filtro.Descripcion }, { "@Activo", filtro.Activo }, { "@Inicio", pagina.Inicio }, { "@Limite", pagina.Limite } }; return(parametros); } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
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); }