array('model'=>'user_token'), 'email_log'=>array('far_key'=>'id'), 'group'=>array('through'=>'account_group'), 'invoice'=>array('far_key'=>'id'), 'payment'=>array('far_key'=>'id'), 'service'=>array('far_key'=>'id'), ); protected $_has_one = array( 'RTM'=>array('far_key'=>'id'), ); protected $_belongs_to = array( 'country'=>array(), 'currency'=>array(), 'language'=>array(), ); protected $_display_filters = array( 'date_orig'=>array( array('Site::Date',array(':value')), ), 'date_last'=>array( array('Site::Date',array(':value')), ), 'status'=>array( array('StaticList_YesNo::get',array(':value',TRUE)), ), ); /** REQUIRED ABSTRACT METHODS **/ /** LOCAL METHODS **/ public function activated() { return $this->has('group'); } /** * Get a list of all invoices for this account */ public function invoices($processed=FALSE) { $o = $this->invoice; return $processed ? $o->find_all() : $o->where_unprocessed()->find_all(); } /** * Get a list of due invoices for this account * * @param int Date (in secs) to only retrieve invoices prior to this date */ public function invoices_due($date=NULL) { $result = array(); foreach ($this->invoices() as $io) if ((is_null($date) OR $io->date_orig < $date) AND $io->due()) $result[$io->id] = $io; return $result; } /** * Calculate the total of invoices due for this account */ public function invoices_due_total($date=NULL,$format=FALSE) { $result = 0; foreach ($this->invoices_due($date) as $io) $result += $io->due(); return $format ? Currency::display($result) : $result; } public function isAdmin() { return ($this->RTM->loaded() AND is_null($this->RTM->parent_id)); } /** * Is this account a company account */ public function isCompany() { return strlen($this->company) > 0; } public function isReseller() { return $this->RTM->loaded(); } /** * Returns the company name if it exists, otherwise the persons name */ public function name($variable=NULL) { return $this->isCompany() ? $this->company : $this->namesub(); } /* * Returns the persons name */ public function namesub($variable=NULL) { return trim(sprintf('%s %s',$this->first_name,$this->last_name)); } /** * The key we use to sort entries of this model type */ public function sortkey($withcompany=FALSE) { $sk = ''; if ($withcompany AND $this->company) $sk .= $this->company.' '; return $sk.sprintf('%s %s',$this->last_name,$this->first_name); } /** * Generate a token for non-login authorised functinos */ public function token($token_expire,$module,$method,$uses) { return ORM::factory('Module_Method_Token') ->method(array($module,$method)) ->account($this) ->uses($uses) ->expire(time()+$token_expire*60) ->generate(); } /** * Search for accounts matching a term */ public function list_autocomplete($term,$index,$value,array $label,array $limit=array(),array $options=array()) { $ao = Auth::instance()->get_user(); $this->clear(); $this->where_active(); // Build our where clause // First Name, Last name if (preg_match('/\ /',$term)) { list($fn,$ln) = explode(' ',$term,2); $this->where_open() ->where_open() ->where('first_name','like','%'.$fn.'%') ->and_where('last_name','like','%'.$ln.'%') ->where_close() ->or_where('company','like','%'.$term.'%') ->where_close(); } elseif (is_numeric($term)) { $this->where('id','like','%'.$term.'%'); } elseif (preg_match('/\@/',$term)) { $this->where('email','like','%'.$term.'%'); } else { $this->where_open() ->where('company','like','%'.$term.'%') ->or_where('first_name','like','%'.$term.'%') ->or_where('last_name','like','%'.$term.'%') ->where_close(); } // Restrict results to authorised accounts array_push($limit,array('id','IN',$ao->RTM->customers($ao->RTM))); return parent::list_autocomplete($term,$index,$value,$label,$limit,array_merge($options,array('parentbypass'=>TRUE))); } } ?>