Copia seguridad

This commit is contained in:
Juan Ferrer Toribio 2015-07-03 07:49:45 +02:00
parent b5ab9d7112
commit e81362c549
34 changed files with 921 additions and 696 deletions

View File

@ -17,17 +17,6 @@ Vn.Address = new Class
form.insertRow ();
}
,onIterChange: function (form)
{
// TODO: Implement one way binding in Vn.Param
if (form.get ('country_id') != this.country)
{
this.country = form.get ('country_id');
this.$('country').value = this.country;
}
}
,onOperationsDone: function ()
{
(new Htk.Toast ()).showMessage (_('AddressChangedSuccessfully'));

View File

@ -3,7 +3,8 @@
<vn-param id="address">
<vn-hash-link key="address"/>
</vn-param>
<db-form id="iter" on-status-changed="onStatusChange" on-iter-changed="onIterChange">
<db-form id="iter" on-status-changed="onStatusChange">
<db-param id="country" one-way="true" column="country_id"/>
<db-model id="model" updatable="true" on-operations-done="onOperationsDone">
SELECT a.id, a.name, a.consignee, a.city, a.zip_code, a.province_id, c.Id country_id
FROM address_view a
@ -50,8 +51,7 @@
</div>
<div class="form-group">
<label><t>Country</t></label>
<htk-combo>
<vn-param id="country"/>
<htk-combo param="country">
<db-model property="model">
SELECT Id, Pais FROM vn2008.Paises
ORDER BY Pais

View File

@ -85,11 +85,11 @@
<htk-text form="iter" column="name"/>
</p>
<p>
<htk-text form="iter" column="zip_code"/> -
<htk-text form="iter" column="zip_code"/>,
<htk-text form="iter" column="city"/>
</p>
<p>
<htk-text form="iter" column="province"/> -
<htk-text form="iter" column="province"/>,
<htk-text form="iter" column="country"/>
</p>
<div class="actions">

View File

@ -4,14 +4,14 @@
<div class="header">
<h1><t>ControlPanel</t></h1>
</div>
<htk-grid>
<htk-grid show-header="false">
<db-model>
SELECT image, name, description, link FROM link
ORDER BY name
</db-model>
<htk-column-image directory="link" subdir="full" column="image"/>
<htk-column-link title="_Module" column="name" target="\_blank" id="column-link"/>
<htk-column-text title="_Description" column="description"/>
<htk-column-link column="name" target="\_blank" id="column-link"/>
<htk-column-text column="description"/>
</htk-grid>
</div>
</div>

View File

@ -92,9 +92,9 @@
{
position: absolute;
z-index: 20;
top: 0em;
bottom: 0em;
right: 0em;
top: 0;
bottom: 0;
right: 0;
width: 17em;
background-color: white;
box-shadow: 0 0.2em 0.2em #AAA;
@ -127,10 +127,9 @@ button.basket:hover
max-height: 4em;
cursor: pointer;
}
.htk-realm img.selected,
.htk-realm img:hover
{
/* height: 4em; */
opacity: 0.85;
}
/* Types */
@ -139,36 +138,36 @@ button.basket:hover
{
position: absolute;
top: 6.8em;
bottom: 0em;
right: 0em;
left: 0em;
bottom: 0;
right: 0;
left: 0;
overflow: auto;
}
table.types
.types
{
width: 100%;
}
table.types > thead
.types > thead
{
display: none;
}
table.types > tbody > tr
.types > tbody > tr
{
border-top: none;
height: 2.2em;
}
table.types > tbody a
.types > tbody a
{
display: block;
padding: 0.3em 7%;
width: 88%;
height: 100%;
}
table.types tbody a:hover
.types tbody a:hover
{
background-color: #EEE;
}
table.types td.grid-message
.types td.grid-message
{
padding-top: 1em;
}
@ -215,25 +214,25 @@ table.types td.grid-message
/* List view */
table.items
.items
{
width: 100%;
}
.catalog div.header,
table.items > thead > tr,
.catalog div.box div.header,
.items > thead > tr,
.realms-bar
{
background-color: #777;
}
table.items > thead th:hover
.items > thead th:hover
{
background-color: #333;
}
table.items > tbody > tr
.items > tbody > tr
{
height: 6em;
}
table.items > tbody img
.items > tbody img
{
max-height: 5em;
max-width: 5em;

View File

@ -5,64 +5,32 @@ Vn.Checkout = new Class
,activate: function () {}
,onStatusChange: function (form)
{
// if (this.$('address').value == 0)
// form.insertRow ();
}
,onCancelClick: function ()
{
this.hash.set ({'form': 'ecomerce/orders'});
}
,onConfirmClick: function ()
{
var batch = new Sql.Batch ();
batch.addParam ('date', this.$('date'));
batch.addParam ('agency', this.$('agency'));
batch.addValue ('address', this.$('address'));
batch.addValue ('delivery', 1);
var sql = 'CALL order_new_beta (#date, #delivery, #agency, #address);';
this.conn.execQuery (sql, this.onOrderCreate.bind (this), batch);
}
,onOrderCreate: function (resultSet)
{
var orderId = resultSet.fetchValue ();
if (orderId)
{
Vn.Cookie.set ('order', orderId);
this.hash.set ({'form': 'ecomerce/catalog'});
}
else
(new Htk.Toast ()).showMessage (_('ErrorCreatingOrder'));
}
,onFieldChange: function ()
{
setTimeout (this.goNextStep.bind (this), 75);
}
,onAddressClick: function (e)
{
this.onFieldChange ();
}
,goNextStep: function ()
{
this.$('assistant').moveNext ();
}
,deliverySteps: ['delivery', 'date', 'address', 'agency', 'confirm-delivery']
,agencySteps: ['delivery', 'date', 'address', 'agency', 'confirm-agency']
,deliverySteps: ['delivery', 'date', 'address', null, 'confirm-delivery']
,pickupSteps: ['delivery', 'date', 'pickup', null, 'confirm-pickup']
,stepFunc: function (stepIndex)
{
var isDelivery = this.$('rg-delivery').value != 'PICKUP';
var steps = isDelivery ? this.deliverySteps : this.pickupSteps;
var steps;
var isDelivery;
switch (this.$('rg-delivery').value)
{
case 'AGENCY':
steps = this.agencySteps;
isDelivery = true;
break;
case 'DELIVERY':
steps = this.deliverySteps;
isDelivery = true;
break;
case 'PICKUP':
default:
steps = this.pickupSteps;
isDelivery = false;
break;
}
var stepId = steps[stepIndex];
if (stepId)
@ -80,226 +48,72 @@ Vn.Checkout = new Class
else
return null;
}
});
Htk.Assitant = new Class
({
Extends: Vn.Object
,Tag: 'htk-assistant'
,Properties:
,onDefaults: function (i)
{
stepCount:
{
type: Number
,set: function (x)
{
this._stepCount = x;
if (x > 0)
this.setStep (0);
else
this.setStep (-1);
}
,get: function ()
{
return this._stepCount;
}
},
step:
{
type: Number
,set: function (x)
{
this.setStep (x);
}
,get: function ()
{
return this._stepIndex;
}
},
stepFunc:
{
type: Function
,set: function (x)
{
this._stepFunc = x;
this.setStep (this._stepIndex);
}
,get: function ()
{
return this._stepFunc;
}
},
node:
{
type: Object
,set: function (x)
{
x.className = 'htk-assistant';
}
},
}
,_stepNode: null
,_stepIndex: -1
,_stepCount: 0
,_stepFunc: null
,setStep: function (stepIndex)
{
if (!(stepIndex >= -1 && stepIndex < this.stepCount))
if (!i.ready)
return;
if (this._stepFunc && stepIndex != -1)
{
var stepNode = this._stepFunc (stepIndex);
if (stepNode)
{
if (this._stepNode)
this._stepNode.style.display = 'none';
this._stepNode = stepNode;
stepNode.style.display = 'block';
this._setStepIndex (stepIndex);
this.lockAssistant = true;
this.$('rg-delivery').value = i.get ('delivery_method');
this.$('date').value = new Date ();
this.$('agency').value = i.get ('agency_id');
this.$('address').value = i.get ('address_id');
this.lockAssistant = false;
}
else if (this._stepIndex < stepIndex)
this.setStep (stepIndex + 1);
else
this.setStep (stepIndex - 1);
,onFieldChange: function ()
{
if (!this.lockAssistant)
setTimeout (this.goNextStep.bind (this), 75);
}
,addressRenderer: function (builder, index)
{
builder.$('address').addEventListener ('click',
this.onAddressClick.bind (this, index));
}
,onAddressClick: function (index)
{
this.$('address-form').row = index;
this.goNextStep ();
}
,goNextStep: function ()
{
this.$('assistant').moveNext ();
}
,onConfirmClick: function ()
{
var batch = new Sql.Batch ();
batch.addParam ('date', this.$('date'));
batch.addParam ('delivery', this.$('rg-delivery'));
batch.addParam ('agency', this.$('agency'));
batch.addParam ('address', this.$('address'));
var sql = 'CALL order_new_beta (#date, #delivery, #agency, #address);';
this.conn.execQuery (sql, this.onOrderCreate.bind (this), batch);
}
,onOrderCreate: function (resultSet)
{
var orderId = resultSet.fetchValue ();
if (orderId)
{
Vn.Cookie.set ('order', orderId);
this.hash.set ({'form': 'ecomerce/catalog'});
(new Htk.Toast ()).showMessage (_('OrderStarted'));
}
else
this._setStepIndex (stepIndex);
(new Htk.Toast ()).showMessage (_('ErrorCreatingOrder'));
}
,_setStepIndex: function (stepIndex)
,onCancelClick: function ()
{
this._stepIndex = stepIndex;
this.signalEmit ('step-change', stepIndex);
}
,movePrevious: function ()
{
this.setStep (this._stepIndex - 1);
}
,moveNext: function ()
{
this.setStep (this._stepIndex + 1);
}
});
Htk.AssitantBar = new Class
({
Extends: Htk.Widget
,Tag: 'htk-assistant-bar'
,Properties:
{
assistant:
{
type: Htk.Assitant
,set: function (x)
{
this.link ({_assistant: x}, {'step-change': this.onStepChange});
var stepCount = x.stepCount;
var steps = this._steps;
Vn.Node.removeChilds (steps);
steps.style.width = (stepCount * 1.3) + 'em';
for (var i = 0; i < stepCount; i++)
{
var img = document.createElement ('img');
img.src = 'image/step.svg';
img.addEventListener ('click', this.setStep.bind (this, i));
steps.appendChild (img);
}
this.onStepChange ();
}
,get: function ()
{
return this._assistant;
}
}
}
,_assistant: null
,_stepIndex: -1
,initialize: function (props)
{
this.parent (props);
var bar = this.createElement ('div');
bar.className = 'htk-assistant-bar';
var previousButton = document.createElement ('img');
previousButton.src = 'image/go-previous.svg';
previousButton.className = 'previous';
previousButton.addEventListener ('click', this.movePrevious.bind (this));
bar.appendChild (previousButton);
var steps = document.createElement ('div');
bar.appendChild (steps);
var nextButton = document.createElement ('img');
nextButton.src = 'image/go-next.svg';
nextButton.className = 'next';
nextButton.addEventListener ('click', this.moveNext.bind (this));
bar.appendChild (nextButton);
this._steps = steps;
this._previousButton = previousButton;
this._nextButton = nextButton;
}
,movePrevious: function ()
{
if (this._assistant)
this._assistant.movePrevious ();
}
,moveNext: function ()
{
if (this._assistant)
this._assistant.moveNext ();
}
,setStep: function (stepIndex)
{
if (this._assistant)
this._assistant.setStep (stepIndex);
}
,onStepChange: function ()
{
if (this._assistant)
{
var stepIndex = this._assistant.step;
var stepCount = this._assistant.stepCount;
}
else
{
var stepIndex = -1;
var stepCount = 0;
}
if (this._stepIndex != -1)
this._steps.childNodes[this._stepIndex].src = 'image/step.svg';
this._stepIndex = stepIndex;
if (stepIndex != -1)
this._steps.childNodes[stepIndex].src = 'image/step-cur.svg';
var visibility = stepIndex <= 0 ? 'hidden' : 'visible';
this._previousButton.style.visibility = visibility;
var visibility = stepIndex >= stepCount - 1 ? 'hidden' : 'visible';
this._nextButton.style.visibility = visibility;
this.hash.set ({'form': 'ecomerce/orders'});
}
});

View File

@ -1,75 +1,58 @@
.checkout
{
padding: 1em;
}
.checkout
{
max-width: 50em;
margin: 0 auto;
}
table.form td.label
{
width: 30%;
}
/* Checkout */
.checkout .form
{
max-width: 40em;
padding: 3em;
}
/* Delivery method */
ul.delivery
{
list-style-type: none;
margin: 0;
padding-top: 0.8em;
padding-left: 1em;
}
ul.delivery > li
{
margin: 0.2em 0;
}
ul.delivery input
{
margin-right: 0.4em;
}
/* Step */
.answers button,
.answers span,
.answers select,
.answers p,
.radio > div
{
font-size: 1.3em;
font-size: 1.4em;
}
.answers select
{
min-width: 8em;
display: block;
margin: 0 auto;
font-size: 1.6em;
height: 1.8em;
}
.answers p
{
margin: 0.3em 0;
}
.target
{
max-width: 24em;
max-width: 28em;
margin: 0 auto;
}
.address
{
border-radius: 0.1em;
padding: 1em;
padding: 0.6em 1.4em;
}
.address:hover
{
cursor: pointer;
background-color: rgba(1, 1, 1, 0.05);
}
.address > p
.address p.consignee
{
margin: 0.2em;
font-weight: bold;
}
.radio
{
max-width: 15em;
max-width: 20em;
margin: 0 auto;
}
.radio > div
@ -86,86 +69,14 @@ ul.delivery input
width: inherit;
max-width: 24em;
margin: 0 auto;
box-shadow: 0 0.1em 0.3em #ccc;
}
.thin-calendar thead > tr,
.thin-calendar tfoot > tr
{
background-color: transparent;
color: inherit;
}
.thin-calendar .button:hover
.thin-calendar tr > th
{
color: white;
}
.thin-calendar td.highlight
{
background-color: #009688;
color: white;
}
.htk-assistant select
{
width: 10em;
float: left;
}
.htk-assistant button
{
float: right;
}
/* Assistant */
.htk-assistant > div
{
display: none;
margin-top: 0;
margin-bottom: 3em;
}
.htk-assistant > div > h2
{
text-align: center;
font-weight: normal;
font-size: 1.6em;
margin: 0.5em;
margin-bottom: 1em;
}
.htk-assistant *
{
color: #555;
}
/* Assistant bar */
.htk-assistant-bar
{
margin: 0.5em auto;
max-width: 30em;
position: relative;
}
.htk-assistant-bar img
{
cursor: pointer;
}
.htk-assistant-bar > img
{
position: absolute;
width: 1.8em;
top: 0;
}
.htk-assistant-bar > img.previous
{
left: 0;
}
.htk-assistant-bar > img.next
{
right: 0;
}
.htk-assistant-bar > div
{
margin: 0 auto;
padding-top: 0.2em;
}
.htk-assistant-bar > div > img
{
width: 1.3em;
}

View File

@ -1,7 +1,6 @@
<vn>
<vn-group>
<vn-param id="date"/>
<vn-param id="address"/>
<vn-param id="agency"/>
<vn-param id="order-id">
<vn-hash-link key="order"/>
@ -15,12 +14,14 @@
</sql-batch>
</db-model>
</db-form>
<db-form id="defaults">
<db-form id="defaults" on-iter-changed="onDefaults">
<db-model>
SELECT address_id, agency_id, delivery_method_id
SELECT address_id, agency_id, delivery_method
FROM order_defaults_view
</db-model>
</db-form>
<db-form id="address-form">
<db-param column="id" id="address"/>
<db-model id="addresses">
SELECT a.id, a.consignee, p.name province, a.zip_code, a.city, a.name, a.active, c.Pais country
FROM address_view a
@ -28,6 +29,7 @@
JOIN vn2008.Paises c ON c.Id = p.Paises_Id
WHERE active != FALSE
</db-model>
</db-form>
</vn-group>
<div id="form" class="checkout">
<div class="box">
@ -47,22 +49,6 @@
step-func="stepFunc"
node="assistant-node"/>
<div class="htk-assistant" id="assistant-node">
<div id="delivery-step">
<h2><t>DeliveryOrPickupQuestion</t></h2>
<div class="answers radio">
<htk-radio-group
id="rg-delivery"
on-changed="onFieldChange"/>
<div>
<htk-radio radio-group="rg-delivery" value="DELIVERY"/>
<label><t>Receive</t></label>
</div>
<div>
<htk-radio radio-group="rg-delivery" value="PICKUP"/>
<label><t>Pickup</t></label>
</div>
</div>
</div>
<div id="date-step">
<h2 id="date-question"><t>OrderDateDeliveryQuestion</t></h2>
<div class="answers">
@ -73,31 +59,43 @@
on-changed="onFieldChange"/>
</div>
</div>
<div id="delivery-step">
<h2><t>DeliveryOrPickupQuestion</t></h2>
<div class="answers radio">
<htk-radio-group
id="rg-delivery"
on-changed="onFieldChange"/>
<div>
<htk-radio radio-group="rg-delivery" value="AGENCY"/>
<label><t>ReceiveThroughtAgency</t></label>
</div>
<div>
<htk-radio radio-group="rg-delivery" value="DELIVERY"/>
<label><t>ReceiveThroughtRoute</t></label>
</div>
<div>
<htk-radio radio-group="rg-delivery" value="PICKUP"/>
<label><t>PickupInStore</t></label>
</div>
</div>
</div>
<div id="address-step">
<h2><t>AddressQuestion</t></h2>
<htk-repeater model="addresses" form-id="iter">
<div class="answers target address" on-click="onAddressClick">
<h2>
<htk-repeater model="addresses" form-id="iter" renderer="addressRenderer">
<div class="answers target address" id="address">
<p class="consignee">
<htk-text form="iter" column="consignee"/>
</h2>
</p>
<p>
<htk-text form="iter" column="name"/>
</p>
<p>
<htk-text form="iter" column="zip_code"/> -
<htk-text form="iter" column="city"/>
</p>
<p>
<htk-text form="iter" column="province"/> -
<htk-text form="iter" column="country"/>
</p>
</div>
</htk-repeater>
</div>
<div id="agency-step">
<h2><t>AgencyQuestion</t></h2>
<div class="answers target">
<htk-combo param="agency" on-changed="onFieldChange">
<htk-combo id="agency-combo" param="agency" on-changed="onFieldChange">
<db-model property="model" id="agencies">
SELECT a.Id_Agencia, a.description
FROM vn2008.Agencias a
@ -107,18 +105,14 @@
ORDER BY a.description
</db-model>
</htk-combo>
<button class="thin" on-click="onFieldChange">
<t>NEXT</t>
</button>
<div class="clear"/>
</div>
</div>
<div id="pickup-step">
<h2><t>PickupWarehouseQuestion</t></h2>
<div class="answers target">
<htk-combo param="agency" on-changed="onFieldChange">
<htk-combo id="warehouse-combo" param="agency" on-changed="onFieldChange">
<db-model property="model" id="warehouses">
SELECT a.Id_Agencia, SUBSTR(a.description, 5)
SELECT a.Id_Agencia, SUBSTR(a.description, 5) description
FROM vn2008.Agencias a
JOIN vn2008.Vistas v ON a.Vista = v.vista_id
WHERE a.web != FALSE
@ -126,8 +120,24 @@
ORDER BY a.description
</db-model>
</htk-combo>
<button class="thin" on-click="onFieldChange">
<t>NEXT</t>
</div>
</div>
<div id="confirm-agency-step" class="confirm">
<h2><t>ConfirmToAccessCatalog</t></h2>
<div class="answers target">
<p>
<t>Arrival</t>
<htk-text format="_%A, %e of %B" param="date"/>
</p>
<p>
<htk-text form="address-form" column="name"/>
</p>
<p>
<t>Agency</t>
<htk-text form="agency-combo" column="description"/>
</p>
<button class="thin" on-click="onConfirmClick">
<t>CONFIRM</t>
</button>
<div class="clear"/>
</div>
@ -136,13 +146,14 @@
<h2><t>ConfirmToAccessCatalog</t></h2>
<div class="answers target">
<p>
<t>ArrivalOf</t> <htk-text format="_%A, %e of %B" param="date"/>
<t>Arrival</t>
<htk-text format="_%A, %e of %B" param="date"/>
</p>
<p>
<t>Agency</t> <htk-text param="agency"/>
<htk-text form="address-form" column="name"/>
</p>
<p>
<htk-text param="address"/>
<t>ReceiveThroughtRoute</t>
</p>
<button class="thin" on-click="onConfirmClick">
<t>CONFIRM</t>
@ -154,10 +165,12 @@
<h2><t>ConfirmToAccessCatalog</t></h2>
<div class="answers target">
<p>
<t>PickupOf</t> <htk-text format="_%A, %e of %B" param="date"/>
<t>Pickup</t>
<htk-text format="_%A, %e of %B" param="date"/>
</p>
<p>
<t>Warehouse</t> <htk-text param="agency"/>
<t>Warehouse</t>
<htk-text form="warehouse-combo" column="description"/>
</p>
<button class="thin" on-click="onConfirmClick">
<t>CONFIRM</t>

View File

@ -5,7 +5,6 @@ Vn.Orders = new Class
,activate: function ()
{
this.$('ticket-pay').renderer = this.payRenderer;
this.$('balance-amount').conditionalFunc = this.balanceConditionalFunc;
this.payPopup = new Htk.Popup ();

View File

@ -1,11 +1,15 @@
.orders
{
padding: 1em;
min-width: 55em;
}
.orders .box
{
max-width: 70em;
max-width: 45em;
}
.orders .box .header,
.balance-grid > thead > tr
{
background-color: #3F51B6;
}
.orders .htk-grid tbody tr
{
@ -51,6 +55,11 @@
color: white;
padding: 0.3em;
}
.balance-info
{
height: 1em;
cursor: pointer;
}
.positive-balance
{
background-color: #EF5350;

View File

@ -2,35 +2,35 @@
<div id="form" class="orders">
<div class="box">
<div class="header">
<h1><t>StartedOrdersDesc</t></h1>
<h1><t>OpenOrders</t></h1>
<div class="action-bar">
<button on-click="onStartClick">
<img src="image/dark/order.svg" alt=""/>
<t>StartOrder</t>
</button>
</div>
<div class="clear"/>
</div>
<div>
<htk-grid>
<htk-grid show-header="false">
<db-model updatable="true">
SELECT o.id, date_send, Agencia
FROM order_view o
JOIN vn2008.Agencias a ON o.type_id = a.Id_Agencia
LEFT JOIN vn2008.Agencias a ON o.type_id = a.Id_Agencia
</db-model>
<htk-column-text column="id"/>
<htk-column-date column="date_send" format="%A, %e of %B"/>
<htk-column-button
column="id"
image="image/edit.svg"
tip="_ContinueOrder"
on-clicked="onContinueClick"/>
<htk-column-spin title="_OrderNumber" column="id"/>
<htk-column-date title="_DateExit" column="date_send"/>
<htk-column-text title="_SendMethod" column="Agencia"/>
</htk-grid>
</div>
</div>
<div class="box confirmed">
<div class="header">
<h1><t>ConfirmedOrdersDesc</t></h1>
<h1><t>ConfirmedOrders</t></h1>
<div class="action-bar">
<div id="balance">
<t>PendingBalance:</t>
@ -43,27 +43,21 @@
<img src="image/dark/pay.svg" alt="_MakePayment"/>
</button>
</div>
<div class="clear"/>
</div>
<div>
<htk-grid>
<htk-grid show-header="false">
<db-model id="tickets">
CALL ticket_list ();
</db-model>
<htk-column-date column="date" format="%A, %e of %B"/>
<htk-column-text title="_SendMethod" column="type"/>
<htk-column-spin column="total" unit="€" digits="2"/>
<htk-column-button
column="ticket_id"
image="image/show.svg"
tip="_SeeOrder"
on-clicked="onShowClick"/>
<htk-column-spin title="_TicketNumber" column="ticket_id"/>
<htk-column-date title="_DateExit" column="date"/>
<htk-column-text title="_SendMethod" column="type"/>
<htk-column-text title="_SentAddress" column="consignee"/>
<htk-column-spin title="_TotalWithVAT" column="total" unit="€" digits="2"/>
<htk-column-button
id="ticket-pay"
image="image/pay.svg"
tip="_PayOrder"
on-clicked="onTicketPayClick"/>
</htk-grid>
</div>
<form method="post" id="tpv-form">
@ -81,7 +75,7 @@
</div>
</div>
<div id="balance-popup" class="balance-popup">
<htk-grid class="balance-grid" updatable="false">
<htk-grid class="balance-grid" show-header="false">
<db-model id="balance">
CALL customer_debt ();
</db-model>

View File

@ -11,7 +11,7 @@
}
@media screen and (min-device-width: 1850px)
{
* { font-size: 11pt; }
* { font-size: 12pt; }
}
/* Global */
@ -23,7 +23,7 @@
}
body
{
margin: 0px;
margin: 0;
}
body,
label,
@ -88,30 +88,49 @@ h2
}
p
{
margin: 0;
margin-top: 16px;
margin-bottom: 16px;
margin: 0.8em 0;
}
/* Inputs */
input,
input[type=text],
input[type=password],
input[type=file],
input[type=number],
textarea,
select
{
border: 1px solid #CCD;
margin: 0.2em;
padding: 0.3em;
border-radius: 0.1em;
box-shadow: 0 0.1em 0.1em #CCC;
}
input[type=text],
input[type=password],
input[type=file],
input[type=number],
textarea
{
padding: 0.3em;
}
select
{
background-color: white;
cursor: pointer;
padding: 0.4em;
padding-top: 0.2em;
font-size: 1.1em;
height: 1.8em;
}
option
{
padding: 0.3em;
border-width: 0;
font-weight: normal;
font-size: 1em;
}
select,
option
{
cursor: pointer;
}
input[type=text],
input[type=password]
@ -134,6 +153,8 @@ input[type=checkbox],
input[type=radio]
{
cursor: pointer;
margin: 0.2em;
padding: 0.3em;
width: 0.8em;
height: 0.8em;
}
@ -220,60 +241,61 @@ img.editable
/* Float */
div.clear
.clear
{
clear: both;
}
/* Box */
div.box
.box
{
background-color: white;
margin: 0 auto;
border-radius: 0.1em;
box-shadow: 0 0.2em 0.2em #CCC;
}
div.box .header
.box .header
{
padding: 0.6em 0.8em;
margin: 0;
color: white;
background-color: #009688;
color: white;
}
div.box .header h1
.box .header > h1
{
color: white;
text-align: left;
font-size: 1.6em;
line-height: 2em;
font-weight: normal;
display: inline;
}
div.box .body
.box .body
{
padding: 2em;
}
/* Form */
div.form
.form
{
margin: 0 auto;
}
div.form-group
.form-group
{
padding: 0.4em;
}
div.form-group > label
.form-group > label
{
display: block;
margin-bottom: 0.5em;
}
div.form-group > input[type=text],
div.form-group > input[type=password],
div.form-group > select,
div.form-group > textarea
.form-group > input[type=text],
.form-group > input[type=password],
.form-group > select,
.form-group > textarea
{
margin: 0;
width: 100%;
@ -281,32 +303,30 @@ div.form-group > textarea
/* Action bar */
div.action-bar
.action-bar
{
float: right;
padding: 0;
margin-top: 0.3em;
background-color: #009688;
}
div.action-bar > *
.action-bar > *
{
float: left;
padding: 0.4em;
}
div.action-bar > button
.action-bar > button
{
border-left: 1px solid white;
background-color: #009688;
}
div.action-bar > button:first-child
.action-bar > button:first-child
{
border-left: none;
}
div.action-bar > button:hover
.action-bar > button:hover
{
background-color: #076;
background-color: rgba(1, 1, 1, 0.2);
}
div.action-bar > button > img
.action-bar > button > img
{
vertical-align: middle;
margin-right: 0.4em;
@ -340,90 +360,95 @@ img.icon
/* Grid */
table.htk-grid
.htk-grid
{
margin: auto;
border-collapse: collapse;
text-align: center;
}
table.htk-grid thead tr,
table.htk-grid tfoot tr
.htk-grid > thead > tr,
.htk-grid > tfoot > tr
{
background-color: #009688;
color: white;
vertical-align: middle;
text-align: center;
height: 3em;
}
table.htk-grid thead th
.htk-grid > thead th
{
color: white;
cursor: pointer;
font-weight: normal;
padding: 0 0.4em;
}
table.htk-grid thead th:hover
.htk-grid > thead th:hover
{
background-color: #076;
background-color: rgba(1, 1, 1, 0.2);
}
table.htk-grid tr
.htk-grid tr
{
height: 3.5em;
}
table.htk-grid tfoot a,
table.htk-grid thead a
.htk-grid > tfoot a,
.htk-grid > thead a
{
color: black;
}
table.htk-grid tr.pair-row
.htk-grid tr.pair-row
{
background-color: transparent;
}
td.grid-message
.htk-grid .message
{
height: 5em;
}
td.grid-message img
.htk-grid .message img
{
vertical-align: middle;
padding: 0.8em;
height: 1.8em;
}
table.htk-grid tbody tr
.htk-grid > tbody tr
{
border-top: 1px solid #DDD;
}
table.htk-grid tbody tr:first-child
.htk-grid > tbody tr:first-child
{
border-top: none;
}
table.htk-grid tbody td
.htk-grid > tbody td
{
padding-right: 0.7em;
padding-left: 0.3em;
}
table.htk-grid tbody td:first-child,
table.htk-grid thead th:first-child
.htk-grid > tbody td:first-child,
.htk-grid > thead th:first-child
{
padding-left: 1em;
}
table.htk-grid tbody td:last-child,
table.htk-grid thead th:last-child
.htk-grid > tbody td:last-child,
.htk-grid > thead th:last-child
{
padding-right: 1em;
}
input.cell-spin
.htk-grid .cell-spin
{
width: 2.5em;
text-align: right;
}
button.cell-button
.htk-grid .cell-button
{
margin: 0;
padding: 0;
padding: 0.5em;
border: none;
background-color: transparent;
border-radius: 0.1em;
}
button.cell-button img
.htk-grid .cell-button:hover
{
background-color: rgba(1, 1, 1, 0.1);
}
.htk-grid .cell-button img
{
height: 1.5em;
}
@ -544,12 +569,10 @@ button.cell-button img
{
background-color: #BFB;
}
.htk-toast.warning
{
background-color: #FFB;
}
.htk-toast.error
{
background-color: #FBB;
@ -625,3 +648,68 @@ button.cell-button img
margin-right: 0.5em;
}
/* Assistant */
.htk-assistant > div
{
display: none;
margin-top: 1em;
margin-bottom: 4em;
}
.htk-assistant > div > h2
{
text-align: center;
font-style: italic;
font-weight: normal;
font-size: 1.5em;
margin: 0.5em;
margin-bottom: 1em;
}
.htk-assistant *
{
color: #555;
}
/* Assistant bar */
.htk-assistant-bar
{
margin: 0.5em auto;
max-width: 30em;
position: relative;
}
.htk-assistant-bar img
{
cursor: pointer;
}
.htk-assistant-bar > img
{
position: absolute;
width: 1.8em;
top: 0;
padding: 0.3em;
border-radius: 0.1em;
}
.htk-assistant-bar > img:hover
{
background-color: rgba(1,1,1,0.1);
}
.htk-assistant-bar > img.previous
{
left: 0;
}
.htk-assistant-bar > img.next
{
right: 0;
}
.htk-assistant-bar > div
{
margin: 0 auto;
padding-top: 0.2em;
}
.htk-assistant-bar > div > img
{
padding: 0.3em 0.2em;
width: 1.3em;
}

View File

@ -2,6 +2,7 @@
Db.Form = new Class
({
Extends: Vn.Object
,Implements: Db.Iterator
,Tag: 'db-form'
,Child: 'model'
,Properties:
@ -100,113 +101,5 @@ Db.Form = new Class
if (row == this._row)
this.iterChanged ();
}
,refresh: function ()
{
if (this._model)
this._model.refresh ();
}
/**
* Emits the 'iter-changed' signal on the form.
**/
,iterChanged: function ()
{
this.signalEmit ('iter-changed');
}
/**
* Get the index of the column from its name.
*
* @param {String} columnName The column name
* @return {integer} The column index or -1 if column not exists
**/
,getColumnIndex: function (columnName)
{
if (this._model)
return this._model.getColumnIndex (columnName);
return -1;
}
,insertRow: function ()
{
if (this._model)
this.row = this._model.insertRow ();
}
,performOperations: function ()
{
if (this._model)
this._model.performOperations ();
}
/**
* Removes the current row.
**/
,deleteRow: function ()
{
if (this._row >= 0)
this._model.deleteRow (this._row);
}
/**
* Gets a value from the form.
*
* @param {String} columnName The column name
* @return {Object} The value
**/
,get: function (columnName)
{
return this._model.get (this._row, columnName);
}
/**
* Sets a value on the form.
*
* @param {String} columnName The column name
* @param {Object} value The new value
**/
,set: function (columnName, value)
{
return this._model.set (this._row, columnName, value);
}
/**
* Gets a value from the form using the column index.
*
* @param {String} columnName The column index
* @return {Object} The value
**/
,getByIndex: function (column)
{
return this._model.getByIndex (this._row, column);
}
/**
* Sets a value on the form using the column index.
*
* @param {String} columnName The column index
* @param {Object} value The new value
**/
,setByIndex: function (column, value)
{
return this._model.setByIndex (this._row, column, value);
}
/**
* Gets a param from the form.
*
* @param {String} columnName The column name
* @return {Db.Param} The new parameter
**/
,getParam: function (columnName)
{
return new Db.Param
({
form: this
,column: columnName
});
}
});

View File

@ -0,0 +1,147 @@
Db.Iterator = new Class
({
Properties:
{
/**
* The model associated to this form.
**/
model:
{
type: Db.Model
},
/**
* The row where the form positioned, has -1 if the row is unselected.
**/
row:
{
type: Number
},
/**
* The number of rows in the form.
**/
numRows:
{
type: Number
},
/**
* Checks if the form data is ready.
**/
ready:
{
type: Boolean
}
}
,_model: null
,_row: -1
,refresh: function ()
{
if (this._model)
this._model.refresh ();
}
/**
* Emits the 'iter-changed' signal on the form.
**/
,iterChanged: function ()
{
this.signalEmit ('iter-changed');
}
/**
* Get the index of the column from its name.
*
* @param {String} columnName The column name
* @return {integer} The column index or -1 if column not exists
**/
,getColumnIndex: function (columnName)
{
if (this._model)
return this._model.getColumnIndex (columnName);
return -1;
}
,insertRow: function ()
{
if (this._model)
this.row = this._model.insertRow ();
}
,performOperations: function ()
{
if (this._model)
this._model.performOperations ();
}
/**
* Removes the current row.
**/
,deleteRow: function ()
{
if (this._row >= 0)
this._model.deleteRow (this._row);
}
/**
* Gets a value from the form.
*
* @param {String} columnName The column name
* @return {Object} The value
**/
,get: function (columnName)
{
return this._model.get (this._row, columnName);
}
/**
* Sets a value on the form.
*
* @param {String} columnName The column name
* @param {Object} value The new value
**/
,set: function (columnName, value)
{
return this._model.set (this._row, columnName, value);
}
/**
* Gets a value from the form using the column index.
*
* @param {String} columnName The column index
* @return {Object} The value
**/
,getByIndex: function (column)
{
return this._model.getByIndex (this._row, column);
}
/**
* Sets a value on the form using the column index.
*
* @param {String} columnName The column index
* @param {Object} value The new value
**/
,setByIndex: function (column, value)
{
return this._model.setByIndex (this._row, column, value);
}
/**
* Gets a param from the form.
*
* @param {String} columnName The column name
* @return {Db.Param} The new parameter
**/
,getParam: function (columnName)
{
return new Db.Param
({
form: this
,column: columnName
});
}
});

View File

@ -8,6 +8,7 @@ Vn\Hedera\Js::includeLib ('db'
,'result'
,'result-set'
,'model'
,'iterator'
,'form'
,'param'
,'calc'

View File

@ -418,7 +418,7 @@ Db.Model.implement
&& this.tables[tableIndex].pks.length > 0;
if (!tableUpdatable)
console.warn ("DbModel: Table %s is not updatable",
console.warn ("Db.Model: Table %s is not updatable",
this.tables[tableIndex].name);
return tableUpdatable;

View File

@ -41,13 +41,31 @@ Db.Param = new Class
{
return this._form;
}
},
/**
* Determines whether the link to the form is unidirectional, ie, a
* change in the form updates the parameter but not vice versa.
**/
oneWay:
{
type: Boolean
,set: function (x)
{
this._oneWay = x;
}
,get: function ()
{
return this._oneWay;
}
}
}
,_columnName: null
,_form: null
,formLock: false
,columnIndex: -1
,_formLock: false
,_columnIndex: -1
,_oneWay: false
,_formValue: null
,initialize: function (props)
{
@ -67,25 +85,33 @@ Db.Param = new Class
,onFormChange: function ()
{
if (this._columnName != null)
this.columnIndex = this._form.getColumnIndex (this._columnName);
this._columnIndex = this._form.getColumnIndex (this._columnName);
}
,onIterChange: function ()
{
this.formLock = true;
this._formLock = true;
if (this.columnIndex != -1)
this.value = this._form.getByIndex (this.columnIndex);
var formValue;
if (this._columnIndex != -1)
formValue = this._form.getByIndex (this._columnIndex);
else
this.value = undefined;
formValue = null;
this.formLock = false;
if (formValue != this._formValue)
{
this.value = formValue;
this._formValue = formValue;
}
this._formLock = false;
}
,onChange: function ()
{
if (!this.formLock && this.columnIndex != -1)
this._form.setByIndex (this.columnIndex, this._value);
if (!this._formLock && this._columnIndex != -1 && !this.oneWay)
this._form.setByIndex (this._columnIndex, this._value);
}
});

