Jump to content
php.lv forumi

Infants

Reģistrētie lietotāji
  • Posts

    63
  • Joined

  • Last visited

Posts posted by Infants

  1. Sveiki.

    Ir nepieciešamība izdomāt pareizāko veidu kā ielasīt datus no xml (bankas fidavista) datubāzē.

    Ar xml nolasīšanu nav problēmu, ar datubāzi nav problēmu, ar php pusi arī nav problēmu.

    Ir neliela aizķeršanās - kā to visu darīt!

    Aizķeršanās ir tāda, ka katru reizi būs vairāki ieraksti, kurus vajadzēs modificēt pirms saglabāšanas datubāzē (ar roku).

    Īstenībā ir 2 varianti:

     1. Ielasīt xml, izdrukāt html tabulu, kaut kādos inputos salabot to, kas labojams un to visu saglabāt ar post. (xml var gadīties arī paliels)

     2. Uzreiz ar php palīdzību 'iepūst xml'u datubāzē un pēc tam iziet cauri un izlabot (piem. popup logā) labojamos datus.

     

    Nepatīk doma, ka kādā brīdī datubāzē būs nepareizi dati.

     

    Kā Tev liekās, kurš variants ir pareizāks? Varbūt es kaut ko nezinu un ir kāds trešais variants? 

  2. Jājautā grāmatvedībai, vai dzēst ir pareizi. Varbūt, ka jāatzīmē, kā vecas, nevis jādzēš, bet citādi visam vajadzētu būt ok.

    Točna zini, ka array_diff_key un array_intersect_key atgriež tieši to, ko tu domā?

    Šinī gadijumā es pats esmu grāmatvedība. Zinu, ko es drīkstu un ko nē. Galvenais ir, lai nekur nerodās gļuki.

    Ar tiem diff un intersect pārbaudīju 10 dažādus gadījumus - atgrieza tieši to, ko vajag. Cerams, ka nepalika kāds nepārbaudīts variants.

    Anyway, paldies Tev par palīdzību!

  3. Nezinu gudri vai nē, bet pagaidām šāds variants izskatās ok. Vismaz nav jādzēš un jāinserto pa jaunu. Bail jau gan ir no tām funkcijām. 

            foreach(array_diff_key($old, $new) as $to_delete)
            {
                ORM::factory('Invoice_Item')->delete_invoice_item($to_delete, $invoice->id);
            }
            foreach(array_intersect_key($new, $old) as $to_update)
            {
                ORM::factory('Invoice_Item')->update_invoice_item($to_update, $invoice->id);
            }
            foreach(array_diff_key($new, $old) as $to_insert)
            {
                ORM::factory('Invoice_Item')->insert_invoice_item($to_insert, $invoice->id);
            }
    
  4. Nu ja! Man ir divi array'i - $old_items kā vecie pavadzīmes itemi un $data['item'] kā jaunie no post datiem.

    Kuram no tiem man taisīt foreach() ? Abiem?

    Ok, ja foreach($old_items), tad salīdzinu ar $data['item']. Ja tur ir tāds id, tad update, ja nav - delete.

    Pēc tam - Kā man dabūt no $data['item'] rindiņas kuras nav aiztiktas? (Jaunie itemi)?

     

    Sajutos tik tizls, ka bail. :) 

  5. Sakarā ar to, ka gan Tu neesi iedziļinājies jautājumā, gan arī es esmu to tizli pajautājis, te mans šībrīža jaunais post datu apstrādes kontrolieris. Esmu ticis līdz tai vietai, kur ir divrindu komentārs. (107-108 rindiņa)

    Domāju, ko darīt tālāk. 

        public function action_process()
        {
            if (!$this->request->post()) die("Nav post dati!");
            
            $data = $this->request->post();
            $invoice = ORM::factory('Invoice', $data['id']);
            
            if ($invoice->loaded())
            { // Laboju veco pavadzīmi
                // $old_items glabā visus vecās pavadzīmes itemus
                $old_items = ORM::factory('Invoice_Item')
                    ->where('invoice_id', '=', $invoice->id)
                    ->find_all();
            } else { // Jauns dokuments! Jāčeko un jāuzliek autonumbers!
                if ($data['type'] == 'sale' &&
                    $data['number'] == ORM::factory('Autonumber')->get_sale_number())
                {
                    try {
                        ORM::factory('Autonumber')->set_sale_number();
                    } catch (Exception $e) { // Kļūda var būt, ja pārsniedz MAX
                        $this->template->content = Debug::dump($e->errors());
                    }
                }
                if ($data['type'] == 'cash' &&
                    $data['number'] == ORM::factory('Autonumber')->get_cash_number())
                {
                    try {
                        ORM::factory('Autonumber')->set_cash_number();
                    } catch (Exception $e) { // Kļūda var būt, ja pārsniedz MAX
                        $this->template->content = Debug::dump($e->errors());
                    }
                }
            }
            
            $invoice->values($data, array(
                                          'user_id',         'delivery_address',
                                          'comments',        'number',
                                          'payment_type_id', 'payment_date', 
                                          'transport'));
            $invoice->invoice_date = $data['date'];
            $invoice->year             = date("Y", strtotime($data['date']));
            $invoice->month            = date("m", strtotime($data['date']));
            $invoice->date             = date("d", strtotime($data['date']));
            $invoice->type_id          = ORM::factory(
                                            'Document_Type',
                                            array('address'=>$data['type']))->id;
            $invoice->subtotal         = Catalog::price_to_db($data['subtotal']);
            $invoice->tax              = Catalog::price_to_db($data['tax']);
            $invoice->total            = Catalog::price_to_db($data['total']);
            $invoice->salesperson_id   = Auth::instance()->get_user()->id;
    
            try {
                $invoice->check(); // Te jāliek pēc tam SAVE
            } catch(ORM_Validation_Exception $e) {
                $this->template->content = Debug::dump($e->errors());
            }
            
            // Kā tagad labāk darīt? Noņemt no stoka vecos itemus un izdzēst, vai
            //  mēģināt labot tos un meklēt, kuri bija un vairs nav?
            
            // Darbs ar invoice_items rindām
            foreach($data['item'] as $item)
            {
                try {
                    ORM::factory('Invoice_Item')->add_invoice_item($item, $invoice->id);
                } catch (ORM_Validation_Exception $e) {
                    $this->template->content = Debug::dump($e->errors());
                }
            }
            
        }
    
  6. Kāpēc tu miksē kolonnu nosaukumus angļu un latviešu valodā? Nemaz nerunājot par CamelCase + under_score stilu miksēšanu tabulu nosaukumos...

    Tas tā ir tikai jautājuma 'saīsinātajā variantā'. Reālajā db viss ir pēc kohana ORM stila un smuki. (Invoice_Items ir ORM modelis nevis datubāzes tabulas nosaukums. Sorry, laikam nevajadzēja tā rakstīt.)

     

    Foreign keys much?

     

     

    Izstāstīsi lūdzu sīkāk?

  7. Sveiki.

    Ir vajadzīga neliela palīdzība ar loģikas izprašanu.

     

    Piemērs būs stipri saīsināts, bet tā, lai galveno domu var saprast.

    Ir tabulas - Invoices, Invoice_Items, Items, Item_Stock.

    Invoices: id, number, summa...

    Invoice_Items: id, invoice_id, item_id, daudzums, cena...

    Items: id, name, .....

    Item_Stock: id, item_id, daudzums.....

    Doma, ceru, visiem ir skaidra, kas ar ko un kā ir sasaistīts.

    Ir smuka forma, kurā tas viss tiek ievadīts un saglabāts.

    Iekš 'Invoice_Items', saglabājot vienu vai vairākus ierakstus, katrs ieraksts atjauno vēl kādu ierakstu citā tabulā, piemēram, atjauno info tabulā 'Item_Stock".

    Veidojot jaunu pavadzīmi, viss notiek baigi smuki, viss ir skaidrs.

    Problēmu sagādā pavadzīmes labošana. (Īstenībā jau pa nesmuko nesagādā, bet pa nesmuko ir ļoti daudz queriji un iekšā 'vārās', ka to visu var izdarīt daudz smukāk.)

     

    Šobrīd ir tā, ka labojot dokumentu, nolasa visus tās vecos itemus, noņem Item_Stock, izdzēš visus, un tad ievieto jaunos un pievieno stock.

     

    Ir doma pārtaisīt, lai vecos Invoice_Items atrod pēc rindas id, un vienkārši updeito, bet.. kas notiek, ja labotajā dokumentā kāda rinda ir izdzēsta? Kā lai smuki nočeko, kuri invoice_items.id vairs neeksistē?

     

    Tas tā, man labās idejas rodas, kad es vienkārši kādam pajautāju. Pat nevajag atbildi! Bet būšu ļoti priecīgs, ja pasviedīsi kādu ideju...

  8. https://github.com/jurchiks/numbers2words

    Rakstīju ļoti sen, kad tikko sāku programmēt PHP, bet šis tika izmantots kredītu rēķinos sohocredit.lv (latviski, krieviski, lietuviski, angliski, spāniski - nācās mācīties skaitīt spāniski :D). Priekš summām zem 100k pietika.

    Derētu uzprišināt kodu, tagad lasu un izskatās bik nesmuki. Bet nu to jau kādu citu dienu.

     

    + doma kaut kad piepliķēt klāt vēl citas valodas, tad jau redzēs.

    Pārbaudi gan vēlreiz šo. Man € 11,02 izdrukāja kā 'vienpadsmit eiro un divdesmit centu'. 

  9. Kāpēc programmētājam Latvijā vajadzētu zināt krievu valodu?

    krievu valoda + azartspēles => sludinājums ir sviests

    Droši vien, lai vajadzības gadījumā spētu sazināties ar uzņēmuma vadību? Iesniegumu par ikgadējo atvaļinājumu jāraksta 2 valodās. Vienu sev, vienu 'viņam'!

  10. Jautājums, laikam diezgan specifisks Kohana 3 un hmvc.

    Ir projekts, kura struktūra tiek būvēta kā Ko3 moduļi. Ir 2 moduļi - frontendam un backendam.

     

    Kā pareizāk būvēt ORM modeļus, ja abi modules strādās ar vienām un tām pašām datubāzes tabulām?

     

    It kā varētu iznest uz APPPATH/classes/model, bet gribās, lai katram modulim ir savi.

     

    Taisīt katram modulim modeļus savā subfolderī (modules/frontend/classes/model/frontend/item.php) un norādīt $_table_name? Kaut kur manīju, ka šādā variantā esot problēmas ar caching?

×
×
  • Create New...