This commit is contained in:
2018-01-25 21:49:30 +01:00
parent fb19c401fd
commit bc0bd51801
16 changed files with 623 additions and 219 deletions
@@ -0,0 +1,36 @@
<?php
defined( 'BASEPATH' ) OR exit( 'No direct script access allowed' );
/**
* Created by Pensare Software.
* User: Theo Weijmer
* Date: 23/01/2018
* Time: 19:35
*/
class vatController extends MY_Controller {
public function __construct()
{
parent::__construct();
if ( AUTHENTICATED == FALSE ) die( 'NO ACCESS' );
$models = [];
$libraries = [];
$this->load->model( $models );
$this->load->library( $libraries );
}
public function index()
{
}
public function getVats( $archive )
{
$vats = Vat::getVats( $archive );
$this->json($vats);
}
}
+25
View File
@@ -0,0 +1,25 @@
<?php
/**
* Created by Pensare Software.
* User: Theo Weijmer
* Date: 23/01/2018
* Time: 15:58
*/
class Invoice extends BaseModel {
public function project()
{
return $this->belongsTo( 'Project' );
}
public function payments()
{
return $this->hasMany( 'Payment' );
}
public function vat()
{
return $this->belongsTo( 'Vat' );
}
}
+2 -2
View File
@@ -10,9 +10,9 @@ class Payment extends BaseModel {
protected $table = "payments";
public function offer()
public function invoice()
{
return $this->belongsTo( 'Offer' );
return $this->belongsTo( 'Invoice' );
}
public static function savePayment( $paymentID, $payment )
+14 -5
View File
@@ -21,6 +21,16 @@ class Project extends BaseModel {
return $this->hasMany( 'Projectemployee' );
}
public function projectcosts()
{
return $this->hasMany( 'Projectcost' );
}
public function invoices()
{
return $this->hasMany( 'Invoice' );
}
public function projectleader()
{
return $this->belongsTo( 'User', 'projectleader_id' );
@@ -66,17 +76,16 @@ class Project extends BaseModel {
}] )
->with( [
'offers' => function ( $q ) {
$q->whereArchive( 'F' )
->with( [
'payments' => function ( $q ) {
$q->selectRaw( '*' );
}] );
$q->whereArchive( 'F' );
}] )
->with( [
'projectemployees.user' => function ( $q ) {
$q->selectRaw( "id, CONCAT(firstname, ' ', middlename, ' ', lastname) AS fullname" );
}] )
->with( 'projectemployees.projecthours' )
->with( 'projectcosts.external' )
->with( 'invoices.payments' )
->with( 'invoices.vat' )
->with( 'customer' );
return $project;
@@ -0,0 +1,21 @@
<?php
/**
* Created by Pensare Software.
* User: Theo Weijmer
* Date: 23/01/2018
* Time: 11:37
*/
class Projectcost extends BaseModel {
public function project()
{
return $this->belongsTo( 'Project' );
}
public function external()
{
return $this->belongsTo( 'External' );
}
}
+30
View File
@@ -0,0 +1,30 @@
<?php
/**
* Created by Pensare Software.
* User: Theo Weijmer
* Date: 23/01/2018
* Time: 19:37
*/
class Vat extends BaseModel {
public function invoices()
{
return $this->hasMany( 'Invoice' );
}
public static function getVats( $archive )
{
if ( $archive == 'F' )
{
$vats = vat::whereArchive( 'F' )->get();
}
else
{
$vats = Vat::get();
}
return $vats;
}
}
+1 -1
View File
@@ -65,7 +65,7 @@
<tr>
<td colspan="5">
<button class="btn btn-primary btn-round btn-sm" data-bind="click:newProjecthour">
nieuwe projecturen
nieuwe uren
</button>
</td>
</tr>
@@ -0,0 +1,182 @@
<div class="panel panel-bordered panel-primary panel-line">
<div class="panel-heading panel-heading-project">
<h3 class="">
facturen
</h3>
</div>
<div class="panel-body panel-body-project">
<table class="table table-sm">
<thead>
<th class="table-cyanish-header">&nbsp;</th>
<th class="table-cyanish-header">
factuurnummer
</th>
<th class="table-cyanish-header">
factuurdatum
</th>
<th class="table-cyanish-header">
bedrag (excl)
</th>
<th class="table-cyanish-header">
bedrag (incl)
</th>
<th class="table-cyanish-header">
prognose(excl)
</th>
<th class="table-cyanish-header">
prognose datum
</th>
<th class="table-cyanish-header">
btw tarief
</th>
<th class="table-cyanish-header" width="40px">
&nbsp;
</th>
</thead>
<tbody data-bind="foreach:invoices">
<tr>
<td>
<i class="icon fa-chevron-right" data-bind="visible: ! showPayments(), click:$root.togglePayments"></i>
<i class="icon fa-chevron-down" data-bind="visible:showPayments(), click:$root.togglePayments"></i>
</td>
<td>
<span data-bind="text:invoicenumber, visible:! inEdit()"></span>
<input type="text"
class="form-control form-control-sm"
placeholder="factuurnummer"
data-bind="textInput:invoicenumber, visible:inEdit,
event:{change:$root.saveInvoice}"/>
</td>
<td>
<span data-bind="text:invoicedate, visible:! inEdit()"></span>
<input type="text"
class="form-control form-control-sm"
placeholder="start"
data-bind="datepicker:{dateFormat: 'dd-mm-yy' },
value:invoicedate, visible:inEdit,
event:{change:$root.saveInvoice}"/>
</td>
<td class="align-right">
<span data-bind=" visible: ! inEdit()">
<i class="icon fa-euro"></i>
<span data-bind="text:invoiceamount"></span>
</span>
<input type="text"
class="form-control form-control-sm align-right"
paceholder="bedrag"
data-bind="textInput:invoiceamount, visible:inEdit,
event:{change:$root.saveInvoice,keyup:$root.validateNumber.bind($data, 'invoiceamount')}"/>
</td>
<td>
<i class="icon fa-euro"></i>
<span data-bind="text:inclBtw"></span>
</td>
<td class="align-right">
<span data-bind=" visible: ! inEdit()">
<i class="icon fa-euro"></i>
<span data-bind="text:forecastamount"></span>
</span>
<input type="text"
class="form-control form-control-sm align-right"
paceholder="bedrag"
data-bind="textInput:forecastamount, visible:inEdit,
event:{change:$root.saveInvoice,keyup:$root.validateNumber.bind($data, 'forecastamount')}"/>
</td>
<td>
<span data-bind="text:forecastdate, visible:! inEdit()"></span>
<input type="text"
class="form-control form-control-sm"
placeholder="start"
data-bind="datepicker:{dateFormat: 'dd-mm-yy' },
value:forecastdate, visible:inEdit,
event:{change:$root.saveInvoice}"/>
</td>
<td>
<span data-bind="visible:! inEdit()">
<span data-bind="text:dbo.helpers.findArrayElement('id', 'vatrate', vat_id(), $root.vats())"></span>
%
</span>
<select class="form-control form-control-sm"
data-bind="options:$root.vats,
optionsText:'vatrate',
optionsValue:'id',
value:vat_id,
optionsCaption:'btw',
visible:inEdit(),
event:{change:$root.saveInvoice}">
</select>
</td>
<td>
<i class="icon fa-edit pointer" title="wijzig" data-bind="click:$root.editInvoice"></i>
<i class="icon fa-trash redish pointer" title="verwijder"
data-bind="click:$root.removeInvoice"></i>
</td>
</tr>
<tr data-bind="visible:showPayments()">
<td colspan="8">
<table class="table table-condensed">
<thead>
<th>&nbsp;</th>
<th class="table-cyanish-header-light">
datum
</th>
<th class="table-cyanish-header-light">
bedrag
</th>
<th class="table-cyanish-header-light">
</th>
</thead>
<tbody data-bind="foreach:payments">
<tr>
<td>&nbsp;</td>
<td>
<span data-bind="text:paymentdate, visible:! inEdit()"></span>
<input type="text"
class="form-control form-control-sm"
placeholder="start"
data-bind="datepicker:{dateFormat: 'dd-mm-yy' },
value:paymentdate, visible:inEdit,
event:{change:$root.savePayment}"/>
</td>
<td>
<span data-bind=" visible: ! inEdit()">
<i class="icon fa-euro"></i>
<span data-bind="text:paymentamount"></span>
</span>
<input type="text"
class="form-control form-control-sm align-right"
paceholder="bedrag"
data-bind="textInput:paymentamount, visible:inEdit,
event:{change:$root.saveInvoice,
keyup:$root.validateNumber.bind($data, 'paymentamount')}"/>
</td>
<td>
<i class="icon fa-edit pointer" title="wijzig" data-bind="click:$root.editPayment"></i>
<i class="icon fa-trash redish pointer" title="verwijder"
data-bind="click:$root.removePayment"></i>
</td>
</tr>
</tbody>
<tfoot>
<td colspan="4">
<button class="btn btn-primary btn-round btn-sm" data-bind="click:$root.newPayment">
nieuwe betaling
</button>
</td>
</tfoot>
</table>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="5">
<button class="btn btn-primary btn-round btn-sm" data-bind="click:newInvoice">
nieuwe factuur
</button>
</td>
</tr>
</tfoot>
</table>
</div>
</div>
@@ -1,75 +0,0 @@
<div class="panel panel-bordered panel-primary panel-line">
<div class="panel-heading panel-heading-project">
<h3 class="">
betalingen
</h3>
</div>
<div class="panel-body panel-body-project">
<table class="table table-sm">
<thead>
<th class="table-cyanish-header">
offertenummer
</th>
<th class="table-cyanish-header">
datum
</th>
<th class="table-cyanish-header">
bedrag
</th>
<th class="table-cyanish-header" width="40px">
&nbsp;
</th>
</thead>
<tbody data-bind="foreach:payments">
<tr>
<td>
<span data-bind="text:offernumber, visible:! inEdit()"></span>
<select class="form-control form-control-sm"
data-bind="options:$root.offers,
optionsText:'offernumber',
optionsValue:'id',
value:offer_id,
optionsCaption:'offerte',
visible: inEdit(),
event:{change:$root.savePayment}">
</select>
</td>
<td>
<span data-bind="text:paymentdate, visible:! inEdit()"></span>
<input type="text"
class="form-control form-control-sm"
placeholder="start"
data-bind="datepicker:{dateFormat: 'dd-mm-yy' },
value:paymentdate, visible:inEdit,
event:{change:$root.savePayment}"/>
</td>
<td class="align-right">
<span data-bind=" visible: ! inEdit()">
<i class="icon fa-euro"></i>
<span data-bind="text:paymentamount"></span>
</span>
<input type="text"
class="form-control form-control-sm align-right"
paceholder="bedrag"
data-bind="textInput:paymentamount, visible:inEdit,
event:{change:$root.savePayment,keyup:$root.validateNumber.bind($data, 'paymentamount')}"/>
</td>
<td>
<i class="icon fa-edit pointer" title="wijzig" data-bind="click:$root.editPayment"></i>
<i class="icon fa-trash redish pointer" title="verwijder"
data-bind="click:$root.removePayment"></i>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="5">
<button class="btn btn-primary btn-round btn-sm" data-bind="click:newPayment">
nieuwe betaling
</button>
</td>
</tr>
</tfoot>
</table>
</div>
</div>
@@ -23,50 +23,49 @@
&nbsp;
</th>
</thead>
<tbody data-bind="foreach:projecthours">
<tbody data-bind="foreach:projectcosts">
<tr>
<td>
<span data-bind="text:fullname, visible:! inEdit()"></span>
<span data-bind="text:contactperson, visible:! inEdit()"></span>
<select class="form-control form-control-sm"
data-bind="options:$root.projectEmployees,
optionsText:'fullname',
data-bind="options:$root.externals,
optionsText:'contactperson',
optionsValue:'id',
value:projectemployee_id,
optionsCaption:'medewerker',
value:external_id,
optionsCaption:'extern',
visible: inEdit(),
event:{change:$root.saveProjecthour}">
event:{change:$root.saveProjectcosts}">
</select>
</td>
<td class="align-right">
<span data-bind=" visible: ! inEdit()">
<span data-bind="text:hours"></span>
uur
<span data-bind="text:description"></span>
</span>
<input type="text"
class="form-control form-control-sm align-right"
paceholder="uren"
data-bind="textInput:hours, visible:inEdit,
event:{change:$root.saveProjecthour,keyup:$root.validateNumber.bind($data, 'hours')}"/>
paceholder="omschrijving"
data-bind="textInput:description, visible:inEdit,
event:{change:$root.saveProjectcosts"/>
</td>
<td>
<span data-bind="text:hourdate, visible:! inEdit()"></span>
<span data-bind="text:date, visible:! inEdit()"></span>
<input type="text"
class="form-control form-control-sm"
placeholder="start"
data-bind="datepicker:{dateFormat: 'dd-mm-yy' },
value:hourdate, visible:inEdit,
event:{change:$root.saveProjecthour}"/>
value:date, visible:inEdit,
event:{change:$root.saveProjectcosts}"/>
</td>
<td class="align-right">
<span data-bind=" visible: ! inEdit()">
<i class="icon fa-euro"></i>
<span data-bind="text:paymentamount"></span>
<span data-bind="text:costs"></span>
</span>
<input type="text"
class="form-control form-control-sm align-right"
paceholder="bedrag"
data-bind="textInput:paymentamount, visible:inEdit,
event:{change:$root.savePayment,keyup:$root.validateNumber.bind($data, 'paymentamount')}"/>
data-bind="textInput:costs, visible:inEdit,
event:{change:$root.saveProjectcosts,keyup:$root.validateNumber.bind($data, 'costs')}"/>
</td>
<td>
<i class="icon fa-edit pointer" title="wijzig" data-bind="click:$root.editProjecthour"></i>
@@ -78,8 +77,8 @@
<tfoot>
<tr>
<td colspan="5">
<button class="btn btn-primary btn-round btn-sm" data-bind="click:newProjecthour">
nieuwe projecturen
<button class="btn btn-primary btn-round btn-sm" data-bind="click:newProjectcost">
nieuwe projectkosten
</button>
</td>
</tr>
+133 -93
View File
@@ -2,120 +2,160 @@
<button class="btn btn-danger" data-bind="click:closeProject" style="position:absolute">
sluit
</button>
<div class="container" style="margin-top:15px;padding-top:15px;">
<div class="row" form-inline>
<div class="col-md-3">
<div class="form-group row">
<label class="col-md-3 col-form-label">klant</label>
<div class="col-md-9">
<select class="form-control form-control-sm"
data-bind="options:customers,
optionsText:'name',
optionsValue: 'id',
value:customerID,
disable:offers().length > 0,
optionsCaption:'selecteer klant',
event:{change:saveProject},
css:{'is-invalid': ! customerID()}"></select>
<small class="invalid-feedback"
data-bind="style:{display: ! customerID() ? 'block' : 'none'}">
selecteer een klant
</small>
</div>
</div>
</div>
<div class="col-md-3">
<div class="form-group row">
<label class="col-md-5 col-form-label">projectleider</label>
<div class="col-md-7">
<select class="form-control form-control-sm"
data-bind="options:users,
<div class="nav-tabs-horizontal nav-tabs-animate nav-tab-reverse">
<ul class="nav nav-tabs nav-tabs-solid">
<li class="nav-item" role="presentation">
<a class="nav-link active"
data-toggle="tab"
href="#dashboard">
<i class="icon fa-area-chart"></i>
algemeen</a>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link"
data-toggle="tab"
href="#financial"
aria-control="financial"
role="tab">
<i class="icon fa-euro"></i>
financieel</a>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link"
data-toggle="tab"
href="#employees"
aria-control="employees"
role="tab">
<i class="icon fa-user-circle"></i>
medewerkers</a>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link"
data-toggle="tab"
href="#files"
aria-control="files"
role="tab">
<i class="icon fa-files"></i>
bestanden en opmerkingen</a>
</li>
</ul>
<div class="tab-content">
<div class="tab-pane animation-slide-top active" id="dashboard">
<div class="row" form-inline>
<div class="col-md-3">
<div class="form-group row">
<label class="col-md-3 col-form-label">klant</label>
<div class="col-md-9">
<select class="form-control form-control-sm"
data-bind="options:customers,
optionsText:'name',
optionsValue: 'id',
value:customerID,
disable:offers().length > 0,
optionsCaption:'selecteer klant',
event:{change:saveProject},
css:{'is-invalid': ! customerID()}"></select>
<small class="invalid-feedback"
data-bind="style:{display: ! customerID() ? 'block' : 'none'}">
selecteer een klant
</small>
</div>
</div>
</div>
<div class="col-md-3">
<div class="form-group row">
<label class="col-md-5 col-form-label">projectleider</label>
<div class="col-md-7">
<select class="form-control form-control-sm"
data-bind="options:users,
optionsText:'fullname',
optionsValue:'id',
value:projectleaderID,
optionsCaption:'projectleider',
event:{change:saveProject}">
</select>
</div>
</div>
</div>
<div class="col-md-3">
<div class="form-group row">
<label class="col-md-5 col-form-label">begin project</label>
<div class="col-md-7">
<div class="input-group input-group-icon">
</select>
</div>
</div>
</div>
<div class="col-md-3">
<div class="form-group row">
<label class="col-md-5 col-form-label">begin project</label>
<div class="col-md-7">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-calendar"></i>
</span>
<input type="text"
placeholder="start project"
class="form-control form-control-sm"
readonly
data-bind="datepicker:{dateFormat: 'dd-mm-yy' },
<input type="text"
placeholder="start project"
class="form-control form-control-sm"
readonly
data-bind="datepicker:{dateFormat: 'dd-mm-yy' },
value:startdate,
event:{change:saveProject}">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-3">
<div class="form-group row">
<label class="col-md-5 col-form-label">eind project</label>
<div class="col-md-7">
<div class="input-group input-group-icon">
<div class="col-md-3">
<div class="form-group row">
<label class="col-md-5 col-form-label">eind project</label>
<div class="col-md-7">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-calendar"></i>
</span>
<input type="text"
placeholder="eind project"
class="form-control form-control-sm"
readonly
data-bind="datepicker:{dateFormat: 'dd-mm-yy' },
<input type="text"
placeholder="eind project"
class="form-control form-control-sm"
readonly
data-bind="datepicker:{dateFormat: 'dd-mm-yy' },
value:enddate,
event:{change:saveProject}">
</div>
</div>
</div>
</div>
</div>
</div>
<div class="tab-pane animation-slide-top" id="financial">
<div class="row" data-bind="fadeVisible:customerID()">
<div class="col-md-7">
<?php $this->load->view( 'modals/partials/_projectoffers' ); ?>
</div>
<div class="col-md-5">
<?php $this->load->view( 'modals/partials/_projectcosts' ); ?>
</div>
</div>
<div class="row">
<div class="col-md-9">
<?php $this->load->view( 'modals/partials/_invoices' ); ?>
</div>
</div>
</div>
<div class="tab-pane animation-slide-top" id="employees">
<div class="row" data-bind="fadeVisible:customerID()">
<div class="col-md-6" data-bind="fadeVisible:customerID()">
<?php $this->load->view( 'modals/partials/_projectemployees' ); ?>
</div>
<div class="col-md-6">
<?php $this->load->view( 'modals/partials/_hours' ); ?>
</div>
</div>
</div>
<div class="tab-pane animation-slide-top" id="files">
<div class="row" data-bind="fadeVisible:customerID()">
<div class="col-md-4">
<?php $this->load->view( 'modals/partials/_projectfiles' ); ?>
</div>
<div class="col-md-4">
<?php $this->load->view( 'modals/partials/_projectcomments' ); ?>
</div>
</div>
</div>
</div>
</div>
<!-- <div class="container">-->
<!-- <div class="row">-->
<!-- <div class="col-md-12">-->
<!-- <div class="project-page-header">-->
<!-- <h3>nieuw / wijzigen project-->
<!-- <button class="btn btn-default pull-right" data-bind="click:closeProject">x</button>-->
<!-- </h3>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<div class="row" data-bind="fadeVisible:customerID()">
<div class="col-md-6">
<?php $this->load->view( 'modals/partials/_projectoffers' ); ?>
</div>
<div class="col-md-6" data-bind="fadeVisible:customerID()">
<?php $this->load->view( 'modals/partials/_projectemployees' ); ?>
</div>
</div>
<div class="row" data-bind="fadeVisible:customerID()">
<div class="col-md-4">
<?php $this->load->view('modals/partials/_payments'); ?>
</div>
<div class="col-md-4">
<?php $this->load->view('modals/partials/_hours'); ?>
</div>
<div class="col-md-4">
<?php $this->load->view('modals/partials/_projectcosts'); ?>
</div>
</div>
<div class="row" data-bind="fadeVisible:customerID()">
<div class="col-md-4">
<?php $this->load->view('modals/partials/_projectfiles'); ?>
</div>
<div class="col-md-4">
<?php $this->load->view('modals/partials/_projectcomments'); ?>
</div>
</div>
</div>
</div>
+1
View File
@@ -92,4 +92,5 @@
<script src="js/lib/dataservices/commentsDataservice.js"></script>
<script src="js/lib/dataservices/documentsDataservice.js"></script>
<script src="js/lib/dataservices/projectsDataservice.js"></script>
<script src="js/lib/dataservices/vatDataservice.js"></script>
<script src="js/lib/helpers.js"></script>