View File

@ -0,0 +1,116 @@
Htk.AssitantBar = new Class
({
Extends: Htk.Widget
,Tag: 'htk-assistant-bar'
,Properties:
{
assistant:
{
type: Htk.Assistant
,set: function (x)
{
this.link ({_assistant: x}, {'step-change': this.onStepChange});
var stepCount = x.stepCount;
var steps = this._steps;
Vn.Node.removeChilds (steps);
steps.style.width = (stepCount * 1.7) + 'em';
for (var i = 0; i < stepCount; i++)
{
var img = document.createElement ('img');
img.src = 'image/step.svg';
img.addEventListener ('click', this.setStep.bind (this, i));
steps.appendChild (img);
}
this.onStepChange ();
}
,get: function ()
{
return this._assistant;
}
}
}
,_assistant: null
,_stepIndex: -1
,initialize: function (props)
{
this.parent (props);
var bar = this.createElement ('div');
bar.className = 'htk-assistant-bar';
var previousButton = document.createElement ('img');
previousButton.src = 'image/go-previous.svg';
previousButton.className = 'previous';
previousButton.title = _('Previous');
previousButton.addEventListener ('click', this.movePrevious.bind (this));
bar.appendChild (previousButton);
var steps = document.createElement ('div');
bar.appendChild (steps);
var nextButton = document.createElement ('img');
nextButton.src = 'image/go-next.svg';
nextButton.className = 'next';
nextButton.title = _('Next');
nextButton.addEventListener ('click', this.moveNext.bind (this));
bar.appendChild (nextButton);
this._steps = steps;
this._previousButton = previousButton;
this._nextButton = nextButton;
}
,movePrevious: function ()
{
if (this._assistant)
this._assistant.movePrevious ();
}
,moveNext: function ()
{
if (this._assistant)
this._assistant.moveNext ();
}
,setStep: function (stepIndex)
{
if (this._assistant)
this._assistant.setStep (stepIndex);
}
,onStepChange: function ()
{
if (this._assistant)
{
var stepIndex = this._assistant.step;
var stepCount = this._assistant.stepCount;
}
else
{
var stepIndex = -1;
var stepCount = 0;
}
if (this._stepIndex != -1)
this._steps.childNodes[this._stepIndex].src = 'image/step.svg';
this._stepIndex = stepIndex;
if (stepIndex != -1)
this._steps.childNodes[stepIndex].src = 'image/step-cur.svg';
var visibility = stepIndex <= 0 ? 'hidden' : 'visible';
this._previousButton.style.visibility = visibility;
var visibility = stepIndex >= stepCount - 1 ? 'hidden' : 'visible';
this._nextButton.style.visibility = visibility;
}
});

