0
1
Fork 0

Release beta, errores solucionados

This commit is contained in:
Juan Ferrer Toribio 2015-12-10 14:48:43 +01:00
parent 63342ba25b
commit 30e44654b0
77 changed files with 1122 additions and 600 deletions

View File

@ -117,8 +117,9 @@ class Web
$useCookies = TRUE; $useCookies = TRUE;
$success = TRUE; $success = TRUE;
if (isset ($_GET['guest'])) if (isset ($_POST['guest']))
{ {
self::sysInit ();
$row = self::$sysConn->getRow ( $row = self::$sysConn->getRow (
'SELECT guest_user, guest_pass FROM config'); 'SELECT guest_user, guest_pass FROM config');

View File

@ -3,7 +3,12 @@
<vn-param id="address"/> <vn-param id="address"/>
<vn-hash-param key="address" param="address"/> <vn-hash-param key="address" param="address"/>
<db-form id="iter" on-status-changed="onStatusChange"> <db-form id="iter" on-status-changed="onStatusChange">
<db-model property="model" id="model" updatable="true" mode="ON_DEMAND" on-operations-done="onOperationsDone"> <db-model
id="model"
property="model"
updatable="true"
mode="ON_DEMAND"
on-operations-done="onOperationsDone">
<custom> <custom>
SELECT a.id, a.name, a.consignee, a.city, a.zip_code, a.province_id, c.Id country_id SELECT a.id, a.name, a.consignee, a.city, a.zip_code, a.province_id, c.Id country_id
FROM address_view a FROM address_view a
@ -57,6 +62,7 @@
<label><t>Country</t></label> <label><t>Country</t></label>
<htk-combo> <htk-combo>
<db-param <db-param
id="country"
property="param" property="param"
form="iter" form="iter"
column="country_id" column="country_id"

View File

@ -3,10 +3,49 @@
{ {
padding: 1em; padding: 1em;
} }
.about .cols
{
max-width: 85em;
margin: 0 auto;
}
@media screen and (min-width: 1000px) /* and (max-width: 1399px) */
{
.about .cols
{
column-count: 2;
-moz-column-count: 2;
-webkit-column-count: 2;
}
}/*
@media screen and (min-width: 1400px)
{
.about .cols
{
column-count: 3;
-moz-column-count: 3;
-webkit-column-count: 3;
}
}
@media screen and (min-width: 2000px)
{
.about .cols
{
column-count: 4;
-moz-column-count: 4;
-webkit-column-count: 4;
}
}*/
.about .box .about .box
{ {
max-width: 50em; margin-bottom: 1em;
margin: 0 auto; padding: 2em;
}
.about h1
{
padding: 0;
margin: 0;
font-weight: normal;
font-size: 1.6em;
} }
.about h2 .about h2
{ {
@ -20,28 +59,22 @@
text-align: center; text-align: center;
font-size: 1.2em; font-size: 1.2em;
font-weight: normal; font-weight: normal;
margin: 1em; padding: 1em;
color: #4A1; color: #00796B;
} }
.about p .about p
{ {
width: 90%; margin: 1em 0;
display: block;
margin: 1em auto;
} }
.summary .about p.summary
{ {
padding-bottom: 1em; max-width: 26em;
}
.summary p
{
max-width: 30em;
text-align: center; text-align: center;
background-color: #FF8; background-color: #FF8;
padding: 1em; padding: 1em;
border-radius: 0.1em; border-radius: 0.1em;
box-shadow: 0 0.2em 0.2em #AAA; box-shadow: 0 0.2em 0.2em #AAA;
margin: 2em auto; margin: 1.5em auto;
} }
/* Images */ /* Images */

View File

@ -3,11 +3,11 @@
<h1><t>About</t></h1> <h1><t>About</t></h1>
</div> </div>
<div id="form" class="about"> <div id="form" class="about">
<div class="box"> <div class="cols">
<div> <div class="box">
<div class="header"> <h1>
<h1><t>QualityAndVariety</t></h1> <t>QualityAndVariety</t>
</div> </h1>
<p><t>MaximumFreshness</t></p> <p><t>MaximumFreshness</t></p>
<h3><t>SquareMeters</t></h3> <h3><t>SquareMeters</t></h3>
<img src="forms/cms/about/image/store.png" alt="store"/> <img src="forms/cms/about/image/store.png" alt="store"/>
@ -20,26 +20,26 @@
</p> </p>
<img src="forms/cms/about/image/palletizing.png" alt="palletizing"/> <img src="forms/cms/about/image/palletizing.png" alt="palletizing"/>
</div> </div>
<div> <div class="box">
<div class="header"> <h1>
<h1><t>WhatMakeUsDifferent</t></h1> <t>WhatMakeUsDifferent</t>
</div> </h1>
<p><t>DesignVariety</t></p> <p><t>DesignVariety</t></p>
<img src="forms/cms/about/image/differentiates_us.png" alt="differentiates_us"/> <img src="forms/cms/about/image/differentiates_us.png" alt="differentiates_us"/>
<p><t>AdaptToYourNeeds</t></p> <p><t>AdaptToYourNeeds</t></p>
<h3><t>TheBestQuality</t></h3> <h3><t>TheBestQuality</t></h3>
</div> </div>
<div> <div class="box">
<div class="header"> <h1>
<h1><t>AtYourService</t></h1> <t>AtYourService</t>
</div> </h1>
<h2><t>BuyersAndTraders</t></h2> <h2><t>BuyersAndTraders</t></h2>
<img src="forms/cms/about/image/commercial.png" alt="commercial"/> <img src="forms/cms/about/image/commercial.png" alt="commercial"/>
</div> </div>
<div> <div class="box">
<div class="header"> <h1>
<h1><t>Training</t></h1> <t>Verdnatura training</t>
</div> </h1>
<p><t>GoodTraining</t></p> <p><t>GoodTraining</t></p>
<img src="forms/cms/about/image/training.png" alt="training"/> <img src="forms/cms/about/image/training.png" alt="training"/>
<p><t>SpecialTrainingPrices</t></p> <p><t>SpecialTrainingPrices</t></p>
@ -47,10 +47,10 @@
<h2><t>YoutubeChannel</t></h2> <h2><t>YoutubeChannel</t></h2>
<img src="forms/cms/about/image/youtube.png" alt="youtube"/> <img src="forms/cms/about/image/youtube.png" alt="youtube"/>
</div> </div>
<div> <div class="box">
<div class="header"> <h1>
<h1><t>HowWeWork</t></h1> <t>HowWeWork</t>
</div> </h1>
<p><t>AalsmeerAuction</t></p> <p><t>AalsmeerAuction</t></p>
<img src="forms/cms/about/image/auction.png" alt="auction"/> <img src="forms/cms/about/image/auction.png" alt="auction"/>
<p><t>BeforeAuction</t></p> <p><t>BeforeAuction</t></p>
@ -88,9 +88,7 @@
<p><t>AfterEmbedAgency</t></p> <p><t>AfterEmbedAgency</t></p>
<img src="forms/cms/about/image/agencies.png" alt="agencies"/> <img src="forms/cms/about/image/agencies.png" alt="agencies"/>
<p><t>FreshnessGuaranteed</t></p> <p><t>FreshnessGuaranteed</t></p>
</div> <p class="summary">
<div class="summary">
<p>
<t>AboutSummary</t> <t>AboutSummary</t>
<img src="image/logo.svg" alt="Verdnatura"/> <img src="image/logo.svg" alt="Verdnatura"/>
</p> </p>

View File

@ -26,7 +26,7 @@ header ('Content-Type: application/json');
if ($paramsOk && isset ($_SESSION['captcha']) if ($paramsOk && isset ($_SESSION['captcha'])
&& $_POST['captcha'] == $_SESSION['captcha']) && $_POST['captcha'] == $_SESSION['captcha'])
{ {
mail ('nuria@verdnatura.es', 'Verdnatura', print_r ($_POST, TRUE), mail ('comunicacion@verdnatura.es', 'Verdnatura', print_r ($_POST, TRUE),
'From: Verdnatura <www-data@verdnatura.es>'); 'From: Verdnatura <www-data@verdnatura.es>');
echo json_encode (TRUE); echo json_encode (TRUE);

View File

@ -2,5 +2,10 @@
Vn.Home = new Class Vn.Home = new Class
({ ({
Extends: Vn.Form Extends: Vn.Form
,onStartOrderClick: function ()
{
this.hash.set ({'form': 'ecomerce/catalog'});
}
}); });

View File

@ -2,8 +2,15 @@
<div id="title"> <div id="title">
<h1><t>Home</t></h1> <h1><t>Home</t></h1>
</div> </div>
<div id="actions" class="catalog-actions">
<htk-button
image="image/dark/new-order.svg"
tip="_Start order"
on-click="onStartOrderClick"
showText="true"/>
</div>
<div id="form" class="home"> <div id="form" class="home">
<div class="column mansonry" id="news-column"> <div class="column mansonry" id="news-column">
<htk-repeater form-id="new"> <htk-repeater form-id="new">
<db-model property="model"> <db-model property="model">
<custom> <custom>
@ -24,11 +31,11 @@
<htk-html form="new" column="text"/> <htk-html form="new" column="text"/>
</div> </div>
</div> </div>
<htk-image directory="news/full" form="new" column="image"/> <htk-image directory="news/full" form="new" column="image" editable="false"/>
</div> </div>
</div> </div>
</custom> </custom>
</htk-repeater> </htk-repeater>
</div> </div>
</div> </div>
</vn> </vn>

View File

@ -5,23 +5,17 @@ Vn.Basket = new Class
,open: function () ,open: function ()
{ {
if (this.basketChecked) this.close ();
this.parent (); this.isOpen = true;
}
,activate: function ()
{
Vn.BasketChecker.check (this.conn, Vn.BasketChecker.check (this.conn,
this.onBasketCheck.bind (this)); this.onBasketCheck.bind (this));
} }
,onBasketCheck: function (isOk) ,onBasketCheck: function (isOk)
{ {
if (!isOk) if (isOk)
return; this.loadUi ();
this.basketChecked = true;
this.open ();
} }
,onConfigureClick: function () ,onConfigureClick: function ()

View File

@ -7,13 +7,10 @@ Vn.Catalog = new Class
,open: function () ,open: function ()
{ {
if (this.basketChecked) this.close ();
this.parent (); this.isOpen = true;
}
,activate: function () if (!Vn.Cookie.check ('hedera_guest'))
{
if (!Vn.Url.getQuery ('guest'))
{ {
Vn.BasketChecker.check (this.conn, Vn.BasketChecker.check (this.conn,
this.onBasketCheck.bind (this)); this.onBasketCheck.bind (this));
@ -21,46 +18,41 @@ Vn.Catalog = new Class
else else
{ {
var query = 'CALL basket_configure_for_guest ()'; var query = 'CALL basket_configure_for_guest ()';
this.conn.execQuery (query, this.onBasketForGuest.bind (this)); this.conn.execQuery (query, this.loadUi.bind (this));
} }
} }
,close: function ()
{
if (this.node)
{
this.gui.$('top-bar').style.backgroundColor = '';
Vn.Node.remove (this.$('right-panel'));
}
this.parent ();
}
,onBasketForGuest: function ()
{
this.onBasketCheck (true);
}
,onBasketCheck: function (isOk) ,onBasketCheck: function (isOk)
{ {
if (!isOk) if (isOk)
return; this.loadUi ();
}
this.basketChecked = true;
this.open ();
,activate: function ()
{
document.body.appendChild (this.$('right-panel')); document.body.appendChild (this.$('right-panel'));
this.popup = new Htk.Popup (); this.popup = new Htk.Popup ();
this.popup.setChildNode (this.$('lots-popup')); this.popup.setChildNode (this.$('lots-popup'));
this.$('items-model').setInfo ('a', 'Articles', 'vn2008', ['Id_Article']); this.$('items-model').setInfo ('a', 'Articles', 'vn2008', ['Id_Article']);
this.setView ('GRID');
if (Vn.Cookie.check ('hedera_view'))
this.setView (Vn.Cookie.getInt ('hedera_view'));
else
this.setView (Vn.Catalog.View.GRID);
}
,deactivate: function ()
{
this.gui.$('top-bar').style.backgroundColor = '';
Vn.Node.remove (this.$('right-panel'));
} }
,onSwitchViewClick: function () ,onSwitchViewClick: function ()
{ {
this.setView (this.view == 'LIST' ? 'GRID' : 'LIST'); this.setView (this.view === Vn.Catalog.View.LIST ?
Vn.Catalog.View.GRID : Vn.Catalog.View.LIST);
} }
,setView: function (view) ,setView: function (view)
@ -71,21 +63,30 @@ Vn.Catalog = new Class
this.viewHolder.model = null; this.viewHolder.model = null;
} }
if (view == 'GRID') if (view === Vn.Catalog.View.GRID)
{ {
this.view = 'GRID'; this.view = Vn.Catalog.View.GRID;
this.viewNode = this.$('grid-view').getNode (); this.viewNode = this.$('grid-view').getNode ();
this.viewHolder = this.$('grid-view'); this.viewHolder = this.$('grid-view');
} }
else else
{ {
this.view = 'LIST'; this.view = Vn.Catalog.View.LIST;
this.viewNode = this.$('list-view'); this.viewNode = this.$('list-view');
this.viewHolder = this.$('items-grid'); this.viewHolder = this.$('items-grid');
} }
this.$('main').appendChild (this.viewNode); this.$('main').appendChild (this.viewNode);
this.viewHolder.model = this.$('items-model'); this.viewHolder.model = this.$('items-model');
Vn.Cookie.set ('hedera_view', this.view)
}
,onBasketReady: function (form)
{
if (form.get ('method') != 'PICKUP')
Vn.Node.setText (this.$('method'), _('Agency'));
else
Vn.Node.setText (this.$('method'), _('Warehouse'));
} }
,typeRenderer: function (builder, form) ,typeRenderer: function (builder, form)
@ -110,22 +111,25 @@ Vn.Catalog = new Class
,onTypeChange: function () ,onTypeChange: function ()
{ {
if (this._menuShown && this.$('type').value) if (this.$('type').value)
this.hideMenu (); this.hideMenu ();
this.refreshTitle ();
}
,refreshTitleColor: function ()
{
var realms = this.$('realms-model'); var realms = this.$('realms-model');
return;
if (!realms.ready) if (!realms.ready)
return; return;
this.refreshTitle ();
var color = null; var color = null;
var realm = this.$('realm').value;
if (this.$('type').value) if (realm)
{ {
var row = realms.search ('id', this.$('realm').value); var row = realms.search ('id', realm);
if (row != -1) if (row != -1)
color = '#'+ realms.get (row, 'color'); color = '#'+ realms.get (row, 'color');
@ -134,7 +138,7 @@ Vn.Catalog = new Class
this.gui.$('top-bar').style.backgroundColor = color; this.gui.$('top-bar').style.backgroundColor = color;
} }
,refreshTitle: function (title) ,refreshTitle: function ()
{ {
var types = this.$('types-model'); var types = this.$('types-model');
@ -142,16 +146,15 @@ Vn.Catalog = new Class
return; return;
var title = _('Catalog'); var title = _('Catalog');
var type = this.$('type').value;
if (this.$('type').value) if (type)
{ {
var row = types.search ('tipo_id', this.$('type').value); var row = types.search ('tipo_id', type);
if (row != -1) if (row != -1)
title = types.get (row, 'Tipo'); title = types.get (row, 'name');
} }
else if (this.$('search').value)
title = _('SearchResults');
Vn.Node.setText (this.$('title-text'), title); Vn.Node.setText (this.$('title-text'), title);
} }
@ -184,12 +187,20 @@ Vn.Catalog = new Class
,onBasketClick: function () ,onBasketClick: function ()
{ {
if (!Vn.Url.getQuery ('guest')) if (!Vn.Cookie.check ('hedera_guest'))
this.hash.set ({'form': 'ecomerce/basket'}); this.hash.set ({'form': 'ecomerce/basket'});
else else
Htk.Toast.showError (_('YouMustBeLoggedIn')); Htk.Toast.showError (_('YouMustBeLoggedIn'));
} }
,onConfigureClick: function ()
{
if (!Vn.Cookie.check ('hedera_guest'))
this.hash.set ({'form': 'ecomerce/checkout'});
else
Htk.Toast.showError (_('YouMustBeLoggedIn'));
}
,nameRenderer: function (renderer, form) ,nameRenderer: function (renderer, form)
{ {
renderer.subtitle = form.get ('producer'); renderer.subtitle = form.get ('producer');
@ -256,7 +267,7 @@ Vn.Catalog = new Class
,showAmountPopup: function (button, row) ,showAmountPopup: function (button, row)
{ {
if (Vn.Url.getQuery ('guest')) if (Vn.Cookie.check ('hedera_guest'))
{ {
Htk.Toast.showError (_('YouMustBeLoggedIn')); Htk.Toast.showError (_('YouMustBeLoggedIn'));
return; return;
@ -562,6 +573,14 @@ Vn.Filter = new Class
this._label.nodeValue = _('Loading...'); this._label.nodeValue = _('Loading...');
} }
} }
})
Vn.Catalog.extend
({
View: {
LIST: 0,
GRID: 1
}
}); });
Vn.ColumnItem = new Class Vn.ColumnItem = new Class
@ -589,5 +608,5 @@ Vn.ColumnItem = new Class
return td; return td;
} }
}); })

