Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z nadawaniem nr spraw
Forum PHP.pl > Forum > PHP
chrisstim
Witam,

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();



Z góry dziękuję za pomoc.
nospor
1) Uzywaj BBCODE dla kodu ktory wstawiasz !
2) Nie chce mi sie analizowac Twojego kodu bo to sieczka jakas i to bez bbcode na dodatek
O to prosty algorytym:
pobierasz najwyzszy numer dla danego roku.
Jak nie ma, to ustawiasz na 1. Jak jest, to ustawiasz na numer o jeden wiekszy.
Proste.

ps: najwyzszy numer uzyskasz dzieki MAX() w mysql.
chrisstim
Przepraszam, za brak bbcode i sieczke "nie" mojego kodu. Chodzi mi tylko o to gdzie by można było tam wcisnąć coś co by startowało od 1 z nadawaniem nr spraw.
nospor
Dla kodu php uzywa sie BBCODE PHP a nie CODE.

Trzeba bylo od razu pisać, że to nie Twoj kod i ze sie w ogole na tym nie znasz. W takim wypadku nie podawalbym algorytmu, bo i tak nic z nim nie zrobisz.
Lacki2006
Też się zastanawiałem ostatnio nad zmianą nr dokumentów przy zmianie roku myślę że najprostszy i skuteczny sposób jest taki
Kod
<?
// Pobieram z bazy MySQL ostatni zapisany rok który aktualizuje się przy każdym logowaniu do systemu
$ostatni_rok = '2013'; // 2013 - rok pobrany z bazy wpisany przy ostatnim logowaniu

// Pobieram aktualny rok
$aktualny_rok = date("Y");

// Robię porównanie
if ($ostatni_rok =! $aktualny_rok) {
    // Jeżeli wynik jest różny wpisujesz Update który zresetuje nr dokumentu na np 1

}
// jeżeli rok jest taki sam resetowanie nie zadziała i skrypt zacznie wykonywać dalszą część kodu
?>

Co o tym sądzicie ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.