TRUE, 'ajaxtranslatecategory'=>TRUE, 'ajaxtranslate'=>TRUE, 'category'=>TRUE, 'edit'=>TRUE, 'list'=>TRUE, 'listused'=>TRUE, 'view'=>TRUE, ); public function action_ajaxaccounting() { $products = ORM::factory('Product')->where('accounting','LIKE','%'.$this->request->query('term').'%')->find_all(); $result = array(); foreach ($products as $po) array_push($result,array('value'=>$po->accounting,'label'=>$po->accounting)); $this->response->headers('Content-Type','application/json'); $this->response->body(json_encode(array_values($result))); } public function action_ajaxtranslate() { $po = ORM::factory('Product',$this->request->param('id')); if (! $po->loaded() OR ! isset($_REQUEST['key'])) { $output = _('Unable to find translate data'); } else { $pto = $po->translate->where('language_id','=',$_REQUEST['key'])->find(); $output = View::factory('product/admin/ajaxtranslate') ->set('o',$pto); } $this->template->content = $output; } /** * Retrieve the product category translate record */ public function action_ajaxtranslatecategory() { $pco = ORM::factory('Product_Category',$this->request->param('id')); if (! $pco->loaded() OR ! isset($_REQUEST['key'])) { $output = _('Unable to find translate data'); } else { $pcto = $pco->translate->where('language_id','=',$_REQUEST['key'])->find(); $output = View::factory('product/category/admin/ajaxtranslate') ->set('o',$pcto); } $this->template->content = $output; } /** * Update the product category */ public function action_category() { $pco = ORM::factory('Product_Category',$this->request->param('id')); if (! $pco->loaded()) HTTP::redirect(URL::link('admin','product/list')); if ($_POST AND $pco->values($_POST)->changed() AND (! $this->save($pco))) $pco->reload(); Script::factory() ->type('stdin') ->data(' $(document).ready(function() { $("select[name=language_id]").change(function() { // If we select a blank, then dont continue if (this.value == 0) return false; // Send the request and update sub category dropdown $.ajax({ type: "GET", data: "key="+$(this).val(), dataType: "html", cache: false, url: "'.URL::link('admin','product/ajaxtranslatecategory/'.$pco->id,TRUE).'", timeout: 2000, error: function(x) { alert("Failed to submit"); }, success: function(data) { $("div[id=translate]").empty().append(data); } }); }); }); '); Block::factory() ->type('form-horizontal') ->title('Update Category') ->title_icon('icon-wrench') ->body(View::factory('product/category/admin/edit') ->set('o',$pco)); } /** * Edit a product configuration */ public function action_edit() { $po = ORM::factory('Product',$this->request->param('id')); if (! $po->loaded()) HTTP::redirect('welcome/index'); if ($_POST AND $po->values($_POST)->changed() AND (! $this->save($po))) $po->reload(); Script::factory() ->type('stdin') ->data(' $(document).ready(function() { $("select[name=language_id]").change(function() { // If we select a blank, then dont continue if (this.value == 0) return false; // Send the request and update sub category dropdown $.ajax({ type: "GET", data: "key="+$(this).val(), dataType: "html", cache: false, url: "'.URL::link('admin','product/ajaxtranslate/'.$po->id,TRUE).'", timeout: 2000, error: function(x) { alert("Failed to submit"); }, success: function(data) { $("div[id=translate]").empty().append(data); } }); }); $("input[name=accounting]").typeahead({ minLength: 2, source: function (query,process) { accounting(\'a/product/ajaxaccounting\',query,process); }, matcher: function () { return true; }, }); }); var d=0; var accounting = _.debounce(function(url,query,process){ $.ajax({ url : site_url+url, type : "GET", data : "term=" + query, dataType : "JSON", async : true, cache : false, beforeSend : function() { if (d++ == 0) $(\'i[name=acclook]\').removeClass("hidden"); }, success : function(data) { // if json is null, means no match, won\'t do again. if(data==null || (data.length===0)) return; users = {}; userLabels = []; _.each(data,function(item,ix,list) { if (_.contains(users,item.label)) item.label = item.label + \' #\' + item.value; userLabels.push(item.label); users[item.label] = item.value; }); process(userLabels); }, complete : function() { if (--d == 0) $(\'i[name=acclook]\').addClass("hidden"); } }) }, 500); '); Block::factory() ->type('form-horizontal') ->title('Update Product') ->title_icon('fa fa-wrench') ->body(View::factory('product/admin/edit') ->set('plugin_form',$po->plugin_edit()) ->set('o',$po)); } /** * Show a list of products */ public function action_list() { $products = ($x=ORM::factory('Product_Category',$this->request->param('id')) AND $x->loaded()) ? $x->products() : ORM::factory('Product')->order_by('status','DESC')->order_by('prod_plugin_file')->find_all(); Block::factory() ->title(_('Products').($x->loaded() ? ' - '.$x->name() : ' - All')) ->title_icon('fa fa-list') ->body(View::factory('product/list')->set('list',$products)); } /** * List all the products that have an active service */ public function action_listused() { $db = Database::instance(); $columns = ''; foreach (array_keys(ORM::factory('Product')->table_columns()) as $text) $columns .= ($columns ? ',' : '').'p.'.$text; $products = $db->query(Database::SELECT,sprintf('SELECT %s FROM ab_product p,ab_service s WHERE s.product_id=p.id AND s.status=1 AND p.site_id = s.site_id AND s.site_id=%s GROUP BY p.id',$columns,Company::instance()->site()),'Model_Product'); Block::factory() ->title(_('Products with Active Services')) ->title_icon('fa fa-list') ->body(View::factory('product/list')->set('list',$products)); } public function action_view() { $po = ORM::factory('Product',$this->request->param('id')); if (! $po->loaded()) throw HTTP_Exception::factory(403,'Product either doesnt exist, or you are not authorised to see it'); Block::factory() ->title(sprintf('%s: %s',_('Current Services Using this Product'),$po->title())) ->title_icon('icon-th-list') ->body(Table::factory() ->data($po->service->where_active()->find_all()) ->page_items(25) ->columns(array( 'id'=>'ID', 'account->accnum()'=>'Acc Num', 'account->name()'=>'Account', 'name()'=>'Details', 'status'=>'Active', 'price(TRUE,TRUE)'=>'Price', )) ->prepend(array( 'id'=>array('url'=>URL::link('user','service/view/')), ))); } } ?>