View File

@ -0,0 +1,109 @@
Htk.Assistant = new Class
({
Extends: Vn.Object
,Tag: 'htk-assistant'
,Properties:
{
stepCount:
{
type: Number
,set: function (x)
{
this._stepCount = x;
if (x > 0)
this.setStep (0);
else
this.setStep (-1);
}
,get: function ()
{
return this._stepCount;
}
},
step:
{
type: Number
,set: function (x)
{
this.setStep (x);
}
,get: function ()
{
return this._stepIndex;
}
},
stepFunc:
{
type: Function
,set: function (x)
{
this._stepFunc = x;
this.setStep (this._stepIndex);
}
,get: function ()
{
return this._stepFunc;
}
},
node:
{
type: Object
,set: function (x)
{
x.className = 'htk-assistant';
}
},
}
,_stepNode: null
,_stepIndex: -1
,_stepCount: 0
,_stepFunc: null
,setStep: function (stepIndex)
{
if (!(stepIndex >= -1 && stepIndex < this.stepCount))
return;
if (this._stepFunc && stepIndex != -1)
{
var stepNode = this._stepFunc (stepIndex);
if (stepNode)
{
if (this._stepNode)
this._stepNode.style.display = 'none';
this._stepNode = stepNode;
stepNode.style.display = 'block';
this._setStepIndex (stepIndex);
}
else if (this._stepIndex < stepIndex)
this.setStep (stepIndex + 1);
else
this.setStep (stepIndex - 1);
}
else
this._setStepIndex (stepIndex);
}
,_setStepIndex: function (stepIndex)
{
this._stepIndex = stepIndex;
this.signalEmit ('step-change', stepIndex);
}
,movePrevious: function ()
{
this.setStep (this._stepIndex - 1);
}
,moveNext: function ()
{
this.setStep (this._stepIndex + 1);
}
});

