Разработка биллинга для Hot-Spot точек Wi-fi

Автор работы: Пользователь скрыл имя, 16 Июня 2014 в 20:02, дипломная работа

Краткое описание

Целью разработки является создание веб-сервиса для потенциальных рекламодателей, который поможет им расширять целевую аудиторию и платить за реальные и фактические просмотры их рекламы, так как бот–просмотры в данном случае практически исключены. Так же целью является увеличение количество точек WI-FI в определённом городе для удобства граждан и возможностью выйти в интернет бесплатно в любом публичном месте.
Актуальность проекта: Беспроводные локальные сети являются достаточно часто востребованной темой на сегодняшний день, ведь это не только самый лучший способ связать в единую сеть несколько разнотипных устройств, но и возможность осуществлять высокоскоростную передачу и приём данных, оставляя при этом устройствам свою мобильность.

Вложенные файлы: 1 файл

диплом.docx

— 578.40 Кб (Скачать файл)

         ->whereParam(array('name'=>'firstname', 'title'=>'Имя', 'sql'=>'firstname LIKE ?', 'prefix'=>'%', 'postfix'=>'%'))

         ->whereParam(array('name'=>'lastname', 'title'=>'Имя', 'sql'=>'lastname LIKE ?', 'prefix'=>'%', 'postfix'=>'%'))

         ->whereParam(array('name'=>'companyname', 'title'=>'Организация', 'sql'=>'companyname LIKE ?', 'prefix'=>'%', 'postfix'=>'%'))

         ->whereParam(array('name'=>'city', 'title'=>'Город', 'sql'=>'city LIKE ?', 'prefix'=>'%', 'postfix'=>'%'))

         ->whereParam(array('name'=>'email', 'title'=>'Email', 'sql'=>'email LIKE ?', 'prefix'=>'%', 'postfix'=>'%'))

         ->orderByParam('id', 'id', 'DESC')

         ->orderByParam('firstname', 'firstname', 'ASC')

         ->orderByParam('companyname', 'companyname', 'ASC')

         ->orderByParam('city', 'city', 'ASC')

         ->orderByParam('email', 'email', 'ASC')

         ->setParams($this->getRequest()->getParam('grid_list',array()));

         Model_PS_Client::getManipulator()->findByDBFilter($Filter);

         $this->view->pager = $Filter->getPager();

Продолжение приложения Б

       

$this->view->pager->setUrl($this->view->url(array('action'=>'multi-client-list')+$Filter->getAsArray(array(), array('page'))));

    }

}

 

public function multiClientSaveAction() {

    $email = $this->getRequest()->getParam('emailMulti');

    $pwd   = $this->getRequest()->getParam('pwdMulti');

    $parentClient = Model_PS_Client::getInstance($this->getUserId());

     // запоминаю id и хэш пароля клиента, потому что ниже потеряю его

    $currentUserId = $_SESSION['uid'];

    $currentPwd    = $_SESSION['upw'];

    // localAPI в случае правильных email и password сам автоматом перелогинивает (меняет текущего клиента)

    $result = Util_Whmcs::localAPI('validatelogin', array('email'=>$email, 'password2'=>$pwd));

    if($result['result'] == 'error') {

        $this->msgErr('Вы указали неверный E-mail или пароль.');

        $this->redirect(array('action'=>'multi-client-list'));

    }

    // возвращаю пользователю  его старую сессию

    $_SESSION['uid'] = $currentUserId;

    $_SESSION['upw'] = $currentPwd;

        

    $childClient  = Model_PS_Client::getInstance($result['userid']);

        if ($parentClient->getParentUserId()*1 > 0) {

            if ($childClient->getId()*1 > 0 && $childClient->getId() == $childClient->getParentUserId()) {

                $oldParentId = $childClient->getId();

                $newParentId = $parentClient->getId();

                $childClient['parentUserId'] = $parentClient->getId();

Продолжение приложения Б

             

  $childClient->save();

                foreach(Model_PS_Client::getManipulator()->findAll(array('parentUserId'=>$oldParentId)) as $row) {

                    $row['parentUserId'] = $newParentId;

                    $row->save();

                }

            } else {

                $childClient['parentUserId'] = $parentClient->getParentUserId();

            }

        } else {

            $parentClient['parentUserId'] = $parentClient->getId();

            $parentClient->save();

            $childClient['parentUserId'] = $parentClient->getId();

        }     

    $childClient->save();

    unset ($_SESSION['htmlMultiClientForm']);

    $this->msgOk('Мульти-аккаунт успешно добавлен.');

    $this->redirect($this->view->url(array('action'=>'multi-client-list')));

}

