Overview

Namespaces

  • App
    • Components
    • Interfaces
    • Lib
      • Files
      • Forms
        • Controls
      • Html
      • Repair
      • Statics
    • Model
    • Modules
      • BaseModule
        • Presenters
      • PartnersModule
        • Presenters
      • ProductModule
        • Presenters
      • SaleModule
        • Model
        • Presenters
      • SettingsModule
        • Model
        • Presenters
      • StoreModule
        • Model
        • Presenters
    • Presenters
    • Router
  • PHP

Classes

  • DateTime
  • SplFileInfo

Interfaces

  • ArrayAccess
  • Countable
  • Exception
  • Iterator
  • Traversable
  • Overview
  • Namespace
  • Class
  • Tree
  • Deprecated
  • Download
  1: <?php
  2: 
  3: /**
  4:  * Project sberp
  5:  *
  6:  * @file sale 
  7:  * @author Jaromír Polášek
  8:  * verze: 0.9.1.AFTERMATH
  9:  * Encoding UTF-8
 10:  */
 11: 
 12: namespace App\Modules\SaleModule\Model;
 13: 
 14: use Nette\Object,
 15:     App\Model\Database,
 16:     App\Model\Counter,
 17:     App\Lib\Table,
 18:     App\Lib\Statics\Cons,
 19:     App\Modules\StoreModule\Model\Move;
 20: 
 21: class Sale extends Object {
 22: 
 23:     const START = 'Koncept',
 24:         PROGRESS = 'Objednávka',
 25:         READY = 'Připraveno',
 26:         DONE = 'Dokončeno',
 27:         CANCEL = 'Zrušeno';
 28:     const SALE = 'sale',
 29:         LINE = 'sale_line',
 30:         COUNTER = 'sale_counter';
 31: 
 32:     /** @var App\Model\Database */
 33:     private $database;
 34:     
 35:     /** @var array řádek objednávky */
 36:     private $line;
 37: 
 38:     /** @var \App\Model\Counter */
 39:     private $counter;
 40: 
 41:     /** @var boolean Edit/nová */
 42:     private $edit;
 43: 
 44:     /** @var \Nette\Database\Table\ActiveRow */
 45:     private $master;
 46: 
 47:     public function __construct(Database $database, Counter $counter, Move $move) {
 48:     $this->master = $move->getMaster();
 49:     $this->database = $database;
 50:     $this->counter = $counter;
 51:     $this->refresh();
 52:     }
 53: 
 54:     /**
 55:      * Nastaví počítadla na novou, nebo žádanou hodnotu. Novou hodnotu doplní do objednávky pokud 
 56:      * @param arrayHash $value
 57:      */
 58:     public function prepareSale($value) {
 59:     if (isset($value[Cons::COLUMN_NAME]) && $value[Cons::COLUMN_NAME] !== '') {
 60:         $this->edit = TRUE;
 61:         $this->sounter->setCounters(self::SALE, $value[Cons::COLUMN_NAME]);
 62:     } else {
 63:         $this->edit = FALSE;
 64:         $this->counter->setCounters(self::SALE);
 65:         $value[Cons::COLUMN_NAME] = $this->counter->getName($this->counter[0]);
 66:     }
 67:     }
 68: 
 69:     /**
 70:      * Pokud se jedná o novou objednávku, uloží stav počítadla
 71:      */
 72:     public function processSale() {
 73:     if ($this->edit === FALSE) {
 74:         $this->counter->save(TRUE);
 75:     }
 76:     }
 77: 
 78:     /**
 79:      * Nastaví počítedlo na žádanou hodnotu objednávky a přidá novou hodnotu řádky, pokud se nejedná o editaci
 80:      * @param arrayhash $value
 81:      */
 82:     public function prepareLine($value) {
 83:     $saleRow = (new Table(self::SALE, $this->database))->data->where(Cons::COLUMN_ID . ' =?', $value['sale_id'])->fetch();
 84:     if (isset($value[Cons::COLUMN_NAME]) && $value[Cons::COLUMN_NAME] !== '') {
 85:         $this->edit = TRUE;
 86:         $this->counter->setCounters(self::SALE, $value[Cons::COLUMN_NAME]);
 87:     } else {
 88:         $this->edit = FALSE;    
 89:         $saleName = $saleRow[Cons::COLUMN_NAME];
 90:         $this->counter->setCounters(self::SALE, $saleName);
 91:         $value[Cons::COLUMN_NAME] = $this->counter->getSubName($this->counter[1]);
 92:         $value['partner_id'] = $saleRow['partner_id'];
 93:     }
 94:     $this->line = array(
 95:         Cons::COLUMN_NAME => $value[Cons::COLUMN_NAME],
 96:         'sale_line_id' => NULL,
 97:         'date' => $saleRow['date_end'],
 98:         'partner_id' => $saleRow['partner_id'],
 99:         'qty' => $value['qty'],
100:         'product_id' => $value['product_id']
101:     );
102:     }
103: 
104:     /**
105:      * Vytvoří nebo zkontroluje existenci procesu pro řádek zakázky
106:      */
107:     public function processLine($id) {
108:     //$line = new Table(self::LINE, $this->database);
109:     if ($this->edit === FALSE) {
110:         $this->counter->save();
111:     }
112:     $process = $this->getProcess($id);
113:     $this->getMove($process);
114:     }
115: 
116:     /**
117:      * Zjistí stav zakázek
118:      */
119:     private function refresh(){
120:     $sales = new Table(self::SALE,$this->database);
121:     $sales->data->where('state NOT',self::DONE);
122:     foreach ($sales as $sale){
123:         $state = $this->checkSale($sale);
124:         if ($state === TRUE){
125:         $sale->update(array('state'=>self::READY));     
126:         }
127:     }   
128:     }
129:     
130:     /**
131:      * Zkontroluje stav zakázek, stačí aby jediná nebyla hotová a celá zakázka není hotová
132:      * @param \Nette\Database\Table\ActiveRow $sale
133:      * @return boolean 
134:      */
135:     private function checkSale($sale){
136:     $all = TRUE;
137:     $lines = $sale->related(self::LINE);
138:     foreach ($lines as $line){
139:         $state = $this->checkLine($line);
140:         if ($state === TRUE){
141:         $line->update(array('state'=>self::DONE));
142:         }else{
143:         $all = FALSE;
144:         } 
145:     }
146:     return $all;        
147:     }
148:     
149:     /**
150:      * Ověří, zda je proces ukončen
151:      * @param   \Nette\Database\Table\ActiveRow $line
152:      * @return boolean
153:      */
154:     private function checkLine($line){
155:     $process = $line->related('stock_picking.sale_line_id')->fetch();
156:     $move = $process->related('stock_move.stock_picking_id')->where('product_id =?',$line['product_id'])->fetch();// TO-DO  this->getMove($process, TRUE);
157:     if ($move instanceof \Nette\Database\Table\ActiveRow && $move['state'] === self::DONE) {
158:         return TRUE;
159:     } else {
160:         return FALSE;
161:     }
162:     }
163:     
164:     /**
165:      * Vrátí nebo vytvoří a vrátí process systému
166:      * @param string $id Název processu
167:      * @return \Nette\Database\Table\ActiveRow
168:      */
169:     private function getProcess($id = NULL) {
170:     $process = new Table('stock_picking', $this->database);
171:     $partial = $process->data->where('sale_line_id' . ' =?', $id)->fetch();
172:     if ($partial instanceof \Nette\Database\Table\ActiveRow) {
173:         return $partial;
174:     } else {
175:         $this->line['sale_line_id'] = $id;
176:         return $process->insert(array( Cons::COLUMN_NAME => $this->line[Cons::COLUMN_NAME],
177:         'sale_line_id' => $this->line['sale_line_id'],
178:         'date' => $this->line['date'],
179:         'partner_id' => $this->line['partner_id']
180:             ));
181:     }
182:     }
183: 
184:     /**
185:      * Vrátí nebo vytvoří pohyb požadovaného produktu v procesu
186:      */
187:     private function getMove($process, $need = FALSE) {
188:     $move = new Table('stock_move', $this->database);
189:     $partial = $move->data->where('product_id =?', $this->line['product_id'])
190:         ->where('stock_picking_id =?', $process[Cons::COLUMN_ID])
191:         ->fetch();
192:     if ($partial instanceof \Nette\Database\Table\ActiveRow) {
193:         return $move;
194:     } elseif($need === FALSE) {
195:         return $move->insert(array(
196:         'name' => $this->line[Cons::COLUMN_NAME],
197:         'product_id' => $this->line['product_id'],
198:         'stock_picking_id' => $process[Cons::COLUMN_ID],
199:         'stock_source_id' => $this->getMasterId(),
200:         'stock_target_id' => $this->getMasterId(),
201:         'qty' => $this->line['qty'],
202:         'state' => 'Připraveno',
203:         'date' => $this->line['date']
204:         ));
205:     }else {
206:         return FALSE;
207:     }
208:     }
209: 
210:     /**
211:      * Vrací Id hlavního skladu
212:      * @return int
213:      */
214:     private function getMasterId() {
215:     return $this->master->id;
216:     }
217: }
218: 
sberp API API documentation generated by ApiGen