View File

@ -11,7 +11,7 @@ Htk.Column = new Class
{
value:
{
type: Object
type: String
,value: null
},
column:

View File

@ -8,7 +8,7 @@ Htk.Field = new Class
{
value:
{
type: Object
type: String
,set: function (x)
{
if (Vn.Value.compare (x, this._value))
@ -56,7 +56,7 @@ Htk.Field = new Class
},
form:
{
type: Db.Form
type: Vn.Object // Db.Iterator
,set: function (x)
{
this._form = x;

View File

@ -1,6 +1,7 @@
Htk.Select = new Class
({
Extends: Htk.Field
,Implements: Db.Iterator
,Tag: 'htk-combo'
,Properties:
{
@ -19,9 +20,56 @@ Htk.Select = new Class
{
return this._model;
}
},
/**
* The row where the form positioned, has -1 if the row is unselected.
**/
row:
{
type: Number
,set: function (x)
{
if (!this._model || this._model.numRows <= x || x < -1)
x = -1;
if (x == this._row)
return;
this._row = x;
this.iterChanged ();
}
,get: function ()
{
return this._row;
}
},
/**
* The number of rows in the form.
**/
numRows:
{
type: Number
,get: function ()
{
if (this._model)
return this._model.numRows;
return 0;
}
},
/**
* Checks if the form data is ready.
**/
ready:
{
type: Boolean
,get: function ()
{
return this._ready;
}
}
}
,_row: -1
,_model: null
,valueColumnIndex: 0
,valueColumnName: null
@ -35,6 +83,12 @@ Htk.Select = new Class
this.node.addEventListener ('change', this.changed.bind (this));
}
,setRow: function (row)
{
this._row = row;
this.iterChanged ();
}
,changed: function (event)
{
var value;
@ -46,6 +100,7 @@ Htk.Select = new Class
value = null;
this.valueChanged (value);
this.setRow (row);
}
,addOption: function (value, text)
@ -59,6 +114,7 @@ Htk.Select = new Class
,onModelChange: function ()
{
var model = this._model;
this.signalEmit ('status-changed');
if (model.status == Db.Model.Status.LOADING)
return;
@ -80,7 +136,8 @@ Htk.Select = new Class
}
case Db.Model.Status.ERROR:
this.addOption (null, _('Error'));
break;
default:
this.setRow (-1);
}
}
@ -91,14 +148,20 @@ Htk.Select = new Class
,selectOption: function ()
{
if (!this._model || this._model.status != Db.Model.Status.READY)
return;
var row;
var row = this._model.searchByIndex (this.valueColumnIndex, this._value);
if (this._model && this._model.status == Db.Model.Status.READY)
{
row = this._model.searchByIndex (this.valueColumnIndex, this._value);
if (row != -1)
this.node.selectedIndex = row + 1;
}
else
row = -1;
this.setRow (row);
}
,putValue: function (value)
{

View File

@ -32,6 +32,19 @@ Htk.Grid = new Class
{
type: String
,value: _('NoData')
},
showHeader:
{
type: Boolean
,set: function (x)
{
this._showHeader = x;
this.thead.style.display = x ? 'table-header-group' : 'none';
}
,get: function ()
{
return this._showHeader;
}
}
}
@ -42,10 +55,11 @@ Htk.Grid = new Class
,internalColumns: 0
,sortColumn: -1
,sortWay: null
,_showHeader: true
,initialize: function ()
,initialize: function (props)
{
this.parent ();
this.parent (props);
this.table = this.createElement ('table');
this.table.className = 'htk-grid';
@ -206,7 +220,7 @@ Htk.Grid = new Class
this.tbody.appendChild (tr);
var td = document.createElement ('td');
td.className = 'grid-message';
td.className = 'message';
td.colSpan = this.columns.length;
tr.appendChild (td);

View File

@ -11,6 +11,8 @@ Vn\Hedera\Js::includeLib ('htk'
,'grid'
,'full-image'
,'image-editor'
,'assistant'
,'assistant-bar'
,'field'
,'field/text'
,'field/html'

View File

@ -35,8 +35,20 @@ Htk.Repeater = new Class
{
this._alias;
}
},
emptyMessage:
}
,renderer:
{
type: Function
,set: function (x)
{
this._renderer = x;
}
,get: function ()
{
this._renderer;
}
}
,emptyMessage:
{
type: String
,value: _('NoData')
@ -71,6 +83,10 @@ Htk.Repeater = new Class
builder.add (this._alias, form);
var mainNode = builder.loadXmlFromNode (this.xml);
if (this._renderer)
this._renderer (builder, index);
this.node.appendChild (mainNode);
}

View File

@ -29,7 +29,7 @@ Sql.Value = new Class
**/
value:
{
type: Object
type: String
,set: function (x)
{
if (Vn.Value.compare (x, this._value))

View File

@ -200,7 +200,7 @@ Vn.Builder = new Class
var method = this.getMethod (nodeValue);
c.object.on (nodeName.substr (3), method, this.signalData);
}
else
else if (!/^(id|property)$/.test (nodeName))
{
var prop = nodeName.replace (/-./g, this.replaceFunc);
this.setProperty (c, prop, nodeValue);
@ -229,7 +229,13 @@ Vn.Builder = new Class
{
var prop = c.klass.Properties[propName];
if (!prop || !value)
if (!prop)
{
console.warn ('Htk.Builder: Attribute \'%s\' not valid for tag \'%s\'',
propName, c.node.tagName);
return;
}
if (!value)
return;
switch (prop.type)
@ -241,7 +247,6 @@ Vn.Builder = new Class
value = 0 + new Number (value);
break;
case String:
case Object:
value = this.translateValue (value);
break;
case Function:
@ -274,6 +279,11 @@ Vn.Builder = new Class
this.signalData = parentBuilder.signalData;
}
,$: function (objectId)
{
return this.get (objectId);
}
,get: function (objectId)
{
var object = this.objectMap[objectId];

View File

@ -9,7 +9,7 @@ Vn.Param = new Class
{
value:
{
type: Object
type: String
,set: function (x)
{
if (Vn.Value.compare (x, this._value))

View File

@ -22,4 +22,6 @@ Vn.Locale.add
,"UploadFile": "Putjar arxiu"
,"ImageAdded": "Imatge afegida correctament"
,"Close": "Tancar"
,"Previous": "Anterior"
,"Next": "Següent"
});

View File

@ -5,22 +5,24 @@
,"NEXT": "SIGUIENTE"
,"DeliveryOrPickupQuestion": "¿Desea recibir o recoger el pedido?"
,"Receive": "Recibir"
,"Pickup": "Recoger"
,"ReceiveThroughtAgency": "Recibir por agencia"
,"ReceiveThroughtRoute": "Reparto Verdnatura"
,"PickupInStore": "Recoger en almacén"
,"OrderDateDeliveryQuestion": "¿Qué día desea recibir el pedido?"
,"OrderDatePickupQuestion": "¿Qué día desea recoger el pedido?"
,"AddressQuestion": "¿Dónde desea recibir el pedido?"
,"AgencyQuestion": "¿Por qué agencia desea recibir el pedido?"
,"PickupWarehouseQuestion": "¿En qué almacén desea recoger su pedido?"
,"PickupWarehouseQuestion": "¿En qué almacén desea recoger el pedido?"
,"ConfirmToAccessCatalog": "Confirme los datos para acceder al catálogo"
,"ArrivalOf": "Llegada el"
,"PickupOf": "Recogida el"
,"Arrival": "Llegada"
,"Pickup": "Recogida"
,"%A, %e of %B": "%A, %e de %B"
,"Agency": "Agencia"
,"Warehouse": "Almacén"
,"CONFIRM": "CONFIRMAR"
,"ErrorCreatingOrder": "Error al crear el pedido"
,"OrderStarted": "Pedido empezado"
}

View File

@ -1,6 +1,6 @@
{
"StartedOrdersDesc":
"Pedidos pendientes de confirmar"
"OpenOrders":
"Pedidos abiertos"
,"StartOrder": "Empezar pedido"
,"ContinueOrder": "Continuar pedido"
@ -9,8 +9,8 @@
,"DateExit": "Fecha de salida"
,"SendMethod": "Forma de envío"
,"ConfirmedOrdersDesc":
"Pedidos confirmados más recientes"
,"ConfirmedOrders":
"Pedidos confirmados"
,"PendingBalance:": "Saldo pendiente:"
,"PaymentInfo": "Para realizar una entrega a cuenta pulse en el botón de la derecha y haga el pago en la empresa correspondiente. La cantidad que aparece es el saldo pendiente a día de hoy, no tiene en cuenta pedidos del futuro. Puede realizar una entrega a cuenta de la cantidad que desee. Si desea pagar un pedido en concreto puede pulsar directamente en el botón de pago del pedido."
@ -31,4 +31,6 @@
,"AmountToPay:": "Cantidad a pagar (€):"
,"AmountError": "La cantidad debe ser un número positivo e inferior o igual al importe pendiente"
,"PayError": "Error al realizar el pago"
,"%A, %e of %B": "%A, %e de %B"
}

View File

@ -22,4 +22,6 @@ Vn.Locale.add
,"UploadFile": "Subir archivo"
,"ImageAdded": "Imagen añadida correctamente"
,"Close": "Cerrar"
,"Previous": "Anterior"
,"Next": "Siguiente"
});

View File

@ -22,4 +22,6 @@ Vn.Locale.add
,"UploadFile": "Télécharger le fichier"
,"ImageAdded": "Image ajoutée correctement"
,"Close": "Croche"
,"Previous": "Précédent"
,"Next": "Suivant"
});

View File

@ -22,4 +22,6 @@ Vn.Locale.add
,"UploadFile": "Subir archivo"
,"ImageAdded": "Imagen añadida correctamente"
,"Close": "Cerrar"
,"Previous": "Anterior"
,"Next": "Següent"
});