public function multiClientDeleteAction() {

    $userIds = $this->getRequest()->getParam('userIds');

    if (!is_array($userIds)) {

        $userIds = array($userIds);

    }

    foreach ($userIds as $id) {

         $Client = Model_PS_Client::getInstance($id);

         if ($Client) {

             $parentUserId = $Client->getParentUserId();

             if ($id == $parentUserId) {

                 $Client['parentUserId'] = 0;

Продолжение приложения Б

               

$Client->save();

                 $newParentId = 0;

                 foreach(Model_PS_Client::getManipulator()->findAll(array('parentUserId'=>$parentUserId)) as $row) {

                     if ($newParentId == 0) {

                        $newParentId = $row->getId();

                     }

                     $row['parentUserId'] = $newParentId;

                     $row->save();

                 }

             } else {

                 $Client['parentUserId'] = 0;

                 $Client->save();

             }

         }

    }

    unset ($_SESSION['htmlMultiClientForm']);

    $this->msgOk('Мульти-аккаунт удалён.');

    $this->redirect($this->view->url(array('action'=>'multi-client-list')));

}

/**

* Смена платёжного цикла у  продукта

*/

public function productChangeCycleAction() {

$billingcycle = $this->getRequest()->getParam('billingcycle');

$hostingId = $this->getRequest()->getParam('hostingId')*1;

$Hosting = Model_PS_Hosting::getInstance($hostingId);

if ($Hosting) {

if ($Hosting->getUserid() != $this->getUserId()) {

$this->msgErr('В доступе отказано');

Продолжение приложения Б

 

$this->redirect('clientarea.php?action=products');

}

$Pricing = Model_PS_Pricing::getManipulator()->findOne(array('relid'=>$Hosting->getPackageid(), 'type'=>'product', 'currency'=>1));

if ($Pricing) {

$newCycle = $billingcycle;

$oldCycle = $Hosting->getBillingcycle();

 

$Hosting->setBillingcycle($billingcycle);

$billingcycle = str_replace('-', '', strtolower($billingcycle));

$Hosting->setAmount($Pricing[$billingcycle]);

$Hosting->setFirstpaymentamount($Pricing[$billingcycle]);

$msgOk = 'Платёжный цикл изменён.';

$InvoiceItem = Model_PS_InvoiceItem::getManipulator()->findOne(array('userid'=>$Hosting->getUserid(), 'relid'=>$hostingId), array('invoiceid'=>'DESC'));

if ($InvoiceItem) {

$Invoice = Model_PS_Invoice::getInstance($InvoiceItem->getInvoiceid());

if ($Invoice && $Invoice->getStatus() == 'Unpaid') {

$total = $Invoice->getTotal() + ($Pricing[$billingcycle] - $InvoiceItem->getAmount());

$tax = $total*0.12;

$Invoice->setTotal($total);

$Invoice->setSubtotal($total - $tax);

$Invoice->setTax($tax);

$Invoice->setTaxrate(12);

$InvoiceItem->setAmount($Pricing[$billingcycle]);

if (!$InvoiceItem->save()) {

 

Продолжение приложения Б

$this->msgErr('Произошла ошибка при изменение платёжного цикла');

$this->redirect('clientarea.php?action=products');

}

if (!$Invoice->save()) {

$this->msgErr('Произошла ошибка при изменение платёжного цикла');

$this->redirect('clientarea.php?action=products');

}

$msgOk .= '<br/>В счёт на продление услуги <a href="/viewinvoice.php?id='.$Invoice->getId().'">#'.$Invoice->getId().'</a> были внесены изменения.';

}

}

 

if ($Hosting->save()) {

$Log = new Model_PS_ActivityLog();

$Log->setDescription('Изменение платёжного цикла с ' .$oldCycle . ' на ' . $newCycle . ' - Service ID: ' . $hostingId);

$Log->setUser('Client');

if ($this->getAdminLogin()) {

$Log->setUser($this->getAdminLogin());

}

$Log->setUserid($this->getUserId());

$Log->save();

$this->msgOk($msgOk);

$this->redirect('clientarea.php?action=products');

}

}

}

$this->msgErr('Произошла ошибка при изменение платёжного цикла');

Продолжение приложения Б

 

$this->redirect('clientarea.php?action=products');

}

 

/**

* Продление продукта

*/

