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( 'affiliate' => array('far_key'=>'id'), ); protected $_display_filters = array( 'date_orig'=>array( array('Config::date',array(':value')), ), 'date_last'=>array( array('Config::date',array(':value')), ), 'status'=>array( array('StaticList_YesNo::display',array(':value')), ), ); /** * Return an account name */ public function name($withcompany=FALSE) { if ($withcompany) return sprintf('%s %s%s',$this->first_name,$this->last_name,$this->company ? sprintf(' (%s)',$this->company) : ''); else return sprintf('%s %s',$this->first_name,$this->last_name); } public function accnum() { return sprintf('%s-%04s',Config::siteid(TRUE),$this->id); } public function title($name) { return StaticList_Title::form($name,$this->title); } public function currency($name) { return StaticList_Module::form($name,'currency',$this->currency_id,'id','name',array('status'=>'=:1'),FALSE,array('class'=>'form_button')); } public function country($name) { return StaticList_Module::form($name,'country',$this->country_id,'id','name',array('active'=>'=:1'),FALSE,array('class'=>'form_button')); } public function language($name) { // @todo To setup return 'en'; } /** * Get the groups that an account belongs to */ public function groups() { return $this->group->find_all(); } public function isAdmin() { // @todo Define admins in the config file or DB $admins = array(ORM::factory('group',array('name'=>'Root'))); return $this->has('group',$admins); } /** * Get a list of all invoices for this account */ public function invoices() { return $this->invoice->distinct('id')->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) { $return = array(); foreach ($this->invoices() as $io) if ((is_null($date) OR $io->date_orig < $date) AND $io->due()) $return[$io->id] = $io; return $return; } /** * 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(); // @todo This shouldnt really be required if ($result < 0) $result = 0; return $format ? Currency::display($result) : $result; } public function log($message) { // Log the logout $alo = ORM::factory('account_log'); $alo->account_id = $this->id; $alo->ip = Request::$client_ip; $alo->details = $message; $alo->save(); return $alo->saved(); } /** * Search for accounts matching a term */ public function list_autocomplete($term,$index='id') { $return = array(); $this->clear(); $value = 'name(TRUE)'; // Build our where clause // First Name, Last name if (preg_match('/\ /',$term)) { list($fn,$ln) = explode(' ',$term,2); $this->where_open() ->where('first_name','like','%'.$fn.'%') ->and_where('last_name','like','%'.$ln.'%') ->where_close() ->or_where('company','like','%'.$term.'%'); } elseif (is_numeric($term)) { $this->where('id','like','%'.$term.'%'); } elseif (preg_match('/\@/',$term)) { $this->where('email','like','%'.$term.'%'); $value = 'email'; } else { $this->where('company','like','%'.$term.'%') ->or_where('first_name','like','%'.$term.'%') ->or_where('last_name','like','%'.$term.'%') ->or_where('email','like','%'.$term.'%'); } // @todo This should limit the results so that users dont see other users services. foreach ($this->find_all() as $o) $return[$o->$index] = array( 'value'=>$o->$index, 'label'=>sprintf('ACC %s: %s',$o->id,Table::resolve($o,$value)), ); return $return; } } ?>