/// <summary> /// Inserta un Descuento /// </summary> /// <param name="id_motivo_descuento"></param> /// <param name="id_comprobante"></param> /// <param name="porcentaje"></param> /// <param name="cantidad_moneda_captura"></param> /// <param name="cantidad_moneda_nacional"></param> /// <param name="id_usuario"></param> /// <returns></returns> public static RetornoOperacion InsertaDescuento(int id_motivo_descuento, int id_comprobante, decimal porcentaje, decimal cantidad_moneda_captura, decimal cantidad_moneda_nacional, int id_usuario) { //Declarando objeto de retorno RetornoOperacion resultado = new RetornoOperacion(); //Creamos la transacción using (System.Transactions.TransactionScope scope = Transaccion.InicializaBloqueTransaccional(System.Transactions.IsolationLevel.ReadCommitted)) { //Validamos Existencia de Coonceptos if (Validacion.ValidaOrigenDatos(Concepto.RecuperaConceptosComprobantes(id_comprobante))) { //Inicializando arreglo de parámetros object[] param = { 1, 0, id_motivo_descuento, id_comprobante, porcentaje, cantidad_moneda_captura, cantidad_moneda_nacional, id_usuario, true, "", "" }; //Realziando inserción del concepto resultado = CapaDatos.m_capaDeDatos.EjecutaProcAlmacenadoObjeto(_nombre_stored_procedure, param); //Editamos encabezado del Comprobante if (resultado.OperacionExitosa) { //Guardando Id de Descuento afectado int id_descuento = resultado.IdRegistro; //Intsnaciamos Comprobante using (Comprobante objcomprobante = new Comprobante(id_comprobante)) { resultado = objcomprobante.ActualizaDescuento(cantidad_moneda_captura, cantidad_moneda_nacional, id_usuario); } //Actualizamos Impuestos if (resultado.OperacionExitosa) { resultado = Impuesto.RecalcularImpuestos(id_comprobante, id_usuario); } //Si no hay errores if (resultado.OperacionExitosa) { resultado = new RetornoOperacion(id_descuento); //Finalizamos Transacción scope.Complete(); } } } else { resultado = new RetornoOperacion("No existen conceptos"); } } return(resultado); }
/// <summary> /// Recalcula un Impuesto ligado /// </summary> /// <param name="id_comprobante"></param> /// <param name="id_usuario"></param> /// <returns></returns> public static RetornoOperacion RecalcularImpuestos(int id_comprobante, int id_usuario) { //Declaramos Objeto resultado RetornoOperacion resultado = new RetornoOperacion(0); int id_concepto = 0; decimal descuento_importe_moneda_nacional = 0, descuento_importe_moneda_captura = 0, impuesto_captura = 0, impuesto_nacional = 0; //Creamos la transacción using (System.Transactions.TransactionScope scope = Transaccion.InicializaBloqueTransaccional(System.Transactions.IsolationLevel.ReadCommitted)) { using (Comprobante objComprobante = new Comprobante(id_comprobante)) { //Obtenemos instancia de impuesto Impuesto impuesto = RecuperaImpuestoComprobante(id_comprobante); //Validamos existencia de impuesto if (impuesto.id_impuesto > 0) { //Cargamos Conceptos Existentes ligado al comprobante using (DataTable mitConceptos = Concepto.RecuperaConceptosComprobantes(id_comprobante)) { //Cargamos Detalles de Impuesto using (DataTable mitDetalleImpuesto = DetalleImpuesto.CargaDetallesImpuesto(impuesto.id_impuesto)) { //Validamos Origen de Datos if (Validacion.ValidaOrigenDatos(mitDetalleImpuesto)) { //rrecorremos cada uno de los Detalles de Impuestos foreach (DataRow r in mitDetalleImpuesto.Rows) { //Instanciamos Detalle Impimpuesto using (DetalleImpuesto detalleImpuesto = new DetalleImpuesto(r.Field <int>("Id"))) { //Valida Detalle Impuesto if (detalleImpuesto.id_detalle_impuesto > 0) { //Cargamos Concepto Detalle Impuesto using (DataTable mitConceptoDetalleImpuesto = ConceptoDetalleImpuesto.RecuperaConceptosDetalles(detalleImpuesto.id_detalle_impuesto)) { //Validamos Origen de Datos if (Validacion.ValidaOrigenDatos(mitConceptoDetalleImpuesto)) { //Recorremos cada uno de los Conceptos foreach (DataRow rConceptoDetalleImpuesto in mitConceptoDetalleImpuesto.Rows) { //Validamos Existencia de Conceptos if (Validacion.ValidaOrigenDatos(mitConceptos)) { //Validamos Existencia del Concepto id_concepto = (from DataRow rConcepto in mitConceptos.Rows where rConcepto.Field <int>("Id") == rConceptoDetalleImpuesto.Field <int>("IdConcepto") select rConcepto.Field <int>("Id")).FirstOrDefault(); } //Validamos existencia de concepto if (id_concepto == 0) { //Desahabilita Concepto Detalle Impuesto using (ConceptoDetalleImpuesto objConceptoDetalleImpuesto = new ConceptoDetalleImpuesto (rConceptoDetalleImpuesto.Field <int>("Id"))) { //Deshabilitamos liga resultado = objConceptoDetalleImpuesto.DeshabilitaConceptoDetalleImpuesto(id_usuario); //Validamos resultado if (resultado.OperacionExitosa) { /*Validamos Existencia de concepto Detalle Impueston de lo contrario deshabilitamos el * /detalle impuesto*/ if (!Validacion.ValidaOrigenDatos(ConceptoDetalleImpuesto.RecuperaConceptosDetalles(detalleImpuesto.id_detalle_impuesto))) { //Actualizamos Total Detalles resultado = detalleImpuesto.ActualizaTotalDetalleImpuesto(id_usuario); //Validamos Actualizacion if (resultado.OperacionExitosa) { //Actualizamos Objeto detalleImpuesto.cargaAtributosInstancia(detalleImpuesto.id_detalle_impuesto); //Deshabilita Detalle Impuesto resultado = detalleImpuesto.DeshabiltaSoloDetalleImpuesto(id_usuario); break; } } } } } else { //Instanciamos Concepto using (Concepto objconcepto = new Concepto(id_concepto)) { //Validamos Concepto if (objconcepto.id_concepto > 0) { //Obtenemos el Descuento Por Concepto objComprobante.ObtieneDescuentoPorConcepto(objconcepto.importe_moneda_captura, objconcepto.importe_moneda_nacional, out descuento_importe_moneda_captura, out descuento_importe_moneda_nacional); //Calculamos Impuesto Captura impuesto_captura = (objconcepto.importe_moneda_captura - descuento_importe_moneda_captura) * (detalleImpuesto.tasa / 100); //Calculamos Impuesto Nacional impuesto_nacional = (objconcepto.importe_moneda_nacional - descuento_importe_moneda_nacional) * (detalleImpuesto.tasa / 100); //Instanciamos Concepto Detalle Impuesto using (ConceptoDetalleImpuesto objConceptoDetalleImpuesto = new ConceptoDetalleImpuesto (rConceptoDetalleImpuesto.Field <int>("Id"))) { //Validamos Concepto Detalle Impuesto if (objConceptoDetalleImpuesto.id_concepto_detalle_impuesto > 0) { //Editamos Monto resultado = objConceptoDetalleImpuesto.EditaConceptoDetalleImpuesto(objConceptoDetalleImpuesto.id_concepto, objConceptoDetalleImpuesto.id_detalle_impuesto, impuesto_captura, impuesto_nacional, id_usuario); } } } else { resultado = new RetornoOperacion("No se encontró datos complementario concepto"); } } } } } } //Actualiamos Detalle Impuesto detalleImpuesto.cargaAtributosInstancia(r.Field <int>("Id")); //Validamos existenci ade Detella if (detalleImpuesto.habilitar == true) { //Validamos Inserccion de Concepto Detalle Impuesto if (resultado.OperacionExitosa) { //Actualizamos Total Detalles resultado = detalleImpuesto.ActualizaTotalDetalleImpuesto(id_usuario); } } } } } } } } //Si se actualizo correctamente Detalle Impuesto if (resultado.OperacionExitosa) { resultado = impuesto.ActualizaTotalImpuesto(id_usuario); } //Si se actualizo correctamente el Impuesto if (resultado.OperacionExitosa) { //Actualizamos Instnacia Comprobante resultado = objComprobante.ActualizaImpuestosComprobante(impuesto.id_impuesto, id_usuario); } } } //Validamos Resultado if (resultado.OperacionExitosa) { //Finalizamos transacción scope.Complete(); } } return(resultado); }