Skip to content
Code-Schnipsel Gruppen Projekte
Commit 6abf47cd erstellt von Henning Leutz's avatar Henning Leutz :martial_arts_uniform:
Dateien durchsuchen

refactor: Bestellablauf - >Controls weiter gemacht

Übergeordneter c08ace13
Keine zugehörigen Branchen gefunden
Keine zugehörigen Tags gefunden
Keine zugehörigen Merge Requests gefunden
werden angezeigt mit 386 Ergänzungen und 35 Löschungen
......@@ -71,9 +71,13 @@
</locale>
<locale name="exception.order.construct.needle.missing">
<de><![CDATA[Fehlender Eert für Bestellungs-Konstruktor [needle]]]></de>
<de><![CDATA[Fehlender Wert für Bestellungs-Konstruktor [needle]]]></de>
<en><![CDATA[Missing needle for order construct [needle]]]></en>
</locale>
<locale name="exception.order.is.not.finished">
<de><![CDATA[Die Bestellung wurde noch nicht zu ende geführt.]]></de>
<en><![CDATA[The order has not yet been completed.]]></en>
</locale>
<locale name="message.select.customer">
<de><![CDATA[Bitte wählen Sie einen Kunden aus.]]></de>
......@@ -152,6 +156,25 @@
<de><![CDATA[Überprüfen & bestellen]]></de>
<en><![CDATA[Checkout & order]]></en>
</locale>
<locale name="ordering.step.title.Finish">
<de><![CDATA[Fertig!]]></de>
<en><![CDATA[Done!]]></en>
</locale>
<locale name="ordering.step.title.Address.description">
<de><![CDATA[
Bitte wählen Sie eine Rechnungsadresse aus dem Adressbuch unten aus
oder geben Sie eine neue Rechnungsadresse ein.
]]></de>
<en><![CDATA[
Please select an invoice address from the address book below
or enter a new billing address.
]]></en>
</locale>
<locale name="ordering.step.title.Address.addButton">
<de><![CDATA[Neue Adresse hinzufügen]]></de>
<en><![CDATA[Add new address]]></en>
</locale>
</groups>
<groups name="quiqqer/order" datatype="js">
......
......@@ -232,6 +232,13 @@ abstract public function update($PermissionUser = null);
*/
abstract public function delete($PermissionUser = null);
/**
* Is the order posted / submitted
*
* @return bool
*/
abstract public function isPosted();
//endregion
//region getter
......@@ -426,7 +433,6 @@ public function hasDeliveryAddress()
return !empty($this->addressDelivery);
}
//endregion
//region setter
......
......@@ -32,6 +32,16 @@ public function getTitle($Locale = null)
);
}
/**
* Return the current order
*
* @return QUI\ERP\Order\OrderProcess
*/
public function getOrder()
{
return $this->getAttribute('Order');
}
/**
* Is the step valid?
*
......
.quiqqer-order-step-address-description {
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
float: left;
padding-bottom: 20px;
width: 100%;
}
.quiqqer-order-step-address-description-text {
float: left;
width: calc(100% - 200px);
}
.quiqqer-order-step-address-description-button {
float: right;
font-size: 14px;
line-height: 20px !important;
max-width: 200px;
padding: 10px !important;
text-transform: inherit !important;
}
.quiqqer-order-step-address-description-button span {
font-size: 14px;
}
/** Rechnungsadresse
================================================== */
.quiqqer-order-step-address-list-entry {
float: left;
margin-top: 20px;
width: calc(50% - 5px);
}
.quiqqer-order-step-address-list-entry:hover {
background: rgba(0, 0, 0, 0.1);
}
.quiqqer-order-step-address-list-entry:nth-child(odd) {
margin-right: 5px;
}
.quiqqer-order-step-address-list-entry:nth-child(even) {
margin-left: 5px;
}
.quiqqer-order-step-address-list-entry [type="radio"] {
float: right;
margin: 7px;
}
.quiqqer-order-step-address-list-entry header {
background: rgba(0, 0, 0, 0.1);
padding: 10px;
}
.quiqqer-order-step-address-list-entry address {
margin-bottom: 10px;
padding: 10px;
}
.quiqqer-order-step-address-list-entry-buttons {
padding: 0 10px 10px 0;
text-align: right;
}
.quiqqer-order-step-address-list-entry-buttons button {
font-size: 12px !important;
padding: 0 10px !important;
}
\ No newline at end of file
<section>
<section class="quiqqer-order-step-address">
<header>
<h1>{locale group="quiqqer/order" var="ordering.step.title.Address"}</h1>
</header>
<div class="quiqqer-order-step-address-description">
<div class="quiqqer-order-step-address-description-text">
{locale group="quiqqer/order" var="ordering.step.title.Address.description"}
</div>
<button class="quiqqer-order-step-address-description-button">
<span class="fa fa-plus"></span>
<span>{locale group="quiqqer/order" var="ordering.step.title.Address.addButton"}</span>
</button>
</div>
<form>
<div class="quiqqer-order-step-address-list">
{if $User->getId()}
{* Logged in user *}
{foreach $addresses as $Address}
<div class="quiqqer-order-step-address-list-entry">
<header>
<label>
<span class="fa fa-address-card-o"></span>
Rechnungsadresse
<input type="radio" name="address_invoice" value="{$Address->getId()}">
</label>
</header>
<address>
{$UserAddress->render()}
</address>
<div class="quiqqer-order-step-address-list-entry-buttons">
<button>
<span class="fa fa-edit"></span>
<span>Ändern</span>
</button>
<button>
<span class="fa fa-trash"></span>
<span>Löschen</span>
</button>
</div>
</div>
{/foreach}
{else}
{* Unregistered user*}
{/if}
</div>
</form>
</section>
\ No newline at end of file
......@@ -17,6 +17,19 @@
*/
class Address extends AbstractOrderingStep
{
/**
* Address constructor.
*
* @param array $attributes
*/
public function __construct($attributes = array())
{
parent::__construct($attributes);
$this->addCSSFile(dirname(__FILE__) . '/Address.css');
}
/**
* @return string
*/
......@@ -26,15 +39,42 @@ public function getBody()
$Orders = Handler::getInstance();
$Order = $Orders->getOrderInProcess($this->getAttribute('orderId'));
$Customer = $Order->getCustomer();
$Address = $Customer->getAddress();
/* @var $User QUI\Users\User */
$User = QUI::getUserBySession();
$UserAddress = null;
$addresses = array();
try {
$UserAddress = $User->getStandardAddress();
} catch (QUI\Exception $Exception) {
}
try {
$addresses = $User->getAddressList();
} catch (QUI\Exception $Exception) {
}
$Engine->assign(array(
'User' => $Order->getCustomer()
'User' => $User,
'UserAddress' => $UserAddress,
'addresses' => $addresses,
'Customer' => $Customer,
'Address' => $Address
));
return $Engine->fetch(dirname(__FILE__) . '/Address.html');
}
/**
*
*/
public function validate()
{
// TODO: Implement validate() method.
$User = QUI::getUserBySession();
}
}
......@@ -3,5 +3,5 @@
<h1>{locale group="quiqqer/order" var="ordering.step.title.Delivery"}</h1>
</header>
**Kommt bald, sollte in das Versandmodul**
</section>
\ No newline at end of file
Vielen Dank für Ihre Bestellung
\ No newline at end of file
<?php
/**
* This file contains QUI\ERP\Order\Controls\Finish
*/
namespace QUI\ERP\Order\Controls;
use QUI;
use QUI\ERP\Order\Handler;
/**
* Class Finish
*
* @package QUI\ERP\Order\Controls
*/
class Finish extends AbstractOrderingStep
{
/**
* @return string
*/
public function getBody()
{
$Engine = QUI::getTemplateManager()->getEngine();
$Orders = Handler::getInstance();
$Order = $Orders->getOrderInProcess($this->getAttribute('orderId'));
$Engine->assign(array(
'User' => $Order->getCustomer()
));
return $Engine->fetch(dirname(__FILE__) . '/Finish.html');
}
/**
* @throws QUI\ERP\Order\Exception
*/
public function validate()
{
$Order = $this->getOrder();
if ($Order->isPosted() === false) {
throw new QUI\Exception(array(
'quiqqer/order',
'exception.order.is.not.finished'
));
}
}
}
......@@ -6,35 +6,15 @@
{assign var=cssClass value="current"}
{/if}
<li class="{$cssClass}">
<span class="title">{$Step->getTitle()}</span>
<span class="fa fa-check-circle"></span>
<a href="{url site=$Site step=$step}">
<span class="title">{$Step->getTitle()}</span>
<span class="fa fa-check-circle"></span>
</a>
</li>
{if $CurrentStep == $Step}
{assign var=cssClass value=""}
{/if}
{/foreach}
{*
<li>
<span class="title">Rechnungsadresse</span>
<span class="fa fa-check-circle"></span>
</li>
<li>
<span class="title">Versand</span>
<span class="fa fa-check-circle"></span>
</li>
<li>
<span class="title">Zahlungsweise</span>
<span class="fa fa-check-circle"></span>
</li>
<li>
<span class="title">Überprüfen & bestellen</span>
<span class="fa fa-check-circle"></span>
</li>
<li>
<span class="title">Fertig</span>
<span class="fa fa-check-circle"></span>
</li>
*}
</ul>
</div>
......
......@@ -221,7 +221,8 @@ public function getOrder()
protected function getSteps()
{
$params = array(
'orderId' => $this->getOrder()->getId()
'orderId' => $this->getOrder()->getId(),
'Order' => $this->getOrder()
);
return array(
......@@ -229,7 +230,8 @@ protected function getSteps()
'address' => new Address($params),
'delivery' => new Delivery($params),
'payment' => new Payment($params),
'checkout' => new Checkout($params)
'checkout' => new Checkout($params),
'finish' => new Finish($params)
);
}
}
.quiqqer-order-step-payments-list {
display: inline-block;
width: 100%;
}
.quiqqer-order-step-payments form {
margin-top: 20px;
}
.quiqqer-order-step-payments-list-entry {
align-content: stretch;
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
clear: both;
display: flex;
display: -webkit-flex;
flex-direction: row;
-webkit-flex-direction: row;
-webkit-align-content: stretch;
position: relative;
width: 100%;
}
.quiqqer-order-step-payments-list-entry-select {
align-items: center;
display: flex;
flex: 1;
-webkit-flex: 1;
justify-content: center;
text-align: center;
width: 80px;
}
.quiqqer-order-step-payments-list-entry:hover .quiqqer-order-step-payments-list-entry-select {
background: rgba(0, 0, 0, 0.1);
}
.quiqqer-order-step-payments-list-entry-selected .quiqqer-order-step-payments-list-entry-select {
background: #75b947;
}
.quiqqer-order-step-payments-list-entry-icon {
float: left;
padding: 20px;
width: 25%;
}
.quiqqer-order-step-payments-list-entry-icon img {
max-width: 100%;
}
.quiqqer-order-step-payments-list-entry-text {
float: left;
padding: 20px;
width: calc(75% - 80px);
}
.quiqqer-order-step-payments-list-entry-text label {
font-size: 16px;
font-weight: bold;
}
.quiqqer-order-step-payments-list-entry-text-description {
font-size: 14px;
}
<section>
<section class="quiqqer-order-step-payments">
<header>
<h1>{locale group="quiqqer/order" var="ordering.step.title.Payment"}</h1>
</header>
<form>
<div class="quiqqer-order-step-payments-list">
{foreach $payments as $Payment}
<div class="quiqqer-order-step-payments-list-entry">
<div class="quiqqer-order-step-payments-list-entry-select">
<input id="payment-{$Payment->getId()}"
type="radio"
name="payment"
value="{$Payment->getId()}"
/>
</div>
<div class="quiqqer-order-step-payments-list-entry-icon">
<img src="{$Payment->getPaymentType()->getIcon()}"/>
</div>
<div class="quiqqer-order-step-payments-list-entry-text">
<label for="payment-{$Payment->getId()}">
{$Payment->getTitle()}
</label>
<div class="quiqqer-order-step-payments-list-entry-text-description">
{$Payment->getDescription()}
</div>
</div>
</div>
{/foreach}
</div>
</form>
</section>
\ No newline at end of file
......@@ -16,6 +16,18 @@
*/
class Payment extends AbstractOrderingStep
{
/**
* Payment constructor.
*
* @param array $attributes
*/
public function __construct($attributes = array())
{
parent::__construct($attributes);
$this->addCSSFile(dirname(__FILE__) . '/Payment.css');
}
/**
* @return string
*/
......@@ -25,8 +37,16 @@ public function getBody()
$Orders = Handler::getInstance();
$Order = $Orders->getOrderInProcess($this->getAttribute('orderId'));
$Customer = $Order->getCustomer();
$User = QUI::getUserBySession();
$Payments = QUI\ERP\Accounting\Payments\Payments::getInstance();
$payments = $Payments->getUserPayments($User);
$Engine->assign(array(
'User' => $Order->getCustomer()
'User' => $User,
'Customer' => $Customer,
'payments' => $payments
));
return $Engine->fetch(dirname(__FILE__) . '/Payment.html');
......
......@@ -99,8 +99,21 @@ public function delete($PermissionUser = null)
);
}
/**
* An order in process is never finished
*
* @return bool
*/
public function isPosted()
{
return false;
}
/**
* Create the order
*
* @param null|QUI\Interfaces\Users\User $PermissionUser
* @throws QUI\Permissions\Exception
*/
public function createOrder($PermissionUser = null)
{
......
0% Lade oder .
You are about to add 0 people to the discussion. Proceed with caution.
Bearbeitung dieser Nachricht zuerst beenden!
Bitte registrieren oder zum Kommentieren