Customers

This commit is contained in:
2017-12-31 10:07:19 +01:00
parent cb0567d3f3
commit 8ce71a444b
12 changed files with 457 additions and 67 deletions
@@ -0,0 +1,36 @@
<?php
/**
* Created by Pensare Software.
* User: Theo Weijmer
* Date: 27/12/2017
* Time: 17:45
*/
class RemoveCustomer {
private $customerID;
private $allowDelete = TRUE;
public function __construct( $userID )
{
$this->setCustomerID( $userID );
$this->handle();
}
public function getAllowDelete()
{
return $this->allowDelete;
}
private function setCustomerID( $customerID )
{
$this->customerID = $customerID;
}
private function handle()
{
}
}
@@ -17,10 +17,6 @@ class CustomerValidation extends BaseValidation {
'validations' => 'required|alphaNumericSpaces',
'fieldname' => 'name'
],
'contactperson' => [
'validations' => 'required|alphaNumericSpaces',
'fieldname' => 'contactperson'
],
'email' => [
'validations' => 'email',
'fieldname' => 'email'
+1 -4
View File
@@ -16,10 +16,7 @@
<?php $this->load->view( 'partials/_css' ); ?>
<?php $this->load->view( 'partials/_fonts' ); ?>
<script src="js/vendor/breakpoints/breakpoints.js"></script>
<script>
Breakpoints();
</script>
</head>
<body id="dbois-app">
<!-- ko stopBinding: true -->
+158
View File
@@ -0,0 +1,158 @@
<div class="modal modal-fade-in-scale-up modal-primary" tabindex="-1" id="customer-modal">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">toevoegen / wijzigen opdrachtgever</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="row">
<div class="col-xl-12">
<div role="form" class="form-horizontal">
<div class="form-group row">
<label class="col-xl-3 form-control-label">
naam
</label>
<div class="col-xl-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-institution"></i>
</span>
<input type="text"
placeholder="voornaam"
class="form-control"
data-bind="textInput:name,
css:{'is-invalid':nameInvalid}">
</div>
<small class="invalid-feedback"
data-bind="style:{display: nameInvalid() ? 'block' : 'none'}">
voer een naam in
</small>
</div>
</div>
<div class="form-group row">
<label class="col-xl-3 form-control-label">
adres
</label>
<div class="col-xl-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-address-book-o"></i>
</span>
<input type="text"
placeholder="adres"
class="form-control"
data-bind="textInput:address">
</div>
</div>
</div>
<div class="form-group row">
<label class="col-xl-3 form-control-label">
postcode
</label>
<div class="col-xl-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-address-book-o"></i>
</span>
<input type="text"
placeholder="postcode"
class="form-control"
data-bind="textInput:postcode">
</div>
</div>
</div>
<div class="form-group row">
<label class="col-xl-3 form-control-label">
plaats
</label>
<div class="col-xl-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-address-book-o"></i>
</span>
<input type="text"
placeholder="plaats"
class="form-control"
data-bind="textInput:place">
</div>
</div>
</div>
<div class="form-group row">
<label class="col-xl-3 form-control-label">
contactpersoon
</label>
<div class="col-xl-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-user"></i>
</span>
<input type="email"
placeholder="contactpersoon"
class="form-control"
data-bind="textInput:contactperson">
</div>
</div>
</div>
<div class="form-group row">
<label class="col-xl-3 form-control-label">
email
</label>
<div class="col-xl-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-envelope"></i>
</span>
<input type="email"
placeholder="email"
class="form-control"
data-bind="textInput:email,
css:{'is-invalid':emailInvalid}">
</div>
<small class="invalid-feedback"
data-bind="style:{display: emailInvalid() ? 'block' : 'none'}">
email ongeldig<span data-bind="text:emailInvalid"></span>
</small>
</div>
</div>
<div class="form-group row">
<label class="col-xl-3 form-control-label">
website
</label>
<div class="col-xl-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-link"></i>
</span>
<input type="email"
placeholder="email"
class="form-control"
data-bind="textInput:website">
</div>
</div>
</div>
<div class="form-group row">
<label class="col-xl-3 form-control-label">
opmerkingen
</label>
<div class="col-xl-9">
<textarea class="form-control" data-bind="textInput:remarks"></textarea>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button"
class="btn btn-success"
data-bind="visible:formValid(), click:saveCustomer">opslaan
</button>
<button type="button" class="btn btn-warning" data-dismiss="modal">annuleren</button>
</div>
</div>
</div>
</div>
+68 -7
View File
@@ -1,7 +1,68 @@
<?php
/**
* Created by Pensare Software.
* User: Theo Weijmer
* Date: 29/12/2017
* Time: 14:17
*/
<div class="container">
<div class="row">
<div class="col-xl-8">
<table class="table table-sm">
<thead>
<tr>
<th class="table-tealish-header">naam</th>
<th class="table-tealish-header">adres</th>
<th class="table-tealish-header">plaats</th>
<th class="table-tealish-header">contactpersoon</th>
<th class="table-tealish-header">email</th>
<th class="table-tealish-header">&nbsp;</th>
</tr>
</thead>
<tbody data-bind="foreach:customers">
<tr>
<td><span data-bind="text:name"></span></td>
<td><span data-bind="text:address"></span></td>
<td><span data-bind="text:postcode + ' ' + place"></span></td>
<td><span data-bind="text:contactperson"</td>
<td><span data-bind="text:email"></span></td>
<td>
<i class="icon fa-edit pointer" title="wijzig" data-bind="click:$root.editCustomer"></i>
<!-- ko if:archive == 'F' -->
<i class="icon fa-archive pointer" title="archiveer"
data-bind="click:$root.archiveCustomer"></i>
<!-- /ko -->
<!-- ko if:archive != 'F' -->
<i class="icon fa-minus-circle redish pointer" title="archiveer"
data-bind="click:$root.archiveCustomer"></i>
<!-- /ko -->
<i class="icon fa-trash redish pointer" title="verwijder"
data-bind="click:$root.removeCustomer"></i>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="4" class="">
<button class="btn btn-primary btn-round btn-sm" data-bind="click:newCustomer">
nieuwe opdrachtgever
</button>
</td>
<td colspan="2" class="">
<div class="row form-horizontal">
<label class="col-md-4 form-control-label">archief</label>
<div class="col-md-8">
<div class="onoffswitch" data-bind="click:toggleArchive">
<input type="checkbox"
name="onoffswitch"
class="onoffswitch-checkbox"
data-bind="checked:archive"
id="myonoffswitch">
<label class="onoffswitch-label" for="myonoffswitch">
<span class="onoffswitch-inner"></span>
<span class="onoffswitch-switch"></span>
</label>
</div>
</div>
</div>
</td>
</tr>
</tfoot>
</table>
</div>
</div>
</div>
+34 -33
View File
@@ -1,50 +1,49 @@
<!-- Core -->
<script src="js/vendor/babel-external-helpers/babel-external-helpers.js"></script>
<!--<script src="js/vendor/babel-external-helpers/babel-external-helpers.js"></script>-->
<script src="js/vendor/jquery/jquery.js"></script>
<script src="js/vendor/popper-js/umd/popper.min.js"></script>
<script src="js/vendor/bootstrap/bootstrap.js"></script>
<script src="js/vendor/animsition/animsition.js"></script>
<script src="js/vendor/mousewheel/jquery.mousewheel.js"></script>
<script src="js/vendor/asscrollbar/jquery-asScrollbar.js"></script>
<script src="js/vendor/asscrollable/jquery-asScrollable.js"></script>
<script src="js/vendor/ashoverscroll/jquery-asHoverScroll.js"></script>
<!--<script src="js/vendor/mousewheel/jquery.mousewheel.js"></script>-->
<!--<script src="js/vendor/asscrollbar/jquery-asScrollbar.js"></script>-->
<!--<script src="js/vendor/asscrollable/jquery-asScrollable.js"></script>-->
<!--<script src="js/vendor/ashoverscroll/jquery-asHoverScroll.js"></script>-->
<!-- Plugins -->
<script src="js/vendor/intro-js/intro.js"></script>
<script src="js/vendor/screenfull/screenfull.js"></script>
<script src="js/vendor/slidepanel/jquery-slidePanel.js"></script>
<script src="js/vendor/skycons/skycons.js"></script>
<script src="js/vendor/chartist/chartist.min.js"></script>
<script src="js/vendor/chartist-plugin-tooltip/chartist-plugin-tooltip.js"></script>
<script src="js/vendor/aspieprogress/jquery-asPieProgress.min.js"></script>
<script src="js/vendor/jvectormap/jquery-jvectormap.min.js"></script>
<script src="js/vendor/jvectormap/maps/jquery-jvectormap-au-mill-en.js"></script>
<script src="js/vendor/matchheight/jquery.matchHeight-min.js"></script>
<!--<script src="js/vendor/intro-js/intro.js"></script>-->
<!--<script src="js/vendor/screenfull/screenfull.js"></script>-->
<!--<script src="js/vendor/slidepanel/jquery-slidePanel.js"></script>-->
<!--<script src="js/vendor/skycons/skycons.js"></script>-->
<!--<script src="js/vendor/chartist/chartist.min.js"></script>-->
<!--<script src="js/vendor/chartist-plugin-tooltip/chartist-plugin-tooltip.js"></script>-->
<!--<script src="js/vendor/aspieprogress/jquery-asPieProgress.min.js"></script>-->
<!--<script src="js/vendor/jvectormap/jquery-jvectormap.min.js"></script>-->
<!--<script src="js/vendor/jvectormap/maps/jquery-jvectormap-au-mill-en.js"></script>-->
<!--<script src="js/vendor/matchheight/jquery.matchHeight-min.js"></script>-->
<!-- Scripts -->
<script src="js/vendor/Component.js"></script>
<script src="js/vendor/Plugin.js"></script>
<script src="js/vendor/Base.js"></script>
<script src="js/vendor/Config.js"></script>
<!--<script src="js/vendor/Component.js"></script>-->
<!--<script src="js/vendor/Plugin.js"></script>-->
<!--<script src="js/vendor/Base.js"></script>-->
<!--<script src="js/vendor/Config.js"></script>-->
<script src="js/vendor/Section/Menubar.js"></script>
<script src="js/vendor/Section/GridMenu.js"></script>
<script src="js/vendor/Section/Sidebar.js"></script>
<script src="js/vendor/Section/PageAside.js"></script>
<script src="js/vendor/Plugin/menu.js"></script>
<script src="js/vendor/colors.js"></script>
<!--<script src="js/vendor/Section/Menubar.js"></script>-->
<!--<script src="js/vendor/Section/GridMenu.js"></script>-->
<!--<script src="js/vendor/Section/Sidebar.js"></script>-->
<!--<script src="js/vendor/Section/PageAside.js"></script>-->
<!--<script src="js/vendor/Plugin/menu.js"></script>-->
<!---->
<!--<script src="js/vendor/colors.js"></script>-->
<!--<script src="../assets/js/config/tour.js"></script>-->
<script>Config.set('assets', '../assets');</script>
<!--<script>Config.set('assets', '../assets');</script>-->
<!-- Page -->
<script src="js/vendor/Site.js"></script>
<script src="js/vendor/Plugin/asscrollable.js"></script>
<script src="js/vendor/Plugin/slidepanel.js"></script>
<script src="js/vendor/Plugin/switchery.js"></script>
<script src="js/vendor/Plugin/matchheight.js"></script>
<script src="js/vendor/Plugin/jvectormap.js"></script>
<!--<script src="js/vendor/Site.js"></script>-->
<!--<script src="js/vendor/Plugin/asscrollable.js"></script>-->
<!--<script src="js/vendor/Plugin/slidepanel.js"></script>-->
<!--<script src="js/vendor/Plugin/matchheight.js"></script>-->
<!--<script src="js/vendor/Plugin/jvectormap.js"></script>-->
<!-- DBOIS -->
@@ -56,9 +55,11 @@
<script src="js/lib/modules/beheer/usersModule.js"></script>
<script src="js/lib/modules/beheer/customersModule.js"></script>
<script src="js/lib/modules/modals/userModal.js"></script>
<script src="js/lib/modules/modals/customerModal.js"></script>
<script src="js/lib/dataservices/pageDataservice.js"></script>
<script src="js/lib/dataservices/userDataservice.js"></script>
<script src="js/lib/dataservices/customerDataservice.js"></script>
<script src="js/lib/dataservices/rolesDataservice.js"></script>
<script src="js/lib/helpers.js"></script>
+3
View File
@@ -1,7 +1,10 @@
<?php
$this->load->view('modals/user_modal');
$this->load->view('modals/customer_modal');
$this->load->view('specials/tellme_modal');
?>
+2 -2
View File
@@ -10,11 +10,11 @@
<a href="#"><?= $page->pagename ?></a>
</li>
<?php else: ?>
<li class="site-menu-item has-sub">
<li class="site-menu-item has-sub pointer">
<a href="#"><?= $page->pagename ?></a>
<ul class="site-menu-sub">
<?php foreach ( $page->subpages as $subpage ): ?>
<li data-bind="click:setPage.bind($data, '<?= $subpage->pageurl ?>')">
<li class="pointer" data-bind="click:setPage.bind($data, '<?= $subpage->pageurl ?>')">
<a><?= $subpage->pagename ?></a>
</li>
<?php endforeach; ?>
+9
View File
@@ -11,6 +11,15 @@
cursor:pointer;
}
.site-menu-sub > li{
margin-left:30px;
padding-left:10px;
}
.site-menu-sub > li :hover{
background-color:#463238;
color:gold;
}
/*********TABLES************/
.table-blueish-header{
+15 -16
View File
@@ -5,16 +5,16 @@
* Time: 14:19
*/
dbo.customersInit = function (){
dbo.customersInit = function () {
if ( dbo.customersModel !== undefined ) {
} else {
dbo.customersModel = {
customers : ko.observableArray( [] ),
customer : ko.observable(),
archive: ko.observable( true ),
customers: ko.observableArray( [] ),
customer : ko.observable(),
archive : ko.observable( false ),
init: function () {
var vm = dbo.customersModel;
@@ -24,9 +24,8 @@ dbo.customersInit = function (){
newCustomer: function () {
var vm = dbo.customersModel;
dbo.editCostomerModal.newEditCostumer( false, function () {
vm.refreshCostumers();
dbo.editCustomerModal.newEditCustomer( false, function () {
vm.refreshCustomers();
} );
},
@@ -35,15 +34,15 @@ dbo.customersInit = function (){
vm.archive( !vm.archive() );
vm.refreshCostumers();
vm.refreshCustomers();
},
editCostumer: function () {
editCustomer: function () {
var customer = this;
var vm = dbo.customersModel;
dbo.editCostumerModal.newEditCostumer( customer, function () {
vm.refreshCostumers();
dbo.editCustomerModal.newEditCustomer( customer, function () {
vm.refreshCustomers();
} );
},
@@ -53,12 +52,12 @@ dbo.customersInit = function (){
var status = self.archive == 'F' ? 'T' : 'F';
dbo.customerDataService.archiveCostumer( self.id, status, function () {
vm.refreshCostumers();
dbo.customerDataService.archiveCustomer( self.id, status, function () {
vm.refreshCustomers();
} );
},
removeCostumer: function () {
removeCustomer: function () {
var vm = dbo.customersModel;
var self = this;
@@ -72,14 +71,14 @@ dbo.customersInit = function (){
}, function ( response ) {
console.log( response );
if ( response ) {
dbo.customerDataService.removeUser( self.id, function ( data ) {
dbo.customerDataService.removeCustomer( self.id, function ( data ) {
if ( data.result ) {
tellMe( {
title : 'opdrachtgever verwijderd',
message : 'de opdrachtgever is succesvol verwijderd',
modalClass: 'modal-success'
}, function () {
vm.refreshCostumers();
vm.refreshCustomers();
} );
} else {
tellMe( {
+1 -1
View File
@@ -16,7 +16,7 @@ dbo.usersInit = function () {
users : ko.observableArray( [] ),
user : ko.observable(),
roles : ko.observableArray( [] ),
archive: ko.observable( true ),
archive: ko.observable( false ),
init: function () {
var vm = dbo.usersModel;
@@ -0,0 +1,130 @@
/**
* Created by Pensare Software.
* Customer: Theo Weijmer
* Date: 25/12/2017
* Time: 17:32
*/
$( function () {
dbo.editCustomerModal = {
id : null,
name : ko.observable(),
address : ko.observable(),
postcode : ko.observable(),
place : ko.observable(),
contactperson: ko.observable(),
email : ko.observable(),
website : ko.observable(),
remarks : ko.observable(),
callback : null,
init: function () {
},
newEditCustomer: function ( customer, callback ) {
var vm = dbo.editCustomerModal;
vm.callback = typeof(callback) == 'function' ? callback : null;
vm.showCustomerModal();
vm.setCustomer( customer );
},
saveCustomer: function () {
var vm = dbo.editCustomerModal;
if ( vm.formValid == false ) return;
var submitDATA = {
id : vm.id,
name : vm.name(),
address : vm.address(),
postcode : vm.postcode(),
place : vm.place(),
contactperson: vm.contactperson(),
email : vm.email(),
website : vm.website(),
remarks : vm.remarks(),
}
dbo.customerDataService.saveCustomer( submitDATA, function ( data ) {
if ( data.success ) {
tellMe( {
title : 'opdrachtgever aangemaakt',
message : 'opdrachtgever is succesvol opgeslagen',
modalClass: 'modal-success'
}, function () {
vm.hideCustomerModal();
if ( typeof(vm.callback) == 'function' ) vm.callback();
} );
return;
}
var errorMessage = '<ul>';
$.each( data.messages, function ( i, p ) {
if ( p[0] ) {
errorMessage += '<li>' + i + ': ' + p[0] + '</li>';
}
} );
errorMessage += '</ul>';
tellMe( {
title : 'fout aanmaken opdrachtgever',
message : errorMessage,
modalClass: 'modal-danger'
} );
} );
},
setCustomer: function ( customer ) {
var vm = dbo.editCustomerModal;
vm.id = customer.id;
vm.name( customer.name || '' );
vm.address( customer.address || '' );
vm.postcode( customer.postcode || '' );
vm.place( customer.place || '' );
vm.contactperson( customer.contactperson || '' );
vm.email( customer.email || '' );
vm.website( customer.website || '' );
vm.remarks( customer.remarks || '' );
},
showCustomerModal: function () {
$( "#customer-modal" ).modal( 'show' );
},
hideCustomerModal: function () {
$( "#customer-modal" ).modal( 'hide' );
}
};
dbo.editCustomerModal.init();
dbo.editCustomerModal.nameInvalid = ko.pureComputed( function () {
if ( !this.name() ) return true;
if ( this.name().length < 2 ) return true;
return false;
}, dbo.editCustomerModal );
dbo.editCustomerModal.emailInvalid = ko.pureComputed( function () {
if ( !this.email() ) return false;
return !dbo.helpers.validateEmail( this.email() );
}, dbo.editCustomerModal );
dbo.editCustomerModal.formValid = ko.pureComputed( function () {
if ( this.nameInvalid() ) return false;
if ( this.emailInvalid() ) return false;
return true;
}, dbo.editCustomerModal )
ko.applyBindings( dbo.editCustomerModal, document.getElementById( 'customer-modal' ) );
} );