/// <summary> /// Obtenemos Ultimo Elemento /// </summary> /// <param name="version">Versión de Nómina</param> /// <param name="id_grupo">Id Grupo</param> /// <returns></returns> public static RetornoOperacion ObtieneUltimoElemento(string version, int id_grupo, int id_nomina_empleado, int id_esquema_superior) { //Declaramos resultado RetornoOperacion resultado = new RetornoOperacion(); //Si Existen Atributos using (DataTable mit = ObtieneAtributosRegistrados(version, id_grupo, id_nomina_empleado, id_esquema_superior)) { //Validamos Si No Existen Atributos if (!Validacion.ValidaOrigenDatos(mit)) { //Declaramos Ultimo Elemnto Grupo int id_ultimo = id_grupo; //Obtenemos Id de Esquema int id_esquema = Esquema.ObtieneIdEsquema(version, 1, id_grupo); //Validamos Exista Esquema if (id_esquema != 0) { //Si existen Elemento using (DataTable elementos = Esquema.ObtieneElementos(version, id_grupo, id_nomina_empleado)) { //Validamos Origen de Datos if (Validacion.ValidaOrigenDatos(elementos)) { //Recorremos cada uno de los Elemntos foreach (DataRow r in elementos.Rows) { //Obtenemos Ultimo Elemento resultado = ObtieneUltimoElemento(version, id_esquema, id_nomina_empleado, r.Field <int>("IdEsquemaRegistro")); //Si el Resultado es Exitoso if (resultado.OperacionExitosa) { //Salimos del ciclo break; } } } } } } else { //Asignamos Valor Exitoso resultado = new RetornoOperacion(0); } } //Devolvemos Valor return(resultado); }
/// <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); }