Domanda

Ho una tabella che contiene tutti i dipendenti di un'azienda (hr_employees).In aggiunta a questo tavolo, è un'altra tabella con tutte le loro date di inizio e di fine, più che il tipo di contratto che hanno (hr_employees_status).

Con i dati che ho, scrivo un 1 o uno 0 (1 permanente basato, 0 altri) di un foglio di calcolo di excel, di colore codificato come determinato dal tipo di contratto (1 = nero, 0 = blu, verde, grigio o rosso), in ogni mese (da Maggio 2005 fino al presente).Come determinare che cosa dovrebbe andare in quale cella è da una clausola di caso, guardando lo stato attuale nel hr_employee_status tabella.

Si loop bene, e fa il 99% di quello che dovrebbe correttamente.L'unico problema è che, non appena un dipendente si sposta da un contratto di lavoro temporaneo a permanente, che a volte non scrive il corretto valore di una cella.

Ho cambiato il codice un po ' solo a tirare il mese e l'anno dal database (il giorno 01), di speranze che, dal mese e anno è tutto quello che serve per scrivere in una cella, di scrivere i dati in modo corretto in cella corretta.Ma senza alcun risultato.

Non so quale codice postale, così qui è il ciclo che determina il tipo di contratto e scrive per il foglio di excel:

switch ($dates['status']) {
case '0':
    $color = 'blue';
    $cellcontent="0";
    break;
case '1':
    $color = 23;
    $cellcontent="0";
    break;
case '2':
    $color = 'black';
    $cellcontent="1";
    break;
case '3':
    $color = 'green';
    $cellcontent="0";
    break;
case '4':
    $color = 'red';
    if(mysql_num_rows($query) > 2)
        $cellcontent = "0";
    else {
        $cellcontent="1";
    }
    break;
}
if($s['state'] == '4')
    $color = 'red';
$format_content =& $workbook->addFormat(array('align' => 'center', 'size' => 11, 'numformat' => '@', 'fontfamily' => 'Calibri', 'left' => 1, 'bottom' => 1, 'right' => 1, 'color' => $color));
for($f = $start_at; $f <= $start_at+$count; $f++) {
    $totalmonths = $totalmonths + $cellcontent;
    $worksheet->write($k,15+$f,$cellcontent,$format_content);
}

$date è il risultato di quanto ricevuto dal DB.$start_at è la data in cui il dipendente è iniziato con un tipo di contratto (e, quindi, determina il mese di mark).$count è la differenza tra la data di inizio e la data di fine (numero di mesi).

Vorrei sapere PERCHÉ non iniziare a correggere la data di quando si passa da un contratto a tempo determinato, di una permanente.

Se qualsiasi altra informazione è necessaria, per favore fatemelo sapere.

EDIT 1: - Risposta al feedback da DaveRandom e Oleg

@DaveRandom:hr_employees assomiglia a questo:

------------------------------------------
|employee_id|name|surname|otherinfo|state|
|1          |Foo |Bar    | ******* |  1  |
|2          |Ben |Smith  | ******* |  1  |
------------------------------------------

hr_employees_status assomiglia a questo:

------------------------------------------
|employee_id|from_date |to_date   |status|
|1          |2006-07-12|2009-08-11|  0   |
|1          |2009-08-12|0000-00-00|  1   |
|2          |2009-07-01|0000-00-00|  1   |
------------------------------------------

E poi il foglio di excel in uscita

Name      Surname     Start Date     *dates*  June-06  July06  ->- July09 Aug09 Sep09
Foo       Bar         2006-07-12              *empty*     0    ->-   0      1     1
Ben       Smith       2009-07-01              *empty*  *empty* ->-   1      1     1

@Oleg

  1. $start_at è come segue:

    round(((substr($dates['from_date'],0,4) * 12) + substr($dates['from_date'],5,2)) - ((substr($start_date,0,4) * 12) + substr($start_date,5,2))) + 1;
    // $dates is a loop through the hr_employee_status table
    
  2. Vedi sopra. $dates è un ciclo attraverso il hr_employee_status tabella.Io sono sicuro al 100% che lo stato c'è.

  3. Si prega di spiegare il tipo di giocoleria?Tutti i valori di stato è di tipo varchar (e non mi chiedete il perchè, guardando ora, mi sembra una cosa stupida da fare...)

È stato utile?

Soluzione

Ci manca qualche parte cruciale del vostro codice, così fino a quando non fornire più dettagli (potrebbe mostrarci dove si definiscono $start_at per esempio?) Posso solo immaginare...

  1. Si chiede "perché non iniziare a data corretta", ma non ti forniscono il codice di cui $start_at è definito.Potrebbe essere utile anche a noi.
  2. Perché switching $dates['status']?Siete sicuri che sia in $dates?
  3. Il switch dichiarazione confronta i valori di una volta tipo di giocoleria...

Esempio php.net:

switch ("a") {
case 0:
    echo "0";
    break;
case "a": // never reached because "a" is already matched with 0
    echo "a";
    break;
}

Questo potrebbe essere il caso in cui il contratto a tempo indeterminato di stato 1 non viene mai raggiunto nella tua switch statement a causa del non corretto tipo di $dates['status'] rendendo arrestarsi case '0':.

Provare a utilizzare var_dump() per vedere l'esatta valori e tipi di variabili in uso nel tuo codice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top