PDA

View Full Version : [MySql](Ci riprovo...)Turni di lavoro...


RaouL_BennetH
10-10-2007, 15:50
Ehm.. riecchime.. e spero che questa volta qualcuno sappia indirizzarmi verso la retta via.. :

Allora, c'è una tabella(Lavorazione) composta (in sintesi) da:

ID,
ID_Persona,
ID_Mese (intero, viene memorizzato l'identificativo del mese di lavoro, ad esempio.. marzo come 3, ottobre come 10 etc..)

giorno(intero, che può memorizzare il giorno in forma numerica del mese in questione...)

C'è un'altra tabella chiamata turni, così composta:
ID,
ID_Persona,
lun
mar
mer
gio
ven
sab
dom

Dove nei giorni della settimana viene inserito il numero di ore lavorative assegnate alla persona.

Ora... la domandona, come sparo i dati memorizzati in 'turni' nella tabella 'lavorazione', rispettando l'ordine dei giorni?

Supponiamo per esempio che i turni siano:
lun = 2
mer = 3
gio = 5

dato che nella tabella lavorazione ho soltanto 'giorno' come faccio ?!?

Molte grazie a tutti!

RaouL.

RaouL_BennetH
11-10-2007, 10:10
uppettino :cry:

yorkeiser
11-10-2007, 10:47
Non ho capito qual'è il problema. Se il problema è convertire le ore in giorni basta che fai sum(lun+mar+mer....+dom) / 8 (se 8 è il numero di ore lavorative giornaliere). Cmq vista così non mi pare molto geniale sta base dati: come fai a sapere a che giorno del mese corrisponde il campo lun? In un mese ci sono almeno 4 lunedì

RaouL_BennetH
11-10-2007, 10:51
Non ho capito qual'è il problema. Se il problema è convertire le ore in giorni basta che fai sum(lun+mar+mer....+dom) / 8 (se 8 è il numero di ore lavorative giornaliere). Cmq vista così non mi pare molto geniale sta base dati: come fai a sapere a che giorno del mese corrisponde il campo lun? In un mese ci sono almeno 4 lunedì

Ciao :)

Allora, nella tabella turni, non avrebbe senso sapere a che giorno del mese corrisponde il campo lun, nel senso che si indica solo il turno settimanale del lavoratore a prescindere dal mese. Altrimenti si dovrebbe creare una "settimana tipo" per ogni mese. La tabella turni serve solo ad indicare quante ore alla settimana deve fare la persona. Il problema sorge quando invece di riempire la tabella "lavorazioni" a mano, cioè inserendo manualmente le ore lavorative per il mese, si deve ottenere il riempimento automatico prendendo lo schema dai turni.

:help:

yorkeiser
11-10-2007, 11:40
Non so cosa stai utilizzando per accedere alla base dati (php?) ma dovresti fare una cosa del tipo:

select lun, mar, mer, gio, ven, sab, dom from turni where id_persona = TUO_ID


Il risultato lo memorizzi in un cursore e fai delle query di insert facendo il fetch di tale cursore:

$lunedì = 15 (supponiamo che lunedì sia il 15 del mese)
$mese = 10 (ottobre)
$ID_PERSONA = ... //lo hai già tirato fuori in precedenza in base alla logica

insert into lavorazione values $ID, $ID_PERSONA, $MESE, $lunedì, $cursore.lun
insert into lavorazione values $ID, $ID_PERSONA, $MESE, $lunedì+1, $cursore.mar
insert into lavorazione values $ID, $ID_PERSONA, $MESE, $lunedì+2, $cursore.mer

$cursore.lun è una sorta di metalinguaggio che sto inventando adesso, ma è semplicemente il valore che hai memorizzato nel cursore aperto sulla query di select che hai fatto sulla tabella turni

RaouL_BennetH
11-10-2007, 11:58
Non so cosa stai utilizzando per accedere alla base dati (php?)

sto provando sia in C# che in Java, php non lo conosco :(


