Mam taki problem z nadawaniem nr spraw od początku wraz z rozpoczęciem kolejnego roku.
Zaczął się nowy rok i chciałbym aby moja składnia nadawała numery od 1, a nie od ostatniego znajdującego się w bazie.
Funkcja wygląda tak:
Kod
public function nadajSprawy(array $bifs)
{
$rok = date('Y');
$da = $this->getDefaultAdapter();
try {
// rozpocznij transakcję
$da->beginTransaction();
// zablokuj bazę (read only)
$da->exec("lock table sprawy in share mode;");
// trzeba wziąść listę tych bez sprawy, posortowane według bif_id
$bezSpraw = $this->select()
->where("sprawa = ?", "")
->where(new Zend_Db_Expr("date_part('year', rekord_data) = " . $rok))
->order("bif_id ASC");
$lista = $this->fetchAll($bezSpraw);
//echo "Ilość pozycji bez spraw w tym roku: ".count($lista)."<br>";
// pobrać ostatnią, najwyższą wartość sprawy
$ostatnia = $this->select()
//->columns(array("sprawa"))
->where("sygnatura <> ?", "")
->where(new Zend_Db_Expr("date_part('year', rekord_data) = " . $rok))
->order("bif_id DESC")
->limit("1");
$ostatniWiersz = $this->fetchRow($ostatnia);
$lp = 0;
$indexOsobowy = 0;
//echo "Rok: " . $rok . "<br>";
if ($ostatniWiersz !== NULL) {
//echo "Ostatnia sprawa: " . $ostatniWiersz->sprawa . "<br>";
// wyizolować części ostatniej sprawy
$parts = explode(".", $ostatniWiersz->sprawa);
// odnaleźć indeks części osobowe w tabeli
$indexOsobowy = array_search($parts[5], $this->osobowy);
$lp = $parts[4];
}
//echo "ostatni LP: " . $lp . "<br>";
//echo "ostatni osobowy: " . $this->osobowy[$indexOsobowy] . "<br>";
// ustawic sprawe, zwiększająć wartość o jeden i wykorzytując wartość osobowa o wskazanym indeksie
foreach ($lista as $row) {
/** @var Zend_Db_Table_Row $row */
$lp++;
// jeśli wartość % 100 = 1, zwiększyć indeks osobowy o 1, chyba ze max osiagniety, wówczas licz od 0
if ($lp % 100 == 1) {
$indexOsobowy++;
if ($indexOsobowy >= sizeof($this->osobowy)) {
$indexOsobowy = 0;
}
}
// ustaw wymagane wartosci pol wiersza i zapisz
$row->lp = $lp;
$row->osobowy_index = $indexOsobowy;
//echo "BIF_ID: ".$row->bif_id."; LP: ".$row->lp. "; Sprawa ".$row->sprawa ."<br>";
$row->save();
}
// commit
$da->commit();
{
$rok = date('Y');
$da = $this->getDefaultAdapter();
try {
// rozpocznij transakcję
$da->beginTransaction();
// zablokuj bazę (read only)
$da->exec("lock table sprawy in share mode;");
// trzeba wziąść listę tych bez sprawy, posortowane według bif_id
$bezSpraw = $this->select()
->where("sprawa = ?", "")
->where(new Zend_Db_Expr("date_part('year', rekord_data) = " . $rok))
->order("bif_id ASC");
$lista = $this->fetchAll($bezSpraw);
//echo "Ilość pozycji bez spraw w tym roku: ".count($lista)."<br>";
// pobrać ostatnią, najwyższą wartość sprawy
$ostatnia = $this->select()
//->columns(array("sprawa"))
->where("sygnatura <> ?", "")
->where(new Zend_Db_Expr("date_part('year', rekord_data) = " . $rok))
->order("bif_id DESC")
->limit("1");
$ostatniWiersz = $this->fetchRow($ostatnia);
$lp = 0;
$indexOsobowy = 0;
//echo "Rok: " . $rok . "<br>";
if ($ostatniWiersz !== NULL) {
//echo "Ostatnia sprawa: " . $ostatniWiersz->sprawa . "<br>";
// wyizolować części ostatniej sprawy
$parts = explode(".", $ostatniWiersz->sprawa);
// odnaleźć indeks części osobowe w tabeli
$indexOsobowy = array_search($parts[5], $this->osobowy);
$lp = $parts[4];
}
//echo "ostatni LP: " . $lp . "<br>";
//echo "ostatni osobowy: " . $this->osobowy[$indexOsobowy] . "<br>";
// ustawic sprawe, zwiększająć wartość o jeden i wykorzytując wartość osobowa o wskazanym indeksie
foreach ($lista as $row) {
/** @var Zend_Db_Table_Row $row */
$lp++;
// jeśli wartość % 100 = 1, zwiększyć indeks osobowy o 1, chyba ze max osiagniety, wówczas licz od 0
if ($lp % 100 == 1) {
$indexOsobowy++;
if ($indexOsobowy >= sizeof($this->osobowy)) {
$indexOsobowy = 0;
}
}
// ustaw wymagane wartosci pol wiersza i zapisz
$row->lp = $lp;
$row->osobowy_index = $indexOsobowy;
//echo "BIF_ID: ".$row->bif_id."; LP: ".$row->lp. "; Sprawa ".$row->sprawa ."<br>";
$row->save();
}
// commit
$da->commit();
Z góry dziękuję za pomoc.