View File

@ -36,16 +36,11 @@
.catalog-actions > .htk-search-entry .catalog-actions > .htk-search-entry
{ {
margin-top: .8em; margin-top: .8em;
margin-right: .4em;
} }
/* Right panel */ /* Right panel */
.right-panel > .body
{
text-align: center;
padding: 1em;
overflow: auto;
}
.right-panel .right-panel
{ {
position: absolute; position: absolute;
@ -54,31 +49,68 @@
right: 0; right: 0;
width: 17em; width: 17em;
background-color: white; background-color: white;
box-shadow: 0 0.2em 0.2em #AAA; box-shadow: 0 0.2em 0.2em rgba(1, 1, 1, 0.4);
overflow: auto;
}
.right-panel > .body
{
text-align: center;
}
.right-panel .section
{
padding: 1.2em 2em;
}
.right-panel .section > button
{
display: block;
margin: 0 auto;
margin-top: .4em;
}
.right-panel .basket-info
{
background-color: #00acc1;
color: white;
box-shadow: 0 0.1em 0.1em rgba(1, 1, 1, 0.3);
}
.right-panel .basket-info > button
{
color: #e0f2f1;
}
.right-panel .basket-info > p
{
margin: 0;
padding: .4em 0;
font-size: 1.1em;
text-align: left;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.right-panel .filters
{
}
.right-panel .section > select,
.right-panel .section > .vn-filter
{
margin-bottom: 1em;
} }
.right-panel select .right-panel select
{ {
margin: .8em auto; margin: 0 auto;
width: 12em; width: 100%;
/* color: #333;
background-color: #EEE;
border: 0;*/
} }
option.placeholder .vn-filter > ul
{
color: #999;
}
.vn-filter ul
{ {
margin: 0; margin: 0;
list-style-type: none; list-style-type: none;
text-align: left; text-align: left;
color: #666; color: #666;
padding-left: 2em; padding-left: 1.5em;
} }
.vn-filter li .vn-filter li
{ {
margin: 0;
margin-top: .4em;
line-height: 2em; line-height: 2em;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
@ -92,71 +124,6 @@ option.placeholder
padding: .2em; padding: .2em;
margin-right: .2em; margin-right: .2em;
} }
.right-panel .remove-filters
{
margin-top: 1.2em;
}
button.basket
{
width: 100%;
height: 3em;
font-size: 1.1em;
text-align: center;
background-color: #00BCD4;
border-radius: 0;
}
button.basket:hover
{
background-color: #0AB;
}
/* Realms */
.realms-box
{
box-shadow: 0 0 0.4em #AAA;
background-color: rgba(1, 1, 1, .1);
}
.realms-box a
{
display: block;
float: left;
line-height: 0;
width: 33.3%;
}
.realms-box a > img
{
width: 100%;
border: 0;
padding: 0;
cursor: pointer;
}
.realms-box img:hover
{
opacity: 0.85;
}
/* Types */
.types-box
{
position: absolute;
top: 11.5em;
bottom: 0;
right: 0;
left: 0;
overflow: auto;
}
.types-box a
{
padding: .5em 1.5em;
display: block;
}
.types-box a:hover
{
background-color: rgba(1, 1, 1, .1);
}
/* Item description */ /* Item description */
@ -270,10 +237,10 @@ td.third-category
float: left; float: left;
margin-right: 1em; margin-right: 1em;
} }
.item-box img .item-box > .image > img
{ {
max-width: 9em; max-width: 100%;
max-height: 9em; height: 100%;
display: block; display: block;
margin: 0 auto; margin: 0 auto;
border-radius: .3em; border-radius: .3em;

View File

@ -1,7 +1,7 @@
<vn> <vn>
<vn-group> <vn-group>
<vn-param id="search"/> <vn-param id="search"/>
<vn-param id="realm" on-changed="onTypeChange"/> <vn-param id="realm" on-changed="refreshTitleColor"/>
<vn-param id="type" on-changed="onTypeChange"/> <vn-param id="type" on-changed="onTypeChange"/>
<vn-param id="color"/> <vn-param id="color"/>
<vn-param id="origin"/> <vn-param id="origin"/>
@ -88,6 +88,16 @@
</custom> </custom>
<sql-batch property="batch" id="lots-batch"/> <sql-batch property="batch" id="lots-batch"/>
</db-model> </db-model>
<db-form id="basket" on-ready="onBasketReady">
<db-model property="model">
<custom>
SELECT o.id, o.date_send, ag.description agency, v.code method
FROM basket o
JOIN vn2008.Agencias ag ON ag.Id_Agencia = o.agency_id
JOIN vn2008.Vistas v ON v.vista_id = o.delivery_method_id
</custom>
</db-model>
</db-form>
</vn-group> </vn-group>
<div id="title"> <div id="title">
<h1 id="title-text"><t>Catalog</t></h1> <h1 id="title-text"><t>Catalog</t></h1>
@ -175,7 +185,8 @@
form="item" form="item"
column="Foto" column="Foto"
show-full="true" show-full="true"
full-dir="900x900"/> full-dir="900x900"
editable="true"/>
</div> </div>
<htk-button <htk-button
form="item" form="item"
@ -219,10 +230,22 @@
</custom> </custom>
</htk-repeater> </htk-repeater>
<div id="right-panel" class="right-panel" on-click="onRightPanelClick"> <div id="right-panel" class="right-panel" on-click="onRightPanelClick">
<div class="body"> <div class="section basket-info">
<p>
<htk-text form="basket" column="date_send" format="_%A, %e of %B"/>
</p>
<p>
<span id="method"/>
<htk-text form="basket" column="agency"/>
</p>
<button class="thin" on-click="onConfigureClick">
<t>Configure</t>
</button>
</div>
<div class="section filters">
<select on-change="onOrderChange"> <select on-change="onOrderChange">
<option value="" disabled="true" selected="true"> <option value="" disabled="true" selected="true">
<t>Order by</t> <t>Order</t>
</option> </option>
<option value="Article"> <option value="Article">
<t>Name</t> <t>Name</t>
@ -255,7 +278,7 @@
<db-model <db-model
id="realms-model" id="realms-model"
property="model" property="model"
on-status-changed="onTypeChange"> on-status-changed="refreshTitleColor">
<custom> <custom>
SELECT r.id, l.str name, r.color SELECT r.id, l.str name, r.color
FROM vn2008.reinos r FROM vn2008.reinos r
@ -387,45 +410,10 @@
<pointer object="op-producer"/> <pointer object="op-producer"/>
</sql-filter> </sql-filter>
</vn-filter> </vn-filter>
<button class="remove-filters thin" on-click="onRemoveFiltersClick"> <button class="thin" on-click="onRemoveFiltersClick">
<t>Remove filters</t> <t>Remove filters</t>
</button> </button>
</div> </div>
<!--
<htk-repeater
model="realms-model"
form-id="realm-form"
renderer="realmRenderer"
class="realms-box">
<db-model id="realms-model" on-status-changed="onTypeChange">
SELECT id, reino, color FROM vn2008.reinos
WHERE display != FALSE ORDER BY reino
</db-model>
<template>
<a id="link">
<img id="image"/>
</a>
</template>
</htk-repeater>
<htk-repeater
model="types-model"
form-id="type-form"
renderer="typeRenderer"
empty-message="_SelectFamily"
class="types-box">
<db-model id="types-model" on-status-changed="refreshTitle">
CALL type_list (#realm)
<sql-batch property="batch">
<item name="realm" param="realm"/>
</sql-batch>
</db-model>
<template>
<a id="link">
<htk-text form="type-form" column="Tipo"/>
</a>
</template>
</htk-repeater>
-->
</div> </div>
<div id="desc-popup" class="desc-popup"/> <div id="desc-popup" class="desc-popup"/>
<div id="lots-popup" class="lots-popup"> <div id="lots-popup" class="lots-popup">

View File

@ -45,8 +45,17 @@ Vn.Checkout = new Class
this.autoStepLocked = false; this.autoStepLocked = false;
} }
,disableButtons: function (disable)
{
this.$('confirm-agency').disabled = disable;
this.$('confirm-delivery').disabled = disable;
this.$('confirm-pickup').disabled = disable;
}
,onConfirmClick: function () ,onConfirmClick: function ()
{ {
this.disableButtons (true);
var query = 'CALL basket_configure (#date, #method, #agency, #address)'; var query = 'CALL basket_configure (#date, #method, #agency, #address)';
var batch = new Sql.Batch (); var batch = new Sql.Batch ();
@ -61,6 +70,8 @@ Vn.Checkout = new Class
,onBasketConfigured: function (resultSet) ,onBasketConfigured: function (resultSet)
{ {
this.disableButtons (false);
if (!resultSet.fetchResult ()) if (!resultSet.fetchResult ())
return; return;

View File

@ -176,7 +176,7 @@
<t>Agency</t> <t>Agency</t>
<htk-text form="agency-combo" column="description"/> <htk-text form="agency-combo" column="description"/>
</p> </p>
<button class="thin" on-click="onConfirmClick"> <button id="confirm-agency" class="thin" on-click="onConfirmClick">
<t>Confirm</t> <t>Confirm</t>
</button> </button>
<div class="clear"/> <div class="clear"/>
@ -195,7 +195,7 @@
<p> <p>
<t>ReceiveThroughtRoute</t> <t>ReceiveThroughtRoute</t>
</p> </p>
<button class="thin" on-click="onConfirmClick"> <button id="confirm-delivery" class="thin" on-click="onConfirmClick">
<t>Confirm</t> <t>Confirm</t>
</button> </button>
<div class="clear"/> <div class="clear"/>
@ -212,7 +212,7 @@
<t>Warehouse</t> <t>Warehouse</t>
<htk-text form="warehouse-combo" column="description"/> <htk-text form="warehouse-combo" column="description"/>
</p> </p>
<button class="thin" on-click="onConfirmClick"> <button id="confirm-pickup" class="thin" on-click="onConfirmClick">
<t>Confirm</t> <t>Confirm</t>
</button> </button>
<div class="clear"/> <div class="clear"/>

View File

@ -3,6 +3,21 @@ Vn.Confirm = new Class
({ ({
Extends: Vn.Form Extends: Vn.Form
,open: function ()
{
this.close ();
this.isOpen = true;
Vn.BasketChecker.check (this.conn,
this.onBasketCheck.bind (this));
}
,onBasketCheck: function (isOk)
{
if (isOk)
this.loadUi ();
}
,onOrderReady: function (form) ,onOrderReady: function (form)
{ {
if (form.row < 0) if (form.row < 0)

View File

@ -6,7 +6,7 @@
<db-model property="model" id="ticket-data"> <db-model property="model" id="ticket-data">
<custom> <custom>
SELECT t.id, date, a.Agencia, note, p.name province, SELECT t.id, date, a.Agencia, note, p.name province,
zip_code, city, c.name, consignee, invoice zip_code, city, c.name, consignee, invoice, delivery
FROM ticket_view t FROM ticket_view t
JOIN address_view c ON t.address_id = c.id JOIN address_view c ON t.address_id = c.id
JOIN vn2008.Agencias a ON t.agency_id = a.Id_Agencia JOIN vn2008.Agencias a ON t.agency_id = a.Id_Agencia
@ -38,6 +38,9 @@
<p class="important ticket-id"> <p class="important ticket-id">
<htk-text column="id" form="ticket"/> <htk-text column="id" form="ticket"/>
</p> </p>
<p>
<htk-text form="ticket" column="delivery" format="%A, %e of %B %Y"/>
</p>
</div> </div>
<div> <div>
<p> <p>

View File

@ -1,4 +1,7 @@
Vn.include ('js/misc/tinymce/tinymce.min');
Vn.define (function () {
Vn.New = new Class Vn.New = new Class
({ ({
Extends: Vn.Form Extends: Vn.Form
@ -68,3 +71,5 @@ Vn.New = new Class
} }
}); });
});

View File

@ -1,8 +1,7 @@
<vn> <vn>
<vn-group> <vn-group>
<vn-hash-param key="new"> <vn-param id="new-id"/>
<vn-param id="new-id"/> <vn-hash-param key="new" param="new-id"/>
</vn-hash-param>
<db-form id="iter" on-status-changed="onStatusChange"> <db-form id="iter" on-status-changed="onStatusChange">
<db-model <db-model
id="model" id="model"

View File

@ -37,7 +37,7 @@
{ {
display: block; display: block;
margin: 0 auto; margin: 0 auto;
max-height: 100%; height: 100%;
max-width: 100%; max-width: 100%;
border-radius: .3em; border-radius: .3em;
} }

View File

@ -11,22 +11,6 @@
</div> </div>
<div id="form" class="news"> <div id="form" class="news">
<div class="box"> <div class="box">
<htk-grid show-header="false">
<htk-column-button
column="id"
tip="_EditNew"
image="image/edit.svg"
on-clicked="onEditClick"/>
<htk-column-image
column="image"
directory="news"
subdir="50x50"
show-full="true"
editable="true"/>
<htk-column-text title="_Title" column="title"/>
<htk-column-text title="_Author" column="Cliente"/>
<htk-column-spin title="_Priority" column="priority"/>
</htk-grid>
<htk-repeater form-id="iter"> <htk-repeater form-id="iter">
<db-model property="model" id="news-model" updatable="true"> <db-model property="model" id="news-model" updatable="true">
<custom> <custom>

77
web/image/add-photo.svg Normal file
View File

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="16"
viewBox="0 0 16 16"
width="16"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="add-photo.svg"
style="fill:#000000">
<metadata
id="metadata14">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1016"
id="namedview12"
showgrid="false"
inkscape:zoom="9.8333333"
inkscape:cx="12.20339"
inkscape:cy="12"
inkscape:window-x="1920"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<defs
id="defs4">
<path
d="M 24,24 0,24 0,0 24,0 24,24 Z"
id="a"
inkscape:connector-curvature="0" />
</defs>
<clipPath
id="b">
<use
overflow="visible"
xlink:href="#a"
id="use8"
style="overflow:visible"
x="0"
y="0"
width="100%"
height="100%" />
</clipPath>
<path
clip-path="url(#b)"
d="M 3,4 3,1 5,1 5,4 8,4 8,6 5,6 5,9 3,9 3,6 0,6 0,4 3,4 Z M 6,10 6,7 9,7 9,4 16,4 17.83,6 21,6 c 1.1,0 2,0.9 2,2 l 0,12 c 0,1.1 -0.9,2 -2,2 L 5,22 C 3.9,22 3,21.1 3,20 l 0,-10 3,0 z m 7,9 c 2.76,0 5,-2.24 5,-5 0,-2.76 -2.24,-5 -5,-5 -2.76,0 -5,2.24 -5,5 0,2.76 2.24,5 5,5 z M 9.8,14 c 0,1.77 1.43,3.2 3.2,3.2 1.77,0 3.2,-1.43 3.2,-3.2 0,-1.77 -1.43,-3.2 -3.2,-3.2 -1.77,0 -3.2,1.43 -3.2,3.2 z"
id="path10"
inkscape:connector-curvature="0"
transform="matrix(0.60869565,0,0,0.60869565,1,1)"
style="fill:#666666;fill-opacity:1" />
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="Layer_1"
x="0px"
y="0px"
width="16"
height="16"
viewBox="0 0 16 16"
enable-background="new 0 0 512 512"
xml:space="preserve"
inkscape:version="0.91 r13725"
sodipodi:docname="new-order.svg"><metadata
id="metadata11"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs9" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1016"
id="namedview7"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="51.6875"
inkscape:cx="7.544033"
inkscape:cy="7.9613059"
inkscape:window-x="1920"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1" /><g
id="g2988"
transform="matrix(0.03325942,0,0,0.03325942,-0.51441152,-0.68070862)"
style="fill:#ffffff;fill-opacity:1"><path
id="path3"
d="m 461.5,222 h -411 c -11.046,0 -20,8.954 -20,20 l 40,207 c 0,11.046 8.954,20 20,20 h 331 c 11.046,0 20,-8.954 20,-20 l 40,-207 c 0,-11.046 -8.954,-20 -20,-20 z M 138,403.5 c 0,5.799 -4.701,10.5 -10.5,10.5 h 0 c -5.799,0 -10.5,-4.701 -10.5,-10.5 v -117 c 0,-5.799 4.701,-10.5 10.5,-10.5 h 0.001 c 5.799,0 10.5,4.701 10.5,10.5 v 117 z m 66,0 c 0,5.799 -4.701,10.5 -10.5,10.5 h 0 c -5.799,0 -10.5,-4.701 -10.5,-10.5 v -117 c 0,-5.799 4.701,-10.5 10.5,-10.5 h 0.001 c 5.798,0 10.5,4.701 10.5,10.5 v 117 z m 62,0 c 0,5.799 -4.701,10.5 -10.5,10.5 h 0 c -5.799,0 -10.5,-4.701 -10.5,-10.5 v -117 c 0,-5.799 4.701,-10.5 10.5,-10.5 h 0.001 c 5.798,0 10.5,4.701 10.5,10.5 v 117 z m 65,0 c 0,5.799 -4.701,10.5 -10.5,10.5 -5.799,0 -10.5,-4.701 -10.5,-10.5 v -117 c 0,-5.799 4.701,-10.5 10.5,-10.5 5.799,0 10.5,4.701 10.5,10.5 v 117 z m 65,0 c 0,5.799 -4.701,10.5 -10.5,10.5 -5.799,0 -10.5,-4.701 -10.5,-10.5 v -117 c 0,-5.799 4.701,-10.5 10.5,-10.5 5.799,0 10.5,4.701 10.5,10.5 v 117 z"
inkscape:connector-curvature="0"
style="fill:#ffffff;fill-opacity:1" /><path
id="path5"
d="M 319.9,71.008 C 318.899,60.897 310.373,53 300,53 l -87,0 c -10.387,0 -18.92,7.919 -19.901,18.049 -19.155,-0.169 -49.697,-0.793 -60.374,3.647 -19.07,7.12 -34.01,24.74 -37.04,44.99 -4.64,29.089 -9.399,58.169 -13.91,87.291 6.721,0.029 13.44,0.159 20.16,-0.021 4.53,-27.64 8.83,-55.31 13.34,-82.95 1.83,-16.4 15.96,-30.24 32.12,-32.61 C 154.332,90.778 178.309,91 193.67,91.053 195.911,99.648 203.703,106 213,106 l 87,0 c 9.31,0 17.11,-6.37 19.34,-14.982 1.40554,-6.929611 1.55505,-12.101213 0.56,-20.01 z"
inkscape:connector-curvature="0"
style="fill:#ffffff;fill-opacity:1"
sodipodi:nodetypes="cssccccccccsscc" /></g><path
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#ff0b0b;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:26.89999962;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
d="m 12.193371,0.78469625 0,1.99999315 -1.999993,0 0,0.9999966 1.999993,0 0,1.9999934 0.999997,0 0,-1.9999934 1.999994,0 0,-0.9999966 -1.999994,0 0,-1.99999315 -0.999997,0 z"
id="rect31992"
inkscape:connector-curvature="0" /></svg>

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 817 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

65
web/image/new-order.svg Normal file
View File

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="Layer_1"
x="0px"
y="0px"
width="16"
height="16"
viewBox="0 0 16 16"
enable-background="new 0 0 512 512"
xml:space="preserve"
inkscape:version="0.91 r13725"
sodipodi:docname="new-order.svg"><metadata
id="metadata11"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs9" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1016"
id="namedview7"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="51.6875"
inkscape:cx="8"
inkscape:cy="8"
inkscape:window-x="1920"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1" /><g
id="g2988"
transform="matrix(0.03325942,0,0,0.03325942,-0.51441152,-0.68070862)"
style="fill:#666666;fill-opacity:1"><path
id="path3"
d="m 461.5,222 h -411 c -11.046,0 -20,8.954 -20,20 l 40,207 c 0,11.046 8.954,20 20,20 h 331 c 11.046,0 20,-8.954 20,-20 l 40,-207 c 0,-11.046 -8.954,-20 -20,-20 z M 138,403.5 c 0,5.799 -4.701,10.5 -10.5,10.5 h 0 c -5.799,0 -10.5,-4.701 -10.5,-10.5 v -117 c 0,-5.799 4.701,-10.5 10.5,-10.5 h 0.001 c 5.799,0 10.5,4.701 10.5,10.5 v 117 z m 66,0 c 0,5.799 -4.701,10.5 -10.5,10.5 h 0 c -5.799,0 -10.5,-4.701 -10.5,-10.5 v -117 c 0,-5.799 4.701,-10.5 10.5,-10.5 h 0.001 c 5.798,0 10.5,4.701 10.5,10.5 v 117 z m 62,0 c 0,5.799 -4.701,10.5 -10.5,10.5 h 0 c -5.799,0 -10.5,-4.701 -10.5,-10.5 v -117 c 0,-5.799 4.701,-10.5 10.5,-10.5 h 0.001 c 5.798,0 10.5,4.701 10.5,10.5 v 117 z m 65,0 c 0,5.799 -4.701,10.5 -10.5,10.5 -5.799,0 -10.5,-4.701 -10.5,-10.5 v -117 c 0,-5.799 4.701,-10.5 10.5,-10.5 5.799,0 10.5,4.701 10.5,10.5 v 117 z m 65,0 c 0,5.799 -4.701,10.5 -10.5,10.5 -5.799,0 -10.5,-4.701 -10.5,-10.5 v -117 c 0,-5.799 4.701,-10.5 10.5,-10.5 5.799,0 10.5,4.701 10.5,10.5 v 117 z"
inkscape:connector-curvature="0"
style="fill:#666666;fill-opacity:1" /><path
id="path5"
d="M 319.9,71.008 C 318.899,60.897 310.373,53 300,53 l -87,0 c -10.387,0 -18.92,7.919 -19.901,18.049 -19.155,-0.169 -49.697,-0.793 -60.374,3.647 -19.07,7.12 -34.01,24.74 -37.04,44.99 -4.64,29.089 -9.399,58.169 -13.91,87.291 6.721,0.029 13.44,0.159 20.16,-0.021 4.53,-27.64 8.83,-55.31 13.34,-82.95 1.83,-16.4 15.96,-30.24 32.12,-32.61 C 154.332,90.778 178.309,91 193.67,91.053 195.911,99.648 203.703,106 213,106 l 87,0 c 9.31,0 17.11,-6.37 19.34,-14.982 1.40554,-6.929611 1.55505,-12.101213 0.56,-20.01 z"
inkscape:connector-curvature="0"
style="fill:#666666;fill-opacity:1"
sodipodi:nodetypes="cssccccccccsscc" /></g><path
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#666666;fill-opacity:1;stroke:#ff0b0b;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:26.89999962;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
d="m 12.193371,0.78469625 0,1.99999315 -1.999993,0 0,0.9999966 1.999993,0 0,1.9999934 0.999997,0 0,-1.9999934 1.999994,0 0,-0.9999966 -1.999994,0 0,-1.99999315 -0.999997,0 z"
id="rect31992"
inkscape:connector-curvature="0" /></svg>

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@ -12,7 +12,7 @@
sodipodi:docname="unavailable.svg" sodipodi:docname="unavailable.svg"
height="16" height="16"
id="svg7384" id="svg7384"
inkscape:version="0.48.5 r10040" inkscape:version="0.91 r13725"
version="1.1" version="1.1"
width="16"> width="16">
<metadata <metadata
@ -33,8 +33,8 @@
bordercolor="#666666" bordercolor="#666666"
borderopacity="1" borderopacity="1"
inkscape:current-layer="layer9" inkscape:current-layer="layer9"
inkscape:cx="7.0453912" inkscape:cx="8"
inkscape:cy="10.43808" inkscape:cy="8"
gridtolerance="10" gridtolerance="10"
inkscape:guide-bbox="true" inkscape:guide-bbox="true"
guidetolerance="10" guidetolerance="10"
@ -55,12 +55,12 @@
inkscape:snap-nodes="true" inkscape:snap-nodes="true"
inkscape:snap-others="false" inkscape:snap-others="false"
inkscape:snap-to-guides="true" inkscape:snap-to-guides="true"
inkscape:window-height="702" inkscape:window-height="1016"
inkscape:window-maximized="1" inkscape:window-maximized="1"
inkscape:window-width="1366" inkscape:window-width="1920"
inkscape:window-x="0" inkscape:window-x="1920"
inkscape:window-y="27" inkscape:window-y="27"
inkscape:zoom="23.610133"> inkscape:zoom="51.6875">
<inkscape:grid <inkscape:grid
empspacing="2" empspacing="2"
enabled="true" enabled="true"
@ -100,9 +100,9 @@
transform="translate(-321,-257)"> transform="translate(-321,-257)">
<path <path
inkscape:connector-curvature="0" inkscape:connector-curvature="0"
d="m 328.90645,257.09375 c -0.5255,-0.0286 -1.03823,0.28305 -1.4375,0.96875 l -6.25,11.59375 C 320.68548,270.61964 321.26717,272 322.3127,272 l 13.15625,0 c 0.98172,0 1.90311,-1.15939 1.21875,-2.34375 L 330.3752,258.125 c -0.39872,-0.64617 -0.94325,-1.00262 -1.46875,-1.03125 z m 0.0625,3.9375 c 0.54448,-0.0172 1.04849,0.48677 1.03125,1.03125 l 0,3.9375 c 0.007,0.52831 -0.47163,1 -1,1 -0.52836,0 -1.00747,-0.47169 -1,-1 l 0,-3.9375 c -0.008,-0.4666 0.3541,-0.91253 0.8125,-1 0.0511,-0.0145 0.10345,-0.0249 0.15625,-0.0312 z M 329.0002,268 c 0.55228,0 1,0.44772 1,1 0,0.55228 -0.44772,1 -1,1 -0.55228,0 -1,-0.44772 -1,-1 0,-0.55228 0.44772,-1 1,-1 z" d="m 328.94324,258.44109 c -0.4625,-0.0252 -0.91377,0.24912 -1.26518,0.85263 l -5.50079,10.20397 c -0.46952,0.84791 0.0424,2.0628 0.96264,2.0628 l 11.57917,0 c 0.86404,0 1.67498,-1.02041 1.07266,-2.0628 l -5.55581,-10.14897 c -0.35092,-0.56871 -0.83018,-0.88243 -1.29269,-0.90763 z m 0.055,3.4655 c 0.47921,-0.0151 0.92281,0.42842 0.90763,0.90764 l 0,3.4655 c 0.006,0.46498 -0.41509,0.88012 -0.88012,0.88012 -0.46503,0 -0.8867,-0.41514 -0.88013,-0.88012 l 0,-3.4655 c -0.007,-0.41067 0.31165,-0.80315 0.7151,-0.88013 0.045,-0.0128 0.091,-0.0219 0.13752,-0.0275 z m 0.0275,6.13339 c 0.48608,0 0.88013,0.39405 0.88013,0.88013 0,0.48607 -0.39405,0.88013 -0.88013,0.88013 -0.48607,0 -0.88012,-0.39406 -0.88012,-0.88013 0,-0.48608 0.39405,-0.88013 0.88012,-0.88013 z"
id="path18112" id="path18112"
style="color:#bebebe;fill:#ee3333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.78124988000000006;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" /> style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#ee3333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.78124988;marker:none;enable-background:new" />
</g> </g>
<g <g
inkscape:groupmode="layer" inkscape:groupmode="layer"

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@ -11,9 +11,9 @@
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg7384" id="svg7384"
version="1.1" version="1.1"
inkscape:version="0.48.5 r10040" inkscape:version="0.91 r13725"
height="16" height="16"
sodipodi:docname="info.svg" sodipodi:docname="unknown.svg"
width="16"> width="16">
<metadata <metadata
id="metadata90"> id="metadata90">
@ -28,7 +28,7 @@
</rdf:RDF> </rdf:RDF>
</metadata> </metadata>
<sodipodi:namedview <sodipodi:namedview
inkscape:cy="2.2028437" inkscape:cy="8"
inkscape:current-layer="layer9" inkscape:current-layer="layer9"
inkscape:window-width="1920" inkscape:window-width="1920"
pagecolor="#555753" pagecolor="#555753"
@ -48,11 +48,11 @@
inkscape:snap-global="true" inkscape:snap-global="true"
inkscape:window-y="27" inkscape:window-y="27"
gridtolerance="10" gridtolerance="10"
inkscape:zoom="7.9687808" inkscape:zoom="51.6875"
inkscape:window-height="1014" inkscape:window-height="1016"
borderopacity="1" borderopacity="1"
guidetolerance="10" guidetolerance="10"
inkscape:cx="5.435957" inkscape:cx="8"
inkscape:bbox-paths="false" inkscape:bbox-paths="false"
inkscape:snap-grids="true" inkscape:snap-grids="true"
inkscape:pageopacity="1" inkscape:pageopacity="1"
@ -78,9 +78,9 @@
inkscape:label="status" inkscape:label="status"
style="display:inline"> style="display:inline">
<path <path
d="m 287.53551,259.96102 c -0.32661,0 -0.66541,0.12985 -0.91815,0.38255 l -5.20278,5.20277 c -0.50544,0.50543 -0.50544,1.33087 0,1.83629 l 5.20278,5.20279 c 0.50544,0.50541 1.33084,0.50541 1.83629,0 l 5.20277,-5.20279 c 0.50544,-0.50542 0.50544,-1.33086 0,-1.83629 l -5.20277,-5.20277 c -0.25273,-0.2527 -0.59154,-0.38255 -0.91814,-0.38255 z m -0.15302,2.42286 c 1.34042,-0.075 2.52629,0.95493 2.60138,2.29534 -8e-5,1.14368 -0.30825,1.56841 -1.30069,2.32085 -0.15583,0.11723 -0.26573,0.20453 -0.30604,0.25504 -0.0403,0.0507 -0.0254,0.0271 -0.0254,0.0254 0.006,0.43119 -0.38491,0.81613 -0.81612,0.81613 -0.43122,0 -0.82184,-0.38494 -0.81612,-0.81613 0,-0.41 0.183,-0.76994 0.38255,-1.02014 0.19955,-0.25025 0.40096,-0.42144 0.58659,-0.56109 0.16652,-0.13104 0.37609,-0.31383 0.56108,-0.53558 0.0763,-0.0915 0.10528,-0.25108 0.10202,-0.35706 l 0,-0.0255 c -0.0258,-0.45966 -0.40746,-0.7909 -0.86714,-0.76511 -0.45966,0.0258 -0.79089,0.35644 -0.7651,0.81613 l -1.63226,0 c -0.075,-1.34043 0.95494,-2.37322 2.29535,-2.44838 z m 0.15302,6.52899 c 0.45072,0 0.81612,0.36539 0.81612,0.81611 0,0.45073 -0.3654,0.81612 -0.81612,0.81612 -0.45072,0 -0.81612,-0.36539 -0.81612,-0.81612 0,-0.45072 0.3654,-0.81611 0.81612,-0.81611 z" d="m 289.00021,258.49827 c -0.32661,0 -0.66541,0.12985 -0.91815,0.38255 l -5.20278,5.20277 c -0.50544,0.50543 -0.50544,1.33087 0,1.83629 l 5.20278,5.20279 c 0.50544,0.50541 1.33084,0.50541 1.83629,0 l 5.20277,-5.20279 c 0.50544,-0.50542 0.50544,-1.33086 0,-1.83629 l -5.20277,-5.20277 c -0.25273,-0.2527 -0.59154,-0.38255 -0.91814,-0.38255 z m -0.15302,2.42286 c 1.34042,-0.075 2.52629,0.95493 2.60138,2.29534 -8e-5,1.14368 -0.30825,1.56841 -1.30069,2.32085 -0.15583,0.11723 -0.26573,0.20453 -0.30604,0.25504 -0.0403,0.0507 -0.0254,0.0271 -0.0254,0.0254 0.006,0.43119 -0.38491,0.81613 -0.81612,0.81613 -0.43122,0 -0.82184,-0.38494 -0.81612,-0.81613 0,-0.41 0.183,-0.76994 0.38255,-1.02014 0.19955,-0.25025 0.40096,-0.42144 0.58659,-0.56109 0.16652,-0.13104 0.37609,-0.31383 0.56108,-0.53558 0.0763,-0.0915 0.10528,-0.25108 0.10202,-0.35706 l 0,-0.0255 c -0.0258,-0.45966 -0.40746,-0.7909 -0.86714,-0.76511 -0.45966,0.0258 -0.79089,0.35644 -0.7651,0.81613 l -1.63226,0 c -0.075,-1.34043 0.95494,-2.37322 2.29535,-2.44838 z m 0.15302,6.52899 c 0.45072,0 0.81612,0.36539 0.81612,0.81611 0,0.45073 -0.3654,0.81612 -0.81612,0.81612 -0.45072,0 -0.81612,-0.36539 -0.81612,-0.81612 0,-0.45072 0.3654,-0.81611 0.81612,-0.81611 z"
id="path19592" id="path19592"
style="color:#bebebe;fill:#748cc9;fill-opacity:1;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible" style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#748cc9;fill-opacity:1;stroke:none;stroke-width:2;marker:none"
inkscape:connector-curvature="0" /> inkscape:connector-curvature="0" />
</g> </g>
<g <g

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

@ -33,8 +33,8 @@
bordercolor="#666666" bordercolor="#666666"
borderopacity="1" borderopacity="1"
inkscape:current-layer="layer9" inkscape:current-layer="layer9"
inkscape:cx="-4.1997805" inkscape:cx="8"
inkscape:cy="10.353371" inkscape:cy="8"
gridtolerance="10" gridtolerance="10"
inkscape:guide-bbox="true" inkscape:guide-bbox="true"
guidetolerance="10" guidetolerance="10"
@ -60,7 +60,7 @@
inkscape:window-width="1920" inkscape:window-width="1920"
inkscape:window-x="1920" inkscape:window-x="1920"
inkscape:window-y="27" inkscape:window-y="27"
inkscape:zoom="23.610133"> inkscape:zoom="51.6875">
<inkscape:grid <inkscape:grid
empspacing="2" empspacing="2"
enabled="true" enabled="true"
@ -100,9 +100,9 @@
transform="translate(-321,-257)"> transform="translate(-321,-257)">
<path <path
inkscape:connector-curvature="0" inkscape:connector-curvature="0"
d="m 328.90645,257.09375 c -0.5255,-0.0286 -1.03823,0.28305 -1.4375,0.96875 l -6.25,11.59375 C 320.68548,270.61964 321.26717,272 322.3127,272 l 13.15625,0 c 0.98172,0 1.90311,-1.15939 1.21875,-2.34375 L 330.3752,258.125 c -0.39872,-0.64617 -0.94325,-1.00262 -1.46875,-1.03125 z m 0.0625,3.9375 c 0.54448,-0.0172 1.04849,0.48677 1.03125,1.03125 l 0,3.9375 c 0.007,0.52831 -0.47163,1 -1,1 -0.52836,0 -1.00747,-0.47169 -1,-1 l 0,-3.9375 c -0.008,-0.4666 0.3541,-0.91253 0.8125,-1 0.0511,-0.0145 0.10345,-0.0249 0.15625,-0.0312 z M 329.0002,268 c 0.55228,0 1,0.44772 1,1 0,0.55228 -0.44772,1 -1,1 -0.55228,0 -1,-0.44772 -1,-1 0,-0.55228 0.44772,-1 1,-1 z" d="m 328.94324,258.44109 c -0.4625,-0.0252 -0.91377,0.24912 -1.26518,0.85263 l -5.50079,10.20397 c -0.46952,0.84791 0.0424,2.0628 0.96264,2.0628 l 11.57917,0 c 0.86404,0 1.67498,-1.02041 1.07266,-2.0628 l -5.55581,-10.14897 c -0.35092,-0.56871 -0.83018,-0.88243 -1.29269,-0.90763 z m 0.055,3.4655 c 0.47921,-0.0151 0.92281,0.42842 0.90763,0.90764 l 0,3.4655 c 0.006,0.46498 -0.41509,0.88012 -0.88012,0.88012 -0.46503,0 -0.8867,-0.41514 -0.88013,-0.88012 l 0,-3.4655 c -0.007,-0.41067 0.31165,-0.80315 0.7151,-0.88013 0.045,-0.0128 0.091,-0.0219 0.13752,-0.0275 z m 0.0275,6.13339 c 0.48608,0 0.88013,0.39405 0.88013,0.88013 0,0.48607 -0.39405,0.88013 -0.88013,0.88013 -0.48607,0 -0.88012,-0.39406 -0.88012,-0.88013 0,-0.48608 0.39405,-0.88013 0.88012,-0.88013 z"
id="path18112" id="path18112"
style="color:#bebebe;fill:#ffb920;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.78124988;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" /> style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#ffb920;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.78124988;marker:none;enable-background:new" />
</g> </g>
<g <g
inkscape:groupmode="layer" inkscape:groupmode="layer"

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@ -47,7 +47,7 @@ Db.Conn.implement
* @param {Boolean} remember Specifies if the user should be remembered * @param {Boolean} remember Specifies if the user should be remembered
* @param {Function} openCallback The function to call when operation is done * @param {Function} openCallback The function to call when operation is done
**/ **/
,open: function (user, pass, remember, openCallback) ,open: function (user, pass, remember, openCallback, guest)
{ {
this.signalEmit ('loading-changed', true); this.signalEmit ('loading-changed', true);
@ -63,6 +63,8 @@ Db.Conn.implement
,'remember': remember ,'remember': remember
}); });
} }
else if (guest)
request.add ({'guest': true});
request.send ('rest.php', request.send ('rest.php',
this.opened.bind (this, request, openCallback)); this.opened.bind (this, request, openCallback));

View File

@ -94,17 +94,12 @@ Db.Param = new Class
var formValue; var formValue;
if (this._columnIndex != -1) if (this._columnIndex !== -1)
formValue = this._form.getByIndex (this._columnIndex); formValue = this._form.getByIndex (this._columnIndex);
else else
formValue = null; formValue = undefined;
if (formValue != this._formValue)
{
this.value = formValue;
this._formValue = formValue;
}
this.value = formValue;
this._formLock = false; this._formLock = false;
} }

View File

@ -3,30 +3,77 @@ Vn.App = new Class
({ ({
Extends: Vn.Object Extends: Vn.Object
,_guestLogged: false
,initialize: function () ,initialize: function ()
{ {
window.onerror = this.onWindowError.bind (this); window.onerror = this._onWindowError.bind (this);
window.onunload = this._onWindowUnload.bind (this);
Vn.Hash.initialize (); Vn.Hash.initialize ();
this.conn = new Db.Conn (); this._isGuest = new Vn.HashParam
this.login = new Vn.Login ({conn: this.conn}); ({
type: Boolean,
key: 'guest'
});
this._isGuest.on ('changed', this._onGuestChange, this);
this._conn = new Db.Conn ();
} }
,run: function () ,run: function ()
{ {
if (Vn.Cookie.check ('vn_pass')) if (Vn.Cookie.check ('vn_pass'))
{ {
this.conn.open (null, null, null, this._conn.open (null, null, null,
this.onAutoLogin.bind (this)); this._onAutoLogin.bind (this));
}
else if (this._isGuest.value || Vn.Cookie.check ('hedera_guest'))
{
this._guestLogin ();
} }
else else
{ {
this.login.on ('login', this.onLogin, this); var login = this._login = new Vn.Login ({conn: this._conn});
this.login.show (); login.on ('login', this._onLogin, this);
login.show ();
} }
} }
,onAutoLogin: function (success) ,_onGuestChange: function ()
{
if (this._isGuest.value)
this._guestLogin ();
}
,_guestLogin: function ()
{
this._conn.open (
null,
null,
null,
this._onGuestLogin.bind (this),
true
);
}
,_onGuestLogin: function (conn, success)
{
if (!success)
{
this._isGuest.value = false;
Vn.Cookie.unset ('hedera_guest');
this.run ();
}
else
{
this._guestLogged = true;
Vn.Cookie.set ('hedera_guest', true);
this._showGui ();
}
}
,_onAutoLogin: function (success)
{ {
if (!success) if (!success)
{ {
@ -34,38 +81,48 @@ Vn.App = new Class
this.run (); this.run ();
} }
else else
this.onLogin (); this._showGui ();
} }
,onLogin: function () ,_onLogin: function ()
{ {
this.login.disconnectByInstance (this); this._freeLogin ();
this.login.hide (); this._showGui ();
}
var gui = new Vn.Gui ({conn: this.conn}); ,_showGui: function ()
gui.on ('logout', this.onLogout, this); {
var gui = this._gui = new Vn.Gui ({conn: this._conn});
gui.on ('logout', this._onLogout, this);
gui.show (); gui.show ();
} }
,onLogout: function (gui) ,_onLogout: function (gui)
{ {
gui.hide (); this._freeGui ();
gui.unref (); this._guestLogged = false;
Vn.Cookie.unset ('hedera_guest');
Vn.Cookie.unset ('vn_pass'); Vn.Cookie.unset ('vn_pass');
Vn.Hash.set (null);
this.run (); this.run ();
} }
,onWindowError: function (message, file, line) ,_onWindowError: function (message, file, line)
{ {
var error = new Error (message); var error = new Error (message);
error.fileName = file; error.fileName = file;
error.lineNumber = line; error.lineNumber = line;
Htk.Toast.showError (_('There was an internal error')); Htk.Toast.showError (_('There was an internal error'));
this.notifyError (error); this._notifyError (error);
} }
,notifyError: function (error) ,_onWindowUnload: function ()
{
this.unref ();
}
,_notifyError: function (error)
{ {
if (error instanceof Error) if (error instanceof Error)
{ {
@ -81,9 +138,32 @@ Vn.App = new Class
} }
} }
,_freeLogin: function ()
{
if (this._login)
{
this._login.disconnectByInstance (this);
this._login.hide ();
this._login.unref ();
this._login = null;
}
}
,_freeGui: function ()
{
if (this._gui)
{
this._gui.disconnectByInstance (this);
this._gui.hide ();
this._gui.unref ();
this._gui = null;
}
}
,_destroy: function () ,_destroy: function ()
{ {
this.login.unref (); this._freeLogin ();
this.conn.unref (); this._freeGui ();
this._conn.unref ();
} }
}); });

View File

@ -3,6 +3,9 @@ Vn.Form = new Class
({ ({
Extends: Vn.Object Extends: Vn.Object
,isOpen: false
,uiLoaded: false
,initialize: function (gui, formInfo) ,initialize: function (gui, formInfo)
{ {
this.gui = gui; this.gui = gui;
@ -25,12 +28,10 @@ Vn.Form = new Class
return null; return null;
} }
/** ,loadUi: function ()
* Called when the form is opened.
**/
,open: function ()
{ {
this.close (); if (!this.isOpen)
return;
var builder = new Vn.Builder (); var builder = new Vn.Builder ();
builder.signalData = this; builder.signalData = this;
@ -51,9 +52,58 @@ Vn.Form = new Class
for (var i = 0; i < queries.length; i++) for (var i = 0; i < queries.length; i++)
queries[i].conn = this.conn; queries[i].conn = this.conn;
this.gui.formHolder.appendChild (this.node); if (this.node)
this.gui.setTitle (res.$('title')); {
this.gui.setActions (res.$('actions')); this.gui.formHolder.appendChild (this.node);
this.gui.setTitle (res.$('title'));
this.gui.setActions (res.$('actions'));
this.activate ();
}
this.uiLoaded = true;
}
,unloadUi: function ()
{
if (!this.uiLoaded)
return;
if (this.node)
{
this.deactivate ();
this.gui.setTitle (null);
this.gui.setActions (null);
Vn.Node.remove (this.node);
this.deactivate ();
this.node = null;
}
if (this.builder)
{
this.builder.unref ();
this.builder = null;
}
}
/**
* Called when the form is opened.
**/
,open: function ()
{
this.close ();
this.isOpen = true;
this.loadUi ();
}
/**
* Called when the form is closed.
**/
,close: function ()
{
if (!this.isOpen)
return;
this.isOpen = false;
this.unloadUi ();
} }
/** /**
@ -66,25 +116,6 @@ Vn.Form = new Class
**/ **/
,deactivate: function () {} ,deactivate: function () {}
/**
* Called when the form is closed.
**/
,close: function ()
{
if (this.node)
{
this.gui.setTitle (null);
this.gui.setActions (null);
Vn.Node.remove (this.node);
this.node = null;
}
if (this.builder)
{
this.builder.unref ();
this.builder = null;
}
}
,_destroy: function () ,_destroy: function ()
{ {
this.close (); this.close ();

View File

@ -31,7 +31,7 @@
width: 100%; width: 100%;
z-index: 1; z-index: 1;
overflow: hidden; overflow: hidden;
box-shadow: 0 0.1em 0.1em #AAA; box-shadow: 0 0.1em 0.1em rgba(1, 1, 1, 0.3);
} }
.vn-gui .top-bar .vn-gui .top-bar
{ {
@ -211,7 +211,7 @@
top: 0; top: 0;
background-color: white; background-color: white;
z-index: 20; z-index: 20;
box-shadow: 0 0.2em 0.2em #AAA; box-shadow: 0 0.2em 0.2em rgba(1, 1, 1, 0.4);
} }
.vn-gui .menu-overflow .vn-gui .menu-overflow
{ {
@ -397,7 +397,7 @@
} }
.htk-toast .htk-toast
{ {
margin-left: -11em; margin-left: -10.5em;
} }
} }

View File

@ -1,5 +1,4 @@
Vn.includeCss ('js/hedera/gui.css');
Vn.resource ('js/hedera/gui.xml'); Vn.resource ('js/hedera/gui.xml');
Vn.define (function () { Vn.define (function () {
@ -10,12 +9,13 @@ Vn.Gui = new Class
{ {
conn: conn:
{ {
set: function (x) type: Db.Conn
,set: function (x)
{ {
this.link ({_conn: x}, this.link ({_conn: x},
{ {
'error': this.onConnError 'error': this.onConnError
,'loading-changed': this.onConnLoading ,'loading-changed': this._onConnLoadChange
}); });
var sql = 'SELECT default_form, image_dir, image_host FROM config;' var sql = 'SELECT default_form, image_dir, image_host FROM config;'
@ -23,8 +23,8 @@ Vn.Gui = new Class
+'SELECT name FROM customer_user;' +'SELECT name FROM customer_user;'
+'CALL form_list ();'; +'CALL form_list ();';
this.conn.execQuery (sql, this.onMainQueryDone.bind (this)); this.conn.execQuery (sql, this.onMainQueryDone.bind (this));
}, }
get: function () ,get: function ()
{ {
return this._conn; return this._conn;
} }
@ -41,7 +41,7 @@ Vn.Gui = new Class
,initialize: function (props) ,initialize: function (props)
{ {
this.parent (props); Vn.includeCss ('js/hedera/gui.css');
this.builderInit ('js/hedera/gui.xml'); this.builderInit ('js/hedera/gui.xml');
this.loadingCount = 0; this.loadingCount = 0;
@ -72,6 +72,8 @@ Vn.Gui = new Class
if (Vn.Cookie.check ('hedera_supplant')) if (Vn.Cookie.check ('hedera_supplant'))
this.supplantUser (Vn.Cookie.get ('hedera_supplant')); this.supplantUser (Vn.Cookie.get ('hedera_supplant'));
this.parent (props);
} }
,show: function () ,show: function ()
@ -243,7 +245,7 @@ Vn.Gui = new Class
this.errorHandler (error); this.errorHandler (error);
} }
,onConnLoading: function (conn, isLoading) ,_onConnLoadChange: function (conn, isLoading)
{ {
if (isLoading) if (isLoading)
this.loaderPush (); this.loaderPush ();
@ -425,7 +427,6 @@ Vn.Gui = new Class
this.activeForm = new formInfo.klass (this, formInfo); this.activeForm = new formInfo.klass (this, formInfo);
this.activeForm.open (); this.activeForm.open ();
this.activeForm.activate ();
} }
,setTitle: function (title) ,setTitle: function (title)
@ -448,7 +449,6 @@ Vn.Gui = new Class
{ {
if (this.activeForm) if (this.activeForm)
{ {
this.activeForm.deactivate ();
this.activeForm.close (); this.activeForm.close ();
this.activeForm.unref (); this.activeForm.unref ();
this.activeForm = null; this.activeForm = null;
@ -544,6 +544,7 @@ Vn.Gui = new Class
,_destroy: function () ,_destroy: function ()
{ {
Vn.excludeCss ('js/hedera/gui.css');
this.hide (); this.hide ();
this.hashParam.unref (); this.hashParam.unref ();
this.parent (); this.parent ();

View File

@ -7,14 +7,17 @@
.vn-login p, .vn-login p,
.vn-login a .vn-login a
{ {
font-size: 1.2em; font-size: 1.1em;
font-weight: normal; font-weight: normal;
color: #333;
/* text-shadow: 0 0.2em 0.2em #AAA; */ /* text-shadow: 0 0.2em 0.2em #AAA; */
} }
/* Header */ /* Header */
.vn-login
{
color: #333;
}
.vn-login .header .vn-login .header
{ {
z-index: 10; z-index: 10;
@ -119,9 +122,17 @@
{ {
text-align: left; text-align: left;
} }
.vn-login .submit
{
text-align: center;
}
.vn-login .submit > *
{
display: inline-block;
vertical-align: top;
}
.vn-login input[type=submit] .vn-login input[type=submit]
{ {
display: block;
margin: 0 auto; margin: 0 auto;
background-color: #AD4; background-color: #AD4;
border: 1px solid #8B2; border: 1px solid #8B2;
@ -133,6 +144,17 @@
{ {
background-color: #9C3; background-color: #9C3;
} }
.vn-login .wrapper
{
width: 0;
overflow: visible;
position: relative;
}
.vn-login .htk-spinner
{
margin: .45em 1em;
position: absolute;
}
.vn-login .bottom .vn-login .bottom
{ {
text-align: center; text-align: center;

View File

@ -5,19 +5,52 @@ Vn.define (function () {
Vn.Login = new Class Vn.Login = new Class
({ ({
Extends: Htk.Widget Extends: Htk.Widget,
Properties:
{
conn:
{
type: Db.Conn
,set: function (x)
{
this.link ({_conn: x}, {'loading-changed': this._onConnLoadChange});
}
,get: function ()
{
return this._conn;
}
}
}
,initialize: function (props) ,initialize: function (props)
{ {
this.parent (props);
this.builderInit ('js/hedera/login.xml'); this.builderInit ('js/hedera/login.xml');
var self = this; var self = this;
this.$('form').onsubmit = function () this.$('form').onsubmit = function ()
{ {
self.onSubmit (); self._onSubmit ();
return false; return false;
}; };
this.parent (props);
}
,_onConnLoadChange: function (conn, isLoading)
{
this._disableUi (isLoading);
}
,_disableUi: function (disabled)
{
if (disabled)
this.$('spinner').start ();
else
this.$('spinner').stop ();
this.$('user').disabled = disabled;
this.$('pass').disabled = disabled;
this.$('submit').disabled = disabled;
} }
,show: function () ,show: function ()
@ -27,7 +60,7 @@ Vn.Login = new Class
if (Vn.Cookie.check ('vn_user')) if (Vn.Cookie.check ('vn_user'))
this.$('user').value = Vn.Cookie.get ('vn_user'); this.$('user').value = Vn.Cookie.get ('vn_user');
this.focusUserInput (); this._focusUserInput ();
} }
,hide: function () ,hide: function ()
@ -35,44 +68,33 @@ Vn.Login = new Class
Vn.Node.remove (this.node); Vn.Node.remove (this.node);
} }
,focusUserInput: function () ,_focusUserInput: function ()
{ {
var userEntry = this.$('user'); var userEntry = this.$('user');
userEntry.focus (); userEntry.focus ();
userEntry.select (); userEntry.select ();
} }
,disableInputs: function (disabled) ,_onSubmit: function ()
{ {
this.$('user').disabled = disabled; this._conn.open (
this.$('pass').disabled = disabled;
this.$('submit').disabled = disabled;
}
,onSubmit: function ()
{
this.disableInputs (true);
this.conn.open (
this.$('user').value, this.$('user').value,
this.$('pass').value, this.$('pass').value,
this.$('remember').value, this.$('remember').value,
this.onConnOpen.bind (this) this._onConnOpen.bind (this)
); );
} }
,onConnOpen: function (conn, success) ,_onConnOpen: function (conn, success)
{ {
this.$('pass').value = ''; this.$('pass').value = '';
if (!success) if (!success)
{
Htk.Toast.showError (_('Invalid login')); Htk.Toast.showError (_('Invalid login'));
}
else else
this.signalEmit ('login'); this.signalEmit ('login');
this.disableInputs (false); this._focusUserInput ();
this.focusUserInput ();
} }
}); });

View File

@ -2,7 +2,7 @@
<div id="main" class="vn-login"> <div id="main" class="vn-login">
<div class="header"> <div class="header">
<div> <div>
<a href="#!page=web&amp;guest=true&amp;form=cms/about"> <a href="#!form=cms/about&amp;guest=true">
<t>I want to know more</t> <t>I want to know more</t>
</a> </a>
</div> </div>
@ -29,8 +29,11 @@
<input type="checkbox" id="remember" name="remember"/> <input type="checkbox" id="remember" name="remember"/>
<label for="remember"><t>Do not sign out</t></label> <label for="remember"><t>Do not sign out</t></label>
</div> </div>
<div> <div class="submit">
<input id="submit" type="submit" value="_Enter"/> <input id="submit" type="submit" value="_Enter"/>
<div class="wrapper">
<htk-spinner id="spinner"/>
</div>
</div> </div>
<div class="info"> <div class="info">
<p><t>Login mail</t></p> <p><t>Login mail</t></p>

View File

@ -3,15 +3,15 @@
@media screen @media screen
{ {
* { font-size: 12pt; } body { font-size: 12pt; }
} }
@media (min-resolution: 120dpi) and (orientation: portrait) @media (min-resolution: 120dpi) and (orientation: portrait)
{ {
* { font-size: 11pt; } body { font-size: 11pt; }
} }
@media (min-resolution: 120dpi) and (orientation: landscape) @media (min-resolution: 120dpi) and (orientation: landscape)
{ {
* { font-size: 11pt; } body { font-size: 11pt; }
} }
/* Global */ /* Global */
@ -20,21 +20,21 @@ body
{ {
color: #333; color: #333;
margin: 0; margin: 0;
font-family: 'Open Sans', 'Verdana', 'Sans';
} }
body,
label, label,
button, button,
input, input,
textarea,
select, select,
textarea,
option option
{ {
font-size: 1em; font-size: inherit;
font-family: 'Open Sans', 'Verdana', 'Sans'; font-family: inherit;
} }
iframe iframe
{ {
border: 0; border: none;
} }
fieldset, fieldset,
div div
@ -91,14 +91,18 @@ p
outline: 1px solid rgba(1, 1, 1, 0.15); outline: 1px solid rgba(1, 1, 1, 0.15);
-moz-outline-radius: .1em; -moz-outline-radius: .1em;
} }
button::-moz-focus-inner button::-moz-focus-inner,
input[type=submit]::-moz-focus-inner,
input[type=button]::-moz-focus-inner,
input[type=reset]::-moz-focus-inner
{ {
border: none; border: none;
} }
select:focus select:-moz-focusring
{ {
color: transparent; outline: none;
text-shadow: 0 0 0 #333; /* color: transparent;
text-shadow: 0 0 0 #333;*/
} }
/* Inputs */ /* Inputs */
@ -180,7 +184,8 @@ option
button, button,
input[type=submit], input[type=submit],
input[type=button] input[type=button],
input[type=reset]
{ {
border: none; border: none;
background-color: transparent; background-color: transparent;
@ -191,7 +196,8 @@ input[type=button]
} }
button:hover, button:hover,
input[type=submit]:hover, input[type=submit]:hover,
input[type=button]:hover input[type=button]:hover,
input[type=reset]:hover
{ {
background-color: rgba(1, 1, 1, 0.1); background-color: rgba(1, 1, 1, 0.1);
} }

View File

@ -80,24 +80,24 @@ Htk.ColumnImage = new Class
,stamp: null ,stamp: null
}; };
this.setSrc (cell); this._setSrc (cell);
if (this.showFull) if (this.showFull)
{ {
img.addEventListener ('mouseover', this.onMouseOver.bind (this, cell)); img.addEventListener ('mouseover', this._onMouseOver.bind (this, cell));
img.addEventListener ('mouseout', this.onMouseOut.bind (this)); img.addEventListener ('mouseout', this._onMouseOut.bind (this));
} }
if (this.editable) if (this.editable)
{ {
img.className = 'editable'; img.className = 'editable';
img.addEventListener ('dblclick', this.onDoubleClick.bind (this, cell)); img.addEventListener ('dblclick', this._onDoubleClick.bind (this, cell));
img.addEventListener ('error', this.onImageError.bind (this, cell)); img.addEventListener ('error', this._onImageError.bind (this, cell));
} }
return td; return td;
} }
,setSrc: function (cell) ,_setSrc: function (cell)
{ {
if (cell.value) if (cell.value)
{ {
@ -114,47 +114,49 @@ Htk.ColumnImage = new Class
cell.img.src = url; cell.img.src = url;
} }
else else
this.onImageError (cell); this._onImageError (cell);
} }
,onImageError: function (cell) ,_onImageError: function (cell)
{ {
if (!cell.error) if (!cell.error)
{ {
cell.error = true; cell.error = true;
cell.img.src = 'image/empty.png'; cell.img.src = 'image/unknown.svg';
} }
} }
,onMouseOver: function (cell) ,_onMouseOver: function (cell)
{ {
if (cell.error)
return;
var src = this._fullDir ? this._fullDir : 'full'; var src = this._fullDir ? this._fullDir : 'full';
src += '/'+ cell.value; src += '/'+ cell.value;
if (cell.stamp) if (cell.stamp)
src += '?'+ cell.stamp; src += '?'+ cell.stamp;
if (!cell.error) this._fullImage.show (this._basedir +'/'+ src);
this._fullImage.show (this._basedir +'/'+ src);
} }
,onMouseOut: function () ,_onMouseOut: function ()
{ {
this._fullImage.hide (); this._fullImage.hide ();
} }
,onDoubleClick: function (cell) ,_onDoubleClick: function (cell)
{ {
var editor = new Htk.ImageEditor (); var editor = new Htk.ImageEditor ();
editor.setData (cell.value, this._directory); editor.setData (cell.value, this._directory);
this.nameChangedHandler = this.onNameChange.bind (this, cell); this.nameChangedHandler = this._onNameChange.bind (this, cell);
editor.on ('name-changed', this.nameChangedHandler); editor.on ('name-changed', this.nameChangedHandler);
this.fileUploadedHandler = this.onFileUpload.bind (this, cell); this.fileUploadedHandler = this._onFileUpload.bind (this, cell);
editor.on ('file-uploaded', this.fileUploadedHandler); editor.on ('file-uploaded', this.fileUploadedHandler);
this.editorClosedHandler = this.onEditorClose.bind (this); this.editorClosedHandler = this._onEditorClose.bind (this);
editor.on ('closed', this.editorClosedHandler); editor.on ('closed', this.editorClosedHandler);
this.popup = new Htk.Popup (); this.popup = new Htk.Popup ();
@ -162,21 +164,21 @@ Htk.ColumnImage = new Class
this.popup.show (cell.img); this.popup.show (cell.img);
} }
,onNameChange: function (cell, editor, value) ,_onNameChange: function (cell, editor, value)
{ {
cell.value = value; cell.value = value;
this.setSrc (cell); this._setSrc (cell);
this.changed (cell.tr, value); this.changed (cell.tr, value);
} }
,onFileUpload: function (cell, editor) ,_onFileUpload: function (cell, editor)
{ {
cell.stamp = new Date ().getTime (); cell.stamp = new Date ().getTime ();
this.setSrc (cell); this._setSrc (cell);
this.popup.hide (); this.popup.hide ();
} }
,onEditorClose: function (editor) ,_onEditorClose: function (editor)
{ {
editor.disconnect ('name-changed', this.nameChangedHandler); editor.disconnect ('name-changed', this.nameChangedHandler);
editor.disconnect ('file-uploaded', this.fileUploadedHandler); editor.disconnect ('file-uploaded', this.fileUploadedHandler);

View File

@ -34,33 +34,36 @@ Htk.DateChooser = new Class
,setEditable: function (editable) ,setEditable: function (editable)
{ {
Vn.Node.remove (this.label);
if (this.calendar)
{
this.node.removeChild (this.button);
this.calendar.disconnectByInstance (this);
this.calendar = null;
}
if (editable && !this.calendar) if (editable && !this.calendar)
{ {
Vn.Node.remove (this.label);
this.button = document.createElement ('button'); this.button = document.createElement ('button');
this.button.className = 'input'; this.button.className = 'input';
this.button.title = _('ChangeDate'); this.button.title = _('ChangeDate');
this.button.addEventListener ('click', this.showCalendar.bind (this)); this.button.addEventListener ('click', this._onClick.bind (this));
this.button.appendChild (this.label); this.button.appendChild (this.label);
this.node.appendChild (this.button); this.node.appendChild (this.button);
this.calendar = new Htk.Calendar (); this.calendar = new Htk.Calendar ();
this.calendar.on ('changed', this.calendarChanged.bind (this)); this.calendar.on ('changed', this._onCalendarChange.bind (this));
this.popup = new Htk.Popup (); this.popup = new Htk.Popup ();
this.popup.setChild (this.calendar); this.popup.setChild (this.calendar);
} }
else if (!editable) else if (!editable)
{
Vn.Node.remove (this.label);
this.node.appendChild (this.label); this.node.appendChild (this.label);
this.calendar = null;
this.node.removeChild (this.button);
}
} }
,calendarChanged: function (calendar) ,_onCalendarChange: function (calendar)
{ {
if (this.ignoreCalendarChange) if (this.ignoreCalendarChange)
return; return;
@ -72,7 +75,7 @@ Htk.DateChooser = new Class
this.valueChanged (newDate); this.valueChanged (newDate);
} }
,showCalendar: function (event) ,_onClick: function (event)
{ {
this.ignoreCalendarChange = true; this.ignoreCalendarChange = true;
this.calendar.value = this._value; this.calendar.value = this._value;

View File

@ -19,7 +19,7 @@ Htk.Image = new Class
{ {
this._directory = x; this._directory = x;
this._basedir = Vn.Config['image_dir'] +'/'+ x; this._basedir = Vn.Config['image_dir'] +'/'+ x;
this.render (false); this._setSrc ();
} }
,get: function () ,get: function ()
{ {
@ -35,7 +35,7 @@ Htk.Image = new Class
,set: function (x) ,set: function (x)
{ {
this._subdir = x; this._subdir = x;
this.render (false); this._setSrc ();
} }
,get: function () ,get: function ()
{ {
@ -56,8 +56,8 @@ Htk.Image = new Class
fullImage = new Htk.FullImage (); fullImage = new Htk.FullImage ();
this._fullImage = fullImage; this._fullImage = fullImage;
this.node.addEventListener ('mouseover', this.onMouseOver.bind (this)); this.node.addEventListener ('mouseover', this._onMouseOver.bind (this));
this.node.addEventListener ('mouseout', this.onMouseOut.bind (this)); this.node.addEventListener ('mouseout', this._onMouseOut.bind (this));
} }
this._showFull = x; this._showFull = x;
@ -87,28 +87,35 @@ Htk.Image = new Class
,_directory: null ,_directory: null
,_subdir: null ,_subdir: null
,_basedir: null ,_basedir: null
,_empty: false ,_error: false
,_showFull: false ,_showFull: false
,_fullDir: null ,_fullDir: null
,_editable: false
,initialize: function (props) ,initialize: function (props)
{ {
this.createElement ('img'); this.createElement ('img');
// this.node.addEventListener ('error', this._onImageError.bind (this)); this.node.className = 'htk-image';
this.node.addEventListener ('error', this._onImageError.bind (this));
this.setEditable (this._editable);
this.parent (props); this.parent (props);
} }
,_onImageError: function () ,setEditable: function (editable)
{ {
if (!this._empty) if (editable)
{ {
this._empty = true; Vn.Node.addClass (this.node, 'editable');
this.node.src = 'image/empty.png'; this.node.addEventListener ('dblclick', this._onDoubleClick.bind (this));
} }
else
Vn.Node.removeClass (this.node, 'editable');
this._setEmpty ();
} }
,render: function (force) ,_setSrc: function ()
{ {
if (this._value) if (this._value)
{ {
@ -122,28 +129,36 @@ Htk.Image = new Class
url += this._value; url += this._value;
if (force) if (this._stamp)
url += '?' + (new Date()).getTime (); url += '?'+ this._stamp;
this._empty = false; this._error = false;
this.node.src = url; this.node.src = url;
this.node.style.display = ''; this.node.style.display = '';
} }
else else
{ this._setEmpty ();
}
,_setEmpty: function ()
{
if (this._value !== null && this._value !== '')
return;
if (this._editable)
this.node.src = 'image/add-photo.svg';
else
delete this.node.src; delete this.node.src;
this.node.style.display = 'none';
}
} }
,putValue: function (value) ,putValue: function (value)
{ {
this.render (false); this._setSrc ();
} }
,onMouseOver: function (cell) ,_onMouseOver: function ()
{ {
if (!this._showFull) if (!this._showFull || !this._value || this._error)
return; return;
var src = this._fullDir ? this._fullDir : 'full'; var src = this._fullDir ? this._fullDir : 'full';
@ -152,34 +167,50 @@ Htk.Image = new Class
if (this._stamp) if (this._stamp)
src += '?'+ this._stamp; src += '?'+ this._stamp;
if (!cell.error) this._fullImage.show (this._basedir +'/'+ src);
this._fullImage.show (this._basedir +'/'+ src);
} }
,onMouseOut: function () ,_onMouseOut: function ()
{ {
this._fullImage.hide (); this._fullImage.hide ();
} }
,setEditable: function (editable) ,_onImageError: function ()
{ {
if (editable) if (this._error)
{ return;
var obj = this;
this.style.cursor = 'pointer'; this._error = true;
this.node.addEventListener ('dblclick',
this.onDoubleClick.bind (this));
}
} }
,onDoubleClick: function (event) ,_onDoubleClick: function ()
{ {
var editor = new Htk.ImageEditor (); var editor = new Htk.ImageEditor ();
editor.setData (cell.value, this._directory); editor.setData (this.value, this._directory);
editor.on ('name-changed', this._onNameChange, this);
editor.on ('file-uploaded', this._onFileUpload, this);
editor.on ('closed', this._onEditorClose, this);
this.popup = new Htk.Popup (); this.popup = new Htk.Popup ();
this.popup.setChild (editor); this.popup.setChild (editor);
this.popup.show (this.node); this.popup.show (this.node);
} }
,_onNameChange: function (editor, value)
{
this.value = value;
}
,_onFileUpload: function (cell, editor)
{
this._stamp = new Date ().getTime ();
this.setSrc (cell);
this.popup.hide ();
}
,_onEditorClose: function (editor)
{
editor.disconnectByInstance (this);
}
}); });

View File

@ -109,13 +109,19 @@ Htk.Select = new Class
,showColumnIndex: 1 ,showColumnIndex: 1
,showColumnName: null ,showColumnName: null
,_notNull: true ,_notNull: true
,_webkitRefresh: false
,initialize: function (props) ,initialize: function (props)
{ {
this.createElement ('select'); var select = this.createElement ('select');
this.node.addEventListener ('change', this._onChange.bind (this)); select.addEventListener ('change', this._onChange.bind (this));
this._addPlaceholder (this._placeholder);
// Webkit bug: Does not refresh select options
if (navigator.userAgent.match (/WebKit/))
select.addEventListener ('mousedown',
this._onWebkitMouseDown.bind (this));
this._addPlaceholder (this._placeholder);
this.parent (props); this.parent (props);
} }
@ -230,29 +236,13 @@ Htk.Select = new Class
this.addOption (data[i][this.showColumnIndex], data[i][1]); this.addOption (data[i][this.showColumnIndex], data[i][1]);
this.selectOption (); this.selectOption ();
this._onTimeout ();
this.signalEmit ('ready'); this.signalEmit ('ready');
} }
else else
this.setRow (-1); this.setRow (-1);
}
,_onTimeout: function () this._webkitRefreshOptions ();
{
if (this._blockMouseDown || !navigator.userAgent.match (/WebKit/))
return;
this._blockMouseDown = true;
this.node.blur();
var e = document.createEvent('MouseEvents');
e.initMouseEvent ('mousedown',
true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
this.node.dispatchEvent(e);
this._blockMouseDown = false;
this.node.focus ();
} }
,setEditable: function (editable) ,setEditable: function (editable)
@ -276,4 +266,39 @@ Htk.Select = new Class
{ {
this.selectOption (); this.selectOption ();
} }
// Webkit bug: Does not refresh select options
,_webkitRefreshOptions: function ()
{
if (document.activeElement === this.node && this._webkitRefresh)
{
if (this._model.ready)
this._webkitRefresh = false;
this.node.blur();
this.node.focus ();
setTimeout (this._onWebkitTimeout.bind (this), 0);
}
}
,_onWebkitMouseDown: function ()
{
if (this._webkitBlock)
return;
this._webkitRefresh = true;
}
,_onWebkitTimeout: function ()
{
this._webkitBlock = true;
var e = document.createEvent('MouseEvents');
e.initMouseEvent ('mousedown',
true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
this.node.dispatchEvent(e);
this._webkitBlock = false;
}
}); });

View File

@ -22,7 +22,12 @@ Htk.ImageEditor = new Class
,onNameChange: function () ,onNameChange: function ()
{ {
this.signalEmit ('name-changed', this.$('name').value); var newValue = this.$('name').value;
if (!newValue)
newValue = null
this.signalEmit ('name-changed', newValue);
} }
,onFormSubmit: function () ,onFormSubmit: function ()

View File

@ -259,6 +259,14 @@ td.cell-image img
border-radius: 0; border-radius: 0;
} }
/* Image */
.htk-image.editable:hover
{
cursor: pointer;
opacity: 0.85;
}
/* Full image */ /* Full image */
.htk-full-image .htk-full-image
@ -299,7 +307,7 @@ td.cell-image img
left: 50%; left: 50%;
top: 4em; top: 4em;
width: 21em; width: 21em;
margin-left: -11em; margin-left: -10.5em;
text-align: center; text-align: center;
overflow: auto; overflow: auto;
max-height: 40em; max-height: 40em;
@ -481,12 +489,16 @@ td.cell-image img
background-color: white; background-color: white;
height: 2.2em; height: 2.2em;
} }
.htk-search-entry > *
{
display: inline-block;
vertical-align: middle;
}
.htk-search-entry > img .htk-search-entry > img
{ {
margin: 0; margin: 0;
height: 1.5em; height: 1.5em;
margin-left: .4em; margin: 0 .4em;
vertical-align: middle;
} }
.htk-search-entry > .entry .htk-search-entry > .entry
{ {

View File

@ -1,4 +1,3 @@
Vn.include ('js/misc/tinymce/tinymce.min');
Vn.include ('js/misc/mootools'); Vn.include ('js/misc/mootools');

View File

@ -31,12 +31,38 @@ Vn.HashParam = new Class
{ {
return this._key; return this._key;
} }
},
value:
{
type: Object
,set: function (x)
{
this._value = x;
}
,get: function ()
{
return this._value;
}
},
type:
{
type: Object
,set: function (x)
{
this._type = x;
this._onHashChange ();
}
,get: function ()
{
return this._type;
}
} }
} }
,lock: false ,_lock: false
,value: undefined ,_value: undefined
,_key: null ,_key: null
,_type: null
,initialize: function (props) ,initialize: function (props)
{ {
@ -53,9 +79,20 @@ Vn.HashParam = new Class
var newValue = Vn.Hash.get (this._key); var newValue = Vn.Hash.get (this._key);
if (this.value != newValue) if (this._type)
switch (this._type)
{ {
this.value = newValue; case Boolean:
newValue = (/^(true|1)$/i).test (newValue);
break;
case Number:
newValue = 0 + new Number (newValue);
break;
}
if (this._value != newValue)
{
this._value = newValue;
this.signalEmit ('changed'); this.signalEmit ('changed');
this._refreshParam (); this._refreshParam ();
} }
@ -63,25 +100,25 @@ Vn.HashParam = new Class
,_refreshParam: function () ,_refreshParam: function ()
{ {
if (this._param && !this.lock) if (this._param && !this._lock)
{ {
this.lock = true; this._lock = true;
this._param.value = this.value; this._param.value = this._value;
this.lock = false; this._lock = false;
} }
} }
,_onParamChange: function () ,_onParamChange: function ()
{ {
if (this.lock) if (this._lock)
return; return;
var map = {}; var map = {};
map[this.key] = this._param.value; map[this.key] = this._param.value;
this.lock = true; this._lock = true;
Vn.Hash.add (map); Vn.Hash.add (map);
this.lock = false; this._lock = false;
} }
}); });

View File

@ -58,12 +58,16 @@ Vn.Hash =
**/ **/
,set: function (map) ,set: function (map)
{ {
if (map)
for (var key in map) for (var key in map)
if (map[key] === null || map[key] === undefined) if (map[key] === null || map[key] === undefined)
delete map[key]; delete map[key];
var newHash = this.make (map); var newHash = this.make (map);
if (!map)
map = {};
if (newHash !== this._hash) if (newHash !== this._hash)
{ {
this._hashMap = map; this._hashMap = map;
@ -88,7 +92,7 @@ Vn.Hash =
{ {
var hash = '#!'; var hash = '#!';
if (add) if (add && map)
for (var key in this._hashMap) for (var key in this._hashMap)
if (!map[key]) if (!map[key])
map[key] = this._hashMap[key]; map[key] = this._hashMap[key];

View File

@ -102,11 +102,13 @@ var Vn =
var callbacks = includeData.callbacks; var callbacks = includeData.callbacks;
if (callbacks)
for (var i = 0; i < callbacks.length; i++) for (var i = 0; i < callbacks.length; i++)
callbacks[i] (includeData.loaded); callbacks[i] (includeData.loaded);
var dependants = includeData.dependants; var dependants = includeData.dependants;
if (dependants)
for (var i = 0; i < dependants.length; i++) for (var i = 0; i < dependants.length; i++)
{ {
var dependant = dependants[i]; var dependant = dependants[i];

View File

@ -17,7 +17,7 @@
,"BuyersAndTraders": "9 compradors especialitzats i els nostres 20 comercials t'assessoraran en tot el que necessitis." ,"BuyersAndTraders": "9 compradors especialitzats i els nostres 20 comercials t'assessoraran en tot el que necessitis."
,"Training": "Verdnatura formació" ,"Verdnatura training": "Verdnatura formació"
,"GoodTraining": "En Verdnatura sabem que una bona formació és imprescindible per al desenvolupament òptim de qualsevol activitat, i com no, també la de florista." ,"GoodTraining": "En Verdnatura sabem que una bona formació és imprescindible per al desenvolupament òptim de qualsevol activitat, i com no, també la de florista."
,"SpecialTrainingPrices": "Perquè el pressupost d'una escola no repercuteixi en la qualitat de la teva formació, col·laborem amb una política de preus especials per a totes aquelles escoles que ho sol·licitin realitzar cursos a les nostres instal·lacions de Verdnatura Silla." ,"SpecialTrainingPrices": "Perquè el pressupost d'una escola no repercuteixi en la qualitat de la teva formació, col·laborem amb una política de preus especials per a totes aquelles escoles que ho sol·licitin realitzar cursos a les nostres instal·lacions de Verdnatura Silla."

View File

@ -1,5 +1,7 @@
{ {
"Sent": "Enviat" "Start order": "Començar comanda"
,"Sent": "Enviat"
,"Author": "Autor" ,"Author": "Autor"
,"votes": "vots" ,"votes": "vots"
,"NoAnswerSelected": "No has seleccionat cap resposta" ,"NoAnswerSelected": "No has seleccionat cap resposta"

View File

@ -7,15 +7,22 @@
,"ArticleNotFound": "Artcle no trobat" ,"ArticleNotFound": "Artcle no trobat"
,"ArticleNotAvailable": "Article no disponible" ,"ArticleNotAvailable": "Article no disponible"
,"StartOrder": "Començar encàrrec" ,"Switch view": "Canviar vista"
,"StartOrder": "Començar comanda"
,"ShoppingBasket": "Cistella de la compra" ,"ShoppingBasket": "Cistella de la compra"
,"Realm": "Família" ,"Search": "Cercar"
,"Subtype": "Subtipus" ,"Configure": "Configurar"
,"Date:": "Data:" ,"Order by": "Ordenar"
,"Warehouse:": "Magatzem:" ,"Available": "Displonible"
,"Search:": "Cercar:" ,"Size": "Mesura"
,"GeneralSearch": "Cerca general" ,"Realm": "Regne"
,"Family": "Família"
,"Color": "Color"
,"Producer": "Productor"
,"Origin": "Origen"
,"Category": "Categoria"
,"Remove filters": "Esborrar filtres"
,"Amount": "Quant" ,"Amount": "Quant"
,"Aval": "Disp" ,"Aval": "Disp"
@ -27,7 +34,9 @@
,"Pack": "Pack" ,"Pack": "Pack"
,"Origin": "Origen" ,"Origin": "Origen"
,"Price": "Preu" ,"Price": "Preu"
,"%.0d Units": "%.0d Unitats"
,"from": "des de"
,"from %.2d€": "des de %.2d€" ,"from %.2d€": "des de %.2d€"
,"AddToBasket": "Afegir article" ,"AddToBasket": "Afegir article"
,"Add": "Afegir" ,"Add": "Afegir"

View File

@ -20,6 +20,7 @@
,"ShoppingBasket": "Cistella de la compra" ,"ShoppingBasket": "Cistella de la compra"
,"SeeOrder": "Mostrar detall de l'encàrrec" ,"SeeOrder": "Mostrar detall de l'encàrrec"
,"Delivery": "Lliurament"
,"TicketNumber": "N ticket" ,"TicketNumber": "N ticket"
,"SentAddress": "Adreça d'enviament" ,"SentAddress": "Adreça d'enviament"
,"Consignee": "Consignatari" ,"Consignee": "Consignatari"

View File

@ -1,20 +1,13 @@
{ {
"OrderDetail": "Detall de l'encarrec" "OrderDetail": "Detall de l'encarrec"
,"%A, %e of %B %Y": "%A, %e de %B %Y"
,"Print delivery note": "Imprimir albarà" ,"Print delivery note": "Imprimir albarà"
,"TicketNumber:": "N ticket:" ,"Delivery": "Entrega"
,"DateExit:": "Data d'enviament:" ,"Total": "Total"
,"SendMethod:": "Forma d'enviament:" ,"Tax base": "Base imposable"
,"Notes:": "Notes:" ,"VAT": "IVA"
,"TicketTotal:": "Total encàrrec:"
,"(VATIncluded)": "(IVA inclós)"
,"PC": "Codi postal"
,"City": "Ciutat"
,"Province": "Província"
,"Address": "Domicili"
,"Consignee": "Consignatari"
,"ItemNumber": "N article" ,"ItemNumber": "N article"
,"Amount": "Quant" ,"Amount": "Quant"

View File

@ -17,7 +17,7 @@
,"BuyersAndTraders": "9 specialized trade buyers and our 20 advise you on everything you need." ,"BuyersAndTraders": "9 specialized trade buyers and our 20 advise you on everything you need."
,"Training": "Verdnatura training" ,"Verdnatura training": "Verdnatura training"
,"GoodTraining": "In Verdnatura we know that a good education is essential for the optimal development of any activity, and of course, also the florist." ,"GoodTraining": "In Verdnatura we know that a good education is essential for the optimal development of any activity, and of course, also the florist."
,"SpecialTrainingPrices": "For the school budget does not affect the quality of your training, we work with special pricing policy for all schools that request it take courses in our facilities Verdnatura chair." ,"SpecialTrainingPrices": "For the school budget does not affect the quality of your training, we work with special pricing policy for all schools that request it take courses in our facilities Verdnatura chair."

View File

@ -1,5 +1,7 @@
{ {
"Sent": "Sent" "Start order": "Start order"
,"Sent": "Sent"
,"Author": "Author" ,"Author": "Author"
,"votes": "votes" ,"votes": "votes"
,"NoAnswerSelected": "No answer selected" ,"NoAnswerSelected": "No answer selected"

View File

@ -12,7 +12,8 @@
,"ShoppingBasket": "Shopping basket" ,"ShoppingBasket": "Shopping basket"
,"Search": "Search" ,"Search": "Search"
,"Order by": "Order by" ,"Configure": "Configure"
,"Order": "Order"
,"Available": "Available" ,"Available": "Available"
,"Size": "Size" ,"Size": "Size"
,"Realm": "Realm" ,"Realm": "Realm"
@ -33,7 +34,7 @@
,"Pack": "Pack" ,"Pack": "Pack"
,"Origin": "Origin" ,"Origin": "Origin"
,"Price": "Price" ,"Price": "Price"
,"%.0d Units": "%.0d Units " ,"%.0d Units": "%.0d Units"
,"from": "from" ,"from": "from"
,"from %.2d€": "from %.2d€" ,"from %.2d€": "from %.2d€"

View File

@ -20,6 +20,7 @@
,"ShoppingBasket": "Shopping basket" ,"ShoppingBasket": "Shopping basket"
,"SeeOrder": "Show details of the order" ,"SeeOrder": "Show details of the order"
,"Delivery": "Delivery"
,"TicketNumber": "Ticket number" ,"TicketNumber": "Ticket number"
,"SentAddress": "Delivery address" ,"SentAddress": "Delivery address"
,"Consignee": "Consignee" ,"Consignee": "Consignee"

View File

@ -1,20 +1,13 @@
{ {
"OrderDetail": "Order detail" "OrderDetail": "Order detail"
,"%A, %e of %B %Y": "%A, %e of %B %Y"
,"Print delivery note": "Print delivery note" ,"Print delivery note": "Print delivery note"
,"TicketNumber:": "Ticket number:" ,"Delivery": "Delivery"
,"DateExit:": "Delivery date:" ,"Total": "Total"
,"SendMethod:": "Delivery method:" ,"Tax base": "Tax base"
,"Notes:": "Notes:" ,"VAT": "VAT"
,"TicketTotal:": "Order total:"
,"(VATIncluded)": "(VAT included)"
,"PC": "Postal code"
,"City": "City"
,"Province": "Province"
,"Address": "Address"
,"Consignee": "Consignee"
,"ItemNumber": "Item number" ,"ItemNumber": "Item number"
,"Amount": "Amount" ,"Amount": "Amount"

View File

@ -17,7 +17,7 @@
,"BuyersAndTraders": "9 compradores especializados y nuestros 20 comerciales te asesorarán en todo lo que necesites." ,"BuyersAndTraders": "9 compradores especializados y nuestros 20 comerciales te asesorarán en todo lo que necesites."
,"Training": "Verdnatura formación" ,"Verdnatura training": "Verdnatura formación"
,"GoodTraining": "En Verdnatura sabemos que una buena formación es imprescindible para el desarrollo óptimo de cualquier actividad, y cómo no, también la de florista." ,"GoodTraining": "En Verdnatura sabemos que una buena formación es imprescindible para el desarrollo óptimo de cualquier actividad, y cómo no, también la de florista."
,"SpecialTrainingPrices": "Para que el presupuesto de una escuela no repercuta en la calidad de tu formación, colaboramos con una política de precios especiales para todas aquellas escuelas que lo soliciten realizar cursos en nuestras instalaciones de Verdnatura Silla." ,"SpecialTrainingPrices": "Para que el presupuesto de una escuela no repercuta en la calidad de tu formación, colaboramos con una política de precios especiales para todas aquellas escuelas que lo soliciten realizar cursos en nuestras instalaciones de Verdnatura Silla."

View File

@ -1,5 +1,7 @@
{ {
"Sent": "Enviado" "Start order": "Empezar pedido"
,"Sent": "Enviado"
,"Author": "Autor" ,"Author": "Autor"
,"votes": "votos" ,"votes": "votos"
,"NoAnswerSelected": "No has seleccionado ninguna respuesta" ,"NoAnswerSelected": "No has seleccionado ninguna respuesta"

View File

@ -12,6 +12,7 @@
,"ShoppingBasket": "Cesta de la compra" ,"ShoppingBasket": "Cesta de la compra"
,"Search": "Buscar" ,"Search": "Buscar"
,"Configure": "Configurar"
,"Order by": "Ordenar" ,"Order by": "Ordenar"
,"Available": "Displonible" ,"Available": "Displonible"
,"Size": "Medida" ,"Size": "Medida"
@ -20,7 +21,7 @@
,"Color": "Color" ,"Color": "Color"
,"Producer": "Productor" ,"Producer": "Productor"
,"Origin": "Origen" ,"Origin": "Origen"
,"Category": "Categoria" ,"Category": "Categoría"
,"Remove filters": "Quitar filtros" ,"Remove filters": "Quitar filtros"
,"Amount": "Cant" ,"Amount": "Cant"
@ -33,7 +34,7 @@
,"Pack": "Pack" ,"Pack": "Pack"
,"Origin": "Origen" ,"Origin": "Origen"
,"Price": "Precio" ,"Price": "Precio"
,"%.0d Units": "%.0d Unidades " ,"%.0d Units": "%.0d Unidades"
,"from": "desde" ,"from": "desde"
,"from %.2d€": "desde %.2d€" ,"from %.2d€": "desde %.2d€"

View File

@ -20,6 +20,7 @@
,"ShoppingBasket": "Cesta de la compra" ,"ShoppingBasket": "Cesta de la compra"
,"SeeOrder": "Mostrar detalle del pedido" ,"SeeOrder": "Mostrar detalle del pedido"
,"Delivery": "Entrega"
,"TicketNumber": "Nº ticket" ,"TicketNumber": "Nº ticket"
,"SentAddress": "Dirección de envío" ,"SentAddress": "Dirección de envío"
,"Consignee": "Consignatario" ,"Consignee": "Consignatario"

View File

@ -1,20 +1,13 @@
{ {
"OrderDetail": "Detalle del pedido" "OrderDetail": "Detalle del pedido"
,"%A, %e of %B %Y": "%A, %e de %B %Y"
,"Print delivery note": "Imprimir albarán" ,"Print delivery note": "Imprimir albarán"
,"TicketNumber:": "Nº ticket:" ,"Delivery": "Entrega"
,"DateExit:": "Fecha de envío:" ,"Total": "Total"
,"SendMethod:": "Forma de envío:" ,"Tax base": "Base imponible"
,"Notes:": "Notas:" ,"VAT": "IVA"
,"TicketTotal:": "Total pedido:"
,"(VATIncluded)": "(IVA incluído)"
,"PC": "Código postal"
,"City": "Ciudad"
,"Province": "Provincia"
,"Address": "Domicilio"
,"Consignee": "Consignatario"
,"ItemNumber": "Nº artículo" ,"ItemNumber": "Nº artículo"
,"Amount": "Cant" ,"Amount": "Cant"

View File

@ -17,7 +17,7 @@
,"BuyersAndTraders": "9 acheteurs commerciaux spécialisés et notre 20 conseillera dans tout ce que vous avez besoin." ,"BuyersAndTraders": "9 acheteurs commerciaux spécialisés et notre 20 conseillera dans tout ce que vous avez besoin."
,"Training": "Formation Verdnatura" ,"Verdnatura training": "Formation Verdnatura"
,"GoodTraining": "Dans Verdnatura sait qu'une bonne éducation est essentielle pour le développement optimal de toute activité, et bien sûr, aussi le fleuriste." ,"GoodTraining": "Dans Verdnatura sait qu'une bonne éducation est essentielle pour le développement optimal de toute activité, et bien sûr, aussi le fleuriste."
,"SpecialTrainingPrices": "Pour le budget d'une école n'a aucun effet sur la qualité de votre formation, travailler avec la politique de tarification spéciale pour toutes les écoles qui le demandent de suivre des cours dans nos installations chaise Verdnatura." ,"SpecialTrainingPrices": "Pour le budget d'une école n'a aucun effet sur la qualité de votre formation, travailler avec la politique de tarification spéciale pour toutes les écoles qui le demandent de suivre des cours dans nos installations chaise Verdnatura."

View File

@ -1,5 +1,7 @@
{ {
"Sent": "Envoyé" "Start order": "Lancer commande"
,"Sent": "Envoyé"
,"Author": "Auteur" ,"Author": "Auteur"
,"votes": "votes" ,"votes": "votes"
,"NoAnswerSelected": "Vous avez pas sélectionné de réponse" ,"NoAnswerSelected": "Vous avez pas sélectionné de réponse"

View File

@ -7,15 +7,22 @@
,"ArticleNotFound": "Article non trouvé" ,"ArticleNotFound": "Article non trouvé"
,"ArticleNotAvailable": "Article non disponible" ,"ArticleNotAvailable": "Article non disponible"
,"Switch view": "Changer vue"
,"StartOrder": "Acheter" ,"StartOrder": "Acheter"
,"ShoppingBasket": "Mon panier" ,"ShoppingBasket": "Mon panier"
,"Search": "Recherche"
,"Configure": "Régler"
,"Order by": "Ordre"
,"Available": "Displonible"
,"Size": "Mesure"
,"Realm": "Famille" ,"Realm": "Famille"
,"Subtype": "Sous-genre" ,"Family": "Sous-genre"
,"Date:": "Date:" ,"Color": "Couleur"
,"Warehouse:": "Magasin:" ,"Producer": "Producteur"
,"Search:": "Recherche:" ,"Origin": "Origine"
,"GeneralSearch": "Recherche générale" ,"Category": "Catégorie"
,"Remove filters": "Retirer les filtres"
,"Amount": "Quant" ,"Amount": "Quant"
,"Aval": "Disp" ,"Aval": "Disp"
@ -27,7 +34,9 @@
,"Pack": "Pack" ,"Pack": "Pack"
,"Origin": "Origine" ,"Origin": "Origine"
,"Price": "Prix" ,"Price": "Prix"
,"%.0d Units": "%.0d Unités"
,"from": "pour"
,"from %.2d€": "pour %.2d€" ,"from %.2d€": "pour %.2d€"
,"AddToBasket": "Ajouter article" ,"AddToBasket": "Ajouter article"
,"Add": "Ajouter" ,"Add": "Ajouter"

View File

@ -20,6 +20,7 @@
,"ShoppingBasket": "Panier" ,"ShoppingBasket": "Panier"
,"SeeOrder": "Votre panier" ,"SeeOrder": "Votre panier"
,"Delivery": "Accouchement"
,"TicketNumber": "Numéro ticket" ,"TicketNumber": "Numéro ticket"
,"SentAddress": "Adresse de livraison" ,"SentAddress": "Adresse de livraison"
,"Consignee": "Destinataire" ,"Consignee": "Destinataire"

View File

@ -1,20 +1,13 @@
{ {
"OrderDetail": "Détails de la commande" "OrderDetail": "Détails de la commande"
,"%A, %e of %B %Y": "%A, %e de %B %Y"
,"Print delivery note": "Imprimer bulletin de livraison" ,"Print delivery note": "Imprimer bulletin de livraison"
,"TicketNumber:": "Num ticket:" ,"Delivery": "Accouchement"
,"DateExit:": "Date d'envoi:" ,"Total": "Total"
,"SendMethod:": "Mode d'envoi:" ,"Tax base": "Imposable"
,"Notes:": "Notes:" ,"VAT": "TVA"
,"TicketTotal:": "Total:"
,"(VATIncluded)": "(TVA comprise)"
,"PC": "Code postal"
,"City": "Ville"
,"Province": "Province"
,"Address": "Maison"
,"Consignee": "Destinataire"
,"ItemNumber": "Num article" ,"ItemNumber": "Num article"
,"Amount": "Quant" ,"Amount": "Quant"

View File

@ -17,7 +17,7 @@
,"BuyersAndTraders": "9 specialized trade buyers and our 20 advise you on everything you need." ,"BuyersAndTraders": "9 specialized trade buyers and our 20 advise you on everything you need."
,"Training": "Verdnatura training" ,"Verdnatura training": "Verdnatura training"
,"GoodTraining": "In Verdnatura we know that a good education is essential for the optimal development of any activity, and of course, also the florist." ,"GoodTraining": "In Verdnatura we know that a good education is essential for the optimal development of any activity, and of course, also the florist."
,"SpecialTrainingPrices": "For the school budget does not affect the quality of your training, we work with special pricing policy for all schools that request it take courses in our facilities Verdnatura chair." ,"SpecialTrainingPrices": "For the school budget does not affect the quality of your training, we work with special pricing policy for all schools that request it take courses in our facilities Verdnatura chair."

View File

@ -1,5 +1,7 @@
{ {
"Sent": "Sent" "Start order": "Захиалга эхлэх"
,"Sent": "Sent"
,"Author": "Author" ,"Author": "Author"
,"votes": "votes" ,"votes": "votes"
,"NoAnswerSelected": "No answer selected" ,"NoAnswerSelected": "No answer selected"

View File

@ -12,7 +12,8 @@
,"ShoppingBasket": "Shopping basket" ,"ShoppingBasket": "Shopping basket"
,"Search": "Search" ,"Search": "Search"
,"Order by": "Order by" ,"Configure": "Configure"
,"Order": "Order"
,"Available": "Available" ,"Available": "Available"
,"Size": "Size" ,"Size": "Size"
,"Realm": "Realm" ,"Realm": "Realm"
@ -33,7 +34,7 @@
,"Pack": "Pack" ,"Pack": "Pack"
,"Origin": "Origin" ,"Origin": "Origin"
,"Price": "Price" ,"Price": "Price"
,"%.0d Units": "%.0d Units " ,"%.0d Units": "%.0d Units"
,"from": "from" ,"from": "from"
,"from %.2d€": "from %.2d€" ,"from %.2d€": "from %.2d€"

View File

@ -20,6 +20,7 @@
,"ShoppingBasket": "Shopping basket" ,"ShoppingBasket": "Shopping basket"
,"SeeOrder": "Show details of the order" ,"SeeOrder": "Show details of the order"
,"Delivery": "Delivery"
,"TicketNumber": "Ticket number" ,"TicketNumber": "Ticket number"
,"SentAddress": "Delivery address" ,"SentAddress": "Delivery address"
,"Consignee": "Consignee" ,"Consignee": "Consignee"

View File

@ -1,20 +1,13 @@
{ {
"OrderDetail": "Order detail" "OrderDetail": "Order detail"
,"%A, %e of %B %Y": "%A, %e of %B %Y"
,"Print delivery note": "Print delivery note" ,"Print delivery note": "Print delivery note"
,"TicketNumber:": "Ticket number:" ,"Delivery": "Delivery"
,"DateExit:": "Delivery date:" ,"Total": "Total"
,"SendMethod:": "Delivery method:" ,"Tax base": "Tax base"
,"Notes:": "Notes:" ,"VAT": "VAT"
,"TicketTotal:": "Order total:"
,"(VATIncluded)": "(VAT included)"
,"PC": "Postal code"
,"City": "City"
,"Province": "Province"
,"Address": "Address"
,"Consignee": "Consignee"
,"ItemNumber": "Item number" ,"ItemNumber": "Item number"
,"Amount": "Amount" ,"Amount": "Amount"

View File

@ -17,7 +17,7 @@
,"BuyersAndTraders": "9 compradores especializados e nossos 20 comerciais te asessorarão em tudo o que necessites." ,"BuyersAndTraders": "9 compradores especializados e nossos 20 comerciais te asessorarão em tudo o que necessites."
,"Training": "Verdnatura formação" ,"Verdnatura training": "Verdnatura formação"
,"GoodTraining": "Em Verdnatura sabemos que uma boa formação é imprescindível para o desenvolvimento ótimo de qualqer atividade, e como não, também a de florista." ,"GoodTraining": "Em Verdnatura sabemos que uma boa formação é imprescindível para o desenvolvimento ótimo de qualqer atividade, e como não, também a de florista."
,"SpecialTrainingPrices": "Para que o orçamento de uma escola não repercuta na qualidade da sua formação, colaboramos com uma política de preços especiais para todas aquelas escolas que solicitem realizar cursos em nossas instalações de Verdnatura Silla." ,"SpecialTrainingPrices": "Para que o orçamento de uma escola não repercuta na qualidade da sua formação, colaboramos com uma política de preços especiais para todas aquelas escolas que solicitem realizar cursos em nossas instalações de Verdnatura Silla."

View File

@ -1,5 +1,7 @@
{ {
"Sent": "Enviado" "Start order": "Comece uma ordem"
,"Sent": "Enviado"
,"Author": "Autor" ,"Author": "Autor"
,"votes": "votos" ,"votes": "votos"
,"NoAnswerSelected": "Não seleccionou nenhuma resposta" ,"NoAnswerSelected": "Não seleccionou nenhuma resposta"

View File

@ -12,6 +12,7 @@
,"ShoppingBasket": "Cesta da compra" ,"ShoppingBasket": "Cesta da compra"
,"Search": "Buscar" ,"Search": "Buscar"
,"Configure": "Configurar"
,"Order by": "Organizar" ,"Order by": "Organizar"
,"Available": "Disponível" ,"Available": "Disponível"
,"Size": "Medida" ,"Size": "Medida"

View File

@ -20,6 +20,7 @@
,"ShoppingBasket": "Cesta da compra" ,"ShoppingBasket": "Cesta da compra"
,"SeeOrder": "Mostrar detalhe do pedido" ,"SeeOrder": "Mostrar detalhe do pedido"
,"Delivery": "Entrega"
,"TicketNumber": "Nº ticket" ,"TicketNumber": "Nº ticket"
,"SentAddress": "Endereço de envío" ,"SentAddress": "Endereço de envío"
,"Consignee": "Consignatario" ,"Consignee": "Consignatario"

View File

@ -1,20 +1,13 @@
{ {
"OrderDetail": "Detalhe do pedido" "OrderDetail": "Detalhe do pedido"
,"%A, %e of %B %Y": "%A, %e de %B %Y"
,"Print delivery note": "Imprimir guía de remessa" ,"Print delivery note": "Imprimir guía de remessa"
,"TicketNumber:": "Nº ticket:" ,"Delivery": "Entrega"
,"DateExit:": "Data de envío:" ,"Total": "Total"
,"SendMethod:": "Forma de envío:" ,"Tax base": "Tributável"
,"Notes:": "Notas:" ,"VAT": "IVA"
,"TicketTotal:": "Total pedido:"
,"(VATIncluded)": "(IVA incluído)"
,"PC": "Código postal"
,"City": "Município"
,"Province": "Distrito"
,"Address": "Endereço"
,"Consignee": "Consignatario"
,"ItemNumber": "Nº artículo" ,"ItemNumber": "Nº artículo"
,"Amount": "Qtde" ,"Amount": "Qtde"