public function init() { parent::init(); // Create new field in your users table for store dashboard preference // Set table name, user ID field name, user preference field name $this->setTableParams('dashboard_page', 'user_id', 'title'); // set array of portlets $this->setPortlets(array(array('id' => 1, 'title' => 'Ultimos clientes', 'content' => Customer::model()->Top(4)), array('id' => 2, 'title' => 'Ultimas reservas', 'content' => Book::model()->Top(4)), array('id' => 3, 'title' => 'Puntos críticos', 'content' => Point::model()->Top(4)), array('id' => 4, 'title' => 'Ultimos boletines', 'content' => Mail::model()->Top(4)), array('id' => 5, 'title' => 'Informes', 'content' => Functions::lastReports()), array('id' => 6, 'title' => 'Ultimas facturas', 'content' => Invoice::model()->Top(4)))); //set content BEFORE dashboard $this->setContentBefore(); // uncomment the following to apply jQuery UI theme // from protected/components/assets/themes folder $this->applyTheme('ui-lightness'); // uncomment the following to change columns count //$this->setColumns(4); // uncomment the following to enable autosave $this->setAutosave(true); // uncomment the following to disable dashboard header $this->setShowHeaders(false); // uncomment the following to enable context menu and add needed items /* $this->menu = array( array('label' => 'Index', 'url' => array('index')), ); */ }
public function actionInvoiceList() { if ($_POST["start"]) { $criteria = new CDbCriteria(); $criteria->condition = "Date BETWEEN :start AND :finish AND UserID = :userid"; $criteria->params = array(':start' => date("Y-m-d", strtotime($_POST["start"])), ':finish' => date("Y-m-d", strtotime($_POST["fin"])), ':userid' => Yii::app()->user->ID); $model = Invoice::model()->findAll($criteria); set_time_limit(600); # mPDF $pdf = Yii::app()->ePdf->mpdf('', 'A4', '', '', '', '', '', '', '', '', 'P'); $pdf->writeHTMLfooter = false; $pdf->writeHTMLheader = false; $pdf->DeflMargin = 15; $pdf->DefrMargin = 15; $pdf->tMargin = 15; $pdf->bMargin = 15; $pdf->w = 297; //manually set width $pdf->h = 209.8; //manually set height # render (full page) $pdf->WriteHTML($this->renderPartial('_invoicelist', array('model' => $model), true)); # Outputs ready PDF $pdf->Output('ListaFacturas_' . date("d/m/Y") . '.pdf', 'D'); } else { $this->render('selector'); } }
/** * Returns the data model based on the primary key given in the GET variable. * If the data model is not found, an HTTP exception will be raised. * @param integer $id the ID of the model to be loaded * @return Zal the loaded model * @throws CHttpException */ public function loadModel($id) { $model = Invoice::model()->findByPk($id); if ($model === null) { throw new CHttpException(404, 'The requested page does not exist.'); } return $model; }
public function getPaymentUrl($invoice_id, $options = array()) { $invoice = Invoice::model()->findByPk($invoice_id); if ($invoice == null) { return false; } if ($invoice->customer_id != Yii::app()->user->getId()) { return false; } $amount = $invoice->amount; $amount = $amount * 100; $merchantSession = urlencode(time() . '-' . $this->makePaystationSessionID(8, 8)); $this->setSessionId($merchantSession); $this->merchantRef = Yii::app()->user->getId(); $paystationUrl = "https://www.paystation.co.nz/direct/paystation.dll"; $paystationParameters = "paystation=_empty&pstn_pi=" . $this->paystationId . "&pstn_gi=" . $this->gatewayId . "&pstn_ms=" . $merchantSession . "&pstn_mr=" . $this->merchantRef . "&pstn_am=" . $amount . "&pstn_nr=t"; if ($this->testMode == 'true') { $paystationParameters = $paystationParameters . "&pstn_tm=t"; } foreach ($options as $key => $value) { $paystationParameters .= "&" . $key . "=" . $value; } $result = $this->doPostRequest($paystationUrl, $paystationParameters); // handle result $xmlData = new SimpleXMLElement($result); $digitalOrder = $xmlData->DigitalOrder; // The URL that we re-direct the customer too. $transactionID = $xmlData->PaystationTransactionID; //The transaction ID Paystation has just created. $PaymentRequestTime = $xmlData->PaymentRequestTime; // The time that the transaction was initiated $DigitalOrderTime = $xmlData->DigitalOrderTime; //The time Paystation responds // redirect if ($digitalOrder) { $payment = new Payment(); $payment->transaction_id = $transactionID; $payment->session_id = $merchantSession; $payment->order_time = $DigitalOrderTime; $payment->merchant_ref = $this->merchantRef; $payment->customer_id = Yii::app()->user->getId(); $payment->invoice_id = $invoice_id; $payment->save(false); return $digitalOrder; } else { //echo "<pre>".htmlentities($result)."</pre>"; //no digitalorder variable, so initiation must have failed. Print out xml packet for debugging purposes return false; } return false; }
public function Top($num) { $criteria = new CDbCriteria(); $criteria->condition = "UserID = :userid"; $criteria->params = array(':userid' => Yii::app()->user->ID); $criteria->limit = $num; $model = Invoice::model()->findAll($criteria); $result = ""; $result .= "<table cellpadding='5' cellspacing='0' border='0' style='border-collapse: collapse;'>"; $result .= "<tr><td><b>Serie</b></td><td><b>Numero</b></td><td><b>Cliente</b></td></tr>"; foreach ($model as $customer) { $result .= "<tr>"; $result .= "<td><a href='" . Yii::app()->createURL('/invoice/invoice/update/', array('id' => $customer->ID)) . "'>" . $customer->serie->Serie . "</td>"; $result .= "<td><a href='" . Yii::app()->createURL('/invoice/invoice/update/', array('id' => $customer->ID)) . "'>" . $customer->Number . "</td>"; $result .= "<td><a href='" . Yii::app()->createURL('/invoice/invoice/update/', array('id' => $customer->ID)) . "'>" . Functions::stringCut($customer->customer->FullName, 20) . "</td>"; $result .= "</tr>"; } $result .= "</table>"; return $result; }
<?php echo $form->dropDownList($model, 'SerieID', CHtml::listData(Serie::model()->findAll($criteria), 'ID', 'Serie'), array('style' => 'width: 100%;')); ?> <?php echo $form->error($model, 'SerieID'); ?> </div> <?php // If it is a new record. We calculate the next invoice number if ($model->isNewRecord) { $criteriaNextNumber = new CDbCriteria(); $criteriaNextNumber->condition = 'UserID = :userid'; $criteriaNextNumber->params = array(':userid' => Yii::app()->user->ID); $criteriaNextNumber->order = 'Number Desc'; $model->Number = Invoice::model()->find($criteriaNextNumber)->ID + 1; } ?> <div class="row" style="width: 15%; float: left; margin-left: 5%;"> <?php echo $form->labelEx($model, 'Number'); ?> <?php echo $form->textField($model, 'Number', array('style' => 'width: 100%;', 'maxlength' => 25)); ?> <?php echo $form->error($model, 'Number'); ?> </div>
/** * Shows a particular model. */ public function actionShow() { if (!User::isClient() && !User::isManager() && !User::isAdministrator()) { // not enough rights MUserFlash::setTopError(Yii::t('hint', 'We are sorry, but you don\'t have enough rights to browse companies.')); $this->redirect($this->getGotoUrl()); } if (isset($_GET['my'])) { // show client's company if (Yii::app()->user->isGuest) { // guest may not have any company MUserFlash::setTopError(Yii::t('hint', 'Please authorize to view your company.')); $this->redirect($this->getGotoUrl()); } if (($user2Company = User2Company::model()->findByAttributes(array('userId' => Yii::app()->user->id, 'position' => Company::OWNER), array('order' => "`companyPriority` ASC"))) !== null) { $id = $user2Company->companyId; } else { // user is not an owner yet MUserFlash::setTopError(Yii::t('hint', 'We are sorry, but you are not the owner of any company yet.')); $this->redirect($this->getGotoUrl()); } } else { // get id from the url $id = isset($_GET['id']) ? $_GET['id'] : 0; } // load model $with = array('allUser'); /*if(User::isClient()) $with[]='allUser2Company';*/ $model = $this->loadModel(array('id' => $id, 'with' => $with)); // may member view this record? if (User::isClient()) { /*$allOwner=array(); foreach($model->allUser2Company as $user2Company) { if($user2Company->position===Company::OWNER) $allOwner[]=$user2Company->userId; } if(!in_array(Yii::app()->user->id,$allOwner))*/ if (!$model->isOwner()) { MUserFlash::setTopError(Yii::t('hint', 'We are sorry, but you don\'t have enough rights to view the company record number {id}.', array('{id}' => MHtml::wrapInTag($model->id, 'strong')))); $this->redirect($this->getGotoUrl()); } } // FIXME: check is owner or manager or admin // transaction's payments $companyPayments = CompanyPayment::model()->findAllByAttributes(array('companyId' => $model->id), new CDbCriteria(array('order' => "`t`.`paymentDate` ASC, `t`.`id` ASC"))); // transaction's invoices $invoices = Invoice::model()->findAllByAttributes(array('companyId' => $model->id), new CDbCriteria(array('order' => "`t`.`invoiceDate` ASC, `t`.`id` ASC"))); // construct tmp array of all transactions. use time as index $array = array(); foreach ($companyPayments as $companyPayment) { $time = strtotime($companyPayment->paymentDate); while (array_key_exists($time, $array)) { $time++; } $array[$time] = array('date' => $companyPayment->paymentDate, 'credit' => $companyPayment->amount, 'number' => $companyPayment->paymentNumber, 'method' => $companyPayment->getAttributeView('paymentMethod'), 'id' => $companyPayment->id, 'controllerId' => 'companyPayment'); } foreach ($invoices as $invoice) { $time = strtotime($invoice->invoiceDate); while (array_key_exists($time, $array)) { $time++; } $array[$time] = array('date' => $invoice->invoiceDate, 'debit' => $invoice->amountTotal, 'id' => $invoice->id, 'controllerId' => 'invoice'); } // sort by index ksort($array); // construct transaction history array $transactions = array(); $balance = $debit = $credit = 0; foreach ($array as $row) { $d = isset($row['debit']) ? $row['debit'] : 0; $c = isset($row['credit']) ? $row['credit'] : 0; $balance = $balance - $d + $c; $debit += $d; $credit += $c; $transactions[] = array('date' => $row['date'], 'debit' => isset($row['debit']) ? $row['debit'] : null, 'credit' => isset($row['credit']) ? $row['credit'] : null, 'number' => isset($row['number']) ? $row['number'] : null, 'method' => isset($row['method']) ? $row['method'] : null, 'balance' => $balance, 'id' => $row['id'], 'controllerId' => $row['controllerId']); } // rows for the static grid $gridRows = array(); foreach ($transactions as $transaction) { $gridRows[] = array(array('align' => 'right', 'content' => CHtml::encode(MDate::format($transaction['date'], 'long', null)), 'title' => CHtml::encode(MDate::format($transaction['date'], 'full', null))), array('content' => CHtml::link($transaction['controllerId'] === 'invoice' ? Yii::t('link', 'Invoice {number}', array('{number}' => $transaction['number'] === null ? $transaction['id'] : $transaction['number'])) : Yii::t('link', 'Payment {number} ({method})', array('{number}' => $transaction['number'] === null ? $transaction['id'] : $transaction['number'], '{method}' => $transaction['method'])), array($transaction['controllerId'] . '/show', 'id' => $transaction['id']))), array('align' => 'right', 'content' => is_numeric($transaction['debit']) ? CHtml::encode(MCurrency::format($transaction['debit'])) : ''), array('align' => 'right', 'content' => is_numeric($transaction['credit']) ? CHtml::encode(MCurrency::format($transaction['credit'])) : ''), array('align' => 'right', 'content' => CHtml::encode(MCurrency::format($transaction['balance'])))); } // render the view file $this->render($this->action->id, array('model' => $model, 'debit' => $debit, 'credit' => $credit, 'balance' => $credit - $debit, 'gridRows' => $gridRows)); }
protected function gridOutstandingColumn($data, $row) { $outstanding = Invoice::model()->getOutstanding($data->id); foreach ($outstanding as $data) { $outstanding_balance = $data['outstanding_balance']; } print_r(Yii::app()->numberFormatter->formatDecimal($outstanding_balance)); }
/** * Billing and Print */ public function actionGeneratePrint() { $model = Book::model()->findByPK($_GET["id"]); // Change Book status $model->Type = 1; $model->save(); $items = array(); $startDate = strtotime($model->Start); $finishDate = strtotime($model->Finish); $roomID = $model->RoomID; $Pax = $model->Pax; // Create Invoice $modelInvoice = new Invoice(); $modelInvoice->UserID = Yii::app()->user->ID; $modelInvoice->CustomerID = $model->CustomerID; $modelInvoice->Date = date("Y-m-d"); $criteriaNextNumber = new CDbCriteria(); $criteriaNextNumber->condition = 'UserID = :userid'; $criteriaNextNumber->params = array(':userid' => Yii::app()->user->ID); $criteriaNextNumber->order = 'Number Desc'; $modelInvoice->Number = Invoice::model()->find($criteriaNextNumber)->ID + 1; $modelInvoice->SerieID = Serie::model()->findByAttributes(array('Pred' => '1'))->ID; $modelInvoice->BookID = $model->ID; $modelInvoice->save(); $days = round(($finishDate - $startDate) / 86400); $price = 0; // Calculate Room price if (Room::model()->findByPK($roomID)->Type == 0) { for ($i = 0; $i < $days; $i++) { $date = $startDate + $i * 86400; $season = Book::model()->getSeason(date("Y-m-d", $date)); $modelCharge = new Charge(); $modelCharge->UserID = Yii::app()->user->ID; $modelCharge->InvoiceID = $modelInvoice->ID; $modelCharge->IVA = User::model()->findByPK(Yii::app()->user->ID)->IVA; switch ($season) { case 0: $items[] = array($model->room->PriceLow, $model->room->Name . " (Temporada Baja)."); $price = $price + Room::model()->findByPK($roomID)->PriceLow; $modelCharge->Text = $model->room->Name . " (Temporada Baja)."; $modelCharge->Price = Room::model()->findByPK($roomID)->PriceLow; break; case 1: $items[] = array($model->room->PriceMed, $model->room->Name . " (Temporada Media)."); $price = $price + Room::model()->findByPK($roomID)->PriceMed; $modelCharge->Text = $model->room->Name . " (Temporada Media)."; $modelCharge->Price = Room::model()->findByPK($roomID)->PriceMed; break; case 2: $items[] = array($model->room->PriceBig, $model->room->Name . " (Temporada Alta)."); $price = $price + Room::model()->findByPK($roomID)->PriceBig; $modelCharge->Text = $model->room->Name . " (Temporada Alta)."; $modelCharge->Price = Room::model()->findByPK($roomID)->PriceBig; break; } $modelCharge->save(); } } else { for ($i = 0; $i < $days; $i++) { $date = $startDate + $i * 86400; $season = Book::model()->getSeason(date("Y-m-d", $date)); $modelCharge = new Charge(); $modelCharge->UserID = Yii::app()->user->ID; $modelCharge->InvoiceID = $modelInvoice->ID; $modelCharge->IVA = User::model()->findByPK(Yii::app()->user->ID)->IVA; switch ($season) { case 0: $items[] = array(Room::model()->findByPK($roomID)->PriceLow * $Pax, $model->room->Name . " (" . $Pax . " personas Temporada Baja)."); $price = $price + Room::model()->findByPK($roomID)->PriceLow * $Pax; $modelCharge->Text = $model->room->Name . " (" . $Pax . " personas Temporada Baja)."; $modelCharge->Price = Room::model()->findByPK($roomID)->PriceLow * $Pax; break; case 1: $items[] = array(Room::model()->findByPK($roomID)->PriceMed * $Pax, $model->room->Name . " (" . $Pax . " personas Temporada Media)."); $price = $price + Room::model()->findByPK($roomID)->PriceMed * $Pax; $modelCharge->Text = $model->room->Name . " (" . $Pax . " personas Temporada Media)."; $modelCharge->Price = Room::model()->findByPK($roomID)->PriceMed * $Pax; break; case 2: $items[] = array(Room::model()->findByPK($roomID)->PriceBig * $Pax, $model->room->Name . " (" . $Pax . " personas Temporada Alta)."); $price = $price + Room::model()->findByPK($roomID)->PriceBig * $Pax; $modelCharge->Text = $model->room->Name . " (" . $Pax . " personas Temporada Alta)."; $modelCharge->Price = Room::model()->findByPK($roomID)->PriceBig * $Pax; break; } $modelCharge->save(); } } // Add extras to price if ($model->ID > 0) { $criteria = new CDbCriteria(); $criteria->condition = "UserID = :userid AND BookID = :bookid"; $criteria->params = array(':userid' => Yii::app()->user->ID, ':bookid' => $model->ID); $modelExtra = Extra::model()->findAll($criteria); foreach ($modelExtra as $extra) { $modelCharge = new Charge(); $modelCharge->UserID = Yii::app()->user->ID; $modelCharge->InvoiceID = $modelInvoice->ID; $modelCharge->IVA = User::model()->findByPK(Yii::app()->user->ID)->IVA; $items[] = array($extra->Value, $extra->Name . " (Suplemento)"); $modelCharge->Text = $extra->Name . " (Suplemento)"; $modelCharge->Price = $extra->Value; $price = $price + $extra->Value; $modelCharge->save(); } } // Apply discount to price if ($model->ID > 0) { $modelDiscount = Discount::model()->findAll($criteria); foreach ($modelDiscount as $discount) { $modelCharge = new Charge(); $modelCharge->UserID = Yii::app()->user->ID; $modelCharge->InvoiceID = $modelInvoice->ID; $modelCharge->IVA = User::model()->findByPK(Yii::app()->user->ID)->IVA; $items[] = array(-($discount->Value * $price) / 100, $discount->Name . " (Descuento)"); $modelCharge->Text = $discount->Name . " (Descuento)"; $modelCharge->Price = -($discount->Value * $price / 100); $price = $price + -($discount->Value * $price) / 100; $modelCharge->save(); } } // Print invoice set_time_limit(600); # mPDF $pdf = Yii::app()->ePdf->mpdf('', 'A4', '', '', '', '', '', '', '', '', 'P'); $pdf->writeHTMLfooter = false; $pdf->writeHTMLheader = false; $pdf->DeflMargin = 25; $pdf->DefrMargin = 25; $pdf->tMargin = 15; $pdf->bMargin = 15; $pdf->w = 297; //manually set width $pdf->h = 209.8; //manually set height $pdf->WriteHTML($this->renderPartial('printbill', array('model' => $model, 'items' => $items, 'price' => $price), true)); # Outputs ready PDF $pdf->Output('Factura_' . date("d/m/Y") . '.pdf', 'D'); }
/** * Migrate from old project management system. */ public function actionIndex() { // check rights if (!Yii::app()->user->checkAccess(User::ADMINISTRATOR)) { throw new CHttpException(403, Yii::t('Yii', 'You are not authorized to perform this action.')); } // models to migrate $migrate = array('User' => false, 'Company' => false, 'CompanyPayment' => false, 'Project' => false, 'Task' => false, 'Time' => true, 'Invoice' => false, 'Expense' => false); // start $message = ''; // we won't migrate unless form is submitted if (Yii::app()->request->isPostRequest) { // default criteria $findAllCriteria = new CDbCriteria(); $findAllCriteria->order = "`id` ASC"; if ($migrate['User']) { // user $mUsers = MUser::model()->findAll($findAllCriteria); if (is_array($mUsers)) { $i = $j = $c = 0; $accessType = array('customer' => 'client', 'consultant' => 'consultant', 'manager' => 'manager', 'admin' => 'administrator'); $accessLevel = array('customer' => 2, 'consultant' => 3, 'manager' => 4, 'admin' => 5); foreach ($mUsers as $oldModel) { if (($model = User::model()->findByPk($oldModel->id)) !== null) { $model->delete(); } // old model validation if (User::model()->findByAttributes(array('email' => $oldModel->email))) { $oldModel->email = rand(10, 99) . $oldModel->email; } $closeTime = strtotime($oldModel->close_date); $isActive = empty($oldModel->close_date) || $oldModel->close_date === '0000-00-00' || $closeTime === false; // new model $model = new User('migrate'); $model->username = $oldModel->email; $model->password = md5($oldModel->password); $model->email = $oldModel->email; $model->screenName = $oldModel->name; $model->accessType = isset($accessType[$oldModel->class]) ? $accessType[$oldModel->class] : 'member'; $model->accessLevel = isset($accessLevel[$oldModel->class]) ? $accessLevel[$oldModel->class] : 1; $model->isActive = $isActive ? '1' : '0'; $model->createTime = strtotime($oldModel->last); $model->id = $oldModel->id; if ($model->save()) { $i++; if (($userDetails = UserDetails::model()->findByPk($model->id)) !== null) { $userDetails->delete(); } $userDetails = new UserDetails('migrate'); $userDetails->emailConfirmationKey = md5(uniqid(rand(), true)); $userDetails->initials = $oldModel->inits; $userDetails->occupation = $oldModel->title; $userDetails->deactivationTime = $isActive ? null : $closeTime; $userDetails->administratorNote = '[from migration]'; $userDetails->userId = $model->id; $userDetails->save(); // relation between user and company if ($oldModel->customer_id >= 1) { $user2Company = new User2Company('migrate'); $user2Company->userId = $model->id; $user2Company->companyId = $oldModel->customer_id; $user2Company->position = 'owner'; //$oldModel->title if ($user2Company->save()) { $c++; } } } $j++; } $message .= $i . ' of ' . $j . ' users' . ($i === $c ? '' : ' with ' . $c . ' company (relations)') . ' have been migrated.<br/>'; } } if ($migrate['Company']) { // company $mCustomers = MCustomer::model()->findAll($findAllCriteria); if (is_array($mCustomers)) { $i = $j = $l = 0; foreach ($mCustomers as $oldModel) { if (($model = Company::model()->findByPk($oldModel->id)) !== null) { $model->delete(); } $closeTime = strtotime($oldModel->close_date); $isActive = empty($oldModel->close_date) || $oldModel->close_date === '0000-00-00' || $closeTime === false; $model = new Company('migrate'); $model->title = $oldModel->name; $model->titleAbbr = $oldModel->inits; $model->contactName = $oldModel->contact; $model->contactEmail = $oldModel->contact_email; $model->content = '[from migration]'; $model->contentMarkup = 'text'; $model->invoiceDueDay = $oldModel->terms_days; $model->isActive = $isActive ? '1' : '0'; $model->deactivationTime = $isActive ? null : $closeTime; $model->createTime = strtotime($oldModel->last); $model->id = $oldModel->id; if ($model->save()) { $i++; // associated location $location = new Location('migrate'); $location->address1 = $oldModel->addr; $location->address2 = $oldModel->addr2; $location->city = $oldModel->city; $location->state = $oldModel->state; $location->zipcode = $oldModel->zip; $location->content = '[from migration]'; $location->contentMarkup = 'text'; $location->createTime = strtotime($oldModel->last); if ($location->save()) { // relation between company and location $location2Record = new Location2Record('migrate'); $location2Record->locationId = $location->id; $location2Record->record = get_class($model); $location2Record->recordId = $model->id; if ($location2Record->save()) { $l++; } } } $j++; } $message .= $i . ' of ' . $j . ' companies' . ($i === $l ? '' : ' with ' . $l . ' locations') . ' have been migrated.<br/>'; } } if ($migrate['CompanyPayment']) { // company payment $mCustomerPayments = MCustomerPayment::model()->findAll($findAllCriteria); if (is_array($mCustomerPayments)) { $i = $j = 0; $paymentMethod = array('cash' => 'cash', 'check' => 'check', 'credit card' => 'creditCard'); foreach ($mCustomerPayments as $oldModel) { if (($model = CompanyPayment::model()->findByPk($oldModel->id)) !== null) { $model->delete(); } $model = new CompanyPayment('migrate'); $model->companyId = $oldModel->id; $model->paymentDate = MDate::formatToDb($oldModel->payment_date, 'date'); $model->amount = $oldModel->amount; $model->paymentMethod = $paymentMethod[$oldModel->payment_method]; $model->paymentNumber = $oldModel->payment_number; $model->content = $oldModel->note . "\n" . '[from migration]'; $model->contentMarkup = 'text'; $model->id = $oldModel->id; if ($model->save()) { $i++; } $j++; } $message .= $i . ' of ' . $j . ' company payments have been migrated.<br/>'; } } if ($migrate['Project']) { // project $mProjects = MProject::model()->findAll($findAllCriteria); if (is_array($mProjects)) { $i = $j = $c = $u = 0; foreach ($mProjects as $oldModel) { if (($model = Project::model()->findByPk($oldModel->id)) !== null) { $model->delete(); } $openDateNotSet = empty($oldModel->open_date) || $oldModel->open_date === '0000-00-00' || strtotime($oldModel->open_date) === false; $closeDateNotSet = empty($oldModel->close_date) || $oldModel->close_date === '0000-00-00' || strtotime($oldModel->close_date) === false; $model = new Project('migrate'); $model->title = $oldModel->name; $model->content = $oldModel->description . "\n" . '[from migration]'; $model->contentMarkup = 'text'; $model->hourlyRate = $oldModel->rate; $model->openDate = $openDateNotSet ? null : MDate::formatToDb($oldModel->open_date, 'date'); $model->closeDate = $closeDateNotSet ? null : MDate::formatToDb($oldModel->close_date, 'date'); $model->createTime = strtotime($oldModel->last); $model->id = $oldModel->id; if ($model->save()) { $i++; // relation between project and company if ($oldModel->customer_id >= 1) { $company2Project = new Company2Project('migrate'); $company2Project->companyId = $oldModel->customer_id; $company2Project->projectId = $model->id; if ($company2Project->save()) { $c++; } } // relation between project and manager if ($oldModel->manager_id >= 1) { $user2Project = new User2Project('migrate'); $user2Project->userId = $oldModel->manager_id; $user2Project->projectId = $model->id; $user2Project->role = 'manager'; if ($user2Project->save()) { $u++; } } } $j++; } $message .= $i . ' of ' . $j . ' projects' . ($i === $c ? '' : ' with ' . $c . ' company (relations)') . ($i === $u ? '' : ' with ' . $u . ' manager (relations)') . ' have been migrated.<br/>'; } } if ($migrate['Task']) { // task $mTasks = MTask::model()->findAll($findAllCriteria); if (is_array($mTasks)) { $i = $j = $u = $m = 0; $priority = array('A' => 2, 'B' => 3, 'C' => 4, '' => 3); $status = array('' => 'completed', 'Open' => 'completed', '0' => 'notStarted', 'New' => 'notStarted', 'Done' => 'completed', 'In Progress' => 'inProgress', 'Ready to Test' => 'readyToTest'); foreach ($mTasks as $oldModel) { if (($model = Task::model()->findByPk($oldModel->id)) !== null) { $model->delete(); } $hourlyRate = null; if ($oldModel->project_id >= 1 && ($project = Project::model()->findByPk($oldModel->project_id)) !== null) { $hourlyRate = $project->hourlyRate; } $dueDateNotSet = empty($oldModel->due_date) || $oldModel->due_date === '0000-00-00' || strtotime($oldModel->due_date) === false; $openDateNotSet = empty($oldModel->open_date) || $oldModel->open_date === '0000-00-00' || strtotime($oldModel->open_date) === false; $closeDateNotSet = empty($oldModel->close_date) || $oldModel->close_date === '0000-00-00' || strtotime($oldModel->close_date) === false; $model = new Task('migrate'); $model->title = $oldModel->name; $model->content = $oldModel->description . "\n" . '[from migration]'; $model->contentMarkup = 'text'; $model->companyId = $oldModel->customer_id; $model->projectId = $oldModel->project_id; $model->estimateMinute = (int) $oldModel->hours_estimate * 60; $model->dueDate = $dueDateNotSet ? null : MDate::formatToDb($oldModel->due_date, 'date'); $model->priority = $priority[$oldModel->priority]; $model->openDate = $openDateNotSet ? null : MDate::formatToDb($oldModel->open_date, 'date'); $model->closeDate = $closeDateNotSet ? null : MDate::formatToDb($oldModel->close_date, 'date'); $model->status = $status[$oldModel->task_status]; $model->report = $oldModel->work_report; $model->reportMarkup = 'text'; $model->hourlyRate = $hourlyRate; $model->isConfirmed = '1'; $model->confirmationTime = strtotime($oldModel->last); $model->createTime = strtotime($oldModel->last); $model->id = $oldModel->id; if ($model->save()) { $i++; // relation between task and consultant if ($oldModel->leader_id >= 1) { $user2Task = new User2Task('migrate'); $user2Task->userId = $oldModel->leader_id; $user2Task->taskId = $model->id; $user2Task->role = User2Task::CONSULTANT; if ($user2Task->save()) { $u++; } } // relation between task and manager if ($model->projectId >= 1) { $criteria = new CDbCriteria(); $criteria->order = "`" . User2Project::model()->tableName() . "`.`userPriority` ASC"; $criteria->order .= ",`" . User2Project::model()->tableName() . "`.`id` ASC"; if (($user2Project = User2Project::model()->findByAttributes(array('projectId' => $model->projectId, 'role' => 'manager'), $criteria)) !== null) { $user2Task = new User2Task('migrate'); $user2Task->userId = $user2Project->userId; $user2Task->taskId = $model->id; $user2Task->role = 'manager'; if ($user2Task->save()) { $m++; } } } } $j++; } $message .= $i . ' of ' . $j . ' tasks' . ($i === $u ? '' : ' with ' . $u . ' consultant (relations)') . ($i === $m ? '' : ' with ' . $m . ' manager (relations)') . ' have been migrated.<br/>'; } } if ($migrate['Time']) { // time $mTime = MTime::model()->findAll($findAllCriteria); if (is_array($mTime)) { $i = $j = $t = 0; foreach ($mTime as $oldModel) { if (($model = Time::model()->findByPk($oldModel->id)) !== null) { $model->delete(); } $taskId = $oldModel->task_id; if (empty($taskId) && $oldModel->project_id >= 1) { $criteria = new CDbCriteria(); $criteria->order = "`" . Task::model()->tableName() . "`.`id` ASC"; if (($task = Task::model()->findByAttributes(array('projectId' => $oldModel->project_id), $criteria)) !== null) { $taskId = $task->id; } else { // auto-generate a task $companyId = 0; $criteria = new CDbCriteria(); $criteria->order = "`" . Company2Project::model()->tableName() . "`.`companyPriority` ASC"; $criteria->order .= ", `" . Company2Project::model()->tableName() . "`.`id` ASC"; if (($company2Project = Company2Project::model()->findByAttributes(array('projectId' => $oldModel->project_id), $criteria)) !== null) { $companyId = $company2Project->companyId; } $hourlyRate = null; if (($project = Project::model()->findByPk($oldModel->project_id)) !== null) { $hourlyRate = $project->hourlyRate; } $task = new Task('migrate'); $task->projectId = $oldModel->project_id; $task->companyId = $companyId; $task->title = '[Auto Generated]'; $task->status = 'completed'; $task->dueDate = MDate::formatToDb($project === null ? 1234567890 : $project->createTime, 'date'); $task->openDate = MDate::formatToDb($project === null ? 1234567890 : $project->createTime, 'date'); $task->closeDate = MDate::formatToDb($project === null ? 1234567890 : $project->createTime, 'date'); $task->hourlyRate = $hourlyRate; $task->isConfirmed = 1; $task->confirmationTime = $project === null ? 1234567890 : $project->createTime; if ($task->save()) { $t++; $taskId = $task->id; // assigned consultant if ($oldModel->user_id >= 1) { $consultant2Task = new User2Task('migrate'); $consultant2Task->userId = $oldModel->user_id; $consultant2Task->taskId = $task->id; $consultant2Task->role = User2Task::CONSULTANT; $consultant2Task->save(); } // assigned manager $criteria = new CDbCriteria(); $criteria->order = "`" . User2Project::model()->tableName() . "`.`userPriority` ASC"; $criteria->order .= ", `" . User2Project::model()->tableName() . "`.`id` ASC"; if (($user2Project = User2Project::model()->findByAttributes(array('projectId' => $oldModel->project_id, 'role' => 'manager'), $criteria)) !== null) { $manager2Task = new User2Task('migrate'); $manager2Task->userId = $user2Project->userId; $manager2Task->taskId = $task->id; $manager2Task->role = User2Task::MANAGER; $manager2Task->save(); } } } } $managerId = null; if (!empty($taskId)) { $criteria = new CDbCriteria(); $criteria->order = "`" . User2Task::model()->tableName() . "`.`userPriority` ASC"; $criteria->order .= ",`" . User2Task::model()->tableName() . "`.`id` ASC"; if (($user2Task = User2Task::model()->findByAttributes(array('taskId' => $taskId, 'role' => 'manager'), $criteria)) !== null) { $managerId = $user2Task->userId; } } $timeDateNotSet = empty($oldModel->time_date) || $oldModel->time_date === '0000-00-00' || strtotime($oldModel->time_date) === false; $model = new Time('migrate'); $model->consultantId = $oldModel->user_id; $model->taskId = $taskId; $model->spentMinute = (int) $oldModel->hours_spent * 60; $model->timeDate = $timeDateNotSet ? null : MDate::formatToDb($oldModel->time_date, 'date'); $model->title = $oldModel->note; $model->content = $oldModel->details . "\n" . '[from migration]'; $model->contentMarkup = 'text'; $model->managerId = $managerId; $model->billedMinute = (int) $oldModel->hours_billed * 60; $model->invoiceId = $oldModel->invoice_id; $model->invoiceAmount = $oldModel->invoice_amount; $model->isConfirmed = '1'; $model->confirmationTime = strtotime($oldModel->last); $model->createTime = strtotime($oldModel->last); $model->id = $oldModel->id; if ($model->save()) { $i++; } $j++; } $message .= $i . ' of ' . $j . ' time records' . ($i === $t ? '' : ' with ' . $t . ' tasks') . ' have been migrated.<br/>'; } } if ($migrate['Invoice']) { // invoice $mInvoices = MInvoice::model()->findAll($findAllCriteria); if (is_array($mInvoices)) { $i = $j = 0; foreach ($mInvoices as $oldModel) { if (($model = Invoice::model()->findByPk($oldModel->id)) !== null) { $model->delete(); } $invoiceDateNotSet = empty($oldModel->invoice_date) || $oldModel->invoice_date === '0000-00-00' || strtotime($oldModel->invoice_date) === false; $startDateNotSet = empty($oldModel->start_date) || $oldModel->start_date === '0000-00-00' || strtotime($oldModel->start_date) === false; $endDateNotSet = empty($oldModel->end_date) || $oldModel->end_date === '0000-00-00' || strtotime($oldModel->end_date) === false; $dueDateNotSet = empty($oldModel->due_date) || $oldModel->due_date === '0000-00-00' || strtotime($oldModel->due_date) === false; $model = new Invoice('migrate'); $model->invoiceDate = $invoiceDateNotSet ? null : MDate::formatToDb($oldModel->invoice_date, 'date'); $model->companyId = $oldModel->customer_id; $model->billedMinute = (int) $oldModel->hours_billed * 60; $model->amountTotal = number_format($oldModel->total, 2, '.', ''); $model->startDate = $startDateNotSet ? null : MDate::formatToDb($oldModel->start_date, 'date'); $model->endDate = $endDateNotSet ? null : MDate::formatToDb($oldModel->end_date, 'date'); $model->dueDate = $dueDateNotSet ? null : MDate::formatToDb($oldModel->due_date, 'date'); $model->amountTime = number_format($oldModel->total, 2, '.', ''); $model->amountExpense = 0; $model->content = '[from migration]'; $model->contentMarkup = 'text'; $model->createTime = $invoiceDateNotSet ? null : strtotime($oldModel->invoice_date); $model->id = $oldModel->id; if ($model->save()) { $i++; } $j++; } $message .= $i . ' of ' . $j . ' invoices have been migrated.<br/>'; } } if ($migrate['Expense']) { // expense $mExpenses = MExpense::model()->findAll($findAllCriteria); if (is_array($mExpenses)) { $i = $j = 0; $billToCompany = array('Yes' => '1', 'No' => '0'); foreach ($mExpenses as $oldModel) { if (($model = Expense::model()->findByPk($oldModel->id)) !== null) { $model->delete(); } $expenseDateNotSet = empty($oldModel->expense_date) || $oldModel->expense_date === '0000-00-00' || strtotime($oldModel->expense_date) === false; $model = new Expense('migrate'); $model->managerId = $oldModel->user_id; $model->companyId = $oldModel->customer_id; $model->projectId = $oldModel->project_id; $model->invoiceId = $oldModel->invoice_id; $model->expenseDate = $expenseDateNotSet ? null : MDate::formatToDb($oldModel->expense_date, 'date'); $model->amount = $oldModel->amount; $model->billToCompany = $billToCompany[$oldModel->bill_to_customer]; $model->content = $oldModel->note . "\n" . '[from migration]'; $model->contentMarkup = 'text'; $model->createTime = strtotime($oldModel->last); $model->id = $oldModel->id; if ($model->save()) { $i++; } $j++; } $message .= $i . ' of ' . $j . ' expenses have been migrated.<br/>'; } } // last message line $message .= 'done'; } $this->render($this->action->id, array('message' => $message)); }
/** * Print out array of models for the jqGrid rows. */ public function actionGridData() { if (!Yii::app()->request->isPostRequest) { throw new CHttpException(400, Yii::t('http', 'Invalid request. Please do not repeat this request again.')); exit; } // specify request details $jqGrid = $this->processJqGridRequest(); // specify filter parameters $company = isset($_GET['company']) ? $_GET['company'] : null; if ($company !== 'all' && !ctype_digit($company)) { $company = 'all'; } // criteria $criteria = new CDbCriteria(); $criteria->group = "`t`.`id`"; // required by together() $criteria->select = "`t`.amountTotal, `t`.createTime, `t`.id"; //$criteria->select="`t`.`amountTotal`, `t`.`createTime`, `t`.`id`"; // uncomment in yii-1.1.2 if ($jqGrid['searchField'] !== null && $jqGrid['searchString'] !== null && $jqGrid['searchOper'] !== null) { $field = array('amountTotal' => "`t`.`amountTotal`", 'createTime' => "`t`.`createTime`", 'id' => "`t`.`id`", 'company' => "`Invoice_Company`.`title`"); $operation = $this->getJqGridOperationArray(); $keywordFormula = $this->getJqGridKeywordFormulaArray(); if (isset($field[$jqGrid['searchField']]) && isset($operation[$jqGrid['searchOper']])) { $criteria->condition = '(' . $field[$jqGrid['searchField']] . ' ' . $operation[$jqGrid['searchOper']] . ' :keyword)'; $criteria->params = array(':keyword' => str_replace('keyword', $jqGrid['searchString'], $keywordFormula[$jqGrid['searchOper']])); // search by special field types if ($jqGrid['searchField'] === 'createTime' && ($keyword = strtotime($jqGrid['searchString'])) !== false) { $criteria->params = array(':keyword' => str_replace('keyword', $keyword, $keywordFormula[$jqGrid['searchOper']])); if (date('H:i:s', $keyword) === '00:00:00') { // visitor is looking for a precision by day, not by second $criteria->condition = '(TO_DAYS(FROM_UNIXTIME(' . $field[$jqGrid['searchField']] . ',"%Y-%m-%d")) ' . $operation[$jqGrid['searchOper']] . ' TO_DAYS(FROM_UNIXTIME(:keyword,"%Y-%m-%d")))'; } } } } if ($company !== 'all') { $criteria->addCondition("`Invoice_Company`.`id`=:companyId"); $criteria->params[':companyId'] = $company; } if (User::isClient()) { $criteria->addCondition("`Company_User2Company`.`userId`=:clientId AND `Company_User2Company`.`position`=:clientPosition"); $criteria->params[':clientId'] = Yii::app()->user->id; $criteria->params[':clientPosition'] = Company::OWNER; } // pagination $with = array(); if (strpos($criteria->condition, 'Invoice_Company') !== false) { $with[] = 'company'; } if (strpos($criteria->condition, 'Company_User2Company') !== false) { $with[] = 'company.allUser2Company'; } if (count($with) >= 1) { $pages = new CPagination(Invoice::model()->with($with)->count($criteria)); } else { $pages = new CPagination(Invoice::model()->count($criteria)); } $pages->pageSize = $jqGrid['pageSize'] !== null ? $jqGrid['pageSize'] : self::GRID_PAGE_SIZE; $pages->applyLimit($criteria); // sort $sort = new CSort('Invoice'); $sort->attributes = array('amountTotal' => array('asc' => "`t`.`amountTotal`", 'desc' => "`t`.`amountTotal` desc", 'label' => Invoice::model()->getAttributeLabel('Total')), 'createTime' => array('asc' => "`t`.`createTime`", 'desc' => "`t`.`createTime` desc", 'label' => Invoice::model()->getAttributeLabel('Date')), 'id' => array('asc' => "`t`.`id`", 'desc' => "`t`.`id` desc", 'label' => Invoice::model()->getAttributeLabel('id')), 'company' => array('asc' => "`Invoice_Company`.`title`", 'desc' => "`Invoice_Company`.`title` desc", 'label' => Invoice::model()->getAttributeLabel('companyId'))); $sort->defaultOrder = "`t`.`createTime` DESC"; $sort->applyOrder($criteria); // find all $with = array('company' => array('select' => 'title')); if (strpos($criteria->condition, 'Company_User2Company') !== false) { $with['company.allUser2Company'] = array('select' => 'id'); } $together = strpos($criteria->condition, 'Company_User2Company') !== false; if ($together) { $models = Invoice::model()->with($with)->together()->findAll($criteria); } else { $models = Invoice::model()->with($with)->findAll($criteria); } // create resulting data array $data = array('page' => $pages->getCurrentPage() + 1, 'total' => $pages->getPageCount(), 'records' => $pages->getItemCount(), 'rows' => array()); foreach ($models as $model) { $data['rows'][] = array('id' => $model->id, 'cell' => array(CHtml::encode($model->id), CHtml::encode(MDate::format($model->createTime, 'medium', null)), isset($model->company->id) ? CHtml::link(CHtml::encode($model->company->title), array('company/show', 'id' => $model->company->id)) : '', CHtml::encode($model->amountTotal), CHtml::link('<span class="ui-icon ui-icon-zoomin"></span>', array('show', 'id' => $model->id), array('class' => 'w3-ig w3-link-icon w3-border-1px-transparent w3-first ui-corner-all', 'title' => Yii::t('link', 'Show'))) . CHtml::link('<span class="ui-icon ui-icon-pencil"></span>', array('update', 'id' => $model->id), array('class' => 'w3-ig w3-link-icon w3-border-1px-transparent w3-last ui-corner-all', 'title' => Yii::t('link', 'Edit'))))); } $this->printJson($data); }