/// <summary> /// /// </summary> /// <param name="id_usuario"></param> /// <param name="id_nomina_empleado"></param> /// <param name="id_esquema_registro"></param> /// <param name="id_registro_superior"></param> /// <returns></returns> private static RetornoOperacion CopiaRegistroSuperior(int id_usuario, int id_nomina_empleado, int id_esquema_registro, int id_registro_superior) { //Declaramos Objeto Resultado RetornoOperacion result = new RetornoOperacion(0); //Obteniendo los Atributos using (DataTable dtDetalles = EsquemaRegistro.ObtieneDetallesEsquemaSuperiorAtributos(id_esquema_registro)) { //Validando que Existen Nominas if (Validacion.ValidaOrigenDatos(dtDetalles)) { //Iniciando Ciclo de Detalle foreach (DataRow det in dtDetalles.Rows) { using (EsquemaRegistro objdet = new EsquemaRegistro(Convert.ToInt32(det["Id"]))) { //Validando Registro if (objdet.habilitar) { //Insertando Detalle result = EsquemaRegistro.InsertaEsquemaRegistro(objdet.id_esquema, id_registro_superior, id_nomina_empleado, objdet.valor, objdet.id_tabla_catalogo, objdet.id_tipo_catalogo, objdet.id_valor, id_usuario); //Si la Operación no fue Exitosa if (!result.OperacionExitosa) { //Terminando Ciclo break; } } } } } } //Validamos resultado if (result.OperacionExitosa) { //Cargamos Elementos using (DataTable dtElementos = EsquemaRegistro.ObtieneDetallesEsquemaSuperiorElementos(id_esquema_registro)) { //Validando que Existen Nominas if (Validacion.ValidaOrigenDatos(dtElementos)) { //Iniciando Ciclo de Detalle foreach (DataRow dtElem in dtElementos.Rows) { //Instanciamos Registro using (EsquemaRegistro objElem = new EsquemaRegistro(Convert.ToInt32(dtElem["Id"]))) { //Validamos Resultado if (result.OperacionExitosa) { //Validando Registro if (objElem.habilitar) { //Insertando Detalle result = EsquemaRegistro.InsertaEsquemaRegistro(objElem.id_esquema, id_registro_superior, id_nomina_empleado, objElem.valor, objElem.id_tabla_catalogo, objElem.id_tipo_catalogo, objElem.id_valor, id_usuario); int id_registro_superior_detalle = result.IdRegistro; //Validamos Resulaltado if (result.OperacionExitosa) { //Método en cargado de regiitrar subNodos result = CopiaRegistroSuperior(id_usuario, id_nomina_empleado, objElem.id_esquema_registro, id_registro_superior_detalle); } //Si la Operación no fue Exitosa if (!result.OperacionExitosa) { //Terminando Ciclo break; } } } } } } } } return(result); }
/// <summary> /// Método encargado de Copiar la Nomina /// </summary> /// <param name="id_usuario">Usuario que actualiza el Registro</param> /// <returns></returns> public RetornoOperacion CopiaNomina(int id_usuario) { //Declarando Objeto de Retorno RetornoOperacion result = new RetornoOperacion(); //Declarando Variables Auxiliares int idNomina = 0, idNominaEmpleado = 0; //Declarando Ambiente Transaccional using (TransactionScope trans = Transaccion.InicializaBloqueTransaccional(System.Transactions.IsolationLevel.ReadCommitted)) { string RegistroPatronal = Global.Referencia.CargaReferencia("0", 25, id_compania_emisor, "Recibo Nómina", "Registro Patronal"); string Curp = Global.Referencia.CargaReferencia("0", 25, id_compania_emisor, "Recibo Nómina", "Curp"); string RfcPatron = ""; object[] param = { 1, 0, this._id_compania_emisor, 0, 0, "1.2", this._id_tipo_nomina, null, null, null, null, this._dias_pago, this._id_sucursal, this._id_periodicidad_pago, this._id_metodo_pago, RegistroPatronal, Curp, RfcPatron, id_usuario, true, "", "" }; //Ejecutando SP result = CapaDatos.m_capaDeDatos.EjecutaProcAlmacenadoObjeto(_nom_sp, param); //Validando Operación Correcta if (result.OperacionExitosa) { //Guardando Nomina idNomina = result.IdRegistro; //Obteniendo Nominas de Empleado using (DataTable dtNominaEmpleado = NomEmpleado.ObtieneIdsNominasEmpleado(this._id_nomina)) { //Validando que Existen Nominas if (Validacion.ValidaOrigenDatos(dtNominaEmpleado)) { //Iniciando Ciclo de Nomina de Empleados foreach (DataRow drNE in dtNominaEmpleado.Rows) { //Instanciando Nomina de Empleado using (NomEmpleado ne = new NomEmpleado(Convert.ToInt32(drNE["Id"]))) { //Validando que existe el Registro if (ne.habilitar) { //Insertando Nomina de Empleado result = NomEmpleado.InsertaNominaEmpleado(idNomina, ne.id_empleado, id_usuario); //Validando Operación Correcta if (result.OperacionExitosa) { //Guardando Nomina idNominaEmpleado = result.IdRegistro; //Obteniendo los Encabezados Percepcion, Deduccion,Horas Extras, Incapacidades, using (DataTable dtDetallesEmp = EsquemaRegistro.ObtieneEncabezados(ne.id_nomina_empleado)) { //Validando que Existen Nominas if (Validacion.ValidaOrigenDatos(dtDetallesEmp)) { //Iniciando Ciclo de Detalle foreach (DataRow drDE in dtDetallesEmp.Rows) { //Instanciando Esquema Registro using (EsquemaRegistro dne = new EsquemaRegistro(Convert.ToInt32(drDE["Id"]))) { //Validando Registro if (dne.habilitar) { //Insertando Detalle result = EsquemaRegistro.InsertaEsquemaRegistro(dne.id_esquema, 0, idNominaEmpleado, dne.valor, dne.id_tabla_catalogo, dne.id_tipo_catalogo, dne.id_valor, id_usuario); int id_registro_superior = result.IdRegistro; //Validamos Resultado if (result.OperacionExitosa) { //Método encargado de Registrar Sub Nodos result = CopiaRegistroSuperior(id_usuario, idNominaEmpleado, dne.id_esquema_registro, id_registro_superior); } //Si la Operación no fue Exitosa if (!result.OperacionExitosa) { //Terminando Ciclo break; } } else { //Instanciando Nomina result = new RetornoOperacion("No Existe el Detalle de la Nomina"); //Terminando Ciclo break; } } } } else { //Instanciando Nomina result = new RetornoOperacion(idNomina); } } //Ligamos Horas Extras if (result.OperacionExitosa) { //Instnacimoas Percepcion de Tipo Horas Extras using (EsquemaRegistro objEsquemaRegistro = new EsquemaRegistro(EsquemaRegistro.ObtieneIdEsquemaRegistro(Esquema.ObtieneIdEsquema(version, "TipoPercepcion", "Percepcion", "Percepciones"), idNominaEmpleado, "019"))) { //Obtiene Detalles Horas Extras using (DataTable mitDetalles = EsquemaRegistro.ObtieneDetalleHorasExtras(idNominaEmpleado, 0)) { //Validando que Existen Nominas if (Validacion.ValidaOrigenDatos(mitDetalles)) { //Iniciando Ciclo de Detalle foreach (DataRow det in mitDetalles.Rows) { using (EsquemaRegistro objHorasExtras = new EsquemaRegistro(Convert.ToInt32(det["Id"]))) { //Validando Registro if (objHorasExtras.habilitar) { //Insertando Encabezado de Horas Extras result = objHorasExtras.EditaEsquemaRegistro(objHorasExtras.id_esquema, objEsquemaRegistro.id_esquema_superior, objHorasExtras.id_nomina_empleado, objHorasExtras.valor, objHorasExtras.id_tabla_catalogo, objHorasExtras.id_tipo_catalogo, objHorasExtras.id_valor, id_usuario); //Si la Operación no fue Exitosa if (!result.OperacionExitosa) { //Terminando Ciclo break; } } } } } } } } } else { //Terminando Ciclo break; } } else { //Instanciando Nomina result = new RetornoOperacion("No Existe la Nómina del Empleado"); //Terminando Ciclo break; } } } } else { //Instanciando Nomina result = new RetornoOperacion(idNomina); } //Validando Operaciones if (result.OperacionExitosa) { //Instanciando Nomina result = new RetornoOperacion(idNomina); //Completando Transacción trans.Complete(); } } } } //Devolviendo Resultado Obtenido return(result); }