select lun, mar, mer, gio, ven, sab, dom from turni where id_persona = TUO_ID


fin qui ci sono


Il risultato lo memorizzi in un cursore e fai delle query di insert facendo il fetch di tale cursore:

$lunedì = 15 (supponiamo che lunedì sia il 15 del mese)
$mese = 10 (ottobre)
$ID_PERSONA = ... //lo hai già tirato fuori in precedenza in base alla logica

insert into lavorazione values $ID, $ID_PERSONA, $MESE, $lunedì, $cursore.lun
insert into lavorazione values $ID, $ID_PERSONA, $MESE, $lunedì+1, $cursore.mar
insert into lavorazione values $ID, $ID_PERSONA, $MESE, $lunedì+2, $cursore.mer

$cursore.lun è una sorta di metalinguaggio che sto inventando adesso, ma è semplicemente il valore che hai memorizzato nel cursore aperto sulla query di select che hai fatto sulla tabella turni

mmm... cursore.. perdonami, ma non riesco a capire :(

RaouL_BennetH
11-10-2007, 12:04
Provo a mettere il tutto in forma 'grafica' per spiegarmi meglio:

su di un form, una volta scelto il mese, ottengo una griglia formata da tante righe quanti sono i giorni del mese scelto; supponiamo febbraio 2007:

ID_Giorno, Numero Giorno Ore
gio 1 2.5
ven 2
sab 3
dom 4
lun 5
mar ....blabla
mer
gio
ven
sab
dom
...blabla

Nella colonna ore vengono inserite manualmente le ore appunto....

Io invece dovrei riempire la griglia prendendo le ore presenti nella tabella turni... :cry:

yorkeiser
11-10-2007, 12:15
In Java:


//QUESTI PARAMETRI ARRIVANO DALLA LOGICA DEL PROGRAMMA
int id = <ID>
int idpersona = <ID_PERSONA>
int mese = 10; //ottobre
int lunedi = 15; //lunedì 15 ottobre
int turni[] = new turni[7];

Connection c = DriverManager.getConnection(...);
Statement st = c.createStatement();
ResultSet rs=null;

rs = st.executeQuery("select lun, mar, mer, gio, ven, sab, dom from turni where id_persona = "+idpersona);
if (rs.next()) {
turni[0]=rs.getInt("LUN");
turni[1]=rs.getInt("MAR");
turni[2]=rs.getInt("MER");
[...]
turni[6]=rs.getInt("DOM");
}
//fin qui hai caricato i risultati del resultset nell'array turni[]

for (int i=0; i<7; i++)
{
if (turni[i]>0) //se in quel giorno il dipendente ha lavorato
st.execute("INSERT INTO LAVORAZIONE VALUES ( " + id + ", " + idpersona + ", " + mese + ", "+ lunedi+i +", " + turni[i] + ")"
}


Spero fosse quello che ti interessava, ovviamente è solo lo scheletro, mancano vari controlli e la logica esterna

0rph3n
11-10-2007, 12:16
:mbe:
praticamente nella tabella turni è memorizzata, per ogni persona la somma delle ore lavorate per ogni giorno della settimana?
cioè nella colonna lun c'è la somma delle ore lavorate in tutti i lunedì del mese, nella colonna mar c'è la somma delle ore lavorate in tutti i martedì del mese e così via? :stordita:

RaouL_BennetH
11-10-2007, 12:22
:mbe:
praticamente nella tabella turni è memorizzata, per ogni persona la somma delle ore lavorate per ogni giorno della settimana?
cioè nella colonna lun c'è la somma delle ore lavorate in tutti i lunedì del mese, nella colonna mar c'è la somma delle ore lavorate in tutti i martedì del mese e così via? :stordita:

Ciao :)

No, non è la somma, indica solo il lunedi quante ore deve lavorare, cioè, se ci sono 3 ore, vuol dire che ogni lunedi del mese quella persona deve fare 3 ore di lavoro.

@Yorkeiser: provo a ragionare sul tuo esempio in Java :)