<?php
class RadniNalog extends AppModel {
	var $name = 'RadniNalog';
	var $useTable = 'radni_nalog';
	var $order = array('RadniNalog.datum_rn DESC');
	
	var $validate = array(
		'customer_id' => array(
			'numeric' => array(
				'rule' => array('numeric'),
				'message' => 'Kupac je obavezan',
				'allowEmpty' => false,
			),
		),
	);
	
	var $belongsTo = array(
		'Customer' => array(
			'className' => 'Customer',
			'foreignKey' => 'customer_id',
			'conditions' => '',
			'fields' => '',
			'order' => ''
		),
		'RadniNalogStatus' => array(
			'className' => 'RadniNalogStatus',
			'foreignKey' => 'status_id',
			'conditions' => '',
			'fields' => '',
			'order' => ''
		),
		'Automobil' => array(
			'className' => 'Automobil',
			'foreignKey' => 'automobil_id',
			'conditions' => '',
			'fields' => '',
			'order' => ''
		),
		'Uredjaj' => array(
			'className' => 'Uredjaj',
			'foreignKey' => 'uredjaj_id',
			'conditions' => '',
			'fields' => '',
			'order' => ''
		),
	);
	
	// NAPOMENA: Ova veza će raditi tek nakon što izvršiš ALTER SQL:
	// ALTER TABLE `offers` ADD COLUMN `radni_nalog_id` INT(11) NULL DEFAULT NULL;
	// Do tada je zakomentirana da ne ruši postojeće funkcionalnosti
	/*
	var $hasOne = array(
		'Offer' => array(
			'className' => 'Offer',
			'foreignKey' => 'radni_nalog_id',
			'dependent' => false
		)
	);
	*/
	
	var $hasMany = array(
		'RadniNalogStavka' => array(
			'className' => 'RadniNalogStavka',
			'foreignKey' => 'radni_nalog_id',
			'dependent' => true, // Briši stavke kad se briše radni nalog
			'conditions' => '',
			'fields' => '',
			'order' => 'RadniNalogStavka.id ASC',
			'limit' => '',
			'offset' => '',
			'exclusive' => '',
			'finderQuery' => '',
			'counterQuery' => ''
		)
	);
	
	/**
	 * Generira sljedeći broj radnog naloga
	 */
	function generateNumber() {
		// Pronađi zadnji radni nalog ove godine
		$year = date('Y');
		$prefix = 'RN-' . $year . '-';
		
		$lastRN = $this->find('first', array(
			'fields' => array('RadniNalog.number'),
			'conditions' => array(
				'RadniNalog.number LIKE' => $prefix . '%'
			),
			'order' => array('RadniNalog.id' => 'DESC')
		));
		
		if (empty($lastRN) || empty($lastRN['RadniNalog']['number'])) {
			return $prefix . '0001';
		}
		
		// Ekstraktuj broj iz formata RN-YYYY-NNNN
		$parts = explode('-', $lastRN['RadniNalog']['number']);
		if (count($parts) == 3) {
			$num = intval($parts[2]) + 1;
			return $prefix . str_pad($num, 4, '0', STR_PAD_LEFT);
		}
		
		// Fallback
		return 'RN-' . date('Y') . '-0001';
	}
	
	/**
	 * Storniranje radnog naloga
	 */
	function cancelRadniNalog($id = null) {
		$this->contain('RadniNalogStavka');
		$this->read(null, $id);
		
		if ($this->data['RadniNalog']['canceled']) {
			return false;
		} else {
			unset($this->data['RadniNalogStavka']);
			$this->data['RadniNalog']['canceled'] = date('Y-m-d H:i:s');
			$this->data['RadniNalog']['canceled_by'] = $this->Session->read('Auth.User.username');
			$this->save();
			return true;
		}
	}
	
	function beforeSave($options) {
		parent::beforeSave($options);
		
		// Generiraj broj ako je novi radni nalog
		if (empty($this->data['RadniNalog']['id']) && empty($this->data['RadniNalog']['number'])) {
			$this->data['RadniNalog']['number'] = $this->generateNumber();
		}
		
		// Postavi datum_rn ako nije postavljen
		if (empty($this->data['RadniNalog']['id']) && empty($this->data['RadniNalog']['datum_rn'])) {
			$this->data['RadniNalog']['datum_rn'] = date('Y-m-d');
		}
		
		// Postavi created ako je novi zapis
		if (empty($this->data['RadniNalog']['id'])) {
			$this->data['RadniNalog']['created'] = date('Y-m-d H:i:s');
		}
		
		// Postavi modified uvijek
		$this->data['RadniNalog']['modified'] = date('Y-m-d H:i:s');
		
		// NE brišemo stavke ovdje - to se radi u controlleru kad treba
		
		return true;
	}
}
