/** * Execute a command and return a response. Does not render * @param IRequest $Request * @return IResponse the execution response */ function execute(IRequest $Request) { $SessionRequest = $Request; if (!$SessionRequest instanceof ISessionRequest) { throw new \Exception("Session required"); } $Table = new ProductTable(); $StatsQuery = $Table->select()->limit(50); $StatsTable = new HTMLPDOQueryTable($StatsQuery); $StatsTable->addColumn('product'); $StatsTable->addColumn('type'); $StatsTable->addColumn('total'); $StatsTable->addColumn('account'); $StatsTable->addColumn('description'); $StatsTable->addColumn('fees'); $StatsTable->addColumn('test-url'); $StatsTable->addSearchColumn(ProductTable::COLUMN_ID, "product"); $StatsTable->addSearchColumn(ProductTable::COLUMN_ACCOUNT_ID, "account"); $StatsTable->addSortColumn(ProductTable::COLUMN_ID, "product"); $StatsTable->addSortColumn(ProductTable::COLUMN_ACCOUNT_ID, "account"); $StatsTable->validateRequest($Request); $Account = AbstractAccountType::loadFromSession($SessionRequest); if ($Account instanceof AdministratorAccount) { } else { if ($Account instanceof MerchantAccount) { $StatsQuery->where(ProductTable::COLUMN_ACCOUNT_ID, $Account->getID()); } else { $StatsQuery->where(ProductTable::COLUMN_ACCOUNT_ID, -1); } } $Form = new HTMLForm(self::FORM_METHOD, $Request->getPath(), self::FORM_NAME, new HTMLMetaTag(HTMLMetaTag::META_TITLE, self::TITLE), new HTMLElement('fieldset', new HTMLElement('legend', 'legend-submit', self::TITLE), $StatsTable, new HTMLButton('submit', 'Submit', 'submit')), "<br/>"); return $Form; }
/** * Execute a command and return a response. Does not render * @param IRequest $Request * @throws \Exception * @return IResponse the execution response */ function execute(IRequest $Request) { $SessionRequest = $Request; if (!$SessionRequest instanceof ISessionRequest) { throw new \Exception("Session required"); } $Account = AbstractAccountType::loadFromSession($SessionRequest); if (!$Account instanceof AdministratorAccount) { throw new RequestException("Administrator account required"); } $sourceOptions = array("Choose a Payment Source" => null); /** @var AbstractPaymentSource[] $SourceTypes */ $SourceTypes = array(); $SourceForms = array(); foreach (AbstractPaymentSource::loadAllPaymentSourceTypes() as $SourceType) { $SourceTypes[$SourceType->getTypeName()] = $SourceType; $FieldSet = $SourceType->getFieldSet($Request); $FieldSet->setAttribute('data-' . self::PARAM_SOURCE_TYPE, $SourceType->getTypeName()); $FieldSet->setAttribute('disabled', 'disabled'); $SourceForms[] = $FieldSet; $sourceOptions[$SourceType->getDescription()] = $SourceType->getTypeName(); } $Form = new HTMLForm(self::FORM_METHOD, $Request->getPath(), self::FORM_NAME, new HTMLMetaTag(HTMLMetaTag::META_TITLE, self::TITLE), new HTMLHeaderScript(__DIR__ . '/assets/payment-source.js'), new HTMLHeaderStyleSheet(__DIR__ . '/assets/payment-source.css'), new HTMLElement('fieldset', 'fieldset-create-payment-source', new HTMLElement('legend', 'legend-payment-source', self::TITLE), new HTMLElement('label', null, "Status<br/>", new HTMLSelectField(self::PARAM_SOURCE_STATUS, PaymentSourceEntry::$StatusOptions, new RequiredValidation())), "<br/><br/>", new HTMLElement('label', null, "Choose a Payment Source<br/>", new HTMLSelectField(self::PARAM_SOURCE_TYPE, $sourceOptions, new RequiredValidation())), "<br/><br/>", $SourceForms, "<br/>Submit:<br/>", new HTMLButton('submit', 'Submit', 'submit')), "<br/>"); if (!$Request instanceof IFormRequest) { return $Form; } $status = $Form->validateField($Request, self::PARAM_SOURCE_STATUS); $sourceType = $Form->validateField($Request, self::PARAM_SOURCE_TYPE); $ChosenSource = $SourceTypes[$sourceType]; $ChosenSource->validateRequest($Request, $Form); $id = PaymentSourceEntry::create($Request, $ChosenSource, $status); return new RedirectResponse(ManagePaymentSource::getRequestURL($id), "PaymentSource created successfully. Redirecting...", 5); }
/** * Execute a command and return a response. Does not render * @param IRequest $Request * @throws RequestException * @return IResponse the execution response */ function execute(IRequest $Request) { $SessionRequest = $Request; if (!$SessionRequest instanceof ISessionRequest) { throw new RequestException("Session required"); } $ProductEntry = ProductEntry::get($this->id); $setRates = false; $Account = AbstractAccountType::loadFromSession($SessionRequest); if ($Account instanceof MerchantAccount) { if ($Account->getID() !== $ProductEntry->getAccountID()) { throw new RequestException("Product does not belong to merchant"); } } else { if ($Account instanceof AdministratorAccount) { $setRates = true; } else { throw new RequestException("Only merchants may create a new Product"); } } $Product = $ProductEntry->getProduct(); $sourceOptions = array("Choose a Payment Product" => null); $PaymentSourceTable = new PaymentSourceTable(); foreach ($PaymentSourceTable->fetchAll(1) as $PaymentSourceEntry) { $PaymentSource = $PaymentSourceEntry->getPaymentSource(); $sourceOptions[$PaymentSource->getTitle()] = $PaymentSourceEntry->getID(); } $Form = new HTMLForm(self::FORM_METHOD, $Request->getPath(), self::FORM_NAME, new HTMLMetaTag(HTMLMetaTag::META_TITLE, self::TITLE), new HTMLHeaderScript(__DIR__ . '/assets/product.js'), new HTMLHeaderStyleSheet(__DIR__ . '/assets/product.css'), new HTMLInputField(self::PARAM_ID, $this->id, 'hidden'), new HTMLInputField(self::PARAM_PRODUCT_TYPE, $Product->getTypeName(), 'hidden'), new HTMLElement('fieldset', new HTMLElement('legend', 'legend-order-page', "Try Order Page"), new HTMLAnchor(OrderForm::getRequestURL($this->getProductID()), "Order Page")), new HTMLElement('fieldset', 'fieldset-info inline', new HTMLElement('legend', 'legend-info', "Product Info"), new MapRenderer($ProductEntry)), new HTMLElement('fieldset', 'fieldset-config inline', new HTMLElement('legend', 'legend-config', self::TITLE), $Product->getConfigFieldSet($Request), $FeesFieldSet = $Product->getFeesFieldSet($Request), new HTMLElement('fieldset', 'fieldset-status inline', new HTMLElement('legend', 'legend-status', "Status"), $SelectStatus = new HTMLSelectField(self::PARAM_PRODUCT_STATUS, ProductEntry::$StatusOptions, new RequiredValidation())), "<br/><br/>", new HTMLButton(self::PARAM_SUBMIT, 'Update', 'update')), new HTMLElement('fieldset', 'inline', new HTMLElement('legend', 'legend-submit', "Delete Product"), new HTMLButton(self::PARAM_SUBMIT, 'Delete', 'delete')), "<br/>"); if (!$setRates) { $FeesFieldSet->setAttribute('disabled', 'disabled'); } $SelectStatus->setInputValue($ProductEntry->getStatus()); if (!$Request instanceof IFormRequest) { return $Form; } $submit = $Request[self::PARAM_SUBMIT]; switch ($submit) { case 'update': $status = $Request[self::PARAM_PRODUCT_STATUS]; $Product->validateConfigRequest($Request, $Form); $Product->validateFeesRequest($Request, $Form); $ProductEntry->update($Request, $Product, $status); return new RedirectResponse(ManageProduct::getRequestURL($this->getProductID()), "Product updated successfully. Redirecting...", 2); case 'delete': ProductEntry::delete($Request, $this->getProductID()); return new RedirectResponse(SearchProducts::getRequestURL(), "Product deleted successfully. Redirecting...", 8); } throw new \InvalidArgumentException($submit); }
/** * Execute a command and return a response. Does not render * @param IRequest $Request * @throws RequestException * @throws \CPath\Request\Validation\Exceptions\ValidationException * @throws \Exception * @return IResponse the execution response */ function execute(IRequest $Request) { $SessionRequest = $Request; if (!$SessionRequest instanceof ISessionRequest) { throw new \Exception("Session required"); } $AccountEntry = AccountEntry::get($this->id); $Account = $AccountEntry->getAccount(); $AffiliateQuery = AccountAffiliationEntry::queryAccountAffiliates($Account->getID()); $AffiliateListTable = new HTMLPDOQueryTable($AffiliateQuery); $AffiliateListTable->addColumn('affiliate'); $AffiliateListTable->addColumn('type'); $Form = new HTMLForm(self::FORM_METHOD, $Request->getPath(), self::FORM_NAME, new HTMLMetaTag(HTMLMetaTag::META_TITLE, self::TITLE), new HTMLHeaderScript(__DIR__ . '/assets/account.js'), new HTMLHeaderStyleSheet(__DIR__ . '/assets/account.css'), new HTMLElement('fieldset', 'fieldset-manage inline', new HTMLElement('legend', 'legend-manage', self::TITLE), new HTMLInputField(self::PARAM_ID, $this->id, 'hidden'), new HTMLInputField(self::PARAM_ACCOUNT_TYPE, $Account->getTypeName(), 'hidden'), new HTMLElement('label', null, "Status<br/>", $SelectStatus = new HTMLSelectField(self::PARAM_ACCOUNT_STATUS, AccountEntry::$StatusOptions, new RequiredValidation())), "<br/><br/>", $Account->getFieldSet($Request), "<br/><br/>", new HTMLButton(self::PARAM_SUBMIT, 'Update', 'update'), new HTMLButton(self::PARAM_SUBMIT, 'Delete', 'delete')), new HTMLElement('fieldset', 'fieldset-affiliates inline', new HTMLElement('legend', 'legend-affiliates', "Add affiliation"), "Account ID:<br/>", new HTMLInputField(self::PARAM_AFFILIATE_ID), "<br/><br/>Affiliation Type:<br/>", $TypeSelect = new HTMLSelectField(self::PARAM_AFFILIATE_TYPE, array("Request New Affiliate" => AccountAffiliationEntry::TYPE_REQUEST_AFFILIATE, "Request New Reseller" => AccountAffiliationEntry::TYPE_REQUEST_RESELLER, "Request New Processor" => AccountAffiliationEntry::TYPE_REQUEST_PROCESSOR)), "<br/><br/>", new HTMLButton(self::PARAM_SUBMIT, 'Request', 'request')), new HTMLElement('fieldset', 'fieldset-affiliate-list inline', new HTMLElement('legend', 'legend-affiliate-list', "Affiliates"), $AffiliateListTable), new HTMLElement('fieldset', 'fieldset-affiliate-approve inline', new HTMLElement('legend', 'legend-affiliate-approve', "Approve Affiliates"), $ApproveSelect = new HTMLSelectField(self::PARAM_APPROVE_AFFILIATE_ID, array('Pending affiliate approvals' => null)), "<br/><br/>", new HTMLButton(self::PARAM_SUBMIT, 'Approve', 'approve'))); $SelectStatus->setInputValue($AccountEntry->getStatus()); $Account = AbstractAccountType::loadFromSession($SessionRequest); if ($Account instanceof AdministratorAccount) { $TypeSelect->setOptions(AccountAffiliationEntry::$TypeOptions); } $AffiliateQuery->addRowCallback(function (AccountAffiliationEntry $Affiliation) use($Account, $ApproveSelect) { if ($Affiliation->getType() & $Affiliation::TYPE_REQUEST_RESELLER && $Affiliation->getAffiliateID() === $Account->getID()) { $ApproveSelect->addOption($Affiliation->getAffiliateID(), "Approve '" . $Affiliation->getTypeText() . "' - " . $Affiliation->getAffiliateID()); } }); if (!$Request instanceof IFormRequest) { return $Form; } $submit = $Request[self::PARAM_SUBMIT]; switch ($submit) { case 'update': $status = $Form->validateField($Request, self::PARAM_ACCOUNT_STATUS); $AccountEntry->update($Request, $Account, $status); return new RedirectResponse(ManageAccount::getRequestURL($this->getAccountID()), "Account updated successfully. Redirecting...", 5); case 'delete': AccountEntry::delete($Request, $this->getAccountID()); return new RedirectResponse(SearchAccounts::getRequestURL(), "Account deleted successfully. Redirecting...", 5); case 'approve': $affiliateID = $Form->validateField($Request, self::PARAM_APPROVE_AFFILIATE_ID); AccountAffiliationEntry::approveAffiliation($Request, $this->getAccountID(), $affiliateID); return new RedirectResponse(SearchAccounts::getRequestURL(), "Account deleted successfully. Redirecting...", 5); case 'request': $affiliateID = $Form->validateField($Request, self::PARAM_AFFILIATE_ID); $type = $Form->validateField($Request, self::PARAM_AFFILIATE_TYPE); AccountAffiliationEntry::setAffiliate($Request, $this->getAccountID(), $affiliateID, $type); return new RedirectResponse(ManageAccount::getRequestURL($this->getAccountID()), "Affiliation requested successfully. Redirecting...", 5); } throw new \InvalidArgumentException($submit); }
/** * Execute a command and return a response. Does not render * @param IRequest $Request * @throws \Exception * @return IResponse the execution response */ function execute(IRequest $Request) { $SessionRequest = $Request; if (!$SessionRequest instanceof ISessionRequest) { throw new \Exception("Session required"); } $Account = AbstractAccountType::loadFromSession($SessionRequest); $Form = new HTMLForm(self::FORM_METHOD, $Request->getPath(), self::FORM_NAME, new HTMLMetaTag(HTMLMetaTag::META_TITLE, self::TITLE . ' - ' . $Account->getAccountName()), new HTMLHeaderScript(__DIR__ . '/assets/account.js'), new HTMLHeaderStyleSheet(__DIR__ . '/assets/account.css'), new HTMLElement('fieldset', 'fieldset-create-account', new HTMLElement('legend', 'legend-account', self::TITLE . ' - ' . $Account->getAccountName()), new HTMLButton('submit', 'Logout', 'submit')), "<br/>"); $Form->setFormValues($Request); if (!$Request instanceof IFormRequest) { return $Form; } $Form->validateRequest($Request); if (!$SessionRequest->isStarted()) { $SessionRequest->startSession(); } $SessionRequest->destroySession(); return new RedirectResponse(Login::getRequestURL(), "Logged out successfully. Redirecting...", 5); }
/** * Execute a command and return a response. Does not render * @param IRequest $Request * @throws \Exception * @return IResponse the execution response */ function execute(IRequest $Request) { $SessionRequest = $Request; if (!$SessionRequest instanceof ISessionRequest) { throw new \Exception("Session required"); } $Account = AbstractAccountType::loadFromSession($SessionRequest); if (!$Account instanceof MerchantAccount) { throw new RequestException("Only merchants may create a new Product"); } $productOptions = array("Choose a Product Type" => null); /** @var AbstractProductType[] $ProductTypes */ $ProductTypes = array(); $ProductForms = array(); foreach (Types\AbstractProductType::loadAllProductTypes() as $ProductType) { $ProductTypes[$ProductType->getTypeName()] = $ProductType; $FieldSet = $ProductType->getConfigFieldSet($Request); $FieldSet->setAttribute('disabled', 'disabled'); $ProductForms[] = $FieldSet; // $FieldSet = $ProductType->getRatesFieldSet($Request); // $FieldSet->setAttribute('disabled', 'disabled'); // $ProductForms[] = $FieldSet; $productOptions[$ProductType->getTypeDescription()] = $ProductType->getTypeName(); } $Form = new HTMLForm(self::FORM_METHOD, $Request->getPath(), self::FORM_NAME, new HTMLMetaTag(HTMLMetaTag::META_TITLE, self::TITLE), new HTMLHeaderScript(__DIR__ . '/assets/product.js'), new HTMLHeaderStyleSheet(__DIR__ . '/assets/product.css'), new HTMLElement('fieldset', 'fieldset-create-product', new HTMLElement('legend', 'legend-product', self::TITLE), new HTMLElement('label', null, "Status<br/>", new HTMLSelectField(self::PARAM_PRODUCT_STATUS, ProductEntry::$StatusOptions, new RequiredValidation())), "<br/><br/>", new HTMLElement('label', null, "Choose a Product Type<br/>", new HTMLSelectField(self::PARAM_PRODUCT_TYPE, $productOptions, new RequiredValidation())), "<br/><br/>", $ProductForms, "<br/><br/>Submit:<br/>", new HTMLButton('submit', 'Submit', 'submit')), "<br/>"); if (!$Request instanceof IFormRequest) { return $Form; } $status = $Form->validateField($Request, self::PARAM_PRODUCT_STATUS); $productType = $Form->validateField($Request, self::PARAM_PRODUCT_TYPE); // $sourceID = $Form->validateField($Request, self::PARAM_PAYMENT_SOURCE_TYPE); $ChosenProduct = $ProductTypes[$productType]; $ChosenProduct->validateConfigRequest($Request, $Form); $accountID = 'default'; if ($Account) { $accountID = $Account->getID(); } $id = ProductEntry::create($Request, $ChosenProduct, $accountID, $status); return new RedirectResponse(ManageProduct::getRequestURL($id), "Product created successfully. Redirecting...", 5); }
/** * Execute a command and return a response. Does not render * @param IRequest $Request * @throws \Exception * @return IResponse the execution response */ function execute(IRequest $Request) { $SessionRequest = $Request; if (!$SessionRequest instanceof ISessionRequest) { throw new \Exception("Session required"); } $Account = AbstractAccountType::loadFromSession($SessionRequest); if ($Account instanceof ResellerAccount) { } else { if ($Account instanceof AdministratorAccount) { } else { throw new RequestException("Only resellers may create a new Account"); } } $accountOptions = array("Choose a Account Type" => null); /** @var AbstractAccountType[] $AccountTypes */ $AccountTypes = array(); $AccountForms = array(); foreach (Types\AbstractAccountType::loadAllAccountTypes() as $AccountType) { $AccountTypes[$AccountType->getTypeName()] = $AccountType; $FieldSet = $AccountType->getFieldSet($Request); $FieldSet->addClass($AccountType::CLS_FIELDSET_CHOOSE_ACCOUNT); $FieldSet->setAttribute('disabled', 'disabled'); $AccountForms[] = $FieldSet; $accountOptions[ucfirst($AccountType->getTypeName())] = $AccountType->getTypeName(); } $Form = new HTMLForm(self::FORM_METHOD, $Request->getPath(), self::FORM_NAME, new HTMLMetaTag(HTMLMetaTag::META_TITLE, self::TITLE), new HTMLHeaderScript(__DIR__ . '/assets/account.js'), new HTMLHeaderStyleSheet(__DIR__ . '/assets/account.css'), new HTMLElement('fieldset', 'fieldset-create-account', new HTMLElement('legend', 'legend-account', self::TITLE), new HTMLElement('label', null, "Choose a Account Type<br/>", new HTMLSelectField(self::PARAM_ACCOUNT_TYPE, $accountOptions, new RequiredValidation())), "<br/><br/>", $AccountForms, "<br/><br/>Submit:<br/>", new HTMLButton('submit', 'Submit', 'submit')), "<br/>"); if (!$Request instanceof IFormRequest) { return $Form; } // $status = $Form->validateField($Request, self::PARAM_ACCOUNT_STATUS); $accountType = $Form->validateField($Request, self::PARAM_ACCOUNT_TYPE); $ChosenAccount = $AccountTypes[$accountType]; $ChosenAccount->validateRequest($Request, $Form); $id = AccountEntry::create($Request, $ChosenAccount); AccountAffiliationEntry::setAffiliate($Request, $Account->getID(), $id, AccountAffiliationEntry::TYPE_RESELLER); return new RedirectResponse(ManageAccount::getRequestURL($id), "Account created successfully. Redirecting...", 5); }
/** * Execute a command and return a response. Does not render * @param IRequest $Request * @return IResponse the execution response */ function execute(IRequest $Request) { $Entry = PaymentSourceEntry::get($this->id); $Source = $Entry->getPaymentSource(); $SourceForm = $Source->getFieldSet($Request); $SessionRequest = $Request; if (!$SessionRequest instanceof ISessionRequest) { throw new \Exception("Session required"); } $Account = AbstractAccountType::loadFromSession($SessionRequest); if (!$Account instanceof AdministratorAccount) { throw new RequestException("Administrator account required"); } $Form = new HTMLForm(self::FORM_METHOD, $Request->getPath(), self::FORM_NAME, new HTMLMetaTag(HTMLMetaTag::META_TITLE, self::TITLE), new HTMLElement('fieldset', new HTMLElement('legend', 'legend-submit', self::TITLE), new HTMLInputField(self::PARAM_ID, $this->id, 'hidden'), new HTMLElement('label', null, "Status<br/>", $Select = new HTMLSelectField(self::PARAM_SOURCE_STATUS, PaymentSourceEntry::$StatusOptions, new RequiredValidation())), "<br/><br/>", $SourceForm, "<br/>Submit:<br/>", new HTMLButton('submit', 'Submit', 'submit')), "<br/>"); $Select->setInputValue($Entry->getStatus()); if (!$Request instanceof IFormRequest) { return $Form; } $status = $Form->validateField($Request, self::PARAM_SOURCE_STATUS); $Source->validateRequest($Request, $Form); $Entry->update($Request, $Source, $status); return new RedirectResponse(ManagePaymentSource::getRequestURL($Entry->getID()), "Payment Source updated successfully. Redirecting...", 5); }
/** * Execute a command and return a response. Does not render * @param IRequest $Request * @throws RequestException * @return IResponse the execution response */ function execute(IRequest $Request) { $SessionRequest = $Request; if (!$SessionRequest instanceof ISessionRequest) { throw new RequestException("Session required"); } $page = 0; $total = null; $row_count = 5; if (isset($Request[self::PARAM_PAGE])) { $page = $Request[self::PARAM_PAGE]; } $offset = $page * $row_count; $Pagination = new HTMLPagination($row_count, $page, $total); $Table = new TransactionTable(); $SearchQuery = $Table->select()->limit("{$row_count} OFFSET {$offset}"); // $SearchQuery->orderBy(TransactionTable::COLUMN_CREATED, "DESC"); $SearchTable = new HTMLPDOQueryTable($SearchQuery); $SearchTable->addColumn('id', "transaction"); $SearchTable->addColumn('product', "product"); $SearchTable->addColumn('wallet', "wallet"); $SearchTable->addColumn('created', "created"); $SearchTable->addColumn('status', "status"); $SearchTable->addColumn('amount', "amount"); $SearchTable->addColumn('email', "email"); $SearchTable->addColumn('product', "product"); $SearchTable->addColumn('currency', "currency"); $SearchTable->addSearchColumn(TransactionTable::COLUMN_ID, "transaction"); $SearchTable->addSearchColumn(TransactionTable::COLUMN_WALLET_ID, "wallet"); $SearchTable->addSearchColumn(TransactionTable::COLUMN_PRODUCT_ID, "product"); $SearchTable->addSortColumn(TransactionTable::COLUMN_CREATED, "created"); $SearchTable->addSortColumn(TransactionTable::COLUMN_STATUS, "status"); $SearchTable->addSortColumn(TransactionTable::COLUMN_AMOUNT, "amount"); $SearchTable->validateRequest($Request); $StatsQuery = $Table->select(TransactionTable::COLUMN_AMOUNT, 'count', 'COUNT(%s)')->select(TransactionTable::COLUMN_AMOUNT, 'total', 'SUM(%s)')->select(TransactionTable::COLUMN_STATUS, 'approves', 'SUM(%s = ' . TransactionEntry::STATUS_APPROVED . ')')->select(TransactionTable::COLUMN_STATUS, 'approves_total', 'SUM(IF(%s = ' . TransactionEntry::STATUS_APPROVED . ', ' . TransactionTable::COLUMN_AMOUNT . ', 0))')->select(TransactionTable::COLUMN_STATUS, 'pending', 'SUM(%s = ' . TransactionEntry::STATUS_PENDING . ')')->select(TransactionTable::COLUMN_STATUS, 'pending_total', 'SUM(IF(%s = ' . TransactionEntry::STATUS_PENDING . ', ' . TransactionTable::COLUMN_AMOUNT . ', 0))')->select(TransactionTable::COLUMN_STATUS, 'declines', 'SUM(%s = ' . TransactionEntry::STATUS_DECLINED . ')')->select(TransactionTable::COLUMN_STATUS, 'declines_total', 'SUM(IF(%s = ' . TransactionEntry::STATUS_DECLINED . ', ' . TransactionTable::COLUMN_AMOUNT . ', 0))')->select(TransactionTable::COLUMN_STATUS, 'refunds', 'SUM(%s = ' . TransactionEntry::STATUS_REFUNDED . ')')->select(TransactionTable::COLUMN_STATUS, 'refunds_total', 'SUM(IF(%s = ' . TransactionEntry::STATUS_REFUNDED . ', ' . TransactionTable::COLUMN_AMOUNT . ', 0))')->select(TransactionTable::COLUMN_STATUS, 'chargebacks', 'SUM(%s = ' . TransactionEntry::STATUS_CHARGE_BACK . ')')->select(TransactionTable::COLUMN_STATUS, 'chargebacks_total', 'SUM(IF(%s = ' . TransactionEntry::STATUS_CHARGE_BACK . ', ' . TransactionTable::COLUMN_AMOUNT . ', 0))')->select(TransactionTable::COLUMN_PAYMENT_SOURCE_ID, PaymentSourceTable::COLUMN_SOURCE, "(Select " . PaymentSourceTable::COLUMN_SOURCE . " FROM " . PaymentSourceTable::TABLE_NAME . " WHERE " . PaymentSourceTable::COLUMN_ID . '=' . TransactionTable::COLUMN_PAYMENT_SOURCE_ID . ")")->select(TransactionTable::COLUMN_PRODUCT_ID, "Product")->groupBy(TransactionTable::COLUMN_PAYMENT_SOURCE_ID . ', ' . TransactionTable::COLUMN_PRODUCT_ID)->limit(50)->addRowCallback(function (&$row) { /** @var AbstractPaymentSource $Source */ $Source = unserialize($row[PaymentSourceTable::COLUMN_SOURCE]); unset($row[PaymentSourceTable::COLUMN_SOURCE]); $cur = $Source->getCurrency(); $row['total '] = vsprintf('(%0d) <span class="total">%1.2f</span>', $row) . ' ' . $cur; unset($row['count'], $row['total']); $row['approves '] = vsprintf('(%0d) <span class="total">%1.2f</span>', $row) . ' ' . $cur; unset($row['approves'], $row['approves_total']); $row['pending '] = vsprintf('(%0d) <span class="total">%1.2f</span>', $row) . ' ' . $cur; unset($row['pending'], $row['pending_total']); $row['declines '] = vsprintf('(%0d) <span class="total">%1.2f</span>', $row) . ' ' . $cur; unset($row['declines'], $row['declines_total']); $row['refunds '] = vsprintf('(%0d) <span class="total">%1.2f</span>', $row) . ' ' . $cur; unset($row['refunds'], $row['refunds_total']); $row['chargebacks '] = vsprintf('(%0d) <span class="total">%1.2f</span>', $row) . ' ' . $cur; unset($row['chargebacks'], $row['chargebacks_total']); }); $StatsTHead = new HTMLPDOQueryTableBody($StatsQuery); $StatsTBody = new HTMLSequenceTableBody($StatsQuery, self::CLS_TABLE_TRANSACTION_SEARCH); $Account = AbstractAccountType::loadFromSession($SessionRequest); if ($Account instanceof MerchantAccount) { $SearchQuery->where(TransactionTable::COLUMN_PRODUCT_ID, $Account->getID(), "IN (Select " . ProductTable::COLUMN_ID . "\n\tFROM " . ProductTable::TABLE_NAME . "\n\tWHERE " . ProductTable::COLUMN_ACCOUNT_ID . " = ?)"); $StatsQuery->where(TransactionTable::COLUMN_PRODUCT_ID, $Account->getID(), "IN (Select " . ProductTable::COLUMN_ID . "\n\tFROM " . ProductTable::TABLE_NAME . "\n\tWHERE " . ProductTable::COLUMN_ACCOUNT_ID . " = ?)"); } else { if ($Account instanceof AdministratorAccount) { // } else if ($Account instanceof ProcessorAccount) { // $SearchQuery->where(TransactionTable::COLUMN_PAYMENT_SOURCE_ID, $Account->getID(), // "IN (Select " . PaymentSourceTable::COLUMN_ID // . "\n\tFROM " . PaymentSourceTable::TABLE_NAME // . "\n\tWHERE " . PaymentSourceTable::C. " = ?)" // ); } else { $SearchQuery->where(TransactionTable::COLUMN_ID, '-1'); } } $Form = new HTMLForm(self::FORM_METHOD, $Request->getPath(), self::FORM_NAME, new HTMLMetaTag(HTMLMetaTag::META_TITLE, self::TITLE), new HTMLHeaderStyleSheet(__DIR__ . '/assets/search-transaction.css'), new HTMLElement('fieldset', 'fieldset-search fieldset-filter-search', new HTMLElement('legend', 'legend-filter-search', self::TITLE), new HTMLElement('fieldset', 'fieldset-filter-stats-results', new HTMLElement('legend', 'legend-filter-stats-results', 'Stats'), new HTMLTable($StatsTHead, $StatsTBody)), "<br/>", new HTMLElement('fieldset', 'fieldset-filter-search-results', new HTMLElement('legend', 'legend-filter-search-results', 'Search Results'), $SearchTable, $Pagination), "<br/>", new HTMLSubmit(null, 'Search')), "<br/>"); $Form->setFormValues($Request); return $Form; }