public function productRenewAction() {

$hostingId = $this->getRequest()->getParam('hostingId')*1;

$Hosting = Model_PS_Hosting::getInstance($hostingId);

if ($Hosting) {

if ($Hosting->getUserid() != $this->getUserId()) {

$this->msgErr('В доступе отказано');

$this->redirect('clientarea.php?action=products');

}

if ((strtotime($Hosting->getNextduedate()) - time())/86400 > 190) {

$this->msgErr('Продукт продлён на  максимальный срок');

$this->redirect('clientarea.php?action=products');

}

$InvoiceItem = Model_PS_InvoiceItem::getManipulator()->findOne(array('userid'=>$Hosting->getUserid(), 'relid'=>$hostingId), array('invoiceid'=>'DESC'));

if ($InvoiceItem) {

$Invoice = Model_PS_Invoice::getInstance($InvoiceItem->getInvoiceid());

if ($Invoice && $Invoice->getStatus() == 'Unpaid') {

$this->msgErr('Счёт на продление уже существует <a href="/viewinvoice.php?id='.$Invoice->getId().'">#'.$Invoice->getId().'</a>');

$this->redirect('clientarea.php?action=products');

}

}

 

Продолжение приложения Б

 

$Product = Model_PS_Product::getInstance($Hosting->getPackageid());

if ($Product) {

$newDate = '';

switch ($Hosting->getBillingcycle()) {

case 'Monthly':

$newDate = date('Y-m-d', strtotime('+1 month', strtotime($Hosting->getNextduedate())));

break;

case 'Quarterly':

$newDate = date('Y-m-d', strtotime('+3 month', strtotime($Hosting->getNextduedate())));

break;

case 'Semi-Annually':

$newDate = date('Y-m-d', strtotime('+6 month', strtotime($Hosting->getNextduedate())));

break;

case 'Annually':

$newDate = date('Y-m-d', strtotime('+1 year', strtotime($Hosting->getNextduedate())));

break;

}

$newInvoice = Model_PS_Invoice::createFromTemplate(array('userid'=>$this->getUserId()));

$newInvoice->save();

$newInvoiceItem = new Model_PS_InvoiceItem();

$newInvoiceItem->setDescription($Product->getName() . ' - ' . $Hosting->getDomain() . ' (' . $Hosting->getNextduedate() . ' - ' . $newDate . ')');

$newInvoiceItem->setRelid($hostingId);

$newInvoiceItem->setType('Hosting');

$newInvoiceItem->setInvoice($newInvoice);

$newInvoiceItem->setAmount($Hosting->getAmount());

Продолжение приложения Б

 

$newInvoiceItem->setTaxed(12);

$newInvoice->invoiceItemAdd($newInvoiceItem);

$newInvoiceItem->save();

$newInvoice->save();

$Log = new Model_PS_ActivityLog();

$Log->setDescription('Создание счёта на  продление - (' . $Hosting->getNextduedate() . ' - ' . $newDate . ') - Service ID: ' . $hostingId . ' Invoice ID: '. $newInvoice->getId());

$Log->setUser('Client');

if ($this->getAdminLogin()) {

$Log->setUser($this->getAdminLogin());

}

$Log->setUserid($this->getUserId());

$Log->save();

$this->redirect('/viewinvoice.php?id='.$newInvoice->getId());

}

}

$this->msgErr('Произошла ошибка при продление продукта');

$this->redirect('clientarea.php?action=products');

}

/**

* Включение-выключение автопродления

*/

public function productAutoRenewAction() {

$hostingId = $this->getRequest()->getParam('hostingId')*1;

$Hosting = Model_PS_Hosting::getInstance($hostingId);

if ($Hosting) {

if ($Hosting->getUserid() != $this->getUserId()) {

$this->msgErr('В доступе отказано');

$this->redirect('clientarea.php?action=productdetails&id=' . $hostingId);

Продолжение приложения Б

 

}

$Log = new Model_PS_ActivityLog();

if ($Hosting->getPsAutoRenew()) {

$Hosting->setPsAutoRenew(0);

$Log->setDescription('Выключил автопродление - Service ID: ' . $hostingId);

$this->msgOk('Автопродление выключено');

} else {

$Hosting->setPsAutoRenew(1);

$Log->setDescription('Включил автопродление - Service ID: ' . $hostingId);

$this->msgOk('Автопродление включено');

}

$Hosting->save();

$Log->setUser('Client');

if ($this->getAdminLogin()) {

$Log->setUser($this->getAdminLogin());

}

$Log->setUserid($this->getUserId());

$Log->save();

}

$this->redirect('clientarea.php?action=productdetails&id=' . $hostingId);

}

/**

* Пополнение баланса

*/

