Initial commit
This commit is contained in:
189
api-wiaas/server/components/v1/shop/ShopController.php
Normal file
189
api-wiaas/server/components/v1/shop/ShopController.php
Normal file
@@ -0,0 +1,189 @@
|
||||
<?php
|
||||
/**
|
||||
* ShopController controlls the actions for the shop
|
||||
*/
|
||||
class ShopController{
|
||||
private $model;
|
||||
|
||||
function __construct(){
|
||||
$this->model = new ShopModel();
|
||||
}
|
||||
|
||||
/**
|
||||
* get all packages taht can be sold
|
||||
* @return json all packages that can be sold in web shop
|
||||
*/
|
||||
public function getShopPackages(){
|
||||
$idCommercialLead = isset($_REQUEST['idCommercialLead']) ? $_REQUEST['idCommercialLead'] : 0;
|
||||
$serach = isset($_REQUEST['search']) ? $_REQUEST['search'] : '';
|
||||
echo json_encode($this->model->getShopPackages($idCommercialLead, 0, $serach));
|
||||
}
|
||||
|
||||
/**
|
||||
* get web shop details for a package
|
||||
* @return json package details
|
||||
*/
|
||||
public function getShopPackageDetails(){
|
||||
$idCommercialLead = isset($_REQUEST['idCommercialLead']) ? $_REQUEST['idCommercialLead'] : 0;
|
||||
$idPackage = isset($_REQUEST['idPackage']) ? $_REQUEST['idPackage'] : 0;
|
||||
echo json_encode($this->model->getShopPackageDetails($idCommercialLead, $idPackage));
|
||||
}
|
||||
|
||||
/**
|
||||
* add items to cart
|
||||
*/
|
||||
public function addToCart(){
|
||||
$idPackage = isset($_REQUEST['idPackage']) ? $_REQUEST['idPackage'] : 0;
|
||||
$idPrice = isset($_REQUEST['idPrice']) ? $_REQUEST['idPrice'] : 0;
|
||||
$options = isset($_REQUEST['options']) ? $_REQUEST['options'] : '[]';
|
||||
echo json_encode($this->model->addToCart($idPackage, $idPrice, $options));
|
||||
}
|
||||
|
||||
/**
|
||||
* update quantity for a product
|
||||
* @return json update message
|
||||
*/
|
||||
public function updateQuantity(){
|
||||
$idPackage = isset($_REQUEST['idPackage']) ? $_REQUEST['idPackage'] : 0;
|
||||
$idPrice = isset($_REQUEST['idPrice']) ? $_REQUEST['idPrice'] : 0;
|
||||
$idCustomerInstance = isset($_REQUEST['idCustomerInstance']) ? $_REQUEST['idCustomerInstance'] : 0;
|
||||
$quantity = isset($_REQUEST['quantity']) ? $_REQUEST['quantity'] : 1;
|
||||
echo json_encode($this->model->updateQuantity($idPackage, $idCustomerInstance, $idPrice, $quantity));
|
||||
}
|
||||
|
||||
/**
|
||||
* remove items from carts
|
||||
* @return json update message
|
||||
*/
|
||||
public function removeFromCart(){
|
||||
$idCart = isset($_REQUEST['idCart']) ? $_REQUEST['idCart'] : 0;
|
||||
echo json_encode($this->model->removeFromCart($idCart));
|
||||
}
|
||||
|
||||
/**
|
||||
* get the name and code of the country
|
||||
*/
|
||||
public function getCountryDetailsById() {
|
||||
$idCountry = isset($_REQUEST['idCountry']) ? $_REQUEST['idCountry'] : 0;
|
||||
echo json_encode($this->model->getCountryDetailsById($idCountry));
|
||||
}
|
||||
|
||||
/**
|
||||
* get count of items in te cart
|
||||
* @return json number of items in the cart
|
||||
*/
|
||||
public function getShopCartCount(){
|
||||
echo json_encode($this->model->getShopCartCount());
|
||||
}
|
||||
|
||||
/**
|
||||
* get all comercial leads lined to the user
|
||||
* @return json list of commercial leads
|
||||
*/
|
||||
public function getAllCommercialLeads(){
|
||||
echo json_encode($this->model->getAllCommercialLeads());
|
||||
}
|
||||
|
||||
/**
|
||||
* get web shop cart content
|
||||
* @return josn list of packages in the cart
|
||||
*/
|
||||
public function getShopCart(){
|
||||
echo json_encode($this->model->getShopCart());
|
||||
}
|
||||
|
||||
/**
|
||||
* gets the details for the customer logged in, if any
|
||||
* @return Array of details
|
||||
*/
|
||||
public function getCustomerDetails() {
|
||||
echo json_encode($this->model->getCustomerDetails());
|
||||
}
|
||||
|
||||
/**
|
||||
* get the countries for delivery address
|
||||
* @return array with countries available
|
||||
*/
|
||||
public function getCountries() {
|
||||
echo json_encode($this->model->getCountries());
|
||||
}
|
||||
|
||||
public function placeOrder() {
|
||||
$cartPackages = isset($_REQUEST['cartPackages']) ? $_REQUEST['cartPackages'] : '[]';
|
||||
$deliveryInfo = isset($_REQUEST['deliveryInfo']) ? $_REQUEST['deliveryInfo'] : '[]';
|
||||
$billingInfo = isset($_REQUEST['billingInfo']) ? $_REQUEST['billingInfo'] : '[]';
|
||||
$details = isset($_REQUEST['details']) ? $_REQUEST['details'] : '[]';
|
||||
|
||||
echo json_encode($this->model->placeOrder($cartPackages, $deliveryInfo, $billingInfo, $details));
|
||||
}
|
||||
|
||||
/**
|
||||
* get document sfor packages in cart
|
||||
* @return json Array of documents
|
||||
*/
|
||||
public function getCartDocuments(){
|
||||
$packages = isset($_REQUEST['packages']) ? $_REQUEST['packages'] : '[]';
|
||||
echo json_encode($this->model->getCartDocuments($packages));
|
||||
}
|
||||
|
||||
/**
|
||||
* upload a questionaire form the cart page
|
||||
* @return json upload message
|
||||
*/
|
||||
public function uploadOrderDocument(){
|
||||
$file = isset($_FILES['file']) ? $_FILES['file'] : [];
|
||||
$idDocumentType = isset($_REQUEST['idDocumentType']) ? $_REQUEST['idDocumentType'] : '';
|
||||
$idPackage = isset($_REQUEST['idPackage']) ? $_REQUEST['idPackage'] : 0;
|
||||
echo json_encode($this->model->uploadOrderDocument($file, $idDocumentType, $idPackage));
|
||||
}
|
||||
|
||||
/**
|
||||
* incude template for serach input
|
||||
*/
|
||||
public function shopPackageSearchTemplate(){
|
||||
require_once('templates/ShopPackageSearchTemplate.php');
|
||||
}
|
||||
|
||||
/**
|
||||
* include shop template
|
||||
*/
|
||||
public function shopTemplate(){
|
||||
require_once('templates/ShopTemplate.php');
|
||||
}
|
||||
|
||||
/**
|
||||
* template for showing the packages in the shop
|
||||
*/
|
||||
public function shopPackagesTemplate(){
|
||||
require_once('templates/ShopPackagesTemplate.php');
|
||||
}
|
||||
|
||||
/**
|
||||
* tempalte for showing details for a selected package
|
||||
*/
|
||||
public function shopPackageDetailsTemplate(){
|
||||
global $user;
|
||||
require_once('templates/ShopPackageDetailsTemplate.php');
|
||||
}
|
||||
|
||||
/**
|
||||
* get template for shop cart
|
||||
*/
|
||||
public function shopCartTemplate(){
|
||||
require_once('templates/ShopCartTemplate.php');
|
||||
}
|
||||
|
||||
/**
|
||||
* get template for the cart review
|
||||
*/
|
||||
public function cartReview() {
|
||||
require_once('templates/CartReview.php');
|
||||
}
|
||||
|
||||
/**
|
||||
* open shop page
|
||||
*/
|
||||
public function showPage(){
|
||||
require_once('ShopPage.php');
|
||||
}
|
||||
}
|
||||
1631
api-wiaas/server/components/v1/shop/ShopModel.php
Normal file
1631
api-wiaas/server/components/v1/shop/ShopModel.php
Normal file
File diff suppressed because it is too large
Load Diff
11
api-wiaas/server/components/v1/shop/ShopPage.php
Normal file
11
api-wiaas/server/components/v1/shop/ShopPage.php
Normal file
@@ -0,0 +1,11 @@
|
||||
<script src="<?php echo PATH_JS_COMPONENTS.'shop/shop.directive.js?v='.APPLICATION_VERSION;?>" type="text/javascript"></script>
|
||||
<script src="<?php echo PATH_JS_COMPONENTS.'shop/shop-package-search.directive.js?v='.APPLICATION_VERSION;?>" type="text/javascript"></script>
|
||||
<script src="<?php echo PATH_JS_COMPONENTS.'shop/shop-packages.directive.js?v='.APPLICATION_VERSION;?>" type="text/javascript"></script>
|
||||
<script src="<?php echo PATH_JS_COMPONENTS.'shop/shop-package-details.directive.js?v='.APPLICATION_VERSION;?>" type="text/javascript"></script>
|
||||
<script src="<?php echo PATH_JS_COMPONENTS.'shop/shop-cart.directive.js?v='.APPLICATION_VERSION;?>" type="text/javascript"></script>
|
||||
<script src="<?php echo PATH_JS_COMPONENTS.'shop/cart-review.directive.js?v='.APPLICATION_VERSION;?>" type="text/javascript"></script>
|
||||
|
||||
<div id="shop-module" class="container-fluid col-md-12">
|
||||
<h1>{{ 'shop.TITLE' | translate }}</h1>
|
||||
<shop ng-controller="shopCtrl"></shop>
|
||||
</div>
|
||||
88
api-wiaas/server/components/v1/shop/templates/CartReview.php
Normal file
88
api-wiaas/server/components/v1/shop/templates/CartReview.php
Normal file
@@ -0,0 +1,88 @@
|
||||
<div id='cart-informations-review'>
|
||||
<div id='cart-packages-review'>
|
||||
<h3 class='cart-review-title'>{{'shop.headers.ORDER_INFO' | translate}}</h3>
|
||||
<div id="show-order-items" ng-repeat="(position, package) in cartPackages track by position">
|
||||
<h4 class="col-md-12 package-name-review">{{position+1}}. {{package.packageName}}</h4>
|
||||
<div class="package-details-list">
|
||||
<div class="label-value-pair">
|
||||
<label>{{'shop.labels.PAY_TYPE' | translate}}</label>
|
||||
<div class="value-pair">{{::package.payType}}</div>
|
||||
</div>
|
||||
<div class="label-value-pair">
|
||||
<label>{{'shop.labels.PRICE' | translate}}</label>
|
||||
<div class="value-pair">{{sumPrice([package.fixedPrice], package.quantity)}} ({{sumPrice([package.recurentPrice, package.servicesPrice], package.quantity)}} / {{package.periodUnit}})</div>
|
||||
</div>
|
||||
<div class="label-value-pair">
|
||||
<label>{{'shop.labels.QUANTITY' | translate}}</label>
|
||||
<div class="value-pair">{{::package.quantity}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div id="delivery-information-review">
|
||||
<h3 class='cart-review-title'>{{'shop.headers.CUSTOMER_INFO' | translate}}</h3>
|
||||
<div class="label-value-pair" ng-if="details.reference">
|
||||
<label>{{'shop.labels.REFERENCE' | translate}}</label>
|
||||
<div class="value-pair">{{details.reference}}</div>
|
||||
</div>
|
||||
<div class="label-value-pair" ng-if="details.tender">
|
||||
<label>{{'shop.labels.TENDER' | translate}}</label>
|
||||
<div class="value-pair">{{details.tender}}</div>
|
||||
</div>
|
||||
<h4>{{'shop.labels.DELIVERY_ADDRESS' | translate}}</h4>
|
||||
<div id="delivery-information-list" class="package-details-list">
|
||||
<div class="label-value-pair">
|
||||
<label>{{'shop.labels.ADDRESS' | translate}}</label>
|
||||
<div class="value-pair">{{delivery.detailedAddress}}</div>
|
||||
</div>
|
||||
<div class="label-value-pair">
|
||||
<label>{{'shop.labels.CITY' | translate}}</label>
|
||||
<div class="value-pair">{{delivery.city}}</div>
|
||||
</div>
|
||||
<div class="label-value-pair">
|
||||
<label>{{'shop.labels.COUNTRY' | translate}}</label>
|
||||
<div class="value-pair">{{countryNames.delivery}}</div>
|
||||
</div>
|
||||
<div class="label-value-pair">
|
||||
<label>{{'shop.labels.ZIP' | translate}}</label>
|
||||
<div class="value-pair">{{delivery.zipCode}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div id="billing-information-review">
|
||||
<h3 class='cart-review-title'>{{'shop.headers.BILLING_ADDRESS' | translate}}</h3>
|
||||
<div class="label-value-pair">
|
||||
<label>{{'shop.labels.COMPANY' | translate}}</label>
|
||||
<div class="value-pair">{{billing.companyName}}</div>
|
||||
</div>
|
||||
<div class="label-value-pair">
|
||||
<label>{{'shop.labels.FIRST_NAME' | translate}}</label>
|
||||
<div class="value-pair">{{billing.firstName}}</div>
|
||||
</div>
|
||||
<div class="label-value-pair">
|
||||
<label>{{'shop.labels.LAST_NAME' | translate}}</label>
|
||||
<div class="value-pair">{{billing.lastName}}</div>
|
||||
</div>
|
||||
<h4>{{'shop.labels.BILLING_ADDRESS' | translate}}</h4>
|
||||
<div id="billing-information-list" class="package-details-list">
|
||||
<div class="label-value-pair">
|
||||
<label>{{'shop.labels.ADDRESS' | translate}}</label>
|
||||
<div class="value-pair">{{billing.detailedAddress}}</div>
|
||||
</div>
|
||||
<div class="label-value-pair">
|
||||
<label>{{'shop.labels.CITY' | translate}}</label>
|
||||
<div class="value-pair">{{billing.city}}</div>
|
||||
</div>
|
||||
<div class="label-value-pair">
|
||||
<label>{{'shop.labels.COUNTRY' | translate}}</label>
|
||||
<div class="value-pair">{{countryNames.billing}}</div>
|
||||
</div>
|
||||
<div class="label-value-pair">
|
||||
<label>{{'shop.labels.ZIP' | translate}}</label>
|
||||
<div class="value-pair">{{billing.zipCode}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,271 @@
|
||||
<h3>{{'shop.headers.MY_CART' | translate}}</h3>
|
||||
<div id="shop-cart-container" ng-if="!isCartEmpty()">
|
||||
<div id="shop-cart" class="row">
|
||||
<div id="show-order-info-headers">
|
||||
<div class="show-order-items step active-step">1. {{'shop.headers.ORDER_INFO' | translate}}</div>
|
||||
<div class="step-link"></div>
|
||||
<div class="upload-customer-questionaire step inactive-step">2. {{'shop.headers.CUSTOMER_QUESTIONAIRE' | translate}}</div>
|
||||
<div class="step-link"></div>
|
||||
<div class="upload-agreement step inactive-step">3. {{'shop.headers.UPLOAD_AGREEMENT' | translate}}</div>
|
||||
<div class="step-link"></div>
|
||||
<div class="show-customer-details step inactive-step">4. {{'shop.headers.CUSTOMER_INFO' | translate}}</div>
|
||||
<div class="step-link"></div>
|
||||
<div class="show-customer-billing step inactive-step">5. {{'shop.headers.BILLING_ADDRESS' | translate}}</div>
|
||||
</div>
|
||||
<div id="show-order-items" class="shop-cl" ng-if="isStepVisible('show-order-items')">
|
||||
<h3 class="col-md-12">{{'shop.headers.SOLD_BY' | translate}} {{::commercialLead}}</h3>
|
||||
<div class="shop-cart-item col-md-12" ng-repeat="(position, package) in cartPackages track by position">
|
||||
<div class="shop-item-name col-md-3">
|
||||
{{position+1}}. {{package.packageName}}
|
||||
<div class="shop-item-options" ng-if="package.options.length">
|
||||
<div class="shop-item-option {{getOptionAvailabilityClass(option.isAvailable)}}" ng-repeat="option in package.options">
|
||||
<b>{{option.groupName}}</b> : {{option.packageName}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="shop-item-additional-packages" ng-if="package.additionalPackages.length">
|
||||
<div class="shop-item-option {{getOptionAvailabilityClass(additionalPackage.isAvailable)}}" ng-repeat="additionalPackage in package.additionalPackages">
|
||||
{{additionalPackage.packageName}}
|
||||
</div>
|
||||
</div>
|
||||
<div ng-if="!isAvailable(package)" class="not-available">
|
||||
<span class="glyphicon glyphicon-warning-sign"></span>
|
||||
{{'shop.messages.' + getAvailabilityMessage(package) | translate}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="shop-item-pay col-md-2">
|
||||
{{package.payType}}
|
||||
</div>
|
||||
<div ng-if="isAvailable(package)" class="shop-item-pay col-md-2">
|
||||
{{sumPrice([package.fixedPrice, package.extraFixedPrice], package.quantity)}} ({{sumPrice([package.recurentPrice, package.servicesPrice, package.extraRecurrentPrice], package.quantity)}} / {{package.periodUnit}})
|
||||
</div>
|
||||
<div ng-if="!isAvailable(package)" class="shop-item-pay col-md-2">-</div>
|
||||
|
||||
<div class="shop-item-quantity col-md-4">
|
||||
{{'shop.labels.QUANTITY' | translate}}: <input class="quantity-input" type="number" min="1" max="100" ng-model="package.quantity" ng-blur="updateQuantity(package)"/>
|
||||
</div>
|
||||
|
||||
<div class="shop-item-remove col-md-1">
|
||||
<span ng-click="removeFromCart(package)" class="glyphicon glyphicon-remove"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="upload-customer-questionaire" class="upload-customer-questionaire col-md-12" ng-if="isStepVisible('upload-customer-questionaire')">
|
||||
<div class="documet-templates">
|
||||
<div ng-if="!documents[DOCUMENT_TYPES['TEMPLATE_QUESTINNAIRE']].length" class="questionnaire-info col-md-12">
|
||||
<div class="alert alert-info">
|
||||
<span class="glyphicon glyphicon-info-sign"></span>
|
||||
{{'shop.messages.QUESIONNAIRE_NOT_REQUIRED' | translate}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="document-layer col-md-12" ng-repeat="document in documents[DOCUMENT_TYPES['TEMPLATE_QUESTINNAIRE']]">
|
||||
<h3 class="col-md-12">{{document.packageName}}: {{'shop.headers.CUSTOMER_QUESTIONAIRE' | translate}}</h3>
|
||||
<div class="col-md-12">
|
||||
<a href="utils/api/downloadFile?idDocument={{document.id}}&fileName={{document.documentName}}.{{document.extension}}">
|
||||
<div class="btn btn-primary">
|
||||
{{'shop.buttons.DOWNLOAD' | translate}} {{document.documentName}}
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<form name="form" class="col-md-4">
|
||||
<div ngf-drop="uploadFile($file, document.idPackage, 'questionnaire')"
|
||||
ng-model="files"
|
||||
ngf-drag-over-class="'dragover'"
|
||||
ngf-select="uploadFile($file, document.idPackage, 'questionnaire')"
|
||||
ngf-pattern="'.pdf,.docx,.doc,.xlsx,.xls,.odt,.ods'"
|
||||
ngf-max-size="20MB"
|
||||
class="drop-box">{{'shop.labels.SELECT_QUESTIONAIRE' | translate}}</div>
|
||||
</form>
|
||||
<div class="col-md-4">
|
||||
<div ng-if="!document.isUploaded" class="no-file-uploaded upload-status">
|
||||
<span class="glyphicon glyphicon-upload"></span> {{'shop.labels.UPLOAD_QUESTIONAIRE' | translate}}
|
||||
</div>
|
||||
|
||||
<div ng-if="document.isUploaded" class="file-uploaded upload-status">
|
||||
<span class="glyphicon glyphicon-ok"></span> {{'shop.labels.FILE_UPLOADED' | translate}}
|
||||
</div>
|
||||
</div>
|
||||
<div ngf-no-file-drop>{{'shop.messages.NO_SUPPORT' | translate}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="upload-agreement" class="upload-customer-questionaire col-md-12" ng-if="isStepVisible('upload-agreement')">
|
||||
<div class="documet-templates">
|
||||
<div ng-if="!documents[DOCUMENT_TYPES['TEMPLATE_AGREEMENT']].length" class="questionnaire-info col-md-12">
|
||||
<div class="alert alert-info">
|
||||
<span class="glyphicon glyphicon-info-sign"></span>
|
||||
{{'shop.messages.AGREEMENT_NOT_REQUIRED' | translate}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="document-layer col-md-12" ng-repeat="document in documents[DOCUMENT_TYPES['TEMPLATE_AGREEMENT']]">
|
||||
<h3 class="col-md-12">{{document.packageName}}: {{'shop.headers.CUSTOMER_AGREEMENT' | translate}}</h3>
|
||||
<div class="col-md-12">
|
||||
<a href="utils/api/downloadFile?idDocument={{document.id}}&fileName={{document.documentName}}.{{document.extension}}">
|
||||
<div class="btn btn-primary">
|
||||
{{'shop.buttons.DOWNLOAD' | translate}} {{document.documentName}}
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<form name="form" class="col-md-4">
|
||||
<div ngf-drop="uploadFile($file, document.idPackage, 'agreement')"
|
||||
ng-model="files"
|
||||
ngf-drag-over-class="'dragover'"
|
||||
ngf-select="uploadFile($file, document.idPackage, 'agreement')"
|
||||
ngf-pattern="'.pdf,.docx,.doc,.xlsx,.xls,.odt,.ods,.png,.jpg,.jpeg'"
|
||||
ngf-max-size="20MB"
|
||||
class="drop-box">{{'shop.labels.SELECT_AGREEMENT' | translate}}</div>
|
||||
</form>
|
||||
<div class="col-md-4">
|
||||
<div ng-if="!document.isUploaded" class="no-file-uploaded upload-status">
|
||||
<span class="glyphicon glyphicon-upload"></span> {{'shop.labels.UPLOAD_AGREEMENT' | translate}}
|
||||
</div>
|
||||
|
||||
<div ng-if="document.isUploaded" class="file-uploaded upload-status">
|
||||
<span class="glyphicon glyphicon-ok"></span> {{'shop.labels.FILE_UPLOADED' | translate}}
|
||||
</div>
|
||||
</div>
|
||||
<div ngf-no-file-drop>{{'shop.messages.NO_SUPPORT' | translate}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="show-customer-details" class="show-customer-addresses" ng-if="isStepVisible('show-customer-details')">
|
||||
<div class="label-value-pair col-md-12">
|
||||
<label class="col-md-2">{{'shop.labels.VAT' | translate}}</label>
|
||||
<input id="vat-code-nb" class="col-md-2" type="text" ng-model="vatCode" ng-disabled="vatCode" />
|
||||
</div>
|
||||
<div class="label-value-pair col-md-12">
|
||||
<label class="col-md-2">{{'shop.labels.REFERENCE' | translate}}</label>
|
||||
<input id="reference-nb" class="col-md-3" type="text" ng-model="details.reference" required />
|
||||
</div>
|
||||
<div class="label-value-pair col-md-12">
|
||||
<label class="col-md-2">{{'shop.labels.TENDER' | translate}}</label>
|
||||
<input id="tender-nb" class="col-md-3" type="text" ng-model="details.tender" />
|
||||
</div>
|
||||
<div class="address-type col-md-12">
|
||||
<label>{{'shop.labels.DELIVERY_ADDRESS' | translate}}</label>
|
||||
</div>
|
||||
<div class="label-value-pair col-md-12">
|
||||
<label class="col-md-2">{{'shop.labels.ADDRESS' | translate}}</label>
|
||||
<textarea id="detailed-address" class="address-area col-md-3" type="text" ng-model="delivery.detailedAddress" required></textarea>
|
||||
</div>
|
||||
<div class="label-value-pair col-md-12">
|
||||
<label class="col-md-2">{{'shop.labels.COUNTRY' | translate}}</label>
|
||||
<select id="delivery-country" class="form-control-static col-md-2" ng-change="changeCountryName('delivery', delivery.idCountrySelected)" ng-model="delivery.idCountrySelected" required>
|
||||
<option ng-repeat="country in countries track by country.id" value="{{country.id}}">
|
||||
{{country.name}}
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="label-value-pair col-md-12">
|
||||
<label class="col-md-2">{{'shop.labels.CITY' | translate}}</label>
|
||||
<input id="delivery-city" class="col-md-2" type="text" ng-model="delivery.city" required />
|
||||
</div>
|
||||
<div class="label-value-pair col-md-12">
|
||||
<label class="col-md-2">{{'shop.labels.ZIP' | translate}}</label>
|
||||
<input id="zip-code" class="col-md-2" type="text" ng-model="delivery.zipCode" required />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="show-customer-billing" class="show-customer-addresses" ng-if="isStepVisible('show-customer-billing')">
|
||||
<div class="label-value-pair col-md-12">
|
||||
<label class="col-md-2">{{'shop.labels.VAT' | translate}}</label>
|
||||
<input id="vat-code-nb" class="col-md-2" type="text" ng-model="vatCode" ng-disabled="vatCode" />
|
||||
</div>
|
||||
<div class="label-value-pair col-md-12">
|
||||
<label class="col-md-2">{{'shop.labels.COMPANY' | translate}}</label>
|
||||
<input id="billing-company-name" class="col-md-2" type="text" ng-model="billing.companyName" required />
|
||||
</div>
|
||||
<div class="label-value-pair col-md-12">
|
||||
<label class="col-md-2">{{'shop.labels.FIRST_NAME' | translate}}</label>
|
||||
<input id="billing-first-name" class="col-md-2" type="text" ng-model="billing.firstName" required />
|
||||
</div>
|
||||
<div class="label-value-pair col-md-12">
|
||||
<label class="col-md-2">{{'shop.labels.LAST_NAME' | translate}}</label>
|
||||
<input id="billing-last-name" class="col-md-2" type="text" ng-model="billing.lastName" required />
|
||||
</div>
|
||||
<div class="address-type col-md-12">
|
||||
<label>{{'shop.labels.BILLING_ADDRESS' | translate}}</label>
|
||||
</div>
|
||||
<div class="label-value-pair col-md-12">
|
||||
<input type="checkbox" ng-model="deliveryEqualsBilling.checked" ng-change="setBillingSameAsDeliveryAddress()" />
|
||||
<label>{{'shop.labels.DELIVERY_SAME_AS_BILLING' | translate}}</label>
|
||||
</div>
|
||||
<div class="label-value-pair col-md-12">
|
||||
<label class="col-md-2">{{'shop.labels.ADDRESS' | translate}}</label>
|
||||
<textarea id="billing-address" class="address-area col-md-3" type="text" ng-model="billing.detailedAddress" required></textarea>
|
||||
</div>
|
||||
<div class="label-value-pair col-md-12">
|
||||
<label class="col-md-2">{{'shop.labels.COUNTRY' | translate}}</label>
|
||||
<select id="billing-country" class="form-control-static col-md-2" ng-change="changeCountryName('billing', billing.idCountrySelected)" ng-model="billing.idCountrySelected" required>
|
||||
<option ng-repeat="country in countries track by country.id" value="{{country.id}}">
|
||||
{{country.name}}
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="label-value-pair col-md-12">
|
||||
<label class="col-md-2">{{'shop.labels.CITY' | translate}}</label>
|
||||
<input id="billing-city" class="col-md-2" type="text" ng-model="billing.city" required />
|
||||
</div>
|
||||
<div class="label-value-pair col-md-12">
|
||||
<label class="col-md-2">{{'shop.labels.ZIP' | translate}}</label>
|
||||
<input id="billing-zip-code" class="col-md-2" type="text" ng-model="billing.zipCode" required />
|
||||
</div>
|
||||
|
||||
<div class="shop-terms-conditions alert {{getAlertClass(termsAndConditionCheckbox)}} col-md-12">
|
||||
<input type="checkbox"
|
||||
ng-model="termsAndConditionCheckbox"
|
||||
ng-change="setTermsCheckboxValue(termsAndConditionCheckbox)"/>
|
||||
{{'shop.labels.ACCEPT' | translate}} <a target="_blank" href="terms">{{'shop.labels.TERMS_CONDITIONS' | translate}}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="order-action-buttons">
|
||||
<div class="next-btn btn btn-primary"
|
||||
ng-disabled="isBtnDisabled"
|
||||
ng-click="goToNextStep('next')">
|
||||
{{'shop.buttons.' + actionButton | translate}}
|
||||
</div>
|
||||
<div class="prev-btn btn btn-primary"
|
||||
ng-click="goToNextStep('prev')"
|
||||
ng-if="hasPrevStep()">
|
||||
{{'shop.buttons.' + prevButton | translate}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="place-order-dialog-confirm"
|
||||
dialog
|
||||
ng-if="isDialogVisible"
|
||||
on-confirmation="placeOrder"
|
||||
on-close="showHideDialog"
|
||||
is-modal="true"
|
||||
has-buttons="true"
|
||||
parameters="details"
|
||||
title="{{'shop.headers.PLACE_ORDER' | translate}}">
|
||||
<p>
|
||||
<span class="glyphicon glyphicon-warning-sign"></span>{{'shop.headers.OVERVIEW' | translate}}
|
||||
<div cart-review
|
||||
country-names="countryNames"
|
||||
cart-packages="cartPackages"
|
||||
delivery="delivery"
|
||||
billing="billing"
|
||||
details="details">
|
||||
</div>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="shop-cart-order-success" class="alert alert-success shop-message" ng-if="isOrderPlaced">
|
||||
<span class="glyphicon glyphicon-ok"></span>
|
||||
{{'shop.messages.ORDER_PLACED' | translate}}
|
||||
</div>
|
||||
|
||||
<div id="shop-cart-empty-container" class="alert alert-info shop-message" ng-if="isCartEmpty()">
|
||||
<span class="glyphicon glyphicon-alert"></span>
|
||||
<a href="shop">
|
||||
{{'shop.messages.NO_PACKAGES_IN_CART' | translate}}
|
||||
</a>
|
||||
</div>
|
||||
@@ -0,0 +1,141 @@
|
||||
<div id="shop-package-details" class="shop-package-details">
|
||||
<div id="shop-package-details-layer" class="shop-package-details-layer row">
|
||||
<div class="shop-package-general-info col-md-6">
|
||||
<div class="shop-package-title col-md-12">{{selectedPackage.name}}</div>
|
||||
<div class="shop-package-reference col-md-12">( {{selectedPackage.reference}} )</div>
|
||||
|
||||
<div class="shop-package-full-description">
|
||||
<div class="shop-package-text" ng-bind-html="renderHtml(selectedPackage.shortDescription)"></div>
|
||||
</div>
|
||||
|
||||
<div class="shop-package-details-country">
|
||||
<div class="shop-package-label">{{'shop.headers.SOLD_IN' | translate}}:</div>
|
||||
<div class="shop-package-text">
|
||||
{{selectedPackage.country}} <span class="flag-icon flag-icon-{{selectedPackage.countryCode}}"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="shop-package-details-documents">
|
||||
<div class="shop-package-label">{{'shop.headers.DOCUMENTS' | translate}}:</div>
|
||||
<div class="package-documents">
|
||||
<div class="package-document" ng-repeat="document in selectedPackage.documents">
|
||||
<a href="utils/api/downloadFile?idDocument={{document.idDocument}}&fileName={{document.documentName}}.{{document.extension}}">
|
||||
<span class="glyphicon glyphicon-file"></span> {{document.documentName}}.{{document.extension}}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="not-available"class="alert alert-warning col-md-6" ng-if="!selectedPackage.prices.length">
|
||||
{{'shop.messages.NOT_AVAILABLE' | translate}}
|
||||
</div>
|
||||
|
||||
<div id="shop-package-buy-info" class="shop-package-buy-info col-md-6" ng-if="selectedPackage.prices.length">
|
||||
<div class="selection-price">
|
||||
{{getFixedPrice()}} {{country.currency}} +
|
||||
( {{getRecurrentPrice()}} {{country.currency}} / {{selectedOptions.price.periodUnit}} )
|
||||
</div>
|
||||
|
||||
<div class="shop-package-options">
|
||||
<div ng-show="hasOptions()">
|
||||
<div class="shop-package-label options-header">{{'shop.headers.PACKAGE_OPTIONS' | translate}}:</div>
|
||||
<div class="package-option" ng-repeat="group in selectedPackage.groups">
|
||||
<div class="shop-package-label"> {{group.groupName}}:</div>
|
||||
<div>
|
||||
<span class="option-value {{getOptionClass(group.idGroup, option.idOptionPackage)}}"
|
||||
ng-repeat="option in group.options">
|
||||
<input type="radio"
|
||||
name="package-option-{{option.idOptionPackage}}"
|
||||
class="package-option-input"
|
||||
ng-model="selectedOptions.other[group.idGroup]"
|
||||
value="{{option.idOptionPackage}}"/>
|
||||
<span class="option-value-text"
|
||||
ng-click="selectOption(group.idGroup, option.idOptionPackage)"
|
||||
ng-bind-html="getOptionPriceText(option.optionName, option)"></span>
|
||||
<span class="price-info-btn glyphicon glyphicon-info-sign"
|
||||
ng-if="!option.isAvailable"
|
||||
ng-click="showOptionInfo(option)"></span>
|
||||
<span class="alert-warning" ng-if="option.isInfoBoxVisible">{{'shop.messages.EXTRA_NOT_AVAILABLE' | translate}}</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-show="selectedPackage.additionalPackages.length">
|
||||
<div class="shop-package-label options-header">{{'shop.headers.ADDITIONAL_PACKAGES' | translate}}:</div>
|
||||
<div ng-repeat="additionalPackage in selectedPackage.additionalPackages">
|
||||
<span class="option-value {{getAdditionalClass(additionalPackage.idAdditionalPackage)}}">
|
||||
<input type="checkbox"
|
||||
class="package-option-checkbox"
|
||||
name="package-option-{{additionalPackage.idAdditionalPackage}}"
|
||||
ng-model="selectedOptions.additionalPackages[additionalPackage.idAdditionalPackage]"/>
|
||||
<span class="option-value-text"
|
||||
ng-click="selectAdditional(additionalPackage.idAdditionalPackage)"
|
||||
ng-bind-html="getOptionPriceText(additionalPackage.packageName, additionalPackage)"></span>
|
||||
<span class="price-info-btn glyphicon glyphicon-info-sign"
|
||||
ng-if="!additionalPackage.isAvailable"
|
||||
ng-click="showOptionInfo(additionalPackage)"></span>
|
||||
<span class="alert-warning" ng-if="additionalPackage.isInfoBoxVisible">{{'shop.messages.EXTRA_NOT_AVAILABLE' | translate}}</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="shop-package-prices">
|
||||
<div class="shop-package-label">{{'shop.headers.AGREEMENT_OPTIONS' | translate}}:</div>
|
||||
<div class="shop-package-pay-type {{getPriceClass(price)}}" ng-repeat="price in selectedPackage.prices">
|
||||
<input type="radio"
|
||||
name="price-type"
|
||||
class="price-type-option"
|
||||
ng-model="selectedOptions.idPaymentType"
|
||||
ng-change="onPriceSelect(price.idPaymentType)"
|
||||
value="{{price.idPaymentType}}"/>
|
||||
<span class="price-value-text" ng-click="onPriceSelect(price.idPaymentType)">
|
||||
<div class="shop-package-text shop-pacakge-option-agreement">{{price.payType}}</div>
|
||||
<div class="shop-package-text shop-pacakge-option-price">
|
||||
{{price.fixedExtra}} {{country.currency}} +
|
||||
( {{sumPrices([price.recurentExtra, price.servicesExtra])}} {{country.currency}} / {{price.periodUnit}} )
|
||||
</div>
|
||||
</span>
|
||||
<span class="price-info-btn glyphicon glyphicon-info-sign" ng-click="showInfo(price)"></span>
|
||||
<div class="price-extra-info alert alert-info" ng-if="price.isInfoVisible">
|
||||
<div class="package-price-recurrent">
|
||||
<span class="price-info-title">{{'shop.headers.PACKAGE_RECURRENT' | translate}}</span>
|
||||
{{price.recurentExtra}} {{country.currency}} / {{price.periodUnit}}
|
||||
<span ng-if="price.packagePayPeriod > 0">{{'shop.extra.FOR' | translate}} {{price.packagePayPeriod}} {{price.periodUnit}}</span>
|
||||
</div>
|
||||
<div class="services-price-recurrent">
|
||||
<span class="price-info-title">{{'shop.headers.SERVICE_RECURRENT' | translate}}</span>
|
||||
{{price.servicesExtra}} {{country.currency}} / {{price.periodUnit}}
|
||||
<span ng-if="price.servicesContractPeriod > 0">{{'shop.extra.FOR' | translate}} {{price.servicesContractPeriod}} {{price.periodUnit}}</span>
|
||||
{{'shop.headers.PRICE_EXTEND' | translate}} {{price.periodUnit}} (Max {{price.maxContractPeriod}} {{price.periodUnit}})
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="add-to-cart-btn" ng-click="addToCart()" class="btn btn-primary add-to-cart-btn">{{'shop.buttons.ADD_TO_CART' | translate}}</div>
|
||||
|
||||
<div id="shop-packages-details-cl" class="shop-packages-details-cl">
|
||||
<div>
|
||||
<div class="shop-package-label">{{'shop.headers.SOLD_BY' | translate}}:</div>
|
||||
<div class="shop-package-text">{{selectedPackage.commercialLead.name}}</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class="shop-package-label">{{'shop.headers.PHONE' | translate}}:</div>
|
||||
<div class="shop-package-text">{{selectedPackage.commercialLead.phone}}</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class="shop-package-label">{{'shop.headers.MAIL' | translate}}:</div>
|
||||
<div class="shop-package-text">{{selectedPackage.commercialLead.mail}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="back-to-shop-btn" class="back-btn-layer col-md-12">
|
||||
<a href="shop"><div class="btn btn-primary">{{'shop.buttons.BACK' | translate}}</div></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,15 @@
|
||||
<div id="shop-package-search">
|
||||
<input id="shop-package-serach-input"
|
||||
ng-model="searchString"
|
||||
type="text"
|
||||
ng-change="updateUrl()"
|
||||
ng-keypress="searchInPage($event)"
|
||||
class="shop-serach-input"/>
|
||||
<span id="shop-package-search-btn"
|
||||
ng-click="searchInPage($event)"
|
||||
class="glyphicon glyphicon-search"></span>
|
||||
<span id="shop-package-clear-btn"
|
||||
ng-click="clearSearch($event)"
|
||||
ng-if="searchString"
|
||||
class="glyphicon glyphicon-remove"></span>
|
||||
</div>
|
||||
@@ -0,0 +1,39 @@
|
||||
<div id="commercial-leads" class="commercial-leads-layer" class="col-md-12">
|
||||
<div class="comemrcial-lead btn btn-primary {{isComemrcialLeadSelected(commercialLead.idCommercialLead)}}"
|
||||
ng-click="selectCommercialLead(commercialLead)"
|
||||
ng-repeat="commercialLead in commercialLeads">
|
||||
{{commercialLead.commercialLeadName}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h3>
|
||||
{{'shop.headers.AVAILABLE_PACKAGES' | translate}} {{commercialLeadName}}
|
||||
<span ng-if="search" class="shop-packages-found"> ({{shopPackages.length}} {{'shop.headers.PACKAGES_FOUND' | translate}})</span>
|
||||
</h3>
|
||||
<div class="shop-packages-all">
|
||||
<div id="shop-package-{{shopPackage.idPackage}}" class="col-md-3" ng-repeat="shopPackage in shopPackages">
|
||||
<div class="shop-package-layer">
|
||||
<div class="shop-package-title">{{shopPackage.name}}</div>
|
||||
<div class="shop-package-reference">( {{shopPackage.reference}} )</div>
|
||||
|
||||
<div class="shop-package-extra">
|
||||
<div class="shop-package-country">
|
||||
<div class="shop-package-label">{{'shop.headers.SOLD_IN' | translate}} :</div>
|
||||
<div class="shop-package-text">
|
||||
{{shopPackage.country}} <span class="flag-icon flag-icon-{{shopPackage.countryCode}}"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<a id="shop-package-details-{{shopPackage.idPackage}}" href="shop?subModule=package-details&idPackage={{shopPackage.idPackage}}&idCommercialLead={{shopPackage.idCommercialLead}}">
|
||||
<div class="btn btn-primary shop-package-details-btn">
|
||||
{{'shop.buttons.DETAILS' | translate}}
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="alert alert-info" ng-if="!shopPackages.length">
|
||||
{{'shop.messages.NO_PACKAGES' | translate}}
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,24 @@
|
||||
<div class="row">
|
||||
<div class="col-md-12"
|
||||
id="web-shop-layer"
|
||||
ng-if="isSubmoduleVisible('shop')">
|
||||
<shop-package-search ng-controller="shopPackageSearchCtrl"></shop-package-search>
|
||||
<shop-packages ng-controller="shopPackagesCtrl" ng-init="getComemrcialLeads()"></shop-packages>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12"
|
||||
id="shop-package-details-layer"
|
||||
ng-if="isSubmoduleVisible('package-details')">
|
||||
<shop-package-details ng-controller="shopPackageDetailsCtrl" ng-init="getShopPackageDetails()"></shop-package-details>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12"
|
||||
id="shop-cart-layer"
|
||||
ng-if="isSubmoduleVisible('cart')">
|
||||
<shop-cart ng-controller="shopCartCtrl" ng-init="startOrderDetails()"></shop-cart>
|
||||
</div>
|
||||
</div>
|
||||
Reference in New Issue
Block a user