<?php echo $form->errorSummary($model); ?> <div class="row"> <?php echo $form->hiddenField($model, 'UserID', array('value' => Yii::app()->user->ID)); ?> </div> <div class="row" style="width: 20%; float: left;"> <?php echo $form->labelEx($model, 'SerieID'); ?> <?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; }
/** * 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'); }
/** * 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 the ID of the model to be loaded */ public function loadModel($id) { $model = Serie::model()->findByPk($id); if ($model === null) { throw new CHttpException(404, 'The requested page does not exist.'); } return $model; }
<?php /* @var $this InvoiceController */ /* @var $model Invoice */ $this->breadcrumbs = array('Facturas' => array('admin'), 'Listado'); $this->menu = array(array('label' => 'Nueva Factura', 'url' => array('create')), array('label' => 'Nueva Serie', 'url' => array('serie/create')), array('label' => 'Listado de series', 'url' => array('serie/admin'))); ?> <h1 class="header">Listado de facturas</h1> <?php $this->widget('zii.widgets.grid.CGridView', array('id' => 'invoice-grid', 'dataProvider' => $model->search(), 'filter' => $model, 'afterAjaxUpdate' => "function(){\n\t\t\t\t\t\t\tjQuery('#date_Date').datepicker(jQuery.extend({showMonthAfterYear:false}, jQuery.datepicker.regional['es'], {'dateFormat':'yy-mm-dd'}));\n\t\t\t\t\t\t}", 'columns' => array(array('name' => 'SerieID', 'value' => '$data->serie->Serie', 'filter' => CHtml::listData(Serie::model()->findAll(), 'ID', 'Serie'), 'headerHtmlOptions' => array('style' => 'width:10%;text-align:left !important;'), 'htmlOptions' => array('style' => 'width:10%;text-align:left;')), array('name' => 'Number', 'filter' => CHtml::activeTextField($model, 'Number', array('placeholder' => 'Escribe el valor a buscar...')), 'headerHtmlOptions' => array('style' => 'width:15%;text-align:left !important;'), 'htmlOptions' => array('style' => 'width:15%;text-align:left;')), array('name' => 'CustomerID', 'value' => '$data->customer->FullName', 'filter' => CHtml::listData(Customer::model()->findAll(), 'ID', 'FullName'), 'headerHtmlOptions' => array('style' => 'width:50%;text-align:left !important;'), 'htmlOptions' => array('style' => 'width:50%;text-align:left;')), array('name' => 'Date', 'filter' => false, 'value' => 'date("d-m-Y", strtotime($data->Date))'), array('class' => 'CButtonColumn', 'template' => '{update} {delete}', 'buttons' => array('update' => array('label' => 'Editar', 'imageUrl' => Yii::app()->baseURL . '/images/edit.png'), 'delete' => array('label' => 'Borrar', 'imageUrl' => Yii::app()->baseURL . '/images/delete.png')), 'deleteConfirmation' => 'Si aceptas eliminaras este registro definitivamente.')), 'emptyText' => 'No hay registros. <a href="' . $this->createURL('create') . '">Picha</a> para crear uno.', 'summaryText' => 'Mostrando del {start} al {end} de {count} registro(s).'));