public function paymentAction()
 {
     $totalFields = array();
     $query = new Am_Query($this->getDi()->invoicePaymentTable);
     $query->leftJoin('?_user', 'm', 'm.user_id=t.user_id')->addField("(SELECT GROUP_CONCAT(item_title SEPARATOR ', ') FROM ?_invoice_item WHERE invoice_id=t.invoice_id)", 'items')->addField('m.login', 'login')->addField('m.email', 'email')->addField('m.street', 'street')->addField('m.city', 'city')->addField('m.state', 'state')->addField('m.country', 'country')->addField('m.phone', 'phone')->addField('m.zip', 'zip')->addField("concat(m.name_f,' ',m.name_l)", 'name')->addField('t.invoice_public_id', 'public_id')->addWhere('t.user_id=?', $this->user_id);
     $query->setOrder("invoice_payment_id", "desc");
     $grid = new Am_Grid_Editable('_payment', ___('Payments'), $query, $this->_request, $this->view);
     $grid->actionsClear();
     $grid->addField(new Am_Grid_Field_Date('dattm', ___('Date/Time')));
     $grid->addField('invoice_id', ___('Invoice'))->setGetFunction(array($this, '_getInvoiceNum'))->addDecorator(new Am_Grid_Field_Decorator_Link('admin-user-payments/index/user_id/{user_id}#invoice-{invoice_id}', '_top'));
     $grid->addField('receipt_id', ___('Receipt'));
     $grid->addField('paysys_id', ___('Payment System'));
     array_push($totalFields, $grid->addField('amount', ___('Amount'))->setGetFunction(array($this, '_getAmount')));
     if ($this->getDi()->plugins_tax->getEnabled()) {
         array_push($totalFields, $grid->addField('tax', ___('Tax'))->setGetFunction(array($this, '_getTax')));
     }
     $grid->addField(new Am_Grid_Field_Date('refund_dattm', ___('Refunded')))->setFormatDatetime();
     $grid->addField('items', ___('Items'));
     $grid->setFilter(new Am_Grid_Filter_Payments());
     $action = new Am_Grid_Action_Export();
     $action->addField(new Am_Grid_Field('dattm', ___('Date Time')))->addField(new Am_Grid_Field('receipt_id', ___('Receipt')))->addField(new Am_Grid_Field('paysys_id', ___('Payment System')))->addField(new Am_Grid_Field('amount', ___('Amount')))->addField(new Am_Grid_Field('tax', ___('Tax')))->addField(new Am_Grid_Field_Date('refund_dattm', ___('Refunded')))->addField(new Am_Grid_Field('login', ___('Username')))->addField(new Am_Grid_Field('name', ___('Name')))->addField(new Am_Grid_Field('email', ___('Email')))->addField(new Am_Grid_Field('street', ___('Street')))->addField(new Am_Grid_Field('city', ___('City')))->addField(new Am_Grid_Field('state', ___('State')))->addField(new Am_Grid_Field('country', ___('Country')))->addField(new Am_Grid_Field('phone', ___('Phone')))->addField(new Am_Grid_Field('zip', ___('Zip Code')))->addField(new Am_Grid_Field('items', ___('Items')))->addField(new Am_Grid_Field('invoice_id', ___('Invoice')))->addField(new Am_Grid_Field('public_id', ___('Invoice (Public Id)')));
     $grid->actionAdd($action);
     if ($this->getDi()->config->get('send_pdf_invoice')) {
         $grid->actionAdd(new Am_Grid_Action_ExportPdf());
     }
     $action = $grid->actionAdd(new Am_Grid_Action_Total());
     foreach ($totalFields as $f) {
         $action->addField($f, 'ROUND(%s / base_currency_multi, 2)');
     }
     $grid->runWithLayout('admin/user-layout.phtml');
 }
 function createInvoicesPage()
 {
     $query = new Am_Query($this->getDi()->invoiceTable);
     $query->leftJoin('?_user', 'm', 'm.user_id=t.user_id')->addField('m.login', 'login')->addField("concat(m.name_f,' ',m.name_l)", 'name');
     $query->setOrder("invoice_id", "desc");
     $grid = new Am_Grid_Editable('_invoice', ___("Invoices"), $query, $this->_request, $this->view);
     $grid->actionsClear();
     $grid->addField(new Am_Grid_Field_Date('tm_added', ___('Added')));
     $grid->addField('invoice_id', ___('Invoice'))->addDecorator(new Am_Grid_Field_Decorator_Link('admin-user-payments/index/user_id/{user_id}#invoice-{invoice_id}', '_blank'));
     $grid->addField('status', ___('Status'))->setRenderFunction(array($this, 'renderInvoiceStatus'));
     $grid->addField('paysys_id', ___('Payment System'));
     $grid->addField('_total', ___('Total'))->setGetFunction(array($this, 'getInvoiceTotal'));
     $grid->addField('login', ___('Username'), false)->addDecorator(new Am_Grid_Field_Decorator_Link('admin-users?_u_a=edit&_u_b={THIS_URL}&_u_id={user_id}', '_blank'));
     $grid->addField('name', ___('Name'), false);
     $filter = new Am_Grid_Filter_Payments();
     $filter->setDateField('tm_added');
     $grid->setFilter($filter);
     $action = new Am_Grid_Action_Export();
     $action->addField(new Am_Grid_Field('invoice_id', ___('Invoice') . '#'))->addField(new Am_Grid_Field('paysys_id', ___('Payment System')))->addField(new Am_Grid_Field('first_total', ___('First Total')))->addField(new Am_Grid_Field('first_tax', ___('First Tax')))->addField(new Am_Grid_Field('login', ___('Username')))->addField(new Am_Grid_Field('name', ___('Name')));
     $grid->actionAdd($action);
     return $grid;
 }
 protected function createActionExport()
 {
     $stateTitleField = new Am_Grid_Field('state_title', ___('State Title'));
     $stateTitleField->setGetFunction(array($this, 'getStateTitle'));
     $countryTitleField = new Am_Grid_Field('country_title', ___('Country Title'));
     $countryTitleField->setGetFunction(array($this, 'getCountryTitle'));
     $lastSigninInfoField = new Am_Grid_Field('last_signin', ___('Last Signin Info'));
     $lastSigninInfoField->setGetFunction(array($this, 'getLastSigninInfo'));
     $action = new Am_Grid_Action_Export();
     $action->addField(new Am_Grid_Field('user_id', ___('User Id')))->addField(new Am_Grid_Field('login', ___('Username')))->addField(new Am_Grid_Field('email', ___('Email')))->addField(new Am_Grid_Field('name_f', ___('First Name')))->addField(new Am_Grid_Field('name_l', ___('Last Name')))->addField(new Am_Grid_Field('street', ___('Street')))->addField(new Am_Grid_Field('street2', ___('Street (Second Line)')))->addField(new Am_Grid_Field('city', ___('City')))->addField(new Am_Grid_Field('state', ___('State')))->addField($stateTitleField)->addField(new Am_Grid_Field('zip', ___('ZIP Code')))->addField(new Am_Grid_Field('country', ___('Country')))->addField($countryTitleField)->addField(new Am_Grid_Field('phone', ___('Phone')))->addField(new Am_Grid_Field('added', ___('Added')))->addField(new Am_Grid_Field('status', ___('Status')))->addField(new Am_Grid_Field('products', ___('Active Subscriptions')))->addField(new Am_Grid_Field('unsubscribed', ___('Unsubscribed')))->addField(new Am_Grid_Field('lang', ___('Language')))->addField(new Am_Grid_Field('is_locked', ___('Is Locked')))->addField(new Am_Grid_Field('comment', ___('Comment')))->addField(new Am_Grid_Field('aff_id', ___('Affiliate Id#')))->addField(new Am_Grid_Field('payments_sum', ___('Payments (amount of all payments made by user minus refunds)')))->addField(new Am_Grid_Field('expire', ___('Expire (maximum expiration date)')))->addField($lastSigninInfoField);
     //Additional Fields
     foreach ($this->getDi()->userTable->customFields()->getAll() as $field) {
         if (isset($field->from_config) && $field->from_config) {
             if ($field->sql) {
                 $action->addField(new Am_Grid_Field($field->name, $field->title));
             } else {
                 if (in_array($field->type, array('multi_select', 'checkbox'))) {
                     //we use trailing __blob to distinguish multi select fields from data table
                     $mfield = new Am_Grid_Field($field->name . '__blob', $field->title);
                     $mfield->setGetFunction(array($this, 'getMultiSelect'));
                     $action->addField($mfield);
                 } else {
                     //we use trailing __ to distinguish fields from data table
                     $action->addField(new Am_Grid_Field($field->name . '__', $field->title));
                 }
             }
         }
     }
     $action->setGetDataSourceFunc(array($this, 'getDS'));
     return $action;
 }
 function createInvoicesPage($page)
 {
     $query = new Am_Query($this->getDi()->invoiceTable);
     if ($page == 'not-approved') {
         $query->addWhere('is_confirmed<1');
     }
     $query->leftJoin('?_user', 'm', 'm.user_id=t.user_id')->addField("(SELECT GROUP_CONCAT(item_title SEPARATOR ', ') FROM ?_invoice_item WHERE invoice_id=t.invoice_id)", 'items')->addField('m.login', 'login')->addField('m.email', 'email')->addField('m.street', 'street')->addField('m.street2', 'street2')->addField('m.city', 'city')->addField('m.state', 'state')->addField('m.country', 'country')->addField('m.phone', 'phone')->addField('m.zip', 'zip')->addField("concat(m.name_f,' ',m.name_l)", 'name')->addField('m.name_f')->addField('m.name_l')->addField('DATE(tm_started)', 'date');
     //Additional Fields
     foreach ($this->getDi()->userTable->customFields()->getAll() as $field) {
         if (isset($field->from_config) && $field->from_config) {
             if ($field->sql) {
                 $query->addField('m.' . $field->name, $field->name);
             }
         }
     }
     $query->setOrder("invoice_id", "desc");
     $grid = new Am_Grid_Editable('_invoice', ___('Invoices'), $query, $this->_request, $this->view);
     $grid->setRecordTitle(array($this, 'getInvoiceRecordTitle'));
     $grid->actionsClear();
     $grid->actionAdd(new Am_Grid_Action_Delete())->setTarget('_top');
     $grid->addField(new Am_Grid_Field_Date('tm_added', ___('Added')));
     $grid->addField('invoice_id', ___('Invoice'))->setGetFunction(array($this, '_getInvoiceNum'))->addDecorator(new Am_Grid_Field_Decorator_Link('admin-user-payments/index/user_id/{user_id}#invoice-{invoice_id}', '_top'));
     $grid->addField('status', ___('Status'))->setRenderFunction(array($this, 'renderInvoiceStatus'));
     $grid->addField('paysys_id', ___('Payment System'));
     $grid->addField('_total', ___('Billing Terms'), false)->setGetFunction(array($this, 'getInvoiceTotal'));
     $grid->addField(new Am_Grid_Field_Date('rebill_date', ___('Rebill Date')))->setFormatDate();
     $grid->addField('items', ___('Items'));
     $grid->addField('login', ___('Username'))->addDecorator(new Am_Grid_Field_Decorator_Link('admin-users?_u_a=edit&_u_b={THIS_URL}&_u_id={user_id}', '_top'));
     $grid->addField('name', ___('Name'));
     $filter = new Am_Grid_Filter_Invoices();
     $grid->setFilter($filter);
     $stateTitleField = new Am_Grid_Field('state_title', ___('State Title'));
     $stateTitleField->setGetFunction(array($this, 'getStateTitle'));
     $countryTitleField = new Am_Grid_Field('country_title', ___('Country Title'));
     $countryTitleField->setGetFunction(array($this, 'getCountryTitle'));
     $termsField = new Am_Grid_Field('_total', ___('Billing Terms'));
     $termsField->setGetFunction(array($this, 'getInvoiceTotal'));
     $action = new Am_Grid_Action_Export();
     $action->addField(new Am_Grid_Field('tm_started', ___('Date/Time')))->addField(new Am_Grid_Field('date', ___('Date')))->addField(new Am_Grid_Field('rebill_date', ___('Rebill Date')))->addField(new Am_Grid_Field('invoice_id', ___('Invoice (Internal Id)')))->addField(new Am_Grid_Field('public_id', ___('Invoice (Public Id)')))->addField(new Am_Grid_Field('status', ___('Status')))->addField($termsField)->addField(new Am_Grid_Field('paysys_id', ___('Payment System')))->addField(new Am_Grid_Field('first_total', ___('First Total')))->addField(new Am_Grid_Field('first_tax', ___('First Tax')))->addField(new Am_Grid_Field('email', ___('Email')))->addField(new Am_Grid_Field('login', ___('Username')))->addField(new Am_Grid_Field('name', ___('Name')))->addField(new Am_Grid_Field('name_f', ___('First Name')))->addField(new Am_Grid_Field('name_l', ___('Last Name')))->addField(new Am_Grid_Field('street', ___('Street')))->addField(new Am_Grid_Field('street2', ___('Street2')))->addField(new Am_Grid_Field('city', ___('City')))->addField(new Am_Grid_Field('state', ___('State')))->addField($stateTitleField)->addField(new Am_Grid_Field('country', ___('Country')))->addField($countryTitleField)->addField(new Am_Grid_Field('phone', ___('Phone')))->addField(new Am_Grid_Field('zip', ___('Zip Code')))->addField(new Am_Grid_Field('item_title', ___('Product Title')))->addField(new Am_Grid_Field('coupon_code', ___('Coupon')));
     //Additional Fields
     foreach ($this->getDi()->userTable->customFields()->getAll() as $field) {
         if (isset($field->from_config) && $field->from_config) {
             if ($field->sql) {
                 $action->addField(new Am_Grid_Field($field->name, $field->title));
             }
         }
     }
     $action->setGetDataSourceFunc(array($this, 'getExportDs'));
     $grid->actionAdd($action);
     if ($this->getDi()->config->get('manually_approve_invoice')) {
         $grid->actionAdd(new Am_Grid_Action_Group_Callback('approve', ___("Approve"), array($this, 'approveInvoice')));
     }
     return $grid;
 }
 protected function createActionExport()
 {
     $action = new Am_Grid_Action_Export();
     $action->addField(new Am_Grid_Field('user_id', ___('User Id')))->addField(new Am_Grid_Field('login', ___('Login')))->addField(new Am_Grid_Field('email', ___('Email')))->addField(new Am_Grid_Field('name_f', ___('First Name')))->addField(new Am_Grid_Field('name_l', ___('Last Name')))->addField(new Am_Grid_Field('street', ___('Street')))->addField(new Am_Grid_Field('city', ___('City')))->addField(new Am_Grid_Field('state', ___('State')))->addField(new Am_Grid_Field('zip', ___('ZIP Code')))->addField(new Am_Grid_Field('country', ___('Country')))->addField(new Am_Grid_Field('phone', ___('Phone')))->addField(new Am_Grid_Field('added', ___('Added')))->addField(new Am_Grid_Field('status', ___('Status')))->addField(new Am_Grid_Field('unsubscribed', ___('Unsubscribed')))->addField(new Am_Grid_Field('lang', ___('Language')))->addField(new Am_Grid_Field('is_locked', ___('Is Locked')))->addField(new Am_Grid_Field('comment', ___('Comment')))->addField(new Am_Grid_Field('aff_id', ___('Affiliate Id#')));
     //Additional Fields
     foreach ($this->getDi()->userTable->customFields()->getAll() as $field) {
         if (isset($field->from_config) && $field->from_config) {
             if ($field->sql) {
                 $action->addField(new Am_Grid_Field($field->name, $field->title));
             } else {
                 //we use trailing __ to distinguish fields from data table
                 $action->addField(new Am_Grid_Field($field->name . '__', $field->title));
             }
         }
     }
     $action->setGetDataSourceFunc(array($this, 'getDS'));
     return $action;
 }