En aquest estudi de cas, desenvoluparem un sistema de nòmines utilitzant RPG. Aquest projecte ens permetrà aplicar els conceptes apresos en els mòduls anteriors i veure com es poden integrar en una aplicació del món real.

Objectius del Sistema de Nòmines

  1. Gestió d'Empleats: Crear, llegir, actualitzar i eliminar registres d'empleats.
  2. Càlcul de Nòmines: Calcular el salari net dels empleats tenint en compte deduccions i bonificacions.
  3. Generació d'Informes: Generar informes mensuals de nòmines.

Estructura del Sistema

El sistema de nòmines es compon de les següents parts:

  1. Base de Dades d'Empleats: Emmagatzema la informació dels empleats.
  2. Mòdul de Càlcul de Nòmines: Realitza els càlculs necessaris per determinar el salari net.
  3. Mòdul de Generació d'Informes: Crea informes detallats de les nòmines.

  1. Base de Dades d'Empleats

Estructura de la Taula d'Empleats

CREATE TABLE EMPLEATS (
    ID INT PRIMARY KEY,
    NOM VARCHAR(100),
    COGNOM VARCHAR(100),
    SALARI_BASE DECIMAL(10, 2),
    DEDUCCIONS DECIMAL(10, 2),
    BONIFICACIONS DECIMAL(10, 2)
);

Exemple de Codi RPG per Gestionar Empleats

H dftactgrp(*no) actgrp(*new)

Dcl-F EMPLEATS Usage(*Update) Keyed;

Dcl-DS Empleat Qualified;
    ID Int(10);
    Nom Char(100);
    Cognom Char(100);
    SalariBase Packed(10:2);
    Deduccions Packed(10:2);
    Bonificacions Packed(10:2);
End-DS;

Dcl-Proc AfegirEmpleat;
    Dcl-Pi *N;
        pID Int(10);
        pNom Char(100);
        pCognom Char(100);
        pSalariBase Packed(10:2);
        pDeduccions Packed(10:2);
        pBonificacions Packed(10:2);
    End-Pi;

    Empleat.ID = pID;
    Empleat.Nom = pNom;
    Empleat.Cognom = pCognom;
    Empleat.SalariBase = pSalariBase;
    Empleat.Deduccions = pDeduccions;
    Empleat.Bonificacions = pBonificacions;

    Write EMPLEATS Empleat;
End-Proc;

  1. Mòdul de Càlcul de Nòmines

Lògica de Càlcul

El salari net es calcula com: \[ \text{Salari Net} = \text{Salari Base} - \text{Deduccions} + \text{Bonificacions} \]

Exemple de Codi RPG per al Càlcul de Nòmines

Dcl-Proc CalcularSalariNet;
    Dcl-Pi Packed(10:2);
        pID Int(10);
    End-Pi;

    Dcl-DS Empleat Qualified;
        ID Int(10);
        Nom Char(100);
        Cognom Char(100);
        SalariBase Packed(10:2);
        Deduccions Packed(10:2);
        Bonificacions Packed(10:2);
    End-DS;

    Chain (pID) EMPLEATS Empleat;

    If %Found(EMPLEATS);
        Return Empleat.SalariBase - Empleat.Deduccions + Empleat.Bonificacions;
    Else;
        Return 0;
    EndIf;
End-Proc;

  1. Mòdul de Generació d'Informes

Exemple de Codi RPG per Generar Informes

Dcl-Proc GenerarInformeMensual;
    Dcl-Pi *N;
    End-Pi;

    Dcl-DS Empleat Qualified;
        ID Int(10);
        Nom Char(100);
        Cognom Char(100);
        SalariBase Packed(10:2);
        Deduccions Packed(10:2);
        Bonificacions Packed(10:2);
    End-DS;

    Dcl-S SalariNet Packed(10:2);

    Setll *Start EMPLEATS;
    Reade EMPLEATS Empleat;

    Dow Not %Eof(EMPLEATS);
        SalariNet = CalcularSalariNet(Empleat.ID);
        Dsply ('ID: ' + %Char(Empleat.ID) + ' Nom: ' + Empleat.Nom + ' Cognom: ' + Empleat.Cognom + ' Salari Net: ' + %Char(SalariNet));
        Reade EMPLEATS Empleat;
    EndDo;
End-Proc;

Exercicis Pràctics

Exercici 1: Afegir un Nou Empleat

Escriu una funció que permeti afegir un nou empleat a la base de dades. Utilitza la funció AfegirEmpleat proporcionada anteriorment.

Exercici 2: Calcular el Salari Net d'un Empleat

Utilitza la funció CalcularSalariNet per calcular el salari net d'un empleat amb un ID específic.

Exercici 3: Generar un Informe Mensual

Modifica la funció GenerarInformeMensual per guardar l'informe en un fitxer en lloc de mostrar-lo a la pantalla.

Solucions

Solució a l'Exercici 1

Dcl-Proc AfegirNouEmpleat;
    Dcl-Pi *N;
    End-Pi;

    AfegirEmpleat(1: 'Joan': 'Garcia': 3000.00: 200.00: 150.00);
End-Proc;

Solució a l'Exercici 2

Dcl-Proc CalcularSalariEmpleat;
    Dcl-Pi *N;
    End-Pi;

    Dcl-S SalariNet Packed(10:2);

    SalariNet = CalcularSalariNet(1);
    Dsply ('Salari Net: ' + %Char(SalariNet));
End-Proc;

Solució a l'Exercici 3

Dcl-Proc GenerarInformeMensualFitxer;
    Dcl-Pi *N;
    End-Pi;

    Dcl-DS Empleat Qualified;
        ID Int(10);
        Nom Char(100);
        Cognom Char(100);
        SalariBase Packed(10:2);
        Deduccions Packed(10:2);
        Bonificacions Packed(10:2);
    End-DS;

    Dcl-S SalariNet Packed(10:2);
    Dcl-F Informe Usage(*Output) Disk;

    Setll *Start EMPLEATS;
    Reade EMPLEATS Empleat;

    Dow Not %Eof(EMPLEATS);
        SalariNet = CalcularSalariNet(Empleat.ID);
        Write Informe ('ID: ' + %Char(Empleat.ID) + ' Nom: ' + Empleat.Nom + ' Cognom: ' + Empleat.Cognom + ' Salari Net: ' + %Char(SalariNet));
        Reade EMPLEATS Empleat;
    EndDo;
End-Proc;

Conclusió

En aquest estudi de cas, hem creat un sistema de nòmines bàsic utilitzant RPG. Hem après a gestionar una base de dades d'empleats, calcular salaris nets i generar informes. Aquest projecte ens ha permès aplicar els conceptes apresos en els mòduls anteriors i veure com es poden integrar en una aplicació del món real.

© Copyright 2024. Tots els drets reservats