Gestionale

Relazione gestionale ditta Baselli Il gestionale richiesto ha lo scopo di gestire i vari interventi (task es.installazione antenna) che vengono effettuati presso i clienti dalla ditta Baselli che fornisce assistenza elettrica.

Sono di interesse i clienti con i relativi dati anagrafici e gli interventi fatti, dei quali interessano la data di inizio, la data presunta ed effettiva di fine intervento e i materiali utilizzati. Per ogni intervento inoltre registrare i dipendenti coinvolti e il numero di ore di lavoro di ciascuno di essi.

Per ogni dipendente si devono conoscere, oltre ai dati anagrafici, la mansione ed il costo orario.

Per ogni task, alla conclusione di ogni intervento di un singolo dipendente, viene redatto un rapportino riportante, oltre al task, i materiali usati e le ore di lavoro.

Relativamente ai materiali, interessano il fornitore, il tipo, il prezzo di acquisto, il prezzo proposto ai clienti e il deposito in magazzino.

Di seguito le funzioni richieste:

Dal task, poi sarà possibile generare la fattura, andando a leggere tutti i rapportini, tutti i materiali e le figure professionali coinvolte, con la possibilità di applicare uno sconto in fase di revisione, prima di generare la stampa.

Richieste

Diagramma E-R

Ipotesi

Modello Logico

Cliente(cf, nome, cognome, nascita)

Dipendente(cf, nome, cognome, nascita, costo_orario, mansione)

Materiale(id, fornitore, tipo, deposito, prezzo_acquisto, prezzo_proposto)

Intervento(id, cf, data_inizio, data_fine) con v.i.r. di cf con cf di Cliente

Materiali(id, id, quantità) con v.i.r. di id con id di Intervento con v.i.r. di id con id di Materiale

Impieghi(id, cf, ore, rapportino, task) con v.i.r. di di con id di Intervento con v.i.r. di cf con cf di Dipendente

Modello Fisico

CREATE DATABASE IF NOT EXISTS Gestionale;

CREATE TABLE Cliente
(
    cf      CHAR(16) PRIMARY KEY,
    nome    VARCHAR(30) NOT NULL,
    cognome VARCHAR(30) NOT NULL,
    nascita DATE        NOT NULL
);

CREATE TABLE Dipendente
(
    cf           CHAR(16) PRIMARY KEY,
    nome         VARCHAR(30) NOT NULL,
    cognome      VARCHAR(30) NOT NULL,
    nascita      DATE        NOT NULL,
    costo_orario INT,
    mansione     VARCHAR(30) NOT NULL
);

CREATE TABLE Materiale
(
    id              INT AUTO_INCREMENT PRIMARY KEY,
    fornitore       VARCHAR(30),
    tipo            VARCHAR(20),
    deposito        INT NOT NULL DEFAULT 0,
    prezzo_acquisto INT NOT NULL,
    prezzo_proposto INT NOT NULL
);

CREATE TABLE Intervento
(
    id          INT AUTO_INCREMENT,
    cf          CHAR(16) REFERENCES Cliente (cf),
    data_inizio DATE NOT NULL DEFAULT GETDATE(),
    data_fine   DATE,
    PRIMARY KEY (id, cf)
);

CREATE TABLE Materiali
(
    idM      INT REFERENCES Materiale (id),
    idI      INT REFERENCES Intervento (id),
    quantità INT NOT NULL DEFAULT 0,
    PRIMARY KEY (idM, idI)
);

CREATE TABLE Impieghi
(
    id         INT REFERENCES Intervento (id),
    cf         CHAR(16) REFERENCES Dipendente (cf),
    ore        INT NOT NULL DEFAULT 0,
    rapportino TEXT,
    task       VARCHAR(30),
    PRIMARY KEY (id, cf)
);

Interrogazioni

Elenco dei task del 2021:

SELECT DISTINCT ip.task 
FROM Impieghi ip, Intervento it
WHERE ip.id=it.id AND YEAR(it.data_inizio)=2021;

Elenco dei rapportini di un determinato task:

SELECT rapportino
FROM Impieghi
WHERE task='task';

Calcolo delle ore prestate da un determinato dipendente in un mese indicato:

SELECT SUM(ip.ore) AS ore_totali_mese
FROM Intervento it, Impieghi ip
WHERE cf='codice_fiscale' AND it.id=ip.id AND YEAR(it.data_inizio)='anno' AND MONTH(data_inizio)='mese'

Calcolo dello stipendio di un determinato dipendente in un mese specifico:

SELECT SUM(ip.ore)*d.costo_orario AS stipendio_mese_dipendente
FROM Intervento it, Impieghi ip, Dipendente d
WHERE cf='codice_fiscale' AND it.id=ip.id AND YEAR(it.data_inizio)='anno' AND MONTH(data_inizio)='mese'