public function balanceAddAction() {

$amount = $this->getRequest()->getParam('amount')*1;

$paymentMethod = $this->getRequest()->getParam('paymentmethod');

$Invoice = Model_PS_Invoice::createFromTemplate(array('userid'=>$this->getUserId(), 'paymentmethod'=>$paymentMethod));

Продолжение приложения Б

 

$Invoice->save();

$InvoiceItem = new Model_PS_InvoiceItem();

$InvoiceItem->setDescription('Пополнить баланс');

$InvoiceItem->setType('AddFunds');

$InvoiceItem->setInvoice($Invoice);

$InvoiceItem->setAmount($amount);

$Invoice->invoiceItemAdd($InvoiceItem);

$InvoiceItem->save();

$Invoice->save();

$this->redirect('/viewinvoice.php?id='.$Invoice->getId());

}

}

?>

 

 

<h2>Мои файлы</h2>

 

<form enctype="multipart/form-data" action="<?php echo $this->url(array('action'=>'file-upload')); ?>" method="POST">

    <select name="typeFile" />

    <?php foreach ($this->arrCat as $catId => $catName): ?>

        <option value="<?php echo $catId; ?>" ><?php echo $catName; ?></option>

    <?php endforeach; ?>

</select>

    <input type="hidden" name="MAX_FILE_SIZE" value="10000000" />

    <input name="clientFile" type="file" />

    <input type="submit" class="ps_button" value="Отправить файл" />

</form>

 

<br/>

<table class="data" width="100%" cellspacing="0" cellpadding="5">

<tr>

<th>Название  файла</th>

<th>Тип</th>

<th align="center">&nbsp;</th>

Продолжение приложения Б

 

</tr>

<?php foreach($this->files as $file): ?>

<tr>

<td><?php echo $file->getFileName(); ?></td>

<td><?php echo $this->arrCat[$file->getType()]; ?></td>

<td align="right">

    <a href="<?php echo $this->url(array('action'=>'file-download', 'fileId'=>$file->getId())); ?>" target="_blank">Скачать</a>

</td>

</tr>

<?php endforeach; ?>

</table>

<?php

 

class ClientController extends Util_Addons_ControllerPublic {

 

public function _init() {

$this->_menu = Array();

Util_Addons_Messages::init('client_error_fields');

}

 

 

public function indexAction() {

$this->redirect(array('action'=>'register'));

}

 

 

public function editClientAction() {

$id = $this->getUserId();

$data = (array)$this->getRequest()->getParam('client');

 

if($id>0) {

$Client = Model_PS_Client::getManipulator()->find($id);

$Client->update($data);

 

if(!empty($_SESSION['client_edit_profile']) && is_array($_SESSION['client_edit_profile'])) {

$Client->update($_SESSION['client_edit_profile']);

}

}

 

Продолжение приложения Б

 

unset($_SESSION['client_edit_profile']);

 

if(!$Client) {

$this->msgErr('Вам  необходимо авторизоваться, чтобы  иметь возможность отредактировать  персональные данные.', true);

$this->disableHelper('view');

return;

}

 

 

$this->view->Client = $Client;

$formCode = $Client['customerType'].$Client['customerResidency'];

$this->view->blockIds = (array)Model_PS_Client_Form::getInstance()->getBlockList($formCode);

$this->view->errorFields = Util_Addons_Messages::getCurrentData('client_error_fields');

 

// файлы клиента

$this->view->requiredTypeFiles = Model_PS_Client::getRequiredTypeFiles($Client['customerType']);

$blockTypeFields = $Client->getBlockTypeFields();

 

$blockFields = array();

$existFiles = array();

foreach ($this->view->requiredTypeFiles as $type=>$name) {

    $ClientFile = Model_PS_ClientFile::getManipulator()->findOne(array('userId'=>$this->getUserId(), 'type'=>$type, 'isDelete!=1'));

    if ($ClientFile) {

        $existFiles[$type] = $ClientFile;

    }

   

    if ($Client->getBlock()) {

     $blockFields = array_merge($blockFields, $blockTypeFields[$type]);

    }

}

 

$this->view->existFiles = $existFiles;

$this->view->blockFields = $blockFields;

}

 

 

Продолжение приложения Б

 

public function editClientSaveAction() {

$id = $this->getUserId();

 

if($id>0) {

$Client = Model_PS_Client::getManipulator()->find($id);

}

 

if(!$Client) {

$this->msgErr('Вам  необходимо авторизоваться, чтобы  иметь возможность отредактировать  персональные данные.', true);

Информация о работе Разработка биллинга для Hot-Spot точек Wi-fi