Record.php 3.49 KB
<?php namespace App\Models;
use Illuminate\Database\Eloquent\Model;

use Auth;
use App\Models\KeyVal;

class Record extends Model{

	protected $table = 'records';
	//protected $fillable = array('status','data','rlog','group');


	private $cachecols=array("currentstatus","legalstatus","firstname","lastname",
	"mobile","emailid","altphone1","altphone2","altphone3","altphone4","altphone5",
	"altphone6","altphone7","altphone8","altphone9","altphone10","candidatecategory",
	"nextfollowupdate","passportno","joiningdate","client","designation","supervisor",
	"contracttype","saltotal","ibannumber","servicestoppeddate","employeeexitstatus",
	"exittype","dateofexit","abscondtype","abscondeddate","workflowstatus","status",
	"clientinternalid","department","passportstatus","clientcode","laborcardpersonalid",
	"dialer_status","dialer_substatus","dialer_callback","dialer_remarks","dialer_flag",
	"dialer_lastcall","priority","crmlist_id","group");
	private $keyvals=null;
	public $dataarr=array();
	public $rlogarr=array();
	public $plogarr=array();
	
	public function keyvals()
	{
		if(!$this->keyvals)
		{
			if($this->keyval_id==0)
			{
				$keyval=new KeyVal();
				$keyval->type='Record';
				$keyval->key=$this->id;
				$keyval->save();
				
				$this->keyval_id=$keyval->id;
				$this->save();
			}
			$this->keyvals=KeyVal::find($this->keyval_id);
			
			$this->dataarr=unserialize($this->keyvals->data);
			$this->rlogarr=unserialize($this->keyvals->rlog);
			$this->plogarr=unserialize($this->keyvals->plog);
		}
		return $this;
	}
	public function save(array $attributes = array())
	{
		if($this->keyvals)
		{
			foreach($this->cachecols as $cols)
			{
				if(isset($this->dataarr[$cols]))$this->$cols=$this->dataarr[$cols];
			}

			$this->keyvals->data=serialize($this->dataarr);
			$this->keyvals->rlog=serialize($this->rlogarr);
			$this->keyvals->plog=serialize($this->plogarr);
			
			$this->keyvals->save();
		}

		parent::save($attributes);
	}
	
	
	
	protected static function boot()
	{
		parent::boot();

		static::addGlobalScope('groupacl', function(\Illuminate\Database\Eloquent\Builder $builder)
		{
			if(Auth::check())
			{
				//$builder->whereIn('group',Auth::user()->getAccessList("group",true,false,false));
			}
		});
		
		static::creating(function($model)
		{
			if(Auth::check())
			{
				if($model->group=='')$model->group=Auth::user()->group;
				if($model->group=='')$model->group="Default";
				
				$groupacl=Auth::user()->getAccessList("group",false,true,false);
				if(!in_array($model->group,$groupacl))
				{
					throw new \Exception("No Access to Create [".Auth::user()->id."] : (".implode(",",$groupacl).") in $model->group");
					return false;
				}
			}
			else if($model->group=='')$model->group="Default";
		});
		static::updating(function($model)
		{
			if(Auth::check())
			{
				$original = $model->getOriginal();
				if($original['group']=='')$original['group']='Default';
				
				if($model->group=='')$model->group=Auth::user()->group;
				if($model->group=='')$model->group="Default";
				
				$groupacl=Auth::user()->getAccessList("group",false,true,false);
				if(!in_array($original['group'],$groupacl)||!in_array($model->group,$groupacl))
				{
					throw new \Exception("No Access to Update [".Auth::user()->id."] : (".implode(",",$groupacl).") in $model->group");
					return false;
				}
			}
			else if($model->group=='')$model->group="Default";
		});
	}
	
	/**
	 * Get the comments for the blog post.
	 */
	public function calls()
	{
		return $this->hasMany('App\Models\CRMCallArchive', 'crm_id', 'id');
	}
}