Merge branch 'dev' of https://gitea.verdnatura.es/verdnatura/salix into 2811-entry_latest_buys

This commit is contained in:
jorgebl 2021-03-10 09:48:17 +01:00
commit 45f9c1188d
134 changed files with 11928 additions and 33969 deletions

View File

@ -0,0 +1,28 @@
module.exports = function(Self) {
Self.remoteMethodCtx('getStarredModules', {
description: 'returns the starred modules for the current user',
accessType: 'READ',
returns: {
type: 'object',
root: true
},
http: {
path: `/getStarredModules`,
verb: 'get'
}
});
Self.getStarredModules = async ctx => {
const userId = ctx.req.accessToken.userId;
const filter = {
where: {
workerFk: userId
},
fields: ['moduleFk']
};
const starredModules = await Self.app.models.StarredModule.find(filter);
return starredModules;
};
};

View File

@ -0,0 +1,31 @@
const app = require('vn-loopback/server/server');
const LoopBackContext = require('loopback-context');
describe('getStarredModules()', () => {
const activeCtx = {
accessToken: {userId: 9},
http: {
req: {
headers: {origin: 'http://localhost'}
}
}
};
const ctx = {req: activeCtx};
beforeEach(() => {
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
active: activeCtx
});
});
it(`should return the starred modules for a given user`, async() => {
const newStarred = await app.models.StarredModule.create({workerFk: 9, moduleFk: 'Clients'});
const starredModules = await app.models.StarredModule.getStarredModules(ctx);
expect(starredModules.length).toEqual(1);
expect(starredModules[0].moduleFk).toEqual('Clients');
// restores
await app.models.StarredModule.destroyById(newStarred.id);
});
});

View File

@ -0,0 +1,36 @@
const app = require('vn-loopback/server/server');
const LoopBackContext = require('loopback-context');
describe('toggleStarredModule()', () => {
const activeCtx = {
accessToken: {userId: 9},
http: {
req: {
headers: {origin: 'http://localhost'}
}
}
};
const ctx = {
req: activeCtx
};
beforeEach(() => {
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
active: activeCtx
});
});
it('should create a new starred module and then remove it by calling the method again with same args', async() => {
const starredModule = await app.models.StarredModule.toggleStarredModule(ctx, 'Orders');
let starredModules = await app.models.StarredModule.getStarredModules(ctx);
expect(starredModules.length).toEqual(1);
expect(starredModule.moduleFk).toEqual('Orders');
expect(starredModule.workerFk).toEqual(activeCtx.accessToken.userId);
await app.models.StarredModule.toggleStarredModule(ctx, 'Orders');
starredModules = await app.models.StarredModule.getStarredModules(ctx);
expect(starredModules.length).toEqual(0);
});
});

View File

@ -0,0 +1,41 @@
module.exports = function(Self) {
Self.remoteMethodCtx('toggleStarredModule', {
description: 'creates or deletes a starred module for the current user',
accessType: 'WRITE',
returns: {
type: 'object',
root: true
},
accepts: {
arg: 'moduleName',
type: 'string',
required: true,
description: 'The module name'
},
http: {
path: `/toggleStarredModule`,
verb: 'post'
}
});
Self.toggleStarredModule = async(ctx, moduleName) => {
const userId = ctx.req.accessToken.userId;
const filter = {
where: {
workerFk: userId,
moduleFk: moduleName
}
};
const [starredModule] = await Self.app.models.StarredModule.find(filter);
if (starredModule)
await starredModule.destroy();
else {
return Self.app.models.StarredModule.create({
workerFk: userId,
moduleFk: moduleName
});
}
};
};

View File

@ -59,6 +59,9 @@
"Language": { "Language": {
"dataSource": "vn" "dataSource": "vn"
}, },
"Module": {
"dataSource": "vn"
},
"Province": { "Province": {
"dataSource": "vn" "dataSource": "vn"
}, },
@ -71,6 +74,9 @@
"SageWithholding": { "SageWithholding": {
"dataSource": "vn" "dataSource": "vn"
}, },
"StarredModule": {
"dataSource": "vn"
},
"TempContainer": { "TempContainer": {
"dataSource": "tempStorage" "dataSource": "tempStorage"
}, },

23
back/models/module.json Normal file
View File

@ -0,0 +1,23 @@
{
"name": "Module",
"base": "VnModel",
"options": {
"mysql": {
"table": "salix.module"
}
},
"properties": {
"code": {
"type": "string",
"id": true
}
},
"acls": [
{
"accessType": "READ",
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "ALLOW"
}
]
}

View File

@ -0,0 +1,4 @@
module.exports = Self => {
require('../methods/starred-module/getStarredModules')(Self);
require('../methods/starred-module/toggleStarredModule')(Self);
};

View File

@ -0,0 +1,35 @@
{
"name": "StarredModule",
"base": "VnModel",
"options": {
"mysql": {
"table": "vn.starredModule"
}
},
"properties": {
"id": {
"type": "number",
"id": true
},
"workerFk": {
"type": "number",
"required": true
},
"moduleFk": {
"type": "string",
"required": true
}
},
"relations": {
"worker": {
"type": "belongsTo",
"model": "Worker",
"foreignKey": "workerFk"
},
"module": {
"type": "belongsTo",
"model": "Module",
"foreignKey": "moduleFk"
}
}
}

View File

@ -1,8 +0,0 @@
UPDATE `salix`.`ACL` SET `principalId` = 'deliveryBoss' WHERE (`id` = '194');
UPDATE `salix`.`ACL` SET `principalId` = 'claimManager' WHERE (`id` = '97');
UPDATE `salix`.`ACL` SET `principalId` = 'claimManager' WHERE (`id` = '100');
UPDATE `salix`.`ACL` SET `principalId` = 'claimManager' WHERE (`id` = '103');
UPDATE `salix`.`ACL` SET `principalId` = 'claimManager' WHERE (`id` = '202');
INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('Town', '*', 'WRITE', 'ALLOW', 'ROLE', 'deliveryBoss');
INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('Province', '*', 'WRITE', 'ALLOW', 'ROLE', 'deliveryBoss');

View File

@ -1,3 +0,0 @@
UPDATE `vn`.`claimState` SET `roleFk` = '72' WHERE (`id` = '3');
UPDATE `vn`.`claimState` SET `roleFk` = '72' WHERE (`id` = '4');
UPDATE `vn`.`claimState` SET `roleFk` = '72' WHERE (`id` = '5');

View File

@ -1,9 +0,0 @@
ALTER TABLE `vn`.`observationType`
ADD COLUMN `code` VARCHAR(45) NOT NULL AFTER `description`;
UPDATE `vn`.`observationType` SET `code` = 'itemPicker' WHERE (`id` = '1');
UPDATE `vn`.`observationType` SET `code` = 'packager' WHERE (`id` = '2');
UPDATE `vn`.`observationType` SET `code` = 'salesPerson' WHERE (`id` = '4');
UPDATE `vn`.`observationType` SET `code` = 'administrative' WHERE (`id` = '5');
UPDATE `vn`.`observationType` SET `code` = 'weight' WHERE (`id` = '6');
UPDATE `vn`.`observationType` SET `code` = 'delivery' WHERE (`id` = '3');

View File

@ -1,7 +0,0 @@
ALTER TABLE `account`.`roleRole`
ADD `id` INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
ADD PRIMARY KEY (`id`);
UPDATE `account`.`role` SET id = 100 WHERE `name` = 'root';
CALL account.role_sync;

View File

@ -1,504 +0,0 @@
DROP PROCEDURE IF EXISTS account.role_syncPrivileges;
DELIMITER $$
CREATE DEFINER=`root`@`%` PROCEDURE `account`.`role_syncPrivileges`()
BEGIN
/**
* Synchronizes permissions of MySQL role users based on role hierarchy.
* The computed role users of permission mix will be named according to
* pattern z-[role_name].
*
* If any@localhost user exists, it will be taken as a template for basic
* attributes.
*
* Warning! This procedure should only be called when MySQL privileges
* are modified. If role hierarchy is modified, you must call the role_sync()
* procedure wich calls this internally.
*/
DECLARE vIsMysql BOOL DEFAULT VERSION() NOT LIKE '%MariaDB%';
DECLARE vVersion INT DEFAULT SUBSTRING_INDEX(VERSION(), '.', 1);
DECLARE vTplUser VARCHAR(255) DEFAULT 'any';
DECLARE vTplHost VARCHAR(255) DEFAULT '%';
DECLARE vRoleHost VARCHAR(255) DEFAULT 'localhost';
DECLARE vAllHost VARCHAR(255) DEFAULT '%';
DECLARE vPrefix VARCHAR(2) DEFAULT 'z-';
DECLARE vPrefixedLike VARCHAR(255);
DECLARE vPassword VARCHAR(255) DEFAULT '';
-- Deletes computed role users
SET vPrefixedLike = CONCAT(vPrefix, '%');
IF vIsMysql THEN
DELETE FROM mysql.user
WHERE `User` LIKE vPrefixedLike;
ELSE
DELETE FROM mysql.global_priv
WHERE `User` LIKE vPrefixedLike;
END IF;
DELETE FROM mysql.db
WHERE `User` LIKE vPrefixedLike;
DELETE FROM mysql.tables_priv
WHERE `User` LIKE vPrefixedLike;
DELETE FROM mysql.columns_priv
WHERE `User` LIKE vPrefixedLike;
DELETE FROM mysql.procs_priv
WHERE `User` LIKE vPrefixedLike;
DELETE FROM mysql.proxies_priv
WHERE `Proxied_user` LIKE vPrefixedLike;
-- Temporary tables
DROP TEMPORARY TABLE IF EXISTS tRole;
CREATE TEMPORARY TABLE tRole
(INDEX (id))
ENGINE = MEMORY
SELECT
id,
`name` role,
CONCAT(vPrefix, `name`) prefixedRole
FROM role
WHERE hasLogin;
DROP TEMPORARY TABLE IF EXISTS tRoleInherit;
CREATE TEMPORARY TABLE tRoleInherit
(INDEX (inheritsFrom))
ENGINE = MEMORY
SELECT
r.prefixedRole,
ri.`name` inheritsFrom
FROM tRole r
JOIN roleRole rr ON rr.role = r.id
JOIN role ri ON ri.id = rr.inheritsFrom;
-- Recreate role users
IF vIsMysql THEN
DROP TEMPORARY TABLE IF EXISTS tUser;
CREATE TEMPORARY TABLE tUser
SELECT
r.prefixedRole `User`,
vTplHost `Host`,
IFNULL(t.`authentication_string`,
'') `authentication_string`,
IFNULL(t.`plugin`,
'mysql_native_password') `plugin`,
IFNULL(IF('' != u.`ssl_type`,
u.`ssl_type`, t.`ssl_type`),
'') `ssl_type`,
IFNULL(IF('' != u.`ssl_cipher`,
u.`ssl_cipher`, t.`ssl_cipher`),
'') `ssl_cipher`,
IFNULL(IF('' != u.`x509_issuer`,
u.`x509_issuer`, t.`x509_issuer`),
'') `x509_issuer`,
IFNULL(IF('' != u.`x509_subject`,
u.`x509_subject`, t.`x509_subject`),
'') `x509_subject`,
IFNULL(IF(0 != u.`max_questions`,
u.`max_questions`, t.`max_questions`),
0) `max_questions`,
IFNULL(IF(0 != u.`max_updates`,
u.`max_updates`, t.`max_updates`),
0) `max_updates`,
IFNULL(IF(0 != u.`max_connections`,
u.`max_connections`, t.`max_connections`),
0) `max_connections`,
IFNULL(IF(0 != u.`max_user_connections`,
u.`max_user_connections`, t.`max_user_connections`),
0) `max_user_connections`
FROM tRole r
LEFT JOIN mysql.user t
ON t.`User` = vTplUser
AND t.`Host` = vRoleHost
LEFT JOIN mysql.user u
ON u.`User` = r.role
AND u.`Host` = vRoleHost;
IF vVersion <= 5 THEN
SELECT `Password` INTO vPassword
FROM mysql.user
WHERE `User` = vTplUser
AND `Host` = vRoleHost;
INSERT INTO mysql.user (
`User`,
`Host`,
`Password`,
`authentication_string`,
`plugin`,
`ssl_type`,
`ssl_cipher`,
`x509_issuer`,
`x509_subject`,
`max_questions`,
`max_updates`,
`max_connections`,
`max_user_connections`
)
SELECT
`User`,
`Host`,
vPassword,
`authentication_string`,
`plugin`,
`ssl_type`,
`ssl_cipher`,
`x509_issuer`,
`x509_subject`,
`max_questions`,
`max_updates`,
`max_connections`,
`max_user_connections`
FROM tUser;
ELSE
INSERT INTO mysql.user (
`User`,
`Host`,
`authentication_string`,
`plugin`,
`ssl_type`,
`ssl_cipher`,
`x509_issuer`,
`x509_subject`,
`max_questions`,
`max_updates`,
`max_connections`,
`max_user_connections`
)
SELECT
`User`,
`Host`,
`authentication_string`,
`plugin`,
`ssl_type`,
`ssl_cipher`,
`x509_issuer`,
`x509_subject`,
`max_questions`,
`max_updates`,
`max_connections`,
`max_user_connections`
FROM tUser;
END IF;
DROP TEMPORARY TABLE IF EXISTS tUser;
ELSE
INSERT INTO mysql.global_priv (
`User`,
`Host`,
`Priv`
)
SELECT
r.prefixedRole,
vTplHost,
JSON_MERGE_PATCH(
IFNULL(t.`Priv`, '{}'),
IFNULL(u.`Priv`, '{}'),
JSON_OBJECT(
'mysql_old_password', JSON_VALUE(t.`Priv`, '$.mysql_old_password'),
'mysql_native_password', JSON_VALUE(t.`Priv`, '$.mysql_native_password'),
'authentication_string', JSON_VALUE(t.`Priv`, '$.authentication_string'),
'ssl_type', JSON_VALUE(t.`Priv`, '$.ssl_type')
)
)
FROM tRole r
LEFT JOIN mysql.global_priv t
ON t.`User` = vTplUser
AND t.`Host` = vRoleHost
LEFT JOIN mysql.global_priv u
ON u.`User` = r.role
AND u.`Host` = vRoleHost;
END IF;
INSERT INTO mysql.proxies_priv (
`User`,
`Host`,
`Proxied_user`,
`Proxied_host`,
`Grantor`
)
SELECT
'',
vAllHost,
prefixedRole,
vTplHost,
CONCAT(prefixedRole, '@', vTplHost)
FROM tRole;
-- Copies global privileges
DROP TEMPORARY TABLE IF EXISTS tUserPriv;
IF vIsMysql THEN
CREATE TEMPORARY TABLE tUserPriv
(INDEX (prefixedRole))
ENGINE = MEMORY
SELECT
r.prefixedRole,
MAX(u.`Select_priv`) `Select_priv`,
MAX(u.`Insert_priv`) `Insert_priv`,
MAX(u.`Update_priv`) `Update_priv`,
MAX(u.`Delete_priv`) `Delete_priv`,
MAX(u.`Create_priv`) `Create_priv`,
MAX(u.`Drop_priv`) `Drop_priv`,
MAX(u.`Reload_priv`) `Reload_priv`,
MAX(u.`Shutdown_priv`) `Shutdown_priv`,
MAX(u.`Process_priv`) `Process_priv`,
MAX(u.`File_priv`) `File_priv`,
MAX(u.`Grant_priv`) `Grant_priv`,
MAX(u.`References_priv`) `References_priv`,
MAX(u.`Index_priv`) `Index_priv`,
MAX(u.`Alter_priv`) `Alter_priv`,
MAX(u.`Show_db_priv`) `Show_db_priv`,
MAX(u.`Super_priv`) `Super_priv`,
MAX(u.`Create_tmp_table_priv`) `Create_tmp_table_priv`,
MAX(u.`Lock_tables_priv`) `Lock_tables_priv`,
MAX(u.`Execute_priv`) `Execute_priv`,
MAX(u.`Repl_slave_priv`) `Repl_slave_priv`,
MAX(u.`Repl_client_priv`) `Repl_client_priv`,
MAX(u.`Create_view_priv`) `Create_view_priv`,
MAX(u.`Show_view_priv`) `Show_view_priv`,
MAX(u.`Create_routine_priv`) `Create_routine_priv`,
MAX(u.`Alter_routine_priv`) `Alter_routine_priv`,
MAX(u.`Create_user_priv`) `Create_user_priv`,
MAX(u.`Event_priv`) `Event_priv`,
MAX(u.`Trigger_priv`) `Trigger_priv`,
MAX(u.`Create_tablespace_priv`) `Create_tablespace_priv`
FROM tRoleInherit r
JOIN mysql.user u
ON u.`User` = r.inheritsFrom
AND u.`Host`= vRoleHost
GROUP BY r.prefixedRole;
UPDATE mysql.user u
JOIN tUserPriv t
ON u.`User` = t.prefixedRole
AND u.`Host` = vTplHost
SET
u.`Select_priv`
= t.`Select_priv`,
u.`Insert_priv`
= t.`Insert_priv`,
u.`Update_priv`
= t.`Update_priv`,
u.`Delete_priv`
= t.`Delete_priv`,
u.`Create_priv`
= t.`Create_priv`,
u.`Drop_priv`
= t.`Drop_priv`,
u.`Reload_priv`
= t.`Reload_priv`,
u.`Shutdown_priv`
= t.`Shutdown_priv`,
u.`Process_priv`
= t.`Process_priv`,
u.`File_priv`
= t.`File_priv`,
u.`Grant_priv`
= t.`Grant_priv`,
u.`References_priv`
= t.`References_priv`,
u.`Index_priv`
= t.`Index_priv`,
u.`Alter_priv`
= t.`Alter_priv`,
u.`Show_db_priv`
= t.`Show_db_priv`,
u.`Super_priv`
= t.`Super_priv`,
u.`Create_tmp_table_priv`
= t.`Create_tmp_table_priv`,
u.`Lock_tables_priv`
= t.`Lock_tables_priv`,
u.`Execute_priv`
= t.`Execute_priv`,
u.`Repl_slave_priv`
= t.`Repl_slave_priv`,
u.`Repl_client_priv`
= t.`Repl_client_priv`,
u.`Create_view_priv`
= t.`Create_view_priv`,
u.`Show_view_priv`
= t.`Show_view_priv`,
u.`Create_routine_priv`
= t.`Create_routine_priv`,
u.`Alter_routine_priv`
= t.`Alter_routine_priv`,
u.`Create_user_priv`
= t.`Create_user_priv`,
u.`Event_priv`
= t.`Event_priv`,
u.`Trigger_priv`
= t.`Trigger_priv`,
u.`Create_tablespace_priv`
= t.`Create_tablespace_priv`;
ELSE
CREATE TEMPORARY TABLE tUserPriv
(INDEX (prefixedRole))
SELECT
r.prefixedRole,
BIT_OR(JSON_VALUE(p.`Priv`, '$.access')) access
FROM tRoleInherit r
JOIN mysql.global_priv p
ON p.`User` = r.inheritsFrom
AND p.`Host`= vRoleHost
GROUP BY r.prefixedRole;
UPDATE mysql.global_priv p
JOIN tUserPriv t
ON p.`User` = t.prefixedRole
AND p.`Host` = vTplHost
SET
p.`Priv` = JSON_SET(p.`Priv`, '$.access', t.access);
END IF;
DROP TEMPORARY TABLE tUserPriv;
-- Copy schema level privileges
INSERT INTO mysql.db (
`User`,
`Host`,
`Db`,
`Select_priv`,
`Insert_priv`,
`Update_priv`,
`Delete_priv`,
`Create_priv`,
`Drop_priv`,
`Grant_priv`,
`References_priv`,
`Index_priv`,
`Alter_priv`,
`Create_tmp_table_priv`,
`Lock_tables_priv`,
`Create_view_priv`,
`Show_view_priv`,
`Create_routine_priv`,
`Alter_routine_priv`,
`Execute_priv`,
`Event_priv`,
`Trigger_priv`
)
SELECT
r.prefixedRole,
vTplHost,
t.`Db`,
MAX(t.`Select_priv`),
MAX(t.`Insert_priv`),
MAX(t.`Update_priv`),
MAX(t.`Delete_priv`),
MAX(t.`Create_priv`),
MAX(t.`Drop_priv`),
MAX(t.`Grant_priv`),
MAX(t.`References_priv`),
MAX(t.`Index_priv`),
MAX(t.`Alter_priv`),
MAX(t.`Create_tmp_table_priv`),
MAX(t.`Lock_tables_priv`),
MAX(t.`Create_view_priv`),
MAX(t.`Show_view_priv`),
MAX(t.`Create_routine_priv`),
MAX(t.`Alter_routine_priv`),
MAX(t.`Execute_priv`),
MAX(t.`Event_priv`),
MAX(t.`Trigger_priv`)
FROM tRoleInherit r
JOIN mysql.db t
ON t.`User` = r.inheritsFrom
AND t.`Host`= vRoleHost
GROUP BY r.prefixedRole, t.`Db`;
-- Copy table level privileges
INSERT INTO mysql.tables_priv (
`User`,
`Host`,
`Db`,
`Table_name`,
`Grantor`,
`Timestamp`,
`Table_priv`,
`Column_priv`
)
SELECT
r.prefixedRole,
vTplHost,
t.`Db`,
t.`Table_name`,
t.`Grantor`,
MAX(t.`Timestamp`),
IFNULL(GROUP_CONCAT(NULLIF(t.`Table_priv`, '')), ''),
IFNULL(GROUP_CONCAT(NULLIF(t.`Column_priv`, '')), '')
FROM tRoleInherit r
JOIN mysql.tables_priv t
ON t.`User` = r.inheritsFrom
AND t.`Host`= vRoleHost
GROUP BY r.prefixedRole, t.`Db`, t.`Table_name`;
-- Copy column level privileges
INSERT INTO mysql.columns_priv (
`User`,
`Host`,
`Db`,
`Table_name`,
`Column_name`,
`Timestamp`,
`Column_priv`
)
SELECT
r.prefixedRole,
vTplHost,
t.`Db`,
t.`Table_name`,
t.`Column_name`,
MAX(t.`Timestamp`),
IFNULL(GROUP_CONCAT(NULLIF(t.`Column_priv`, '')), '')
FROM tRoleInherit r
JOIN mysql.columns_priv t
ON t.`User` = r.inheritsFrom
AND t.`Host`= vRoleHost
GROUP BY r.prefixedRole, t.`Db`, t.`Table_name`, t.`Column_name`;
-- Copy routine privileges
INSERT IGNORE INTO mysql.procs_priv (
`User`,
`Host`,
`Db`,
`Routine_name`,
`Routine_type`,
`Grantor`,
`Timestamp`,
`Proc_priv`
)
SELECT
r.prefixedRole,
vTplHost,
t.`Db`,
t.`Routine_name`,
t.`Routine_type`,
t.`Grantor`,
t.`Timestamp`,
t.`Proc_priv`
FROM tRoleInherit r
JOIN mysql.procs_priv t
ON t.`User` = r.inheritsFrom
AND t.`Host`= vRoleHost;
-- Free memory
DROP TEMPORARY TABLE
tRole,
tRoleInherit;
FLUSH PRIVILEGES;
END$$
DELIMITER ;

View File

@ -1,36 +0,0 @@
ALTER TABLE account.sambaConfig ADD adUser VARCHAR(255) DEFAULT NULL NULL COMMENT 'Active directory user';
ALTER TABLE account.sambaConfig ADD adPassword varchar(255) DEFAULT NULL NULL COMMENT 'Active directory password';
ALTER TABLE account.sambaConfig ADD userDn varchar(255) DEFAULT NULL NULL COMMENT 'The base DN for users';
ALTER TABLE account.sambaConfig DROP COLUMN uidBase;
ALTER TABLE account.sambaConfig CHANGE sshPass sshPassword varchar(255) DEFAULT NULL NULL COMMENT 'The SSH password';
ALTER TABLE account.ldapConfig DROP COLUMN `filter`;
ALTER TABLE account.ldapConfig CHANGE baseDn userDn varchar(255) DEFAULT NULL NULL COMMENT 'The base DN to do the query';
ALTER TABLE account.ldapConfig CHANGE host server varchar(255) NOT NULL COMMENT 'The hostname of LDAP server';
ALTER TABLE account.ldapConfig MODIFY COLUMN password varchar(255) NOT NULL COMMENT 'The LDAP password';
-- Updated
ALTER TABLE account.sambaConfig DROP COLUMN sshUser;
ALTER TABLE account.sambaConfig DROP COLUMN sshPassword;
ALTER TABLE account.sambaConfig CHANGE host adController varchar(255) DEFAULT NULL NULL COMMENT 'The hosname of domain controller';
ALTER TABLE account.sambaConfig MODIFY COLUMN adController varchar(255) DEFAULT NULL NULL COMMENT 'The hosname of domain controller';
ALTER TABLE account.sambaConfig DROP COLUMN userDn;
ALTER TABLE account.sambaConfig ADD adDomain varchar(255) NOT NULL AFTER id;
ALTER TABLE account.sambaConfig ADD verifyCert TINYINT UNSIGNED NOT NULL DEFAULT TRUE AFTER adPassword;
ALTER TABLE account.sambaConfig MODIFY COLUMN adController varchar(255) NOT NULL COMMENT 'The hosname of domain controller';
ALTER TABLE account.user
ADD COLUMN `realm` varchar(512) CHARACTER SET utf8 DEFAULT NULL AFTER id,
ADD COLUMN `emailVerified` tinyint(1) DEFAULT NULL AFTER email,
ADD COLUMN `verificationToken` varchar(512) DEFAULT NULL AFTER emailVerified;
DROP TABLE salix.user;
CREATE OR REPLACE VIEW salix.User
AS SELECT id, realm, name AS username, bcryptPassword AS password, email, emailVerified, verificationToken
FROM account.user;
ALTER TABLE account.`user`
MODIFY COLUMN bcryptPassword varchar(512) DEFAULT NULL NULL;

View File

@ -1,20 +0,0 @@
CREATE TABLE `vn`.`supplierLog` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`originFk` int(11) NOT NULL,
`userFk` int(10) unsigned NOT NULL,
`action` set('insert','update','delete') COLLATE utf8_unicode_ci NOT NULL,
`creationDate` timestamp NULL DEFAULT current_timestamp(),
`description` text CHARACTER SET utf8 DEFAULT NULL,
`changedModel` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
`oldInstance` text COLLATE utf8_unicode_ci DEFAULT NULL,
`newInstance` text COLLATE utf8_unicode_ci DEFAULT NULL,
`changedModelId` int(11) DEFAULT NULL,
`changedModelValue` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `logSupplier_ibfk_1` (`originFk`),
KEY `supplierLog_ibfk_2` (`userFk`),
CONSTRAINT `supplierLog_ibfk_1` FOREIGN KEY (`originFk`) REFERENCES `supplier` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `supplierLog_ibfk_2` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

View File

@ -1,24 +0,0 @@
CREATE TABLE `vn`.`supplierContact` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`supplierFk` INT(11) NULL DEFAULT NULL,
`phone` VARCHAR(16) NULL DEFAULT NULL,
`mobile` VARCHAR(16) NULL DEFAULT NULL,
`email` VARCHAR(255) NULL DEFAULT NULL,
`observation` TEXT NULL DEFAULT NULL,
`name` VARCHAR(255) NULL DEFAULT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB;
ALTER TABLE `vn`.`supplierContact`
ADD CONSTRAINT `supplier_id`
FOREIGN KEY (`supplierFk`)
REFERENCES `vn`.`supplier` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE;
INSERT INTO vn.supplierContact(supplierFk,phone,mobile,email,observation,`name`)
SELECT r.Id_Proveedor,c.Telefono,c.Movil,c.email,c.Notas,concat(c.Nombre," ", IFNULL(c.Apellidos,""))
FROM vn2008.Contactos c
JOIN vn2008.Relaciones r ON r.Id_Contacto = c.Id_Contacto
JOIN vn.supplier s ON s.id = r.Id_Proveedor;

View File

@ -1,25 +0,0 @@
DROP TRIGGER IF EXISTS `vn`.`ticket_afterUpdate`;
DELIMITER $$
USE `vn`$$
CREATE DEFINER=`root`@`%` TRIGGER `ticket_afterUpdate`
AFTER UPDATE ON `ticket`
FOR EACH ROW
BEGIN
IF !(NEW.id <=> OLD.id)
OR !(NEW.warehouseFk <=> OLD.warehouseFk)
OR !(NEW.shipped <=> OLD.shipped) THEN
CALL stock.log_add('ticket', NEW.id, OLD.id);
END IF;
IF NEW.clientFk = 2067 AND !(NEW.clientFk <=> OLD.clientFk) THEN
-- Fallo que se insertan no se sabe como tickets en este cliente
INSERT INTO vn.mail SET
`sender` = 'jgallego@verdnatura.es',
`replyTo` = 'jgallego@verdnatura.es',
`subject` = 'Modificado ticket al cliente 2067',
`body` = CONCAT(account.myUserGetName(), ' ha modificado el ticket ',
NEW.id);
END IF;
END$$
DELIMITER ;

View File

@ -1,107 +0,0 @@
USE `vn`;
DROP procedure IF EXISTS `ticket_componentPreview`;
DELIMITER $$
USE `vn`$$
CREATE DEFINER=`root`@`%` PROCEDURE `ticket_componentPreview`(
vTicketFk INT,
vLanded DATE,
vAddressFk INT,
vZoneFk INT,
vWarehouseFk SMALLINT)
BEGIN
/**
* Calcula los componentes de los articulos de un ticket
*
* @param vTicketFk id del ticket
* @param vLanded nueva fecha de entrega
* @param vAddressFk nuevo consignatario
* @param vZoneFk nueva zona
* @param vWarehouseFk nuevo warehouse
*
* @return tmp.ticketComponentPreview (warehouseFk, itemFk, componentFk, cost)
*/
DECLARE vHasDataChanged BOOL DEFAULT FALSE;
DECLARE vHasAddressChanged BOOL;
DECLARE vHasZoneChanged BOOL DEFAULT FALSE;
DECLARE vHasWarehouseChanged BOOL DEFAULT FALSE;
DECLARE vShipped DATE;
DECLARE vAddressTypeRateFk INT DEFAULT NULL;
DECLARE vAgencyModeTypeRateFk INT DEFAULT NULL;
DECLARE vHasChangeAll BOOL DEFAULT FALSE;
SELECT DATE(landed) <> vLanded,
addressFk <> vAddressFk,
zoneFk <> vZoneFk,
warehouseFk <> vWarehouseFk
INTO
vHasDataChanged,
vHasAddressChanged,
vHasZoneChanged,
vHasWarehouseChanged
FROM vn.ticket t
WHERE t.id = vTicketFk;
IF vHasDataChanged OR vHasWarehouseChanged THEN
SET vHasChangeAll = TRUE;
END IF;
IF vHasAddressChanged THEN
SET vAddressTypeRateFk = 5;
END IF;
IF vHasZoneChanged THEN
SET vAgencyModeTypeRateFk = 6;
END IF;
SELECT TIMESTAMPADD(DAY, -travelingDays, vLanded) INTO vShipped
FROM zone
WHERE id = vZoneFk;
CALL buyUltimate(vWarehouseFk, vShipped);
DROP TEMPORARY TABLE IF EXISTS tmp.ticketLot;
CREATE TEMPORARY TABLE tmp.ticketLot ENGINE = MEMORY (
SELECT
vWarehouseFk AS warehouseFk,
NULL AS available,
s.itemFk,
bu.buyFk,
vZoneFk zoneFk
FROM sale s
LEFT JOIN tmp.buyUltimate bu ON bu.itemFk = s.itemFk
WHERE s.ticketFk = vTicketFk
GROUP BY bu.warehouseFk, bu.itemFk);
CALL catalog_componentPrepare();
CALL catalog_componentCalculate(vZoneFk, vAddressFk, vShipped, vWarehouseFk);
REPLACE INTO tmp.ticketComponent (warehouseFk, itemFk, componentFk, cost)
SELECT t.warehouseFk, s.itemFk, sc.componentFk, sc.value
FROM saleComponent sc
JOIN sale s ON s.id = sc.saleFk
JOIN ticket t ON t.id = s.ticketFk
JOIN `component` c ON c.id = sc.componentFk
WHERE s.ticketFk = vTicketFk
AND (c.isRenewable = FALSE
OR
(NOT vHasChangeAll
AND (NOT (c.typeFk <=> vAddressTypeRateFk
OR c.typeFk <=> vAgencyModeTypeRateFk))));
DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponentPreview;
CREATE TEMPORARY TABLE tmp.ticketComponentPreview
SELECT * FROM tmp.ticketComponent;
CALL catalog_componentPurge();
DROP TEMPORARY TABLE tmp.buyUltimate;
IF vShipped IS NULL THEN
CALL util.throw('NO_ZONE_AVAILABLE');
END IF;
END$$
DELIMITER ;

View File

@ -1,12 +0,0 @@
UPDATE `salix`.`ACL` SET `principalId` = 'deliveryBoss' WHERE (`id` = '194');
UPDATE `salix`.`ACL` SET `principalId` = 'claimManager' WHERE (`id` = '97');
UPDATE `salix`.`ACL` SET `principalId` = 'claimManager' WHERE (`id` = '100');
UPDATE `salix`.`ACL` SET `principalId` = 'claimManager' WHERE (`id` = '103');
UPDATE `salix`.`ACL` SET `principalId` = 'claimManager' WHERE (`id` = '202');
INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('Town', '*', 'WRITE', 'ALLOW', 'ROLE', 'deliveryBoss');
INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('Province', '*', 'WRITE', 'ALLOW', 'ROLE', 'deliveryBoss');
INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('Supplier', '*', 'READ', 'ALLOW', 'ROLE', 'employee');
INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('Supplier', '*', 'WRITE', 'ALLOW', 'ROLE', 'administrative');
INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('SupplierLog', '*', 'READ', 'ALLOW', 'ROLE', 'employee');
INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('SupplierContact', '*', 'WRITE', 'ALLOW', 'ROLE', 'administrative');

View File

@ -1,3 +0,0 @@
UPDATE `vn`.`claimState` SET `roleFk` = '72' WHERE (`id` = '3');
UPDATE `vn`.`claimState` SET `roleFk` = '72' WHERE (`id` = '4');
UPDATE `vn`.`claimState` SET `roleFk` = '72' WHERE (`id` = '5');

View File

@ -1,5 +0,0 @@
ALTER TABLE `hedera`.`imageCollection`
ADD COLUMN `readRoleFk` VARCHAR(45) NULL DEFAULT NULL AFTER `column`;
update `hedera`.`imageCollection` set `readRoleFk` = 1;

View File

@ -1,9 +0,0 @@
ALTER TABLE `vn`.`observationType`
ADD COLUMN `code` VARCHAR(45) NOT NULL AFTER `description`;
UPDATE `vn`.`observationType` SET `code` = 'itemPicker' WHERE (`id` = '1');
UPDATE `vn`.`observationType` SET `code` = 'packager' WHERE (`id` = '2');
UPDATE `vn`.`observationType` SET `code` = 'salesPerson' WHERE (`id` = '4');
UPDATE `vn`.`observationType` SET `code` = 'administrative' WHERE (`id` = '5');
UPDATE `vn`.`observationType` SET `code` = 'weight' WHERE (`id` = '6');
UPDATE `vn`.`observationType` SET `code` = 'delivery' WHERE (`id` = '3');

View File

@ -1,20 +0,0 @@
CREATE TABLE `vn`.`supplierLog` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`originFk` int(11) NOT NULL,
`userFk` int(10) unsigned NOT NULL,
`action` set('insert','update','delete') COLLATE utf8_unicode_ci NOT NULL,
`creationDate` timestamp NULL DEFAULT current_timestamp(),
`description` text CHARACTER SET utf8 DEFAULT NULL,
`changedModel` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
`oldInstance` text COLLATE utf8_unicode_ci DEFAULT NULL,
`newInstance` text COLLATE utf8_unicode_ci DEFAULT NULL,
`changedModelId` int(11) DEFAULT NULL,
`changedModelValue` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `logSupplier_ibfk_1` (`originFk`),
KEY `supplierLog_ibfk_2` (`userFk`),
CONSTRAINT `supplierLog_ibfk_1` FOREIGN KEY (`originFk`) REFERENCES `supplier` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `supplierLog_ibfk_2` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

View File

@ -1,25 +0,0 @@
DROP TRIGGER IF EXISTS `vn`.`ticket_afterUpdate`;
DELIMITER $$
USE `vn`$$
CREATE DEFINER=`root`@`%` TRIGGER `ticket_afterUpdate`
AFTER UPDATE ON `ticket`
FOR EACH ROW
BEGIN
IF !(NEW.id <=> OLD.id)
OR !(NEW.warehouseFk <=> OLD.warehouseFk)
OR !(NEW.shipped <=> OLD.shipped) THEN
CALL stock.log_add('ticket', NEW.id, OLD.id);
END IF;
IF NEW.clientFk = 2067 AND !(NEW.clientFk <=> OLD.clientFk) THEN
-- Fallo que se insertan no se sabe como tickets en este cliente
INSERT INTO vn.mail SET
`sender` = 'jgallego@verdnatura.es',
`replyTo` = 'jgallego@verdnatura.es',
`subject` = 'Modificado ticket al cliente 2067',
`body` = CONCAT(account.myUserGetName(), ' ha modificado el ticket ',
NEW.id);
END IF;
END$$
DELIMITER ;

View File

@ -1,107 +0,0 @@
USE `vn`;
DROP procedure IF EXISTS `ticket_componentPreview`;
DELIMITER $$
USE `vn`$$
CREATE DEFINER=`root`@`%` PROCEDURE `ticket_componentPreview`(
vTicketFk INT,
vLanded DATE,
vAddressFk INT,
vZoneFk INT,
vWarehouseFk SMALLINT)
BEGIN
/**
* Calcula los componentes de los articulos de un ticket
*
* @param vTicketFk id del ticket
* @param vLanded nueva fecha de entrega
* @param vAddressFk nuevo consignatario
* @param vZoneFk nueva zona
* @param vWarehouseFk nuevo warehouse
*
* @return tmp.ticketComponentPreview (warehouseFk, itemFk, componentFk, cost)
*/
DECLARE vHasDataChanged BOOL DEFAULT FALSE;
DECLARE vHasAddressChanged BOOL;
DECLARE vHasZoneChanged BOOL DEFAULT FALSE;
DECLARE vHasWarehouseChanged BOOL DEFAULT FALSE;
DECLARE vShipped DATE;
DECLARE vAddressTypeRateFk INT DEFAULT NULL;
DECLARE vAgencyModeTypeRateFk INT DEFAULT NULL;
DECLARE vHasChangeAll BOOL DEFAULT FALSE;
SELECT DATE(landed) <> vLanded,
addressFk <> vAddressFk,
zoneFk <> vZoneFk,
warehouseFk <> vWarehouseFk
INTO
vHasDataChanged,
vHasAddressChanged,
vHasZoneChanged,
vHasWarehouseChanged
FROM vn.ticket t
WHERE t.id = vTicketFk;
IF vHasDataChanged OR vHasWarehouseChanged THEN
SET vHasChangeAll = TRUE;
END IF;
IF vHasAddressChanged THEN
SET vAddressTypeRateFk = 5;
END IF;
IF vHasZoneChanged THEN
SET vAgencyModeTypeRateFk = 6;
END IF;
SELECT TIMESTAMPADD(DAY, -travelingDays, vLanded) INTO vShipped
FROM zone
WHERE id = vZoneFk;
CALL buyUltimate(vWarehouseFk, vShipped);
DROP TEMPORARY TABLE IF EXISTS tmp.ticketLot;
CREATE TEMPORARY TABLE tmp.ticketLot ENGINE = MEMORY (
SELECT
vWarehouseFk AS warehouseFk,
NULL AS available,
s.itemFk,
bu.buyFk,
vZoneFk zoneFk
FROM sale s
LEFT JOIN tmp.buyUltimate bu ON bu.itemFk = s.itemFk
WHERE s.ticketFk = vTicketFk
GROUP BY bu.warehouseFk, bu.itemFk);
CALL catalog_componentPrepare();
CALL catalog_componentCalculate(vZoneFk, vAddressFk, vShipped, vWarehouseFk);
REPLACE INTO tmp.ticketComponent (warehouseFk, itemFk, componentFk, cost)
SELECT t.warehouseFk, s.itemFk, sc.componentFk, sc.value
FROM saleComponent sc
JOIN sale s ON s.id = sc.saleFk
JOIN ticket t ON t.id = s.ticketFk
JOIN `component` c ON c.id = sc.componentFk
WHERE s.ticketFk = vTicketFk
AND (c.isRenewable = FALSE
OR
(NOT vHasChangeAll
AND (NOT (c.typeFk <=> vAddressTypeRateFk
OR c.typeFk <=> vAgencyModeTypeRateFk))));
DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponentPreview;
CREATE TEMPORARY TABLE tmp.ticketComponentPreview
SELECT * FROM tmp.ticketComponent;
CALL catalog_componentPurge();
DROP TEMPORARY TABLE tmp.buyUltimate;
IF vShipped IS NULL THEN
CALL util.throw('NO_ZONE_AVAILABLE');
END IF;
END$$
DELIMITER ;

View File

@ -1,43 +0,0 @@
DROP PROCEDURE IF EXISTS `vn`.`timeControl_calculate`;
DELIMITER $$
CREATE DEFINER=`root`@`%` PROCEDURE `vn`.`timeControl_calculate`(vDatedFrom DATETIME, vDatedTo DATETIME)
BEGIN
SET @vIsOdd := TRUE;
SET @vUser := NULL;
SET @vDated := NULL;
DROP TEMPORARY TABLE IF EXISTS tmp.timeControlCalculate;
CREATE TEMPORARY TABLE tmp.timeControlCalculate
SELECT
userFk,
dated,
IF( timeWork >= 18000, @timeWork:=timeWork + 1200, @timeWork:=timeWork) timeWorkSeconds,
SEC_TO_TIME(@timeWork ) timeWorkSexagesimal,
@timeWork / 3600 timeWorkDecimal,
timed
FROM (SELECT SUM(timeWork) timeWork,
userFk,
dated,
GROUP_CONCAT(DATE_FORMAT(sub.timed,"%H:%i") ORDER BY sub.timed ASC SEPARATOR ' - ') timed
FROM (SELECT IF(@vUser = wtc.userFk, @vUser :=@vUser, @vUser := wtc.userFk),
IF(@vIsOdd, @vIsOdd := FALSE, @vIsOdd := TRUE),
IF(direction='in', @vIsOdd := TRUE, @vIsOdd := @vIsOdd),
IF(@vIsOdd, @vLastTimed:=UNIX_TIMESTAMP(timed),@vLastTimed:=@vLastTimed),
IF(@vIsOdd, 0, UNIX_TIMESTAMP(timed)-@vLastTimed) timeWork,
IF(direction='in', @vDated := DATE(wtc.timed), @vDated :=@vDated) dated,
wtc.timed timed,
wtc.userFk,
direction
FROM (SELECT DISTINCT(wtc.id), wtc.userFk, wtc.timed, wtc.direction
FROM workerTimeControl wtc
JOIN tmp.`user` w ON w.userFk = wtc.userFk
WHERE wtc.timed BETWEEN vDatedFrom AND vDatedTo
ORDER BY userFk, timed ASC
) wtc
WHERE wtc.timed BETWEEN vDatedFrom AND vDatedTo
) sub
GROUP BY userFk, dated
)sub2;
END$$
DELIMITER ;

View File

@ -1,2 +0,0 @@
ALTER TABLE `account`.`user`
ADD COLUMN `image` VARCHAR(255) NULL AFTER `password`;

View File

@ -1,20 +0,0 @@
CREATE TABLE `vn`.supplierFreighter
(
supplierFk INT NOT NULL,
CONSTRAINT supplierFreighter_pk
PRIMARY KEY (supplierFk),
CONSTRAINT supplier_id_fk
FOREIGN KEY (supplierFk) REFERENCES supplier (id)
ON UPDATE CASCADE ON DELETE CASCADE
);
INSERT IGNORE INTO `vn`.supplierFreighter (supplierFk) VALUES (286);
INSERT IGNORE INTO `vn`.supplierFreighter (supplierFk) VALUES (454);
INSERT IGNORE INTO `vn`.supplierFreighter (supplierFk) VALUES (582);
INSERT IGNORE INTO `vn`.supplierFreighter (supplierFk) VALUES (470);
INSERT IGNORE INTO `vn`.supplierFreighter (supplierFk) VALUES (775);
INSERT IGNORE INTO `vn`.supplierFreighter (supplierFk) VALUES (812);
INSERT IGNORE INTO `vn`.supplierFreighter (supplierFk) VALUES (1112);
INSERT IGNORE INTO `vn`.supplierFreighter (supplierFk) VALUES (1242);
INSERT IGNORE INTO `vn`.supplierFreighter (supplierFk) VALUES (1281);
INSERT IGNORE INTO `vn`.supplierFreighter (supplierFk) VALUES (1765);

View File

@ -1,7 +0,0 @@
ALTER TABLE `vn`.travel
DROP FOREIGN KEY travel_ibfk_4;
ALTER TABLE `vn`.travel
ADD CONSTRAINT supplierFreighter_fk_4
FOREIGN KEY (cargoSupplierFk) REFERENCES supplierFreighter (supplierFk)
ON UPDATE CASCADE ON DELETE SET NULL;

View File

@ -1,20 +0,0 @@
CREATE TABLE `vn`.continent
(
id TINYINT(4) AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
code VARCHAR(2) NOT NULL COLLATE utf8_general_ci,
CONSTRAINT continent_pk
PRIMARY KEY (id)
)
COMMENT 'World continents';
CREATE UNIQUE INDEX continent_name_uindex
ON `vn`.continent (name);
INSERT IGNORE INTO `vn`.continent (`name`, `code`)
VALUES
('Asia', 'AS'),
('América', 'AM'),
('África', 'AF'),
('Europa', 'EU'),
('Oceanía', 'OC');

View File

@ -1,13 +0,0 @@
ALTER TABLE `vn`.`country`
ADD COLUMN `continentFk` TINYINT(4) NULL AFTER `ibanLength`,
ADD INDEX `continent_id_fk_idx` (`continentFk` ASC);
ALTER TABLE `vn`.`country`
ADD CONSTRAINT `continent_id_fk`
FOREIGN KEY (`continentFk`)
REFERENCES `vn`.`continent` (`id`)
ON DELETE NO ACTION
ON UPDATE CASCADE;
UPDATE `vn`.`country` SET `continentFk` = '2' WHERE (`id` = '11');
UPDATE `vn`.`country` SET `continentFk` = '2' WHERE (`id` = '13');

View File

@ -1 +0,0 @@
INSERT INTO salix.ACL (model, property, accessType, permission, principalType, principalId) VALUES ('Image', '*', 'WRITE', 'ALLOW', 'ROLE', 'employee');

View File

@ -1,14 +0,0 @@
CREATE TABLE `vn`.`entryObservation` (
id int NOT NULL AUTO_INCREMENT,
entryFk int NOT NULL,
observationTypeFk TINYINT(3) UNSIGNED,
description TEXT,
PRIMARY KEY (id),
CONSTRAINT entry_id_entryFk
FOREIGN KEY (entryFk) REFERENCES entry(id),
CONSTRAINT observationType_id_observationTypeFk
FOREIGN KEY (observationTypeFk) REFERENCES observationType(id)
);
ALTER TABLE `vn`.`entryObservation`
ADD UNIQUE INDEX `entryFk_observationTypeFk_UNIQUE` (`entryFk` ASC,`observationTypeFk` ASC);

View File

@ -1,135 +0,0 @@
-- DROP PROCEDURE `vn`.`clonTravelComplete`;
DELIMITER $$
USE `vn`$$
CREATE
DEFINER = root@`%` PROCEDURE `vn`.`travel_cloneWithEntries`(IN vTravelFk INT, IN vDateStart DATE, IN vDateEnd DATE,
IN vRef VARCHAR(255), OUT vNewTravelFk INT)
BEGIN
DECLARE vEntryNew INT;
DECLARE vDone BOOLEAN DEFAULT FALSE;
DECLARE vAuxEntryFk INT;
DECLARE vRsEntry CURSOR FOR
SELECT e.id
FROM entry e
JOIN travel t
ON t.id = e.travelFk
WHERE e.travelFk = vTravelFk;
DECLARE vRsBuy CURSOR FOR
SELECT b.*
FROM buy b
JOIN entry e
ON b.entryFk = e.id
WHERE e.travelFk = vNewTravelFk and b.entryFk=vNewTravelFk
ORDER BY e.id;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
RESIGNAL;
END;
START TRANSACTION;
INSERT INTO travel (shipped,landed, warehouseInFk, warehouseOutFk, agencyFk, ref, isDelivered, isReceived, m3, kg)
SELECT vDateStart, vDateEnd,warehouseInFk, warehouseOutFk, agencyFk, vRef, isDelivered, isReceived, m3, kg
FROM travel
WHERE id = vTravelFk;
SET vNewTravelFk = LAST_INSERT_ID();
SET vDone = FALSE;
OPEN vRsEntry ;
FETCH vRsEntry INTO vAuxEntryFk;
WHILE NOT vDone DO
INSERT INTO entry (supplierFk,
ref,
isInventory,
isConfirmed,
isOrdered,
isRaid,
commission,
created,
evaNotes,
travelFk,
currencyFk,
companyFk,
gestDocFk,
invoiceInFk)
SELECT supplierFk,
ref,
isInventory,
isConfirmed,
isOrdered,
isRaid,
commission,
created,
evaNotes,
vNewTravelFk,
currencyFk,
companyFk,
gestDocFk,
invoiceInFk
FROM entry
WHERE id = vAuxEntryFk;
SET vEntryNew = LAST_INSERT_ID();
INSERT INTO buy (entryFk,
itemFk,
quantity,
buyingValue,
packageFk,
stickers,
freightValue,
packageValue,
comissionValue,
packing,
`grouping`,
groupingMode,
location,
price1,
price2,
price3,
minPrice,
producer,
printedStickers,
isChecked,
weight)
SELECT vEntryNew,
itemFk,
quantity,
buyingValue,
packageFk,
stickers,
freightValue,
packageValue,
comissionValue,
packing,
`grouping`,
groupingMode,
location,
price1,
price2,
price3,
minPrice,
producer,
printedStickers,
isChecked,
weight
FROM buy
WHERE entryFk = vAuxEntryFk;
FETCH vRsEntry INTO vAuxEntryFk;
END WHILE;
CLOSE vRsEntry;
COMMIT;
END;$$
DELIMITER ;

View File

@ -1,18 +0,0 @@
CREATE TABLE `vn`.`zoneLog` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`originFk` int(10) NOT NULL,
`userFk` int(10) unsigned DEFAULT NULL,
`action` set('insert','update','delete') COLLATE utf8_unicode_ci NOT NULL,
`creationDate` timestamp NULL DEFAULT current_timestamp(),
`description` text CHARACTER SET utf8 DEFAULT NULL,
`changedModel` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
`oldInstance` text COLLATE utf8_unicode_ci DEFAULT NULL,
`newInstance` text COLLATE utf8_unicode_ci DEFAULT NULL,
`changedModelId` int(11) DEFAULT NULL,
`changedModelValue` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `originFk` (`originFk`),
KEY `userFk` (`userFk`),
CONSTRAINT `zoneLog_ibfk_1` FOREIGN KEY (`originFk`) REFERENCES `vn`.`zone` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `zoneLog_ibfk_2` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

View File

@ -1,13 +0,0 @@
INSERT INTO account.role (id, name, description)
VALUES
(74, 'userPhotos', 'Privilegios para subir fotos de usuario'),
(75, 'catalogPhotos', 'Privilegios para subir fotos del catálogo');
INSERT INTO account.roleInherit (role, inheritsFrom)
VALUES
(37, (SELECT id FROM account.role WHERE name = 'userPhotos')),
(51, (SELECT id FROM account.role WHERE name = 'userPhotos')),
(51, (SELECT id FROM account.role WHERE name = 'catalogPhotos')),
(35, (SELECT id FROM account.role WHERE name = 'catalogPhotos'));
CALL account.role_sync();

View File

@ -1,27 +0,0 @@
ALTER TABLE `hedera`.`imageCollection`
ADD writeRoleFk INT UNSIGNED NULL DEFAULT 1;
ALTER TABLE `hedera`.`imageCollection`
ADD CONSTRAINT role_id_writeRoleFk
FOREIGN KEY (writeRoleFk) REFERENCES account.role (id)
ON UPDATE CASCADE;
ALTER TABLE `hedera`.`imageCollection` modify readRoleFk INT UNSIGNED default 1 null;
ALTER TABLE `hedera`.`imageCollection`
ADD CONSTRAINT role_id_readRoleFk
FOREIGN KEY (readRoleFk) REFERENCES account.role (id)
ON UPDATE CASCADE;
UPDATE hedera.imageCollection t SET t.writeRoleFk = (
SELECT id FROM `account`.`role` WHERE name = 'catalogPhotos'
)
WHERE t.name = 'catalog';
UPDATE hedera.imageCollection t SET t.writeRoleFk = (
SELECT id FROM `account`.`role` WHERE name = 'userPhotos'
)
WHERE t.name = 'user';
UPDATE hedera.imageCollection t SET t.writeRoleFk = 9
WHERE t.name IN ('link', 'news');

View File

@ -1,19 +0,0 @@
DROP TRIGGER IF EXISTS `vn`.`itemTag_afterUpdate`;
DELIMITER $$
USE `vn`$$
CREATE DEFINER=`root`@`%` TRIGGER `vn`.`itemTag_afterUpdate`
AFTER UPDATE ON `itemTag` FOR EACH ROW
trig: BEGIN
IF @isTriggerDisabled THEN
LEAVE trig;
END IF;
DROP TEMPORARY TABLE IF EXISTS tmp.item;
CREATE TEMPORARY TABLE tmp.item
SELECT NEW.itemFk id;
CALL item_refreshTags();
DROP TEMPORARY TABLE tmp.item;
END$$
DELIMITER ;

View File

@ -1,6 +0,0 @@
INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`)
VALUES
('FixedPrice', '*', '*', 'ALLOW', 'ROLE', 'buyer'),
('PayDem', '*', 'READ', 'ALLOW', 'ROLE', 'employee'),
('Client', 'createReceipt', '*', 'ALLOW', 'ROLE', 'administrative'),
('PrintServerQueue', '*', 'WRITE', 'ALLOW', 'ROLE', 'employee');

View File

@ -1,82 +0,0 @@
DROP PROCEDURE IF EXISTS vn.ledger_doCompensation;
DELIMITER $$
$$
CREATE DEFINER=`root`@`%` PROCEDURE `vn`.`ledger_doCompensation`(vDated DATE, vCompensationAccount VARCHAR(10) , vBankFk VARCHAR(10), vConcept VARCHAR(255), vAmount DECIMAL(10,2), vCompanyFk INT, vOriginalAccount VARCHAR(10))
BEGIN
/**
* Compensa un pago o un recibo insertando en contabilidad
*
* @param vDated fecha en la cual se anota
* @param vCompensationAccount cuenta contable contra la que se compensa
* @param vBankFk banco de la compensacion
* @param vConcept descripcion
* @param vAmount cantidad que se compensa
* @param vCompany empresa
* @param vOriginalAccount cuenta contable desde la cual se compensa
*
*/
DECLARE vNewBookEntry INT;
DECLARE vIsClientCompensation INT;
DECLARE vClientFk INT;
DECLARE vSupplierFk INT;
DECLARE vIsOriginalAClient BOOL;
DECLARE vPayMethodCompensation INT;
CALL ledger_next(vNewBookEntry);
SELECT COUNT(id) INTO vIsOriginalAClient FROM client WHERE accountingAccount LIKE vOriginalAccount COLLATE utf8_general_ci;
SELECT id, COUNT(id) INTO vClientFk, vIsClientCompensation
FROM client
WHERE accountingAccount LIKE vCompensationAccount COLLATE utf8_general_ci;
SET @vAmount1:= 0.0;
SET @vAmount2:= 0.0;
INSERT INTO XDiario (ASIEN, FECHA, SUBCTA, CONTRA, CONCEPTO, EURODEBE, EUROHABER, empresa_id)
VALUES ( vNewBookEntry,
vDated,
vOriginalAccount,
vCompensationAccount,
vConcept,
@vAmount1:= IF(
(vIsOriginalAClient OR NOT vIsOriginalAClient)
AND vAmount > 0,
0,
ABS(vAmount)
),
@vAmount2:= IF(@vAmount1,
0,
ABS(vAmount)
),
vCompanyFk
),
( vNewBookEntry,
vDated,
vCompensationAccount,
vOriginalAccount,
vConcept,
@vAmount2,
@vAmount1,
vCompanyFk);
IF vIsClientCompensation THEN
IF vIsOriginalAClient THEN
SET vAmount = -vAmount;
END IF;
INSERT INTO receipt(invoiceFk, amountPaid, payed, bankFk, companyFk, clientFk, isConciliate)
VALUES (vConcept, vAmount, vDated, vBankFk, vCompanyFk, vClientFk, TRUE);
ELSE
IF NOT vIsOriginalAClient THEN
SET vAmount = -vAmount;
END IF;
SELECT id INTO vSupplierFk FROM supplier WHERE `account` LIKE vCompensationAccount COLLATE utf8_general_ci;
SELECT id INTO vPayMethodCompensation FROM payMethod WHERE `code` = 'compensation';
INSERT INTO payment (received, dueDated, supplierFk, amount, bankFk, payMethodFk, concept, companyFk, isConciliated)
VALUES(vDated, vDated, vSupplierFk, vAmount, vBankFk, vPayMethodCompensation, vConcept, vCompanyFk, TRUE);
END IF;
END$$
DELIMITER ;

View File

@ -1,17 +0,0 @@
DROP TRIGGER IF EXISTS vn.receipt_beforInsert;
DELIMITER $$
$$
CREATE TRIGGER receipt_beforInsert
BEFORE INSERT
ON receipt FOR EACH ROW
BEGIN
SELECT isAutoConciliated INTO @isAutoConciliated
FROM accounting a
JOIN accountingType at2 ON at2.id = a.accountingTypeFk
WHERE a.id =NEW.bankFk;
SET NEW.isConciliate = @isAutoConciliated;
END
$$
DELIMITER ;

View File

@ -1,4 +1,5 @@
INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`)
VALUES VALUES
('SupplierAccount', '*', '*', 'ALLOW', 'ROLE', 'administrative'), ('SupplierAccount', '*', '*', 'ALLOW', 'ROLE', 'administrative'),
('Entry', '*', '*', 'ALLOW', 'ROLE', 'administrative'); ('Entry', '*', '*', 'ALLOW', 'ROLE', 'administrative'),
('InvoiceIn', '*', '*', 'ALLOW', 'ROLE', 'administrative');

View File

@ -0,0 +1,4 @@
INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`)
VALUES
('StarredModule', '*', '*', 'ALLOW', 'ROLE', 'employee'),
('ItemBotanical', '*', 'WRITE', 'ALLOW', 'ROLE', 'logisticBoss');

View File

@ -0,0 +1,20 @@
CREATE TABLE `salix`.`module` (
`code` VARCHAR(45) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `salix`.`module`(`code`)
VALUES
('Items'),
('Orders'),
('Clients'),
('Entries'),
('Travels'),
('Invoices out'),
('Suppliers'),
('Claims'),
('Routes'),
('Tickets'),
('Workers'),
('Users'),
('Zones');

View File

@ -0,0 +1,10 @@
CREATE TABLE `vn`.`starredModule` (
`id` INT(11) unsigned NOT NULL AUTO_INCREMENT,
`workerFk` INT(10) NOT NULL,
`moduleFk` VARCHAR(45) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `starred_workerFk` (`workerFk`),
KEY `starred_moduleFk` (`moduleFk`),
CONSTRAINT `starred_workerFk` FOREIGN KEY (`workerFk`) REFERENCES `vn`.`worker` (`id`) ON UPDATE CASCADE,
CONSTRAINT `starred_moduleFk` FOREIGN KEY (`moduleFk`) REFERENCES `salix`.`module` (`code`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

View File

@ -0,0 +1 @@
Delete me

View File

@ -0,0 +1,4 @@
INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`)
VALUES
('Genus', '*', 'WRITE', 'ALLOW', 'ROLE', 'logisticBoss'),
('Specie', '*', 'WRITE', 'ALLOW', 'ROLE', 'logisticBoss');

File diff suppressed because one or more lines are too long

View File

@ -1064,25 +1064,25 @@ INSERT INTO `vn`.`ticketCollection` (`ticketFk`, `collectionFk`, `level`)
VALUES VALUES
(1, 1, 1); (1, 1, 1);
INSERT INTO `edi`.`genus`(`genus_id`, `latin_genus_name`, `entry_date`, `expiry_date`, `change_date_time`) INSERT INTO `vn`.`genus`(`id`, `name`)
VALUES VALUES
(1, 'Abelia' , CURDATE(), NULL, CURDATE()), (1, 'Abelia'),
(2, 'Abies', CURDATE(), NULL, CURDATE()), (2, 'Abies'),
(3, 'Abutilon', CURDATE(), NULL, CURDATE()); (3, 'Abutilon');
INSERT INTO `edi`.`specie`(`specie_id`, `genus_id`, `latin_species_name`, `entry_date`, `expiry_date`, `change_date_time`) INSERT INTO `vn`.`specie`(`id`, `name`)
VALUES VALUES
(1, 1, 'grandiflora', CURDATE(), NULL, CURDATE()), (1, 'grandiflora'),
(2, 2, 'procera', CURDATE(), NULL, CURDATE()), (2, 'procera'),
(3, 3, 'decurrens', CURDATE(), NULL, CURDATE()), (3, 'decurrens'),
(4, 3, 'dealbata', CURDATE(), NULL, CURDATE()); (4, 'dealbata');
INSERT INTO `vn`.`itemBotanical`(`itemFk`, `botanical`, `genusFk`, `specieFk`) INSERT INTO `vn`.`itemBotanical`(`itemFk`, `genusFk`, `specieFk`)
VALUES VALUES
(1, 'Hedera helix', 1, 1), (1, 1, 1),
(2, NULL, 2, 2), (2, 2, 2),
(3, 'Cycas revoluta', 2, NULL), (3, 2, NULL),
(4, 'Polygonum', NULL, NULL); (4, NULL, NULL);
INSERT INTO `vn`.`tag`(`id`, `code`, `name`, `isFree`, `isQuantitatif`, `sourceTable`, `unit`, `ediTypeFk`, `overwrite`) INSERT INTO `vn`.`tag`(`id`, `code`, `name`, `isFree`, `isQuantitatif`, `sourceTable`, `unit`, `ediTypeFk`, `overwrite`)
VALUES VALUES
@ -1233,11 +1233,18 @@ INSERT INTO `vn`.`annualAverageInvoiced`(`clientFk`, `invoiced`)
(104, 500), (104, 500),
(105, 5000); (105, 5000);
INSERT INTO `vn`.`supplier`(`id`, `name`, `nickname`,`account`,`countryFk`,`nif`,`isFarmer`,`commission`, `created`, `isActive`, `street`, `city`, `provinceFk`, `postCode`, `payMethodFk`, `payDemFk`, `payDay`, `taxTypeSageFk`, `withholdingSageFk`, `transactionTypeSageFk`, `workerFk`) INSERT INTO `vn`.`supplierActivity`(`code`, `name`)
VALUES VALUES
(1, 'Plants SL', 'Plants nick', 4100000001, 1, '06089160W', 0, 0, CURDATE(), 1, 'supplier address 1', 'PONTEVEDRA', 1, 15214, 1, 1, 15, 4, 1, 1, 18), ('animals', 'Food and complements for pets'),
(2, 'Farmer King', 'The farmer', 4000020002, 1, '87945234L', 1, 0, CURDATE(), 1, 'supplier address 2', 'SILLA', 2, 43022, 1, 2, 10, 93, 2, 8, 18), ('complements', 'Other complements'),
(442, 'Verdnatura Levante SL', 'Verdnatura', 5115000442, 1, '06815934E', 0, 0, CURDATE(), 1, 'supplier address 3', 'SILLA', 1, 43022, 1, 2, 15, 6, 9, 3, 18); ('flowerPlants', 'Wholesale of flowers and plants'),
('vegetablesFruits', 'Fruit and vegetable trade');
INSERT INTO `vn`.`supplier`(`id`, `name`, `nickname`,`account`,`countryFk`,`nif`,`isFarmer`,`commission`, `created`, `isActive`, `street`, `city`, `provinceFk`, `postCode`, `payMethodFk`, `payDemFk`, `payDay`, `taxTypeSageFk`, `withholdingSageFk`, `transactionTypeSageFk`, `workerFk`, `supplierActivityFk`)
VALUES
(1, 'Plants SL', 'Plants nick', 4100000001, 1, '06089160W', 0, 0, CURDATE(), 1, 'supplier address 1', 'PONTEVEDRA', 1, 15214, 1, 1, 15, 4, 1, 1, 18, 'flowerPlants'),
(2, 'Farmer King', 'The farmer', 4000020002, 1, '87945234L', 1, 0, CURDATE(), 1, 'supplier address 2', 'SILLA', 2, 43022, 1, 2, 10, 93, 2, 8, 18, 'animals'),
(442, 'Verdnatura Levante SL', 'Verdnatura', 5115000442, 1, '06815934E', 0, 0, CURDATE(), 1, 'supplier address 3', 'SILLA', 1, 43022, 1, 2, 15, 6, 9, 3, 18, 'flowerPlants');
INSERT INTO `vn`.`supplierContact`(`id`, `supplierFk`, `phone`, `mobile`, `email`, `observation`, `name`) INSERT INTO `vn`.`supplierContact`(`id`, `supplierFk`, `phone`, `mobile`, `email`, `observation`, `name`)
VALUES VALUES
@ -1246,11 +1253,6 @@ INSERT INTO `vn`.`supplierContact`(`id`, `supplierFk`, `phone`, `mobile`, `email
(3, 2, 321654987, NULL, 'supplier2@email.es', NULL, NULL), (3, 2, 321654987, NULL, 'supplier2@email.es', NULL, NULL),
(4, 442, 321654987, NULL, NULL, 'observation442', NULL); (4, 442, 321654987, NULL, NULL, 'observation442', NULL);
INSERT INTO `vn`.`supplierFreighter` (`supplierFk`)
VALUES
(1),
(2);
INSERT INTO `cache`.`cache_calc`(`id`, `cache_id`, `cacheName`, `params`, `last_refresh`, `expires`, `created`, `connection_id`) INSERT INTO `cache`.`cache_calc`(`id`, `cache_id`, `cacheName`, `params`, `last_refresh`, `expires`, `created`, `connection_id`)
VALUES VALUES
(1, 2, 'available', CONCAT_WS('/',1,CURDATE()), CURRENT_TIMESTAMP(), DATE_ADD(CURRENT_TIMESTAMP(),INTERVAL 15 MINUTE), CURDATE(), NULL), (1, 2, 'available', CONCAT_WS('/',1,CURDATE()), CURRENT_TIMESTAMP(), DATE_ADD(CURRENT_TIMESTAMP(),INTERVAL 15 MINUTE), CURDATE(), NULL),
@ -2175,3 +2177,69 @@ INSERT INTO `hedera`.`image`(`collectionFk`, `name`)
INSERT INTO `hedera`.`imageCollectionSize`(`id`, `collectionFk`,`width`, `height`) INSERT INTO `hedera`.`imageCollectionSize`(`id`, `collectionFk`,`width`, `height`)
VALUES VALUES
(1, 4, 160, 160); (1, 4, 160, 160);
INSERT INTO `vn`.`awb` (id, code, package, weight, created, amount, transitoryFk, taxFk)
VALUES
(1, '07546501420', 67, 671, CURDATE(), 1761, 1, 1),
(2, '07546491421', 252, 2769, CURDATE(), 5231, 1, 1),
(3, '07546500823', 102, 1495, CURDATE(), 3221, 1, 1),
(4, '99610288821', 252, 2777, CURDATE(), 3641, 1, 1),
(5, '07546500834', 229, 3292, CURDATE(), 6601, 2, 1),
(6, '22101929561', 37, 458, CURDATE(), 441, 2, 1),
(7, '07546491432', 258, 3034, CURDATE(), 6441, 2, 1),
(8, '99610288644', 476, 4461, CURDATE(), 5751, 442, 1),
(9, '99610289193', 302, 2972, CURDATE(), 3871, 442, 1),
(10, '07546500856', 185, 2364, CURDATE(), 5321, 442, 1);
REPLACE INTO vn.dua (id, code, awbFk, issued, operated, booked, bookEntried, gestdocFk, customsValue, companyFk)
VALUES
(1, '19ES0028013A481523', 1, CURDATE(), CURDATE(), CURDATE(), CURDATE(), 1, 11276.95, 442),
(2, '21ES00280136115760', 2, CURDATE(), CURDATE(), CURDATE(), CURDATE(), 2, 1376.20, 442),
(3, '19ES00280131956004', 3, CURDATE(), CURDATE(), CURDATE(), CURDATE(), 3, 14268.50, 442),
(4, '19ES00280131955995', 4, CURDATE(), CURDATE(), CURDATE(), CURDATE(), 1, 8242.50, 442),
(5, '19ES00280132022070', 5, CURDATE(), CURDATE(), CURDATE(), CURDATE(), 2, 10012.49, 442),
(6, '19ES00280132032308', 6, CURDATE(), CURDATE(), CURDATE(), CURDATE(), 2, 19914.25, 442),
(7, '19ES00280132025489', 7, DATE_ADD(CURDATE(), INTERVAL -1 MONTH), CURDATE(), CURDATE(), CURDATE(), 2, 1934.06, 442),
(8, '19ES00280132025489', 8, DATE_ADD(CURDATE(), INTERVAL -1 MONTH), CURDATE(), CURDATE(), CURDATE(), 2, 3618.52, 442),
(9, '19ES00280132025489', 9, DATE_ADD(CURDATE(), INTERVAL -1 MONTH), CURDATE(), CURDATE(), CURDATE(), 2, 7126.23, 442),
(10, '19ES00280132025489', 10, DATE_ADD(CURDATE(), INTERVAL -1 MONTH), CURDATE(), CURDATE(), CURDATE(), 2, 4631.45, 442);
REPLACE INTO `vn`.`invoiceIn`(`id`, `serialNumber`,`serial`, `supplierFk`, `issued`, `created`, `supplierRef`, `isBooked`, `companyFk`, `docFk`)
VALUES
(1, 1001, 'R', 1, CURDATE(), CURDATE(), 1234, 0, 442, 1),
(2, 1002, 'R', 1, CURDATE(), CURDATE(), 1235, 1, 442, 1),
(3, 1003, 'R', 1, CURDATE(), CURDATE(), 1236, 0, 442, 1),
(4, 1004, 'R', 1, CURDATE(), CURDATE(), 1237, 0, 442, 1),
(5, 1005, 'R', 1, CURDATE(), CURDATE(), 1238, 1, 442, 1),
(6, 1006, 'R', 2, CURDATE(), CURDATE(), 1239, 0, 442, 1),
(7, 1007, 'R', 2, DATE_ADD(CURDATE(), INTERVAL -1 MONTH), DATE_ADD(CURDATE(), INTERVAL -1 MONTH), 1240, 1, 442, 1),
(8, 1008, 'R', 2, DATE_ADD(CURDATE(), INTERVAL -1 MONTH), DATE_ADD(CURDATE(), INTERVAL -1 MONTH), 1241, 1, 442, 1),
(9, 1009, 'R', 2, DATE_ADD(CURDATE(), INTERVAL -1 MONTH), DATE_ADD(CURDATE(), INTERVAL -1 MONTH), 1242, 1, 442, 1),
(10, 1010, 'R', 2, DATE_ADD(CURDATE(), INTERVAL -1 MONTH), DATE_ADD(CURDATE(), INTERVAL -1 MONTH), 1243, 1, 442, 1);
INSERT INTO `vn`.`invoiceInDueDay`(`invoiceInFk`, `dueDated`, `bankFk`, `amount`)
VALUES
(1, CURDATE(), 1, 237),
(1, CURDATE(), 1, 15.25),
(2, CURDATE(), 1, 168),
(2, CURDATE(), 1, 55.17),
(3, CURDATE(), 1, 87.95),
(3, CURDATE(), 1, 7.65),
(4, CURDATE(), 1, 373.27),
(4, CURDATE(), 1, 73.36),
(5, CURDATE(), 1, 64.23),
(6, CURDATE(), 1, 32.95),
(7, CURDATE(), 1, 58.64);
INSERT INTO `vn`.`duaInvoiceIn`(`id`, `duaFk`, `invoiceInFk`)
VALUES
(1, 1, 1),
(2, 2, 2),
(3, 3, 3),
(4, 4, 4),
(5, 5, 5),
(6, 6, 6),
(7, 7, 7),
(8, 8, 8),
(9, 9, 9),
(10, 10, 10);

File diff suppressed because it is too large Load Diff

View File

@ -32,6 +32,7 @@ TABLES=(
salix salix
ACL ACL
fieldAcl fieldAcl
module
) )
dump_tables ${TABLES[@]} dump_tables ${TABLES[@]}
@ -39,9 +40,12 @@ TABLES=(
vn vn
alertLevel alertLevel
bookingPlanner bookingPlanner
cplusInvoiceType472
cplusInvoiceType477 cplusInvoiceType477
cplusRectificationType
cplusSubjectOp cplusSubjectOp
cplusTaxBreak cplusTaxBreak
cplusTrascendency472
pgc pgc
time time
claimResponsible claimResponsible
@ -54,6 +58,7 @@ TABLES=(
department department
component component
componentType componentType
continent
) )
dump_tables ${TABLES[@]} dump_tables ${TABLES[@]}

View File

@ -31,7 +31,6 @@ IGNORETABLES=(
--ignore-table=vn.agencyModeZone --ignore-table=vn.agencyModeZone
--ignore-table=vn.agencyProvince --ignore-table=vn.agencyProvince
--ignore-table=vn.agencyWarehouse --ignore-table=vn.agencyWarehouse
--ignore-table=vn.awb
--ignore-table=vn.botanicExport__ --ignore-table=vn.botanicExport__
--ignore-table=vn.clientDefaultCompany --ignore-table=vn.clientDefaultCompany
--ignore-table=vn.color --ignore-table=vn.color
@ -39,6 +38,7 @@ IGNORETABLES=(
--ignore-table=vn.comparativeFilter --ignore-table=vn.comparativeFilter
--ignore-table=vn.coolerPath --ignore-table=vn.coolerPath
--ignore-table=vn.coolerPathDetail --ignore-table=vn.coolerPathDetail
--ignore-table=vn.config__
--ignore-table=vn.department__ --ignore-table=vn.department__
--ignore-table=vn.doc --ignore-table=vn.doc
--ignore-table=vn.entity --ignore-table=vn.entity
@ -49,13 +49,8 @@ IGNORETABLES=(
--ignore-table=vn.grant --ignore-table=vn.grant
--ignore-table=vn.grantGroup --ignore-table=vn.grantGroup
--ignore-table=vn.invoiceCorrection__ --ignore-table=vn.invoiceCorrection__
--ignore-table=vn.invoiceIn
--ignore-table=vn.invoiceInAwb
--ignore-table=vn.invoiceInDueDay
--ignore-table=vn.invoiceInEntry
--ignore-table=vn.invoiceInIntrastat
--ignore-table=vn.invoiceInTax
--ignore-table=vn.itemTaxCountrySpain --ignore-table=vn.itemTaxCountrySpain
--ignore-table=vn.itemFreeNumber__
--ignore-table=vn.mail__ --ignore-table=vn.mail__
--ignore-table=vn.manaSpellers --ignore-table=vn.manaSpellers
--ignore-table=vn.outgoingInvoiceKk --ignore-table=vn.outgoingInvoiceKk
@ -69,7 +64,6 @@ IGNORETABLES=(
--ignore-table=vn.printingQueue --ignore-table=vn.printingQueue
--ignore-table=vn.printServerQueue__ --ignore-table=vn.printServerQueue__
--ignore-table=vn.promissoryNote --ignore-table=vn.promissoryNote
--ignore-table=vn.rate
--ignore-table=vn.referenceRate__ --ignore-table=vn.referenceRate__
--ignore-table=vn.routesControl --ignore-table=vn.routesControl
--ignore-table=vn.salesToPrePrepare --ignore-table=vn.salesToPrePrepare
@ -78,6 +72,7 @@ IGNORETABLES=(
--ignore-table=vn.ticketeToPreparePrepared --ignore-table=vn.ticketeToPreparePrepared
--ignore-table=vn.ticketObservation__ --ignore-table=vn.ticketObservation__
--ignore-table=vn.ticketRequest__ --ignore-table=vn.ticketRequest__
--ignore-table=vn.ticket_print__
--ignore-table=vn.ticketToPrepare --ignore-table=vn.ticketToPrepare
--ignore-table=vn.till__ --ignore-table=vn.till__
--ignore-table=vn.travelThermograph__ --ignore-table=vn.travelThermograph__

View File

@ -23,6 +23,64 @@ export default {
acceptButton: '.vn-confirm.shown button[response=accept]', acceptButton: '.vn-confirm.shown button[response=accept]',
searchButton: 'vn-searchbar vn-icon[icon="search"]' searchButton: 'vn-searchbar vn-icon[icon="search"]'
}, },
moduleIndex: {
anyStarredModule: 'vn-home > div:nth-child(1) > div.modules > a',
firstModulePinIcon: 'vn-home a:nth-child(1) vn-icon[icon="push_pin"]',
firstModuleRemovePinIcon: 'vn-home a:nth-child(1) vn-icon[icon="remove_circle"]'
},
accountIndex: {
addAccount: 'vn-user-index button vn-icon[icon="add"]',
newName: 'vn-user-create vn-textfield[ng-model="$ctrl.user.name"]',
newNickname: 'vn-user-create vn-textfield[ng-model="$ctrl.user.nickname"]',
newEmail: 'vn-user-create vn-textfield[ng-model="$ctrl.user.email"]',
newRole: 'vn-user-create vn-autocomplete[ng-model="$ctrl.user.roleFk"]',
newPassword: 'vn-user-create vn-textfield[ng-model="$ctrl.user.password"]',
createAccountButton: 'vn-user-create button[type="submit"]',
},
accountBasicData: {
name: 'vn-user-basic-data vn-textfield[ng-model="$ctrl.user.name"]',
nickname: 'vn-user-basic-data vn-textfield[ng-model="$ctrl.user.nickname"]',
email: 'vn-user-basic-data vn-textfield[ng-model="$ctrl.user.email"]',
language: 'vn-user-basic-data vn-autocomplete[ng-model="$ctrl.user.lang"]',
save: 'vn-user-basic-data button[type="submit"]'
},
accountRoles: {
anyResult: 'vn-user-roles > vn-data-viewer vn-list > a'
},
accountAliasIndex: {
addAlias: 'vn-alias-index button vn-icon[icon="add"]',
newName: 'vn-alias-create vn-textfield[ng-model="$ctrl.alias.alias"]',
newDescription: 'vn-alias-create vn-textfield[ng-model="$ctrl.alias.description"]',
createAliasButton: 'vn-alias-create button[type="submit"]',
},
accountAliasBasicData: {
name: 'vn-alias-basic-data vn-textfield[ng-model="$ctrl.alias.alias"]',
description: 'vn-alias-basic-data vn-textfield[ng-model="$ctrl.alias.description"]',
save: 'vn-alias-basic-data button[type="submit"]'
},
accountAliasUsers: {
anyResult: 'vn-alias-users > vn-data-viewer vn-tr'
},
accountRoleIndex: {
addRole: 'vn-role-index button vn-icon[icon="add"]',
newName: 'vn-role-create vn-textfield[ng-model="$ctrl.role.name"]',
newDescription: 'vn-role-create vn-textfield[ng-model="$ctrl.role.description"]',
createRoleButton: 'vn-role-create button[type="submit"]',
},
accountRoleBasicData: {
name: 'vn-role-basic-data vn-textfield[ng-model="$ctrl.role.name"]',
description: 'vn-role-basic-data vn-textfield[ng-model="$ctrl.role.description"]',
save: 'vn-role-basic-data button[type="submit"]'
},
accountSubroles: {
addSubrole: 'vn-role-subroles button vn-icon[icon="add"]',
role: 'vn-autocomplete[ng-model="$ctrl.addData.inheritsFrom"]',
save: 'button[response="accept"]',
anyResult: 'vn-role-subroles > vn-data-viewer > div > div > vn-card > vn-list > a'
},
accountRoleInheritance: {
anyResult: 'vn-role-inherited > vn-data-viewer > div > div > vn-card > vn-list > a'
},
clientsIndex: { clientsIndex: {
createClientButton: `vn-float-button` createClientButton: `vn-float-button`
}, },
@ -352,7 +410,6 @@ export default {
submitNichesButton: 'vn-item-niche button[type=submit]' submitNichesButton: 'vn-item-niche button[type=submit]'
}, },
itemBotanical: { itemBotanical: {
botanical: 'vn-item-botanical vn-horizontal:nth-child(1) vn-textfield[ng-model="$ctrl.botanical.botanical"]',
genus: 'vn-item-botanical vn-autocomplete[ng-model="$ctrl.botanical.genusFk"]', genus: 'vn-item-botanical vn-autocomplete[ng-model="$ctrl.botanical.genusFk"]',
species: 'vn-item-botanical vn-autocomplete[ng-model="$ctrl.botanical.specieFk"]', species: 'vn-item-botanical vn-autocomplete[ng-model="$ctrl.botanical.specieFk"]',
submitBotanicalButton: `vn-item-botanical button[type=submit]` submitBotanicalButton: `vn-item-botanical button[type=submit]`
@ -850,6 +907,14 @@ export default {
anySearchResult: 'vn-travel-index vn-tbody > a', anySearchResult: 'vn-travel-index vn-tbody > a',
firstSearchResult: 'vn-travel-index vn-tbody > a:nth-child(1)', firstSearchResult: 'vn-travel-index vn-tbody > a:nth-child(1)',
firstTravelAddEntryButton: 'vn-travel-index a:nth-child(1) vn-icon[icon="icon-ticket"]', firstTravelAddEntryButton: 'vn-travel-index a:nth-child(1) vn-icon[icon="icon-ticket"]',
newTravelButton: 'vn-travel-index button vn-icon[icon="add"]',
reference: 'vn-travel-create vn-textfield[ng-model="$ctrl.travel.ref"]',
agency: 'vn-travel-create vn-autocomplete[ng-model="$ctrl.travel.agencyModeFk"]',
shipDate: 'vn-travel-create vn-date-picker[ng-model="$ctrl.travel.shipped"]',
landingDate: 'vn-travel-create vn-date-picker[ng-model="$ctrl.travel.landed"]',
warehouseOut: 'vn-travel-create vn-autocomplete[ng-model="$ctrl.travel.warehouseOutFk"]',
warehouseIn: 'vn-travel-create vn-autocomplete[ng-model="$ctrl.travel.warehouseInFk"]',
save: 'vn-travel-create vn-submit > button'
}, },
travelExtraCommunity: { travelExtraCommunity: {
anySearchResult: 'vn-travel-extra-community > vn-data-viewer div > vn-tbody > vn-tr', anySearchResult: 'vn-travel-extra-community > vn-data-viewer div > vn-tbody > vn-tr',
@ -860,6 +925,7 @@ export default {
travelBasicData: { travelBasicData: {
reference: 'vn-travel-basic-data vn-textfield[ng-model="$ctrl.travel.ref"]', reference: 'vn-travel-basic-data vn-textfield[ng-model="$ctrl.travel.ref"]',
agency: 'vn-travel-basic-data vn-autocomplete[ng-model="$ctrl.travel.agencyModeFk"]', agency: 'vn-travel-basic-data vn-autocomplete[ng-model="$ctrl.travel.agencyModeFk"]',
shippedDate: 'vn-travel-basic-data vn-date-picker[ng-model="$ctrl.travel.shipped"]',
deliveryDate: 'vn-travel-basic-data vn-date-picker[ng-model="$ctrl.travel.landed"]', deliveryDate: 'vn-travel-basic-data vn-date-picker[ng-model="$ctrl.travel.landed"]',
outputWarehouse: 'vn-travel-basic-data vn-autocomplete[ng-model="$ctrl.travel.warehouseOutFk"]', outputWarehouse: 'vn-travel-basic-data vn-autocomplete[ng-model="$ctrl.travel.warehouseOutFk"]',
inputWarehouse: 'vn-travel-basic-data vn-autocomplete[ng-model="$ctrl.travel.warehouseInFk"]', inputWarehouse: 'vn-travel-basic-data vn-autocomplete[ng-model="$ctrl.travel.warehouseInFk"]',

View File

@ -0,0 +1,43 @@
import selectors from '../../helpers/selectors';
import getBrowser from '../../helpers/puppeteer';
describe('Starred modules path', async() => {
let browser;
let page;
beforeAll(async() => {
browser = await getBrowser();
page = browser.page;
await page.login('employee');
});
afterAll(async() => {
await browser.close();
});
it('should make sure there are no modules pinned yet', async() => {
const count = await page.countElement(selectors.moduleIndex.anyStarredModule);
expect(count).toEqual(0);
});
it('should set a module as favore', async() => {
await page.waitToClick(selectors.moduleIndex.firstModulePinIcon);
const message = await page.waitForSnackbar();
const count = await page.countElement(selectors.moduleIndex.anyStarredModule);
expect(message.text).toContain('Data saved!');
expect(count).toEqual(1);
});
it('should remove the module from favores', async() => {
await page.waitToClick(selectors.moduleIndex.firstModuleRemovePinIcon);
const message = await page.waitForSnackbar();
const count = await page.countElement(selectors.moduleIndex.anyStarredModule);
expect(message.text).toContain('Data saved!');
expect(count).toEqual(0);
});
});

View File

@ -48,10 +48,10 @@ describe('Item summary path', () => {
}); });
it(`should check the item summary preview shows fields from botanical`, async() => { it(`should check the item summary preview shows fields from botanical`, async() => {
await page.waitForTextInElement(selectors.itemSummary.botanical, 'Hedera helix'); await page.waitForTextInElement(selectors.itemSummary.botanical, 'Abelia');
const result = await page.waitToGetProperty(selectors.itemSummary.botanical, 'innerText'); const result = await page.waitToGetProperty(selectors.itemSummary.botanical, 'innerText');
expect(result).toContain('Hedera helix'); expect(result).toContain('Abelia');
}); });
it(`should check the item summary preview shows fields from barcode`, async() => { it(`should check the item summary preview shows fields from barcode`, async() => {
@ -102,7 +102,7 @@ describe('Item summary path', () => {
await page.waitForSelector(selectors.itemSummary.basicData, {hidden: true}); await page.waitForSelector(selectors.itemSummary.basicData, {hidden: true});
}); });
it(`should navigate to the one of the items detailed section`, async() => { it(`should navigate to one of the items detailed section`, async() => {
await page.accessToSearchResult('Melee weapon combat fist 15cm'); await page.accessToSearchResult('Melee weapon combat fist 15cm');
await page.waitForState('item.card.summary'); await page.waitForState('item.card.summary');
}); });
@ -135,7 +135,7 @@ describe('Item summary path', () => {
it(`should check the item summary shows fields from botanical section`, async() => { it(`should check the item summary shows fields from botanical section`, async() => {
const result = await page.waitToGetProperty(selectors.itemSummary.botanical, 'innerText'); const result = await page.waitToGetProperty(selectors.itemSummary.botanical, 'innerText');
expect(result).toContain('-'); expect(result).toContain('procera');
}); });
it(`should check the item summary shows fields from barcodes section`, async() => { it(`should check the item summary shows fields from barcodes section`, async() => {

View File

@ -17,7 +17,6 @@ describe('Item Create botanical path', () => {
}); });
it(`should create a new botanical for the item`, async() => { it(`should create a new botanical for the item`, async() => {
await page.write(selectors.itemBotanical.botanical, 'Cicuta maculata');
await page.autocompleteSearch(selectors.itemBotanical.genus, 'Abelia'); await page.autocompleteSearch(selectors.itemBotanical.genus, 'Abelia');
await page.autocompleteSearch(selectors.itemBotanical.species, 'dealbata'); await page.autocompleteSearch(selectors.itemBotanical.species, 'dealbata');
await page.waitToClick(selectors.itemBotanical.submitBotanicalButton); await page.waitToClick(selectors.itemBotanical.submitBotanicalButton);
@ -26,15 +25,6 @@ describe('Item Create botanical path', () => {
expect(message.text).toContain('Data saved!'); expect(message.text).toContain('Data saved!');
}); });
it(`should confirm the botanical for the item was created`, async() => {
await page.reloadSection('item.card.botanical');
await page.waitForTextInField(selectors.itemBotanical.botanical, 'Cicuta maculata');
const result = await page
.waitToGetProperty(selectors.itemBotanical.botanical, 'value');
expect(result).toEqual('Cicuta maculata');
});
it(`should confirm the Genus for the item was created`, async() => { it(`should confirm the Genus for the item was created`, async() => {
await page.waitForTextInField(selectors.itemBotanical.genus, 'Abelia'); await page.waitForTextInField(selectors.itemBotanical.genus, 'Abelia');
const result = await page const result = await page
@ -51,8 +41,6 @@ describe('Item Create botanical path', () => {
}); });
it(`should edit botanical for the item`, async() => { it(`should edit botanical for the item`, async() => {
await page.clearInput(selectors.itemBotanical.botanical);
await page.write(selectors.itemBotanical.botanical, 'Herp Derp');
await page.autocompleteSearch(selectors.itemBotanical.genus, 'Abies'); await page.autocompleteSearch(selectors.itemBotanical.genus, 'Abies');
await page.autocompleteSearch(selectors.itemBotanical.species, 'decurrens'); await page.autocompleteSearch(selectors.itemBotanical.species, 'decurrens');
await page.waitToClick(selectors.itemBotanical.submitBotanicalButton); await page.waitToClick(selectors.itemBotanical.submitBotanicalButton);
@ -61,15 +49,6 @@ describe('Item Create botanical path', () => {
expect(message.text).toContain('Data saved!'); expect(message.text).toContain('Data saved!');
}); });
it(`should confirm the botanical for the item was edited`, async() => {
await page.reloadSection('item.card.botanical');
await page.waitForTextInField(selectors.itemBotanical.botanical, 'Herp Derp');
const result = await page
.waitToGetProperty(selectors.itemBotanical.botanical, 'value');
expect(result).toEqual('Herp Derp');
});
it(`should confirm the Genus for the item was edited`, async() => { it(`should confirm the Genus for the item was edited`, async() => {
await page.waitForTextInField(selectors.itemBotanical.genus, 'Abies'); await page.waitForTextInField(selectors.itemBotanical.genus, 'Abies');
const result = await page const result = await page

View File

@ -0,0 +1,76 @@
import selectors from '../../helpers/selectors.js';
import getBrowser from '../../helpers/puppeteer';
describe('Travel create path', () => {
let browser;
let page;
const date = new Date();
const day = 15;
date.setDate(day);
beforeAll(async() => {
browser = await getBrowser();
page = browser.page;
await page.loginAndModule('buyer', 'travel');
});
afterAll(async() => {
await browser.close();
});
it('should open the create travel form by clicking on the "new" button', async() => {
await page.waitToClick(selectors.travelIndex.newTravelButton);
await page.waitForState('travel.create');
});
it('should fill the reference, agency and ship date then save the form', async() => {
await page.write(selectors.travelIndex.reference, 'Testing reference');
await page.autocompleteSearch(selectors.travelIndex.agency, 'inhouse pickup');
await page.pickDate(selectors.travelIndex.shipDate, date);
await page.waitToClick(selectors.travelIndex.save);
const message = await page.waitForSnackbar();
expect(message.text).toContain('Data saved!');
});
it('should check the user was redirected to the travel basic data upon creation', async() => {
await page.waitForState('travel.card.basicData');
});
it('should check the travel was created with the correct reference', async() => {
const reference = await page.waitToGetProperty(selectors.travelBasicData.reference, 'value');
expect(reference).toContain('Testing reference');
});
it('should check the travel was created with the correct agency', async() => {
const agency = await page.waitToGetProperty(selectors.travelBasicData.agency, 'value');
expect(agency).toContain('inhouse pickup');
});
it('should check the travel was created with the correct shiping date', async() => {
const shipDate = await page.waitToGetProperty(selectors.travelBasicData.shippedDate, 'value');
expect(shipDate).toContain(day);
});
it('should check the travel was created with the correct landing date', async() => {
const landingDate = await page.waitToGetProperty(selectors.travelBasicData.deliveryDate, 'value');
expect(landingDate).toContain(day);
});
it('should check the travel was created with the correct warehouseOut', async() => {
const warehouseOut = await page.waitToGetProperty(selectors.travelBasicData.outputWarehouse, 'value');
expect(warehouseOut).toContain('Warehouse One');
});
it('should check the travel was created with the correct warehouseIn', async() => {
const warehouseIn = await page.waitToGetProperty(selectors.travelBasicData.inputWarehouse, 'value');
expect(warehouseIn).toContain('Warehouse Five');
});
});

View File

@ -0,0 +1,82 @@
import selectors from '../../helpers/selectors.js';
import getBrowser from '../../helpers/puppeteer';
// #2833 Refactor account.basicData
xdescribe('Account create and basic data path', () => {
let browser;
let page;
beforeAll(async() => {
browser = await getBrowser();
page = browser.page;
await page.loginAndModule('developer', 'account');
});
afterAll(async() => {
await browser.close();
});
it('should open the new account form by clicking the add button', async() => {
await page.waitToClick(selectors.accountIndex.addAccount);
await page.waitForState('account.create');
});
it('should fill the form and then save it by clicking the create button', async() => {
await page.write(selectors.accountIndex.newName, 'Remy');
await page.write(selectors.accountIndex.newNickname, 'Gambit');
await page.write(selectors.accountIndex.newEmail, 'RemyEtienneLeBeau@verdnatura.es');
await page.autocompleteSearch(selectors.accountIndex.newRole, 'Trainee');
await page.write(selectors.accountIndex.newPassword, 'cestlavie');
await page.waitToClick(selectors.accountIndex.createAccountButton);
const message = await page.waitForSnackbar();
expect(message.text).toContain('Data saved!');
});
it('should redirect the user to the created account basic data section', async() => {
await page.waitForState('account.card.basicData');
});
it('should edit the basic data', async() => {
await page.overwrite(selectors.accountBasicData.name, 'Anna');
await page.overwrite(selectors.accountBasicData.nickname, 'Rogue');
await page.overwrite(selectors.accountBasicData.email, 'AnnaMarieLeBeau@verdnatura.es');
await page.autocompleteSearch(selectors.accountBasicData.language, 'english');
await page.waitToClick(selectors.accountBasicData.save);
const message = await page.waitForSnackbar();
expect(message.text).toContain('Data saved!');
});
it('should reload the section and check the name was edited successfully', async() => {
await page.reloadSection('account.card.basicData');
const result = await page.waitToGetProperty(selectors.accountBasicData.name, 'value');
expect(result).toEqual('Anna');
});
it('should check the nickname was edited successfully', async() => {
const result = await page.waitToGetProperty(selectors.accountBasicData.nickname, 'value');
expect(result).toEqual('Rogue');
});
it('should check the email was edited successfully', async() => {
const result = await page.waitToGetProperty(selectors.accountBasicData.email, 'value');
expect(result).toEqual('AnnaMarieLeBeau@verdnatura.es');
});
it('should check the language was edited successfully', async() => {
const result = await page.waitToGetProperty(selectors.accountBasicData.language, 'value');
expect(result).toEqual('English');
});
it('should navigate to the roles section to check the roles are correct', async() => {
await page.accessToSection('account.card.roles');
const rolesCount = await page.countElement(selectors.accountRoles.anyResult);
expect(rolesCount).toEqual(3);
});
});

View File

@ -0,0 +1,66 @@
import selectors from '../../helpers/selectors.js';
import getBrowser from '../../helpers/puppeteer';
describe('Account Alias create and basic data path', () => {
let browser;
let page;
beforeAll(async() => {
browser = await getBrowser();
page = browser.page;
await page.loginAndModule('developer', 'account');
await page.accessToSection('account.alias');
});
afterAll(async() => {
await browser.close();
});
it('should open the new account alias form by clicking the add button', async() => {
await page.waitToClick(selectors.accountAliasIndex.addAlias);
await page.waitForState('account.alias.create');
});
it('should fill the form and then save it by clicking the create alias button', async() => {
await page.write(selectors.accountAliasIndex.newName, 'Boring alias');
await page.write(selectors.accountAliasIndex.newDescription, 'Boring description');
await page.waitToClick(selectors.accountAliasIndex.createAliasButton);
const message = await page.waitForSnackbar();
expect(message.text).toContain('Data saved!');
});
it('should redirect the user to the created account alias basic data section', async() => {
await page.waitForState('account.alias.card.basicData');
});
it('should edit the alias basic data', async() => {
await page.overwrite(selectors.accountAliasBasicData.name, 'Psykers');
await page.overwrite(selectors.accountAliasBasicData.description, 'Email group for psykers');
await page.waitToClick(selectors.accountAliasBasicData.save);
const message = await page.waitForSnackbar();
expect(message.text).toContain('Data saved!');
});
it('should reload the basicData section and check the name was edited successfully', async() => {
await page.reloadSection('account.alias.card.basicData');
const result = await page.waitToGetProperty(selectors.accountAliasBasicData.name, 'value');
expect(result).toEqual('Psykers');
});
it('should check the alias description was edited successfully', async() => {
const result = await page.waitToGetProperty(selectors.accountAliasBasicData.description, 'value');
expect(result).toContain('psykers');
});
it('should search for the IT alias group then access to the users section then check the role listed is the expected one', async() => {
await page.accessToSearchResult('IT');
await page.accessToSection('account.alias.card.users');
const rolesCount = await page.countElement(selectors.accountAliasUsers.anyResult);
expect(rolesCount).toEqual(1);
});
});

View File

@ -0,0 +1,86 @@
import selectors from '../../helpers/selectors.js';
import getBrowser from '../../helpers/puppeteer';
describe('Account Role create and basic data path', () => {
let browser;
let page;
beforeAll(async() => {
browser = await getBrowser();
page = browser.page;
await page.loginAndModule('developer', 'account');
await page.accessToSection('account.role');
});
afterAll(async() => {
await browser.close();
});
it('should open the new account role form by clicking the add button', async() => {
await page.waitToClick(selectors.accountRoleIndex.addRole);
await page.waitForState('account.role.create');
});
it('should fill the form and then save it by clicking the create role button', async() => {
await page.write(selectors.accountRoleIndex.newName, 'boringRole');
await page.write(selectors.accountRoleIndex.newDescription, 'Boring description');
await page.waitToClick(selectors.accountRoleIndex.createRoleButton);
const message = await page.waitForSnackbar();
expect(message.text).toContain('Data saved!');
});
it('should redirect the user to the created role basic data section', async() => {
await page.waitForState('account.role.card.basicData');
});
it('should edit the role basic data', async() => {
await page.overwrite(selectors.accountRoleBasicData.name, 'psyker');
await page.overwrite(selectors.accountRoleBasicData.description, 'A role just for psykers');
await page.waitToClick(selectors.accountRoleBasicData.save);
const message = await page.waitForSnackbar();
expect(message.text).toContain('Data saved!');
});
it('should reload the role basicData section and check the name was edited successfully', async() => {
await page.reloadSection('account.role.card.basicData');
const result = await page.waitToGetProperty(selectors.accountRoleBasicData.name, 'value');
expect(result).toEqual('psyker');
});
it('should check the role description was edited successfully', async() => {
const result = await page.waitToGetProperty(selectors.accountRoleBasicData.description, 'value');
expect(result).toContain('psykers');
});
it('should navigate to the subroles section', async() => {
await page.accessToSection('account.role.card.subroles');
});
it('should asign a subrole', async() => {
await page.waitToClick(selectors.accountSubroles.addSubrole);
await page.autocompleteSearch(selectors.accountSubroles.role, 'teamManager');
await page.waitToClick(selectors.accountSubroles.save);
const message = await page.waitForSnackbar();
expect(message.text).toContain('Role added!');
});
it('should reload the subroles section and check a role was added', async() => {
await page.reloadSection('account.role.card.subroles');
const subrolesCount = await page.countElement(selectors.accountSubroles.anyResult);
expect(subrolesCount).toEqual(1);
});
it('should search for the employee role group then access to the roles inheritance section then check the roles listed are the expected ones', async() => {
await page.accessToSearchResult('employee');
await page.accessToSection('account.role.card.inherited');
const rolesCount = await page.countElement(selectors.accountRoleInheritance.anyResult);
expect(rolesCount).toEqual(6);
});
});

View File

@ -29,7 +29,7 @@ export default class Contextmenu {
if (!event.defaultPrevented) if (!event.defaultPrevented)
event.preventDefault(); event.preventDefault();
if (!this.isFilterEnabled()) return; if (!this.isMenuEnabled()) return;
const parent = this.$.contextmenu; const parent = this.$.contextmenu;
parent.style.top = event.pageY + 'px'; parent.style.top = event.pageY + 'px';
@ -121,13 +121,31 @@ export default class Contextmenu {
return isEnabled != 'false'; return isEnabled != 'false';
} }
isMenuEnabled() {
if (!this.rowHeader) return true;
const isEnabled = this.rowHeader.getAttribute('menu-enabled');
return isEnabled != 'false';
}
/** /**
* Returns true if filter * Returns true if filter
* by selection is allowed * by selection is enabled and
* the menu can be interacted
* *
* @return {Boolean} * @return {Boolean}
*/ */
isFilterAllowed() { isFilterAllowed() {
return this.isActionAllowed() && this.isFilterEnabled();
}
/**
* Returns true if the
* context menu can be interacted
*
* @return {Boolean}
*/
isActionAllowed() {
if (!this.target) return false; if (!this.target) return false;
const isTableCell = this.target.closest('vn-td, .vn-td'); const isTableCell = this.target.closest('vn-td, .vn-td');
@ -179,9 +197,13 @@ export default class Contextmenu {
if (!where) return; if (!where) return;
const whereKeys = Object.keys(where); const whereKeys = Object.keys(where);
for (let key of whereKeys) for (let key of whereKeys) {
removeProp(where, filterKey, key); removeProp(where, filterKey, key);
if (!Object.keys(where))
delete userFilter.where;
}
function removeProp(instance, findProp, prop) { function removeProp(instance, findProp, prop) {
if (prop == findProp) if (prop == findProp)
delete instance[prop]; delete instance[prop];
@ -208,6 +230,16 @@ export default class Contextmenu {
const userParams = this.model.userParams; const userParams = this.model.userParams;
this.model.applyFilter(null, userParams); this.model.applyFilter(null, userParams);
} }
/**
* Copies the current field
* value to the clipboard
*/
copyValue() {
const cell = angular.element(this.cell);
if (navigator && navigator.clipboard)
navigator.clipboard.writeText(cell.text());
}
} }
Contextmenu.$inject = ['$element', '$scope', '$transclude']; Contextmenu.$inject = ['$element', '$scope', '$transclude'];

View File

@ -22,10 +22,23 @@
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
} }
.icon-invoiceIn:before {
content: "\e960"; .icon-basketadd:before {
content: "\e901";
}
.icon-addperson:before {
content: "\e955";
}
.icon-supplierfalse:before {
content: "\e962";
}
.icon-invoice-in-create:before {
content: "\e948";
} }
.icon-invoiceOut:before { .icon-invoiceOut:before {
content: "\e960";
}
.icon-invoiceIn:before {
content: "\e961"; content: "\e961";
} }
.icon-supplier:before { .icon-supplier:before {
@ -73,9 +86,6 @@
.icon-deliveryprices:before { .icon-deliveryprices:before {
content: "\e956"; content: "\e956";
} }
.icon-basketadd:before {
content: "\e955";
}
.icon-catalog:before { .icon-catalog:before {
content: "\e952"; content: "\e952";
} }
@ -118,15 +128,9 @@
.icon-actions:before { .icon-actions:before {
content: "\e900"; content: "\e900";
} }
.icon-addperson:before {
content: "\e901";
}
.icon-albaran:before { .icon-albaran:before {
content: "\e902"; content: "\e902";
} }
.icon-apps:before {
content: "\e948";
}
.icon-artificial:before { .icon-artificial:before {
content: "\e903"; content: "\e903";
} }

View File

@ -8,7 +8,7 @@
<missing-glyph horiz-adv-x="1024" /> <missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" horiz-adv-x="512" d="" /> <glyph unicode="&#x20;" horiz-adv-x="512" d="" />
<glyph unicode="&#xe900;" glyph-name="actions" d="M354.133 558.933v183.467c0 68.267 55.467 123.733 123.733 123.733s119.467-59.733 119.467-123.733v-183.467c59.733 38.4 98.133 106.667 98.133 183.467 0 119.467-98.133 217.6-221.867 217.6s-217.6-98.133-217.6-217.6c0-76.8 38.4-145.067 98.133-183.467zM832 332.8l-221.867 110.933c-8.533 4.267-17.067 4.267-25.6 4.267h-38.4v294.4c0 38.4-34.133 72.533-72.533 72.533s-72.533-34.133-72.533-72.533v-524.8l-166.4 34.133c-4.267 0-8.533 0-12.8 0-17.067 0-29.867-4.267-38.4-17.067l-38.4-38.4 238.933-238.933c12.8-12.8 29.867-21.333 51.2-21.333h332.8c38.4 0 64 25.6 68.267 64l38.4 256c0 4.267 0 8.533 0 8.533 4.267 29.867-17.067 55.467-42.667 68.267z" /> <glyph unicode="&#xe900;" glyph-name="actions" d="M354.133 558.933v183.467c0 68.267 55.467 123.733 123.733 123.733s119.467-59.733 119.467-123.733v-183.467c59.733 38.4 98.133 106.667 98.133 183.467 0 119.467-98.133 217.6-221.867 217.6s-217.6-98.133-217.6-217.6c0-76.8 38.4-145.067 98.133-183.467zM832 332.8l-221.867 110.933c-8.533 4.267-17.067 4.267-25.6 4.267h-38.4v294.4c0 38.4-34.133 72.533-72.533 72.533s-72.533-34.133-72.533-72.533v-524.8l-166.4 34.133c-4.267 0-8.533 0-12.8 0-17.067 0-29.867-4.267-38.4-17.067l-38.4-38.4 238.933-238.933c12.8-12.8 29.867-21.333 51.2-21.333h332.8c38.4 0 64 25.6 68.267 64l38.4 256c0 4.267 0 8.533 0 8.533 4.267 29.867-17.067 55.467-42.667 68.267z" />
<glyph unicode="&#xe901;" glyph-name="addperson" d="M201.6 755.2c0 115.2 89.6 204.8 201.6 204.8s201.6-89.6 201.6-204.8-89.6-204.8-201.6-204.8c-112 0-201.6 92.8-201.6 204.8zM387.2 153.6v208h214.4v108.8c-70.4 22.4-147.2 32-198.4 32-134.4 0-403.2-70.4-403.2-204.8v-153.6h387.2v9.6zM1024 297.6v-144h-214.4v-214.4h-144v214.4h-214.4v144h214.4v214.4h144v-214.4h214.4z" /> <glyph unicode="&#xe901;" glyph-name="basketadd" d="M197.973 505.173c-15.787-2.987-25.6-15.787-25.6-32l15.787-261.973c0-12.8 12.8-25.6 25.6-22.187h2.987c15.787 2.987 25.6 15.787 25.6 32l-12.8 258.987c-2.56 12.373-18.773 25.173-31.573 25.173zM284.587 479.573v-261.973c0-19.2 12.8-28.587 28.587-28.587s28.587 12.8 28.587 28.587v261.973c0 15.787-12.8 28.587-28.587 28.587s-28.587-12.8-28.587-28.587zM359.68 182.187h-203.093l-44.8 348.16h384.427c61.44 47.36 137.813 75.52 220.587 75.52 39.68 0 78.080-6.4 113.92-18.347v35.84c0 15.787-12.8 28.587-32 32h-140.8l-115.2 226.987c6.4 6.4 6.4 19.2 6.4 28.587-6.4 32-34.987 54.187-64 47.787-32-6.4-54.187-32-47.787-64s34.987-54.187 64-47.787l89.6-197.973h-354.56l89.6 197.973c32-6.4 60.587 19.2 64 47.787 2.987 28.587-19.2 57.6-47.787 64-32 6.4-60.587-19.2-64-47.787 0-9.387 2.987-19.2 6.4-28.587l-115.2-233.387h-140.8c-15.787 0-28.587-12.8-28.587-28.587v-64c0-15.787 12.8-28.587 28.587-28.587h22.613l51.2-377.173c2.987-12.8 15.787-22.187 28.587-22.187h242.347c-5.973 17.067-10.667 35.413-13.653 53.76zM444.16 481.707v0.853c0 12.8-12.8 25.6-28.587 25.6s-28.587-12.8-28.587-28.587v-87.040c14.507 32.853 34.133 62.72 57.173 89.173zM716.8 550.4c-169.813 0-307.2-137.387-307.2-307.2s137.387-307.2 307.2-307.2c169.813 0 307.2 137.387 307.2 307.2s-137.387 307.2-307.2 307.2zM897.28 287.573v-89.173h-135.68v-135.68h-89.173v136.107h-135.68v89.173h135.68v135.68h89.173v-135.68h135.68v-0.427z" />
<glyph unicode="&#xe902;" glyph-name="albaran" d="M819.2 960h-622.933c-55.467 0-102.4-46.933-102.4-102.4v-819.2c0-55.467 46.933-102.4 102.4-102.4h622.933c55.467 0 102.4 46.933 102.4 102.4v819.2c0 55.467-46.933 102.4-102.4 102.4zM358.4 174.933h-102.4v102.4h503.467v-102.4h-401.067zM256 379.733v102.4h503.467v-102.4h-503.467zM759.467 584.533h-503.467v102.4h503.467v-102.4z" /> <glyph unicode="&#xe902;" glyph-name="albaran" d="M819.2 960h-622.933c-55.467 0-102.4-46.933-102.4-102.4v-819.2c0-55.467 46.933-102.4 102.4-102.4h622.933c55.467 0 102.4 46.933 102.4 102.4v819.2c0 55.467-46.933 102.4-102.4 102.4zM358.4 174.933h-102.4v102.4h503.467v-102.4h-401.067zM256 379.733v102.4h503.467v-102.4h-503.467zM759.467 584.533h-503.467v102.4h503.467v-102.4z" />
<glyph unicode="&#xe903;" glyph-name="artificial" d="M310.4-35.2c0 41.6 0 80 0 128-32-16-54.4-32-76.8-44.8-19.2-12.8-35.2-12.8-48 12.8-51.2 96-105.6 185.6-156.8 281.6-9.6 12.8-12.8 28.8-22.4 44.8 32 22.4 64 41.6 102.4 64-38.4 22.4-70.4 44.8-105.6 67.2 22.4 38.4 44.8 76.8 64 115.2 41.6 70.4 83.2 140.8 121.6 211.2 9.6 16 19.2 19.2 35.2 9.6 25.6-16 51.2-28.8 86.4-48 0 44.8 0 83.2 0 124.8 137.6 0 272 0 406.4 0 0-41.6 0-83.2 0-128 38.4 22.4 73.6 41.6 108.8 60.8 19.2-32 38.4-64 57.6-96 41.6-76.8 86.4-153.6 131.2-230.4 9.6-19.2 6.4-28.8-9.6-38.4-25.6-16-51.2-32-83.2-51.2 35.2-22.4 67.2-44.8 105.6-67.2-67.2-118.4-131.2-233.6-198.4-348.8-35.2 19.2-70.4 38.4-108.8 60.8 0-44.8 0-83.2 0-124.8-140.8-3.2-275.2-3.2-409.6-3.2zM796.8 745.6c-57.6-32-108.8-64-166.4-96 0 67.2 0 128 0 192-76.8 0-153.6 0-233.6 0 0-64 0-124.8 0-192-51.2 32-96 57.6-140.8 83.2-9.6 3.2-28.8 3.2-32-3.2-38.4-60.8-70.4-121.6-108.8-185.6 57.6-32 108.8-64 163.2-96-54.4-32-108.8-64-163.2-96 28.8-54.4 57.6-105.6 86.4-153.6 28.8-51.2 32-51.2 80-22.4 35.2 19.2 73.6 41.6 115.2 67.2 0-67.2 0-131.2 0-192 80 0 156.8 0 236.8 0 0 64 0 121.6 0 185.6 54.4-32 105.6-60.8 160-89.6 35.2 64 73.6 124.8 105.6 188.8 3.2 6.4-6.4 22.4-12.8 25.6-35.2 22.4-70.4 41.6-105.6 64-28.8 16-28.8 25.6 0 41.6 35.2 22.4 73.6 41.6 108.8 67.2 6.4 3.2 12.8 19.2 9.6 25.6-32 60.8-67.2 121.6-102.4 185.6zM387.2 323.2c0 86.4 0 166.4 0 252.8 83.2 0 163.2 0 246.4 0 0-83.2 0-166.4 0-252.8-83.2 0-163.2 0-246.4 0zM553.6 409.6c0 28.8 0 51.2 0 76.8-25.6 0-51.2 0-76.8 0 0-25.6 0-51.2 0-76.8 25.6 0 51.2 0 76.8 0z" /> <glyph unicode="&#xe903;" glyph-name="artificial" d="M310.4-35.2c0 41.6 0 80 0 128-32-16-54.4-32-76.8-44.8-19.2-12.8-35.2-12.8-48 12.8-51.2 96-105.6 185.6-156.8 281.6-9.6 12.8-12.8 28.8-22.4 44.8 32 22.4 64 41.6 102.4 64-38.4 22.4-70.4 44.8-105.6 67.2 22.4 38.4 44.8 76.8 64 115.2 41.6 70.4 83.2 140.8 121.6 211.2 9.6 16 19.2 19.2 35.2 9.6 25.6-16 51.2-28.8 86.4-48 0 44.8 0 83.2 0 124.8 137.6 0 272 0 406.4 0 0-41.6 0-83.2 0-128 38.4 22.4 73.6 41.6 108.8 60.8 19.2-32 38.4-64 57.6-96 41.6-76.8 86.4-153.6 131.2-230.4 9.6-19.2 6.4-28.8-9.6-38.4-25.6-16-51.2-32-83.2-51.2 35.2-22.4 67.2-44.8 105.6-67.2-67.2-118.4-131.2-233.6-198.4-348.8-35.2 19.2-70.4 38.4-108.8 60.8 0-44.8 0-83.2 0-124.8-140.8-3.2-275.2-3.2-409.6-3.2zM796.8 745.6c-57.6-32-108.8-64-166.4-96 0 67.2 0 128 0 192-76.8 0-153.6 0-233.6 0 0-64 0-124.8 0-192-51.2 32-96 57.6-140.8 83.2-9.6 3.2-28.8 3.2-32-3.2-38.4-60.8-70.4-121.6-108.8-185.6 57.6-32 108.8-64 163.2-96-54.4-32-108.8-64-163.2-96 28.8-54.4 57.6-105.6 86.4-153.6 28.8-51.2 32-51.2 80-22.4 35.2 19.2 73.6 41.6 115.2 67.2 0-67.2 0-131.2 0-192 80 0 156.8 0 236.8 0 0 64 0 121.6 0 185.6 54.4-32 105.6-60.8 160-89.6 35.2 64 73.6 124.8 105.6 188.8 3.2 6.4-6.4 22.4-12.8 25.6-35.2 22.4-70.4 41.6-105.6 64-28.8 16-28.8 25.6 0 41.6 35.2 22.4 73.6 41.6 108.8 67.2 6.4 3.2 12.8 19.2 9.6 25.6-32 60.8-67.2 121.6-102.4 185.6zM387.2 323.2c0 86.4 0 166.4 0 252.8 83.2 0 163.2 0 246.4 0 0-83.2 0-166.4 0-252.8-83.2 0-163.2 0-246.4 0zM553.6 409.6c0 28.8 0 51.2 0 76.8-25.6 0-51.2 0-76.8 0 0-25.6 0-51.2 0-76.8 25.6 0 51.2 0 76.8 0z" />
<glyph unicode="&#xe904;" glyph-name="barcode" d="M0 857.6h102.4v-819.2h-102.4v819.2zM307.2 857.6h153.6v-819.2h-153.6v819.2zM768 857.6h51.2v-819.2h-51.2v819.2zM204.8 857.6h51.2v-819.2h-51.2v819.2zM921.6 857.6h102.4v-819.2h-102.4v819.2zM563.2 857.6h102.4v-819.2h-102.4v819.2z" /> <glyph unicode="&#xe904;" glyph-name="barcode" d="M0 857.6h102.4v-819.2h-102.4v819.2zM307.2 857.6h153.6v-819.2h-153.6v819.2zM768 857.6h51.2v-819.2h-51.2v819.2zM204.8 857.6h51.2v-819.2h-51.2v819.2zM921.6 857.6h102.4v-819.2h-102.4v819.2zM563.2 857.6h102.4v-819.2h-102.4v819.2z" />
@ -34,18 +34,18 @@
<glyph unicode="&#xe918;" glyph-name="greuge" d="M921.6 729.6h-204.8v102.4c0 55.467-46.933 102.4-102.4 102.4h-204.8c-55.467 0-102.4-46.933-102.4-102.4v-102.4h-204.8c-55.467 0-102.4-46.933-102.4-102.4v-563.2c0-55.467 46.933-102.4 102.4-102.4h819.2c55.467 0 102.4 46.933 102.4 102.4v563.2c0 55.467-46.933 102.4-102.4 102.4zM614.4 729.6h-204.8v102.4h204.8v-102.4z" /> <glyph unicode="&#xe918;" glyph-name="greuge" d="M921.6 729.6h-204.8v102.4c0 55.467-46.933 102.4-102.4 102.4h-204.8c-55.467 0-102.4-46.933-102.4-102.4v-102.4h-204.8c-55.467 0-102.4-46.933-102.4-102.4v-563.2c0-55.467 46.933-102.4 102.4-102.4h819.2c55.467 0 102.4 46.933 102.4 102.4v563.2c0 55.467-46.933 102.4-102.4 102.4zM614.4 729.6h-204.8v102.4h204.8v-102.4z" />
<glyph unicode="&#xe919;" glyph-name="grid" d="M0 704h256v256h-256v-256zM384-64h256v256h-256v-256zM0-64h256v256h-256v-256zM0 320h256v256h-256v-256zM384 320h256v256h-256v-256zM768 960v-256h256v256h-256zM384 704h256v256h-256v-256zM768 320h256v256h-256v-256zM768-64h256v256h-256v-256z" /> <glyph unicode="&#xe919;" glyph-name="grid" d="M0 704h256v256h-256v-256zM384-64h256v256h-256v-256zM0-64h256v256h-256v-256zM0 320h256v256h-256v-256zM384 320h256v256h-256v-256zM768 960v-256h256v256h-256zM384 704h256v256h-256v-256zM768 320h256v256h-256v-256zM768-64h256v256h-256v-256z" />
<glyph unicode="&#xe91a;" glyph-name="history" d="M554.667 934.4c-260.267 0-469.333-209.067-469.333-469.333h-85.333l136.533-209.067 140.8 209.067h-85.333c0 200.533 162.133 362.667 362.667 362.667s362.667-162.133 362.667-362.667-162.133-362.667-362.667-362.667c-98.133 0-192 42.667-251.733 106.667l-72.533-72.533c85.333-85.333 200.533-136.533 332.8-136.533 260.267 0 465.067 209.067 465.067 465.067s-217.6 469.333-473.6 469.333zM503.467 674.133v-260.267l221.867-132.267 34.133 64-179.2 106.667v221.867h-76.8z" /> <glyph unicode="&#xe91a;" glyph-name="history" d="M554.667 934.4c-260.267 0-469.333-209.067-469.333-469.333h-85.333l136.533-209.067 140.8 209.067h-85.333c0 200.533 162.133 362.667 362.667 362.667s362.667-162.133 362.667-362.667-162.133-362.667-362.667-362.667c-98.133 0-192 42.667-251.733 106.667l-72.533-72.533c85.333-85.333 200.533-136.533 332.8-136.533 260.267 0 465.067 209.067 465.067 465.067s-217.6 469.333-473.6 469.333zM503.467 674.133v-260.267l221.867-132.267 34.133 64-179.2 106.667v221.867h-76.8z" />
<glyph unicode="&#xe91b;" glyph-name="disabled" d="M98.133 174.933v17.067c0 76.8 81.067 128 179.2 162.133l-179.2-179.2zM247.467 42.667h678.4v149.333c0 110.933-183.467 179.2-328.533 200.533l-349.867-349.867zM686.933 763.733c-38.4 55.467-102.4 89.6-174.933 89.6-115.2 0-209.067-89.6-209.067-204.8 0-68.267 38.4-132.267 98.133-170.667l285.867 285.867zM0-4.267l59.733-59.733 964.267 964.267-59.733 59.733-964.267-964.267z" /> <glyph unicode="&#xe91b;" glyph-name="disabled" d="M1012.48 3.413c15.36-15.36 15.36-40.107 0-55.893-7.68-7.68-17.92-11.52-27.733-11.52-10.24 0-20.053 3.84-27.733 11.52l-945.493 945.067c-15.36 15.36-15.36 40.107 0 55.893 7.68 7.68 17.92 11.52 27.733 11.52 10.24 0 20.053-3.84 27.733-11.52l945.493-945.067zM938.667 140.8v37.973c0 87.467-105.813 148.48-220.16 183.040l220.16-221.013zM608 471.893c69.547 35.84 117.333 107.52 117.333 192.427 0 119.893-96 215.893-213.333 215.893-84.053 0-156.16-49.493-190.72-121.6l286.72-286.72zM449.707 390.827c-149.333-16.213-364.373-87.040-364.373-212.053v-162.56h738.987l-374.613 374.613z" />
<glyph unicode="&#xe91c;" glyph-name="invoices" d="M320 576h341.333c12.8 0 21.333 8.533 21.333 21.333s-8.533 21.333-21.333 21.333h-341.333c-12.8 0-21.333-8.533-21.333-21.333s8.533-21.333 21.333-21.333zM320 469.333h341.333c12.8 0 21.333 8.533 21.333 21.333s-8.533 21.333-21.333 21.333h-341.333c-12.8 0-21.333-8.533-21.333-21.333s8.533-21.333 21.333-21.333zM320 358.4h128c12.8 0 21.333 8.533 21.333 21.333s-8.533 21.333-21.333 21.333h-128c-12.8 0-21.333-8.533-21.333-21.333s8.533-21.333 21.333-21.333zM917.333 960h-682.667c-59.733 0-106.667-46.933-106.667-106.667v-682.667c0-12.8 8.533-21.333 21.333-21.333s21.333 8.533 21.333 21.333v682.667c0 34.133 29.867 64 64 64h597.333c-12.8-17.067-21.333-38.4-21.333-64v-810.667c0-34.133-29.867-64-64-64s-64 29.867-64 64v42.667c0 12.8-8.533 21.333-21.333 21.333h-640c-12.8 0-21.333-8.533-21.333-21.333v-42.667c0-59.733 46.933-106.667 106.667-106.667h640c59.733 0 106.667 46.933 106.667 106.667v810.667c0 34.133 29.867 64 64 64s64-29.867 64-64v-42.667h-64c-12.8 0-21.333-8.533-21.333-21.333s8.533-21.333 21.333-21.333h85.333c12.8 0 21.333 8.533 21.333 21.333v64c0 59.733-46.933 106.667-106.667 106.667zM42.667 42.667v21.333h597.333v-21.333c0-25.6 8.533-46.933 21.333-64h-554.667c-34.133 0-64 29.867-64 64zM657.067 247.467c-12.8-8.533-25.6-12.8-42.667-12.8-12.8 0-25.6 4.267-38.4 12.8-8.533 4.267-12.8 12.8-21.333 21.333h64c4.267 0 8.533 4.267 12.8 4.267 0 0 4.267 4.267 4.267 12.8 0 4.267 0 8.533-4.267 12.8 0 0-4.267 4.267-12.8 4.267h-72.533c0 0 0 0 0 4.267 0 0 0 4.267 0 4.267h89.6c4.267 0 8.533 4.267 12.8 4.267 4.267 4.267 4.267 8.533 4.267 12.8s0 8.533-4.267 12.8c0 0-4.267 4.267-12.8 4.267h-76.8c4.267 8.533 12.8 12.8 17.067 21.333 12.8 8.533 21.333 12.8 34.133 12.8 8.533 0 17.067 0 21.333-4.267s12.8-4.267 17.067-8.533c4.267-4.267 12.8-4.267 17.067-4.267 0 0 4.267 4.267 4.267 4.267s4.267 4.267 4.267 4.267c0 4.267 4.267 4.267 4.267 8.533s0 8.533-4.267 12.8c-8.533 8.533-17.067 12.8-29.867 17.067-17.067-4.267-46.933-4.267-72.533-17.067-12.8-4.267-25.6-12.8-34.133-25.6-8.533-8.533-12.8-21.333-17.067-29.867h-17.067c-4.267 0-8.533 0-12.8-4.267s-4.267-8.533-4.267-12.8c0-4.267 0-8.533 4.267-12.8s8.533-4.267 12.8-4.267h8.533c0 0 0-4.267 0-4.267s0 0 0-4.267h-8.533c-4.267 0-8.533 0-12.8-4.267s-4.267-8.533-4.267-12.8c0-4.267 0-8.533 4.267-12.8s8.533-4.267 12.8-4.267h12.8c4.267-12.8 8.533-21.333 17.067-34.133s21.333-21.333 34.133-25.6c12.8-4.267 25.6-8.533 42.667-8.533 25.6 0 46.933 8.533 64 21.333 8.533 8.533 8.533 12.8 8.533 21.333 0 4.267 0 8.533-4.267 12.8-8.533 4.267-12.8 4.267-21.333 0z" /> <glyph unicode="&#xe91c;" glyph-name="invoices" d="M320 576h341.333c12.8 0 21.333 8.533 21.333 21.333s-8.533 21.333-21.333 21.333h-341.333c-12.8 0-21.333-8.533-21.333-21.333s8.533-21.333 21.333-21.333zM320 469.333h341.333c12.8 0 21.333 8.533 21.333 21.333s-8.533 21.333-21.333 21.333h-341.333c-12.8 0-21.333-8.533-21.333-21.333s8.533-21.333 21.333-21.333zM320 358.4h128c12.8 0 21.333 8.533 21.333 21.333s-8.533 21.333-21.333 21.333h-128c-12.8 0-21.333-8.533-21.333-21.333s8.533-21.333 21.333-21.333zM917.333 960h-682.667c-59.733 0-106.667-46.933-106.667-106.667v-682.667c0-12.8 8.533-21.333 21.333-21.333s21.333 8.533 21.333 21.333v682.667c0 34.133 29.867 64 64 64h597.333c-12.8-17.067-21.333-38.4-21.333-64v-810.667c0-34.133-29.867-64-64-64s-64 29.867-64 64v42.667c0 12.8-8.533 21.333-21.333 21.333h-640c-12.8 0-21.333-8.533-21.333-21.333v-42.667c0-59.733 46.933-106.667 106.667-106.667h640c59.733 0 106.667 46.933 106.667 106.667v810.667c0 34.133 29.867 64 64 64s64-29.867 64-64v-42.667h-64c-12.8 0-21.333-8.533-21.333-21.333s8.533-21.333 21.333-21.333h85.333c12.8 0 21.333 8.533 21.333 21.333v64c0 59.733-46.933 106.667-106.667 106.667zM42.667 42.667v21.333h597.333v-21.333c0-25.6 8.533-46.933 21.333-64h-554.667c-34.133 0-64 29.867-64 64zM720.64 231.68c-3.413-8.533-8.96-16.213-15.36-22.613-6.827-6.4-14.080-11.947-22.613-16.64-8.533-4.267-17.493-7.68-26.88-10.24s-18.773-3.413-28.16-3.413c-12.373 0-24.32 2.133-35.413 6.4s-20.907 9.813-29.867 17.067c-8.96 7.253-16.64 15.36-23.040 25.173-6.4 9.387-11.52 19.627-14.933 30.72h-33.28l9.813 23.467h17.92c-0.427 4.267-0.853 8.96-0.853 14.080v2.133h-22.187l9.387 23.467h15.787c2.56 11.52 6.827 22.613 12.8 32.853 5.973 10.667 13.653 19.627 23.040 27.733s20.053 14.507 32 19.2c12.373 4.693 25.6 7.253 40.533 7.253 20.907 0 38.827-4.693 54.187-13.653s26.453-20.907 34.133-35.84l-33.707-23.467c-2.987 6.4-6.827 11.947-10.667 16.213-4.267 4.267-8.96 7.68-13.653 10.24s-9.813 4.267-15.36 5.547c-5.547 1.28-10.667 1.707-15.787 1.707-8.107 0-15.787-1.28-22.613-3.84s-12.8-5.973-17.92-10.24c-5.12-4.267-9.387-9.387-13.227-15.36s-6.4-11.947-8.107-18.773h81.92l-9.387-23.467h-76.373v-3.413c0-4.267 0.427-8.533 0.853-12.8h74.667l-9.387-23.467h-58.453c5.547-11.947 13.227-21.76 23.467-29.013s21.76-11.093 35.413-11.093c5.12 0 10.24 0.427 15.787 1.707s10.667 3.413 15.787 5.973c5.12 2.987 9.387 6.4 14.080 10.667 4.267 4.267 7.68 9.813 10.24 15.787l35.413-20.053z" />
<glyph unicode="&#xe91d;" glyph-name="languaje" d="M512 960c-281.6 0-512-230.4-512-512s230.4-512 512-512c281.6 0 512 230.4 512 512s-230.4 512-512 512zM866.133 652.8h-149.333c-17.067 64-38.4 123.733-72.533 183.467 93.867-34.133 174.933-98.133 221.867-183.467zM512 857.6c42.667-59.733 76.8-128 98.133-204.8h-196.267c21.333 72.533 55.467 140.8 98.133 204.8zM115.2 345.6c-8.533 34.133-12.8 68.267-12.8 102.4s4.267 68.267 12.8 102.4h174.933c-4.267-34.133-8.533-68.267-8.533-102.4s4.267-68.267 8.533-102.4h-174.933zM157.867 243.2h149.333c17.067-64 38.4-123.733 72.533-183.467-93.867 34.133-174.933 98.133-221.867 183.467zM307.2 652.8h-149.333c51.2 85.333 128 149.333 221.867 183.467-29.867-59.733-55.467-119.467-72.533-183.467zM512 38.4c-42.667 59.733-76.8 128-98.133 204.8h196.267c-21.333-72.533-55.467-140.8-98.133-204.8zM631.467 345.6h-238.933c-4.267 34.133-8.533 68.267-8.533 102.4s4.267 68.267 8.533 102.4h238.933c4.267-34.133 8.533-68.267 8.533-102.4s-4.267-68.267-8.533-102.4zM644.267 59.733c29.867 55.467 55.467 119.467 72.533 183.467h149.333c-46.933-85.333-128-149.333-221.867-183.467zM733.867 345.6c4.267 34.133 8.533 68.267 8.533 102.4s-4.267 68.267-8.533 102.4h174.933c8.533-34.133 12.8-68.267 12.8-102.4s-4.267-68.267-12.8-102.4h-174.933z" /> <glyph unicode="&#xe91d;" glyph-name="languaje" d="M512 960c-281.6 0-512-230.4-512-512s230.4-512 512-512c281.6 0 512 230.4 512 512s-230.4 512-512 512zM866.133 652.8h-149.333c-17.067 64-38.4 123.733-72.533 183.467 93.867-34.133 174.933-98.133 221.867-183.467zM512 857.6c42.667-59.733 76.8-128 98.133-204.8h-196.267c21.333 72.533 55.467 140.8 98.133 204.8zM115.2 345.6c-8.533 34.133-12.8 68.267-12.8 102.4s4.267 68.267 12.8 102.4h174.933c-4.267-34.133-8.533-68.267-8.533-102.4s4.267-68.267 8.533-102.4h-174.933zM157.867 243.2h149.333c17.067-64 38.4-123.733 72.533-183.467-93.867 34.133-174.933 98.133-221.867 183.467zM307.2 652.8h-149.333c51.2 85.333 128 149.333 221.867 183.467-29.867-59.733-55.467-119.467-72.533-183.467zM512 38.4c-42.667 59.733-76.8 128-98.133 204.8h196.267c-21.333-72.533-55.467-140.8-98.133-204.8zM631.467 345.6h-238.933c-4.267 34.133-8.533 68.267-8.533 102.4s4.267 68.267 8.533 102.4h238.933c4.267-34.133 8.533-68.267 8.533-102.4s-4.267-68.267-8.533-102.4zM644.267 59.733c29.867 55.467 55.467 119.467 72.533 183.467h149.333c-46.933-85.333-128-149.333-221.867-183.467zM733.867 345.6c4.267 34.133 8.533 68.267 8.533 102.4s-4.267 68.267-8.533 102.4h174.933c8.533-34.133 12.8-68.267 12.8-102.4s-4.267-68.267-12.8-102.4h-174.933z" />
<glyph unicode="&#xe91e;" glyph-name="lines" d="M0 814.933h1024v-149.333h-1024v149.333zM0 524.8h1024v-149.333h-1024v149.333zM0 230.4h1024v-149.333h-1024v149.333z" /> <glyph unicode="&#xe91e;" glyph-name="lines" d="M0 814.933h1024v-149.333h-1024v149.333zM0 524.8h1024v-149.333h-1024v149.333zM0 230.4h1024v-149.333h-1024v149.333z" />
<glyph unicode="&#xe91f;" glyph-name="logout" d="M405.333 243.2l81.067-81.067 281.6 285.867-285.867 285.867-76.8-81.067 145.067-149.333h-550.4v-115.2h550.4l-145.067-145.067zM908.8 960h-793.6c-64 0-115.2-51.2-115.2-115.2v-226.133h115.2v226.133h797.867v-797.867h-797.867v230.4h-115.2v-226.133c0-64 51.2-115.2 115.2-115.2h797.867c64 0 115.2 51.2 115.2 115.2v793.6c-4.267 64-55.467 115.2-119.467 115.2z" /> <glyph unicode="&#xe91f;" glyph-name="logout" d="M405.333 243.2l81.067-81.067 281.6 285.867-285.867 285.867-76.8-81.067 145.067-149.333h-550.4v-115.2h550.4l-145.067-145.067zM908.8 960h-793.6c-64 0-115.2-51.2-115.2-115.2v-226.133h115.2v226.133h797.867v-797.867h-797.867v230.4h-115.2v-226.133c0-64 51.2-115.2 115.2-115.2h797.867c64 0 115.2 51.2 115.2 115.2v793.6c-4.267 64-55.467 115.2-119.467 115.2z" />
<glyph unicode="&#xe920;" glyph-name="mana" d="M529.067 494.933c0 17.067 12.8 29.867 29.867 29.867s29.867-12.8 29.867-29.867c0-17.067-12.8-29.867-29.867-29.867s-29.867 12.8-29.867 29.867zM614.4 324.267c21.333 0 38.4 17.067 38.4 38.4s-17.067 38.4-38.4 38.4c-21.333 0-38.4-17.067-38.4-38.4 0-17.067 17.067-38.4 38.4-38.4zM473.6 614.4c12.8 0 25.6 12.8 25.6 25.6s-12.8 25.6-25.6 25.6-25.6-12.8-25.6-25.6c0-17.067 12.8-25.6 25.6-25.6zM802.133 302.933v-4.267c-4.267-157.867-132.267-285.867-290.133-285.867s-285.867 128-290.133 285.867v4.267h580.267zM584.533 238.933c0 17.067-12.8 29.867-29.867 29.867s-29.867-12.8-29.867-29.867 12.8-29.867 29.867-29.867c17.067 0 29.867 12.8 29.867 29.867zM401.067 264.533c-25.6 0-46.933-21.333-46.933-46.933s21.333-46.933 46.933-46.933c25.6 0 46.933 21.333 46.933 46.933s-21.333 46.933-46.933 46.933zM456.533 354.133c25.6 0 46.933 21.333 46.933 46.933s-21.333 46.933-46.933 46.933c-25.6 0-46.933-21.333-46.933-46.933s21.333-46.933 46.933-46.933zM878.933 302.933c0-200.533-162.133-366.933-366.933-366.933s-366.933 162.133-366.933 366.933c0 136.533 72.533 260.267 192 324.267v187.733c-21.333 4.267-38.4 21.333-38.4 42.667v59.733c0 25.6 21.333 42.667 42.667 42.667h332.8c25.6 0 42.667-21.333 42.667-42.667v-55.467c0-21.333-17.067-42.667-38.4-42.667v-192c123.733-68.267 200.533-192 200.533-324.267zM840.533 302.933c0 128-76.8 243.2-192 298.667h-4.267v256h34.133c4.267 0 4.267 4.267 4.267 4.267v55.467c0 4.267-4.267 4.267-4.267 4.267h-332.8c-4.267 0-8.533-4.267-8.533-4.267v-55.467c0-4.267 4.267-4.267 4.267-4.267h34.133v-256h-4.267c-115.2-51.2-192-170.667-192-298.667 0-179.2 145.067-328.533 328.533-328.533s332.8 145.067 332.8 328.533z" /> <glyph unicode="&#xe920;" glyph-name="mana" d="M529.067 494.933c0 17.067 12.8 29.867 29.867 29.867s29.867-12.8 29.867-29.867c0-17.067-12.8-29.867-29.867-29.867s-29.867 12.8-29.867 29.867zM614.4 324.267c21.333 0 38.4 17.067 38.4 38.4s-17.067 38.4-38.4 38.4c-21.333 0-38.4-17.067-38.4-38.4 0-17.067 17.067-38.4 38.4-38.4zM473.6 614.4c12.8 0 25.6 12.8 25.6 25.6s-12.8 25.6-25.6 25.6-25.6-12.8-25.6-25.6c0-17.067 12.8-25.6 25.6-25.6zM802.133 302.933v-4.267c-4.267-157.867-132.267-285.867-290.133-285.867s-285.867 128-290.133 285.867v4.267h580.267zM584.533 238.933c0 17.067-12.8 29.867-29.867 29.867s-29.867-12.8-29.867-29.867 12.8-29.867 29.867-29.867c17.067 0 29.867 12.8 29.867 29.867zM401.067 264.533c-25.6 0-46.933-21.333-46.933-46.933s21.333-46.933 46.933-46.933c25.6 0 46.933 21.333 46.933 46.933s-21.333 46.933-46.933 46.933zM456.533 354.133c25.6 0 46.933 21.333 46.933 46.933s-21.333 46.933-46.933 46.933c-25.6 0-46.933-21.333-46.933-46.933s21.333-46.933 46.933-46.933zM878.933 302.933c0-200.533-162.133-366.933-366.933-366.933s-366.933 162.133-366.933 366.933c0 136.533 72.533 260.267 192 324.267v187.733c-21.333 4.267-38.4 21.333-38.4 42.667v59.733c0 25.6 21.333 42.667 42.667 42.667h332.8c25.6 0 42.667-21.333 42.667-42.667v-55.467c0-21.333-17.067-42.667-38.4-42.667v-192c123.733-68.267 200.533-192 200.533-324.267zM840.533 302.933c0 128-76.8 243.2-192 298.667h-4.267v256h34.133c4.267 0 4.267 4.267 4.267 4.267v55.467c0 4.267-4.267 4.267-4.267 4.267h-332.8c-4.267 0-8.533-4.267-8.533-4.267v-55.467c0-4.267 4.267-4.267 4.267-4.267h34.133v-256h-4.267c-115.2-51.2-192-170.667-192-298.667 0-179.2 145.067-328.533 328.533-328.533s332.8 145.067 332.8 328.533z" />
<glyph unicode="&#xe921;" glyph-name="mandatory" d="M981.333 725.333v-618.667c0-93.867-76.8-170.667-170.667-170.667h-311.467c-46.933 0-89.6 17.067-119.467 51.2l-337.067 341.333c0 0 55.467 51.2 55.467 55.467 8.533 8.533 21.333 12.8 34.133 12.8 8.533 0 17.067-4.267 25.6-8.533 0 0 183.467-106.667 183.467-106.667v507.733c0 34.133 29.867 64 64 64s64-29.867 64-64v-298.667h42.667v405.333c0 34.133 29.867 64 64 64s64-29.867 64-64v-405.333h42.667v362.667c0 34.133 29.867 64 64 64s64-29.867 64-64v-362.667h42.667v234.667c0 34.133 29.867 64 64 64s64-29.867 64-64z" /> <glyph unicode="&#xe921;" glyph-name="mandatory" d="M981.333 725.333v-618.667c0-93.867-76.8-170.667-170.667-170.667h-311.467c-46.933 0-89.6 17.067-119.467 51.2l-337.067 341.333c0 0 55.467 51.2 55.467 55.467 8.533 8.533 21.333 12.8 34.133 12.8 8.533 0 17.067-4.267 25.6-8.533 0 0 183.467-106.667 183.467-106.667v507.733c0 34.133 29.867 64 64 64s64-29.867 64-64v-298.667h42.667v405.333c0 34.133 29.867 64 64 64s64-29.867 64-64v-405.333h42.667v362.667c0 34.133 29.867 64 64 64s64-29.867 64-64v-362.667h42.667v234.667c0 34.133 29.867 64 64 64s64-29.867 64-64z" />
<glyph unicode="&#xe922;" glyph-name="niche" d="M512 960c-196.267 0-358.4-162.133-358.4-358.4 0-268.8 358.4-665.6 358.4-665.6s358.4 396.8 358.4 665.6c0 196.267-162.133 358.4-358.4 358.4zM512 473.6c-72.533 0-128 55.467-128 128s55.467 128 128 128 128-55.467 128-128-55.467-128-128-128z" /> <glyph unicode="&#xe922;" glyph-name="niche" d="M512 960c-196.267 0-358.4-162.133-358.4-358.4 0-268.8 358.4-665.6 358.4-665.6s358.4 396.8 358.4 665.6c0 196.267-162.133 358.4-358.4 358.4zM512 473.6c-72.533 0-128 55.467-128 128s55.467 128 128 128 128-55.467 128-128-55.467-128-128-128z" />
<glyph unicode="&#xe923;" glyph-name="no036" d="M89.6 145.067v627.2c0 46.933 29.867 85.333 72.533 98.133v-46.933c-17.067-12.8-29.867-29.867-29.867-51.2v-584.533l-42.667-42.667zM409.6 465.067h-46.933v85.333h132.267l123.733 123.733h-46.933v226.133l136.533-136.533 51.2 51.2-149.333 145.067h-332.8c-42.667 0-81.067-38.4-81.067-81.067v-627.2l213.333 213.333zM686.933 51.2h-452.267l-42.667-42.667c0 0 0 0 0 0h494.933c51.2 0 93.867 38.4 102.4 85.333h-42.667c-8.533-25.6-34.133-42.667-59.733-42.667zM691.2 507.733v-42.667h-42.667l-81.067-81.067h123.733v-81.067h-204.8l-166.4-166.4h452.267c42.667 0 81.067 38.4 81.067 81.067v452.267l-162.133-162.133zM59.733-64l-59.733 59.733 964.267 964.267 59.733-59.733-964.267-964.267z" /> <glyph unicode="&#xe923;" glyph-name="no036" d="M39.253 960c-9.813 0-20.053-3.84-27.733-11.52-15.36-15.787-15.36-40.533 0-55.893l945.493-945.067c7.68-7.68 17.493-11.52 27.733-11.52 9.813 0 20.053 3.84 27.733 11.52 15.36 15.787 15.36 40.533 0 55.893l-945.493 945.067c-7.68 7.68-17.493 11.52-27.733 11.52zM555.947 520.107h116.907c19.627 0 35.413-15.787 35.413-35.413s-15.787-35.413-35.413-35.413h-46.080l52.053-52.053c14.933-2.56 26.453-14.080 29.013-29.013l145.92-145.92c4.267 9.813 6.827 20.48 6.827 32v355.413c0 20.48-8.107 40.533-22.613 54.613l-188.16 187.307c-14.933 14.933-34.56 23.040-55.467 23.040h-240.213c-42.24 0-76.373-33.707-77.653-75.52l279.467-279.040zM587.947 816.64l214.613-213.333h-175.36c-21.333 0-38.827 17.493-38.827 38.827v174.507zM353.707 176.64h313.6l-150.187 150.187h-58.027c-19.627 0-35.413 15.787-35.413 35.413 0 15.787 10.24 29.013 24.32 33.707l-171.52 171.52-0.427-313.173c0-43.093 34.987-77.653 77.653-77.653zM627.2 98.987h-389.973c-21.333 0-38.827 17.493-38.827 38.827v465.493c0 21.333-17.493 38.827-38.827 38.827s-38.827-17.493-38.827-38.827v-504.32c0-42.667 34.987-77.653 78.080-77.653h428.373c21.333 0 38.827 17.493 38.827 38.827s-17.493 38.827-38.827 38.827z" />
<glyph unicode="&#xe924;" glyph-name="notes" d="M614.4 960h-413.867c-59.733 0-106.667-46.933-106.667-102.4v-819.2c0-55.467 46.933-102.4 102.4-102.4h627.2c55.467 0 102.4 46.933 102.4 102.4v614.4l-311.467 307.2zM563.2 601.6v281.6l290.133-281.6h-290.133z" /> <glyph unicode="&#xe924;" glyph-name="notes" d="M614.4 960h-413.867c-59.733 0-106.667-46.933-106.667-102.4v-819.2c0-55.467 46.933-102.4 102.4-102.4h627.2c55.467 0 102.4 46.933 102.4 102.4v614.4l-311.467 307.2zM563.2 601.6v281.6l290.133-281.6h-290.133z" />
<glyph unicode="&#xe925;" glyph-name="noweb" d="M0 362.667c0 132.267 98.133 238.933 226.133 256 55.467 102.4 162.133 170.667 285.867 170.667 64 0 119.467-17.067 170.667-51.2l-580.267-580.267c-64 46.933-102.4 123.733-102.4 204.8zM823.467 533.333c-4.267 29.867-17.067 55.467-25.6 81.067l-507.733-507.733h520.533c119.467 0 213.333 93.867 213.333 213.333 0 110.933-85.333 204.8-200.533 213.333zM1024 900.267l-59.733 59.733-964.267-964.267 59.733-59.733 964.267 964.267z" /> <glyph unicode="&#xe925;" glyph-name="noweb" d="M39.253 960c-9.813 0-20.053-3.84-27.733-11.52-15.36-15.787-15.36-40.533 0-55.893l945.493-945.067c7.68-7.68 17.493-11.52 27.733-11.52 9.813 0 20.053 3.84 27.733 11.52 15.36 15.787 15.36 40.533 0 55.893l-945.493 945.067c-7.68 7.68-17.493 11.52-27.733 11.52zM873.387 202.667c40.107 32.427 65.28 81.92 65.28 138.667 0 92.587-71.253 170.667-163.413 177.92-24.747 120.747-131.413 213.333-263.253 213.333-48.64 0-94.293-12.8-133.547-34.987l494.933-494.933zM256.853 587.093c-98.133-20.907-171.52-106.24-171.52-210.347 0-117.333 96-213.333 213.333-213.333h381.867l-423.68 423.68z" />
<glyph unicode="&#xe926;" glyph-name="onlinepayment" d="M1024 448c0 136.533-55.467 264.533-149.333 362.667-98.133 98.133-226.133 149.333-362.667 149.333 0 0 0 0 0 0s0 0 0 0 0 0-4.267 0c0 0 0 0 0 0s0 0 0 0c-136.533 0-260.267-55.467-358.4-149.333-98.133-98.133-149.333-226.133-149.333-362.667 0-281.6 230.4-512 512-512 0 0 0 0 0 0s0 0 0 0c8.533 0 12.8 0 21.333 0-21.333 12.8-42.667 29.867-59.733 46.933-68.267 21.333-132.267 98.133-166.4 204.8 21.333 4.267 42.667 8.533 59.733 12.8 0 12.8-4.267 25.6-4.267 38.4 0 0 0 0 0 0-21.333 0-46.933-4.267-68.267-8.533-17.067 59.733-25.6 128-29.867 196.267h153.6c8.533 12.8 17.067 29.867 29.867 42.667h-183.467c0 81.067 12.8 153.6 34.133 221.867 59.733-12.8 123.733-21.333 187.733-21.333v-153.6c12.8 12.8 25.6 21.333 42.667 29.867v119.467c68.267 0 132.267 12.8 192 25.6 8.533-29.867 17.067-64 25.6-93.867 12.8 0 29.867-4.267 42.667-4.267-8.533 38.4-17.067 76.8-25.6 110.933 42.667 12.8 81.067 25.6 110.933 42.667 59.733-72.533 98.133-166.4 106.667-260.267 17.067-17.067 29.867-38.4 42.667-55.467 0 4.267 0 12.8 0 17.067 0 0 0 0 0 0s0 0 0 0 0 0 0 0zM145.067 742.4c34.133-17.067 72.533-29.867 115.2-38.4-21.333-68.267-34.133-149.333-38.4-230.4h-179.2c4.267 93.867 38.4 187.733 102.4 268.8zM132.267 170.667c-51.2 72.533-85.333 162.133-89.6 256h179.2c0-76.8 12.8-145.067 29.867-209.067-42.667-12.8-85.333-29.867-119.467-46.933zM371.2 0c-81.067 25.6-153.6 72.533-209.067 136.533 29.867 17.067 68.267 29.867 106.667 42.667 21.333-76.8 59.733-136.533 102.4-179.2zM273.067 738.133c-34.133 12.8-68.267 21.333-98.133 34.133 0 4.267 4.267 4.267 4.267 8.533 55.467 55.467 119.467 93.867 192 115.2-25.6-21.333-46.933-55.467-68.267-89.6-8.533-21.333-21.333-42.667-29.867-68.267zM486.4 708.267c-55.467 0-115.2 8.533-174.933 21.333 12.8 21.333 21.333 38.4 29.867 55.467 42.667 76.8 93.867 119.467 149.333 132.267v-209.067zM529.067 708.267v209.067c59.733-8.533 110.933-55.467 153.6-132.267 8.533-17.067 17.067-34.133 25.6-51.2-55.467-12.8-115.2-21.333-179.2-25.6zM746.667 742.4c-8.533 21.333-17.067 42.667-29.867 59.733-21.333 38.4-42.667 68.267-68.267 89.6 76.8-17.067 140.8-55.467 196.267-110.933 0 0 0 0 0 0-25.6-12.8-59.733-25.6-98.133-38.4zM721.067 541.867c-166.4 0-298.667-136.533-298.667-302.933s132.267-302.933 298.667-302.933c166.4 0 298.667 136.533 298.667 302.933 0 170.667-132.267 302.933-298.667 302.933zM853.333 110.933c-8.533-8.533-21.333-17.067-34.133-25.6s-25.6-12.8-42.667-17.067c-12.8-4.267-29.867-4.267-42.667-4.267-17.067 0-38.4 4.267-51.2 8.533-17.067 8.533-29.867 17.067-46.933 25.6-12.8 12.8-25.6 25.6-34.133 38.4s-17.067 29.867-21.333 46.933h-51.2l12.8 34.133h25.6c0 8.533 0 12.8 0 21.333v4.267h-34.133l12.8 34.133h25.6c4.267 17.067 8.533 34.133 21.333 51.2 8.533 17.067 21.333 29.867 34.133 42.667s29.867 21.333 46.933 29.867c17.067 8.533 38.4 12.8 59.733 12.8 29.867 0 59.733-8.533 81.067-21.333s38.4-29.867 51.2-55.467l-51.2-34.133c-4.267 8.533-8.533 17.067-17.067 25.6s-12.8 12.8-21.333 17.067c-8.533 4.267-17.067 8.533-21.333 8.533-8.533 0-17.067 4.267-25.6 4.267-12.8 0-25.6 0-34.133-4.267s-17.067-8.533-25.6-17.067c-8.533-8.533-12.8-12.8-21.333-21.333-4.267-8.533-8.533-17.067-12.8-29.867h123.733l-12.8-34.133h-115.2v-4.267c0-8.533 0-12.8 0-21.333h110.933l-12.8-34.133h-89.6c8.533-17.067 21.333-34.133 34.133-42.667 17.067-12.8 34.133-17.067 51.2-17.067 8.533 0 17.067 0 25.6 4.267 8.533 0 17.067 4.267 25.6 8.533s12.8 8.533 21.333 17.067c8.533 8.533 12.8 12.8 17.067 25.6l55.467-29.867c0-25.6-8.533-34.133-17.067-46.933z" /> <glyph unicode="&#xe926;" glyph-name="onlinepayment" d="M721.067 541.867c-166.4 0-298.667-136.533-298.667-302.933s132.267-302.933 298.667-302.933 298.667 136.533 298.667 302.933c0 170.667-132.267 302.933-298.667 302.933zM773.12 287.573v-28.16h-166.4c-0.853-6.4-1.707-13.227-1.707-20.48 0-6.827 0.427-14.080 1.707-20.48h166.4v-28.16h-159.147c9.387-26.027 25.6-46.933 48.64-62.72s49.92-23.467 80.213-23.467c39.68 0 72.533 14.080 99.413 42.24l32-31.573c-15.787-17.92-34.987-32-58.453-40.96-23.040-9.387-48.213-14.080-75.947-14.080-29.013 0-55.893 5.547-80.64 16.213s-45.653 26.027-62.72 46.080c-17.067 19.627-29.013 42.667-36.267 68.693h-56.747v28.16h52.053c-0.853 8.533-0.853 15.36-0.853 20.48s0.427 11.947 0.853 20.48h-52.053v28.16h57.173c6.827 26.027 19.2 49.067 36.267 68.693s37.973 34.987 62.72 46.080c24.747 10.667 51.627 16.213 80.64 16.213 27.733 0 53.333-4.693 75.947-14.080 23.040-9.387 42.24-23.040 58.027-40.533l-32-31.573c-26.453 27.733-59.733 41.813-99.413 41.813-30.293 0-57.173-7.68-80.213-23.467s-39.253-36.693-48.64-62.72h159.147zM874.667 810.667c-98.133 98.133-226.133 149.333-362.667 149.333 0 0 0 0-4.267 0-136.533 0-260.267-55.467-358.4-149.333-98.133-98.133-149.333-226.133-149.333-362.667 0-281.6 230.4-512 512-512 8.533 0 12.8 0 21.333 0-21.333 12.8-42.667 29.867-59.733 46.933-68.267 21.333-132.267 98.133-166.4 204.8 21.333 4.267 42.667 8.533 59.733 12.8 0 12.8-4.267 25.6-4.267 38.4-21.333 0-46.933-4.267-68.267-8.533-17.067 59.733-25.6 128-29.867 196.267h153.6c8.533 12.8 17.067 29.867 29.867 42.667h-183.467c0 81.067 12.8 153.6 34.133 221.867 59.733-12.8 123.733-21.333 187.733-21.333v-153.6c12.8 12.8 25.6 21.333 42.667 29.867v119.467c68.267 0 132.267 12.8 192 25.6 8.533-29.867 17.067-64 25.6-93.867 12.8 0 29.867-4.267 42.667-4.267-8.533 38.4-17.067 76.8-25.6 110.933 42.667 12.8 81.067 25.6 110.933 42.667 59.733-72.533 98.133-166.4 106.667-260.267 17.067-17.067 29.867-38.4 42.667-55.467 0 4.267 0 12.8 0 17.067 0 136.533-55.467 264.533-149.333 362.667zM145.067 742.4c34.133-17.067 72.533-29.867 115.2-38.4-21.333-68.267-34.133-149.333-38.4-230.4h-179.2c4.267 93.867 38.4 187.733 102.4 268.8zM132.267 170.667c-51.2 72.533-85.333 162.133-89.6 256h179.2c0-76.8 12.8-145.067 29.867-209.067-42.667-12.8-85.333-29.867-119.467-46.933zM268.8 179.2c21.333-76.8 59.733-136.533 102.4-179.2-81.067 25.6-153.6 72.533-209.067 136.533 29.867 17.067 68.267 29.867 106.667 42.667zM273.067 738.133c-34.133 12.8-68.267 21.333-98.133 34.133 0 4.267 4.267 4.267 4.267 8.533 55.467 55.467 119.467 93.867 192 115.2-25.6-21.333-46.933-55.467-68.267-89.6-8.533-21.333-21.333-42.667-29.867-68.267zM490.667 708.267h-4.267c-55.467 0-115.2 8.533-174.933 21.333 12.8 21.333 21.333 38.4 29.867 55.467 42.667 76.8 93.867 119.467 149.333 132.267v-209.067zM529.067 708.267v209.067c59.733-8.533 110.933-55.467 153.6-132.267 8.533-17.067 17.067-34.133 25.6-51.2-55.467-12.8-115.2-21.333-179.2-25.6zM746.667 742.4c-8.533 21.333-17.067 42.667-29.867 59.733-21.333 38.4-42.667 68.267-68.267 89.6 76.8-17.067 140.8-55.467 196.267-110.933-25.6-12.8-59.733-25.6-98.133-38.4z" />
<glyph unicode="&#xe927;" glyph-name="package" d="M512 580.267l-448 204.8 448 174.933 448-174.933-448-204.8zM46.933 755.2l448-204.8v-614.4l-448 238.933v580.267zM977.067 174.933l-448-238.933v614.4l448 204.8v-580.267z" /> <glyph unicode="&#xe927;" glyph-name="package" d="M512 580.267l-448 204.8 448 174.933 448-174.933-448-204.8zM46.933 755.2l448-204.8v-614.4l-448 238.933v580.267zM977.067 174.933l-448-238.933v614.4l448 204.8v-580.267z" />
<glyph unicode="&#xe928;" glyph-name="payment" d="M823.467 162.133c-12.8-59.733-64-81.067-115.2-98.133-38.4-17.067-81.067-21.333-123.733-25.6-29.867 0-59.733-4.267-89.6-4.267-68.267 0-132.267 12.8-192 34.133-42.667 17.067-81.067 42.667-102.4 85.333-29.867 4.267-55.467 8.533-81.067 17.067s-51.2 17.067-72.533 29.867c-29.867 17.067-46.933 42.667-46.933 81.067 0 149.333 0 294.4 0 439.467 0 34.133 12.8 59.733 38.4 76.8 38.4 29.867 85.333 38.4 136.533 46.933s102.4 8.533 149.333 4.267c59.733-4.267 119.467-17.067 170.667-51.2 4.267 0 4.267-4.267 8.533-4.267 59.733 46.933 128 59.733 200.533 64 38.4 4.267 76.8 0 115.2-4.267 51.2-4.267 102.4-17.067 149.333-42.667 38.4-17.067 55.467-46.933 55.467-89.6 0-140.8 0-281.6 0-418.133 0-42.667-21.333-72.533-55.467-93.867-29.867-17.067-64-29.867-98.133-34.133-12.8-8.533-29.867-8.533-46.933-12.8zM507.733 448c68.267 0 132.267 8.533 196.267 29.867 102.4 34.133 42.667 85.333 17.067 98.133-46.933 21.333-98.133 34.133-149.333 38.4-55.467 4.267-110.933 4.267-166.4-4.267-42.667-8.533-89.6-21.333-128-42.667-34.133-21.333-34.133-42.667-4.267-64 21.333-17.067 51.2-29.867 76.8-34.133 55.467-12.8 106.667-21.333 157.867-21.333zM251.733 273.067c0-29.867 0-55.467 0-81.067s8.533-42.667 29.867-51.2c25.6-12.8 46.933-21.333 72.533-29.867 64-21.333 128-21.333 192-21.333 51.2 0 98.133 8.533 145.067 25.6 25.6 8.533 51.2 17.067 68.267 38.4 4.267 4.267 12.8 12.8 12.8 21.333 0 29.867 0 59.733 0 93.867-132.267-72.533-388.267-72.533-520.533 4.267zM251.733 448c0-29.867 0-55.467 0-85.333 0-12.8 4.267-25.6 12.8-34.133 17.067-12.8 38.4-25.6 55.467-29.867 55.467-21.333 115.2-29.867 174.933-29.867 46.933 0 93.867 4.267 136.533 12.8 38.4 4.267 76.8 17.067 106.667 42.667 12.8 8.533 25.6 21.333 25.6 34.133 0 29.867 0 59.733 0 89.6-166.4-72.533-337.067-72.533-512 0zM968.533 733.867c-4.267 21.333-17.067 29.867-25.6 34.133-38.4 21.333-81.067 29.867-128 34.133-68.267 8.533-136.533 4.267-204.8-17.067-29.867-8.533-55.467-21.333-72.533-46.933 12.8-25.6 34.133-34.133 55.467-42.667 42.667-17.067 85.333-25.6 132.267-25.6 38.4 0 76.8 0 115.2 8.533 34.133 4.267 68.267 12.8 98.133 34.133 12.8 4.267 21.333 12.8 29.867 21.333zM273.067 665.6c12.8 0 29.867 0 42.667 0 46.933 4.267 89.6 12.8 132.267 34.133 8.533 4.267 21.333 12.8 29.867 21.333 12.8 8.533 8.533 21.333 0 34.133-8.533 4.267-17.067 12.8-25.6 17.067-64 29.867-128 34.133-196.267 34.133-29.867 0-59.733-4.267-85.333-12.8-38.4-8.533-72.533-17.067-102.4-42.667-12.8-12.8-17.067-21.333 0-34.133 12.8-8.533 25.6-17.067 42.667-21.333 46.933-25.6 102.4-34.133 162.133-29.867zM772.267 614.4c34.133-21.333 51.2-51.2 55.467-89.6 42.667 8.533 85.333 17.067 119.467 38.4 8.533 4.267 17.067 17.067 17.067 25.6 0 21.333 4.267 46.933 0 68.267-59.733-25.6-123.733-38.4-192-42.667zM55.467 652.8c0-21.333 0-42.667 0-59.733s8.533-29.867 21.333-38.4c29.867-21.333 68.267-29.867 102.4-34.133 4.267 0 8.533 0 17.067 0 0 38.4 17.067 64 42.667 89.6-64 0-123.733 12.8-183.467 42.667zM823.467 221.867c42.667 0 98.133 17.067 128 38.4 4.267 4.267 12.8 12.8 12.8 17.067 0 25.6 4.267 46.933 0 72.533-46.933-12.8-93.867-25.6-140.8-38.4 0-29.867 0-55.467 0-89.6zM968.533 503.467c-51.2-12.8-93.867-25.6-145.067-38.4 0-12.8 0-29.867 0-42.667 0-17.067-4.267-29.867 4.267-46.933 17.067 4.267 34.133 4.267 51.2 8.533 25.6 8.533 46.933 21.333 72.533 29.867 8.533 4.267 17.067 12.8 17.067 29.867-4.267 17.067 0 38.4 0 59.733zM196.267 209.067c0 34.133 0 68.267 0 98.133-46.933 8.533-93.867 17.067-136.533 38.4 0-17.067 0-34.133 0-51.2-4.267-29.867 8.533-46.933 34.133-59.733 8.533-4.267 17.067-8.533 29.867-12.8 21.333 0 42.667-4.267 72.533-12.8zM55.467 494.933c0-21.333 0-38.4 0-59.733 0-12.8 4.267-21.333 17.067-29.867 8.533-4.267 21.333-12.8 29.867-17.067 29.867-12.8 59.733-21.333 93.867-21.333 0 34.133 0 64 0 93.867-46.933 8.533-93.867 21.333-140.8 34.133z" /> <glyph unicode="&#xe928;" glyph-name="payment" d="M823.467 162.133c-12.8-59.733-64-81.067-115.2-98.133-38.4-17.067-81.067-21.333-123.733-25.6-29.867 0-59.733-4.267-89.6-4.267-68.267 0-132.267 12.8-192 34.133-42.667 17.067-81.067 42.667-102.4 85.333-29.867 4.267-55.467 8.533-81.067 17.067s-51.2 17.067-72.533 29.867c-29.867 17.067-46.933 42.667-46.933 81.067 0 149.333 0 294.4 0 439.467 0 34.133 12.8 59.733 38.4 76.8 38.4 29.867 85.333 38.4 136.533 46.933s102.4 8.533 149.333 4.267c59.733-4.267 119.467-17.067 170.667-51.2 4.267 0 4.267-4.267 8.533-4.267 59.733 46.933 128 59.733 200.533 64 38.4 4.267 76.8 0 115.2-4.267 51.2-4.267 102.4-17.067 149.333-42.667 38.4-17.067 55.467-46.933 55.467-89.6 0-140.8 0-281.6 0-418.133 0-42.667-21.333-72.533-55.467-93.867-29.867-17.067-64-29.867-98.133-34.133-12.8-8.533-29.867-8.533-46.933-12.8zM507.733 448c68.267 0 132.267 8.533 196.267 29.867 102.4 34.133 42.667 85.333 17.067 98.133-46.933 21.333-98.133 34.133-149.333 38.4-55.467 4.267-110.933 4.267-166.4-4.267-42.667-8.533-89.6-21.333-128-42.667-34.133-21.333-34.133-42.667-4.267-64 21.333-17.067 51.2-29.867 76.8-34.133 55.467-12.8 106.667-21.333 157.867-21.333zM251.733 273.067c0-29.867 0-55.467 0-81.067s8.533-42.667 29.867-51.2c25.6-12.8 46.933-21.333 72.533-29.867 64-21.333 128-21.333 192-21.333 51.2 0 98.133 8.533 145.067 25.6 25.6 8.533 51.2 17.067 68.267 38.4 4.267 4.267 12.8 12.8 12.8 21.333 0 29.867 0 59.733 0 93.867-132.267-72.533-388.267-72.533-520.533 4.267zM251.733 448c0-29.867 0-55.467 0-85.333 0-12.8 4.267-25.6 12.8-34.133 17.067-12.8 38.4-25.6 55.467-29.867 55.467-21.333 115.2-29.867 174.933-29.867 46.933 0 93.867 4.267 136.533 12.8 38.4 4.267 76.8 17.067 106.667 42.667 12.8 8.533 25.6 21.333 25.6 34.133 0 29.867 0 59.733 0 89.6-166.4-72.533-337.067-72.533-512 0zM968.533 733.867c-4.267 21.333-17.067 29.867-25.6 34.133-38.4 21.333-81.067 29.867-128 34.133-68.267 8.533-136.533 4.267-204.8-17.067-29.867-8.533-55.467-21.333-72.533-46.933 12.8-25.6 34.133-34.133 55.467-42.667 42.667-17.067 85.333-25.6 132.267-25.6 38.4 0 76.8 0 115.2 8.533 34.133 4.267 68.267 12.8 98.133 34.133 12.8 4.267 21.333 12.8 29.867 21.333zM273.067 665.6c12.8 0 29.867 0 42.667 0 46.933 4.267 89.6 12.8 132.267 34.133 8.533 4.267 21.333 12.8 29.867 21.333 12.8 8.533 8.533 21.333 0 34.133-8.533 4.267-17.067 12.8-25.6 17.067-64 29.867-128 34.133-196.267 34.133-29.867 0-59.733-4.267-85.333-12.8-38.4-8.533-72.533-17.067-102.4-42.667-12.8-12.8-17.067-21.333 0-34.133 12.8-8.533 25.6-17.067 42.667-21.333 46.933-25.6 102.4-34.133 162.133-29.867zM772.267 614.4c34.133-21.333 51.2-51.2 55.467-89.6 42.667 8.533 85.333 17.067 119.467 38.4 8.533 4.267 17.067 17.067 17.067 25.6 0 21.333 4.267 46.933 0 68.267-59.733-25.6-123.733-38.4-192-42.667zM55.467 652.8c0-21.333 0-42.667 0-59.733s8.533-29.867 21.333-38.4c29.867-21.333 68.267-29.867 102.4-34.133 4.267 0 8.533 0 17.067 0 0 38.4 17.067 64 42.667 89.6-64 0-123.733 12.8-183.467 42.667zM823.467 221.867c42.667 0 98.133 17.067 128 38.4 4.267 4.267 12.8 12.8 12.8 17.067 0 25.6 4.267 46.933 0 72.533-46.933-12.8-93.867-25.6-140.8-38.4 0-29.867 0-55.467 0-89.6zM968.533 503.467c-51.2-12.8-93.867-25.6-145.067-38.4 0-12.8 0-29.867 0-42.667 0-17.067-4.267-29.867 4.267-46.933 17.067 4.267 34.133 4.267 51.2 8.533 25.6 8.533 46.933 21.333 72.533 29.867 8.533 4.267 17.067 12.8 17.067 29.867-4.267 17.067 0 38.4 0 59.733zM196.267 209.067c0 34.133 0 68.267 0 98.133-46.933 8.533-93.867 17.067-136.533 38.4 0-17.067 0-34.133 0-51.2-4.267-29.867 8.533-46.933 34.133-59.733 8.533-4.267 17.067-8.533 29.867-12.8 21.333 0 42.667-4.267 72.533-12.8zM55.467 494.933c0-21.333 0-38.4 0-59.733 0-12.8 4.267-21.333 17.067-29.867 8.533-4.267 21.333-12.8 29.867-17.067 29.867-12.8 59.733-21.333 93.867-21.333 0 34.133 0 64 0 93.867-46.933 8.533-93.867 21.333-140.8 34.133z" />
<glyph unicode="&#xe929;" glyph-name="person" d="M512 960c-140.8 0-256-115.2-256-259.2s115.2-259.2 256-259.2 256 115.2 256 259.2c0 144-115.2 259.2-256 259.2zM512 377.6c-169.6 0-512-86.4-512-259.2v-195.2h1024v195.2c0 172.8-342.4 259.2-512 259.2z" /> <glyph unicode="&#xe929;" glyph-name="person" d="M512 960c-140.8 0-256-115.2-256-259.2s115.2-259.2 256-259.2 256 115.2 256 259.2c0 144-115.2 259.2-256 259.2zM512 377.6c-169.6 0-512-86.4-512-259.2v-195.2h1024v195.2c0 172.8-342.4 259.2-512 259.2z" />
@ -55,7 +55,7 @@
<glyph unicode="&#xe92d;" glyph-name="recovery" d="M746.667 477.867c68.267 0 140.8-21.333 196.267-72.533 110.933-102.4 115.2-277.333 8.533-384s-277.333-115.2-384-8.533c-93.867 85.333-110.933 221.867-51.2 328.533l51.2-46.933c-34.133-76.8-17.067-170.667 46.933-230.4 81.067-76.8 209.067-72.533 290.133 8.533 76.8 81.067 72.533 209.067-8.533 290.133-42.667 38.4-93.867 55.467-145.067 55.467l4.267-153.6-170.667 162.133 162.133 170.667v-119.467zM337.067 209.067c0 0 0 0 0 0-17.067 8.533-38.4 17.067-55.467 25.6-21.333 8.533-29.867 25.6-29.867 51.2s0 51.2 0 81.067c29.867-17.067 64-29.867 102.4-38.4 4.267 17.067 12.8 34.133 21.333 51.2-17.067 4.267-34.133 8.533-51.2 17.067-21.333 8.533-38.4 21.333-55.467 29.867-12.8 8.533-17.067 17.067-12.8 34.133 0 29.867 0 55.467 0 85.333 68.267-29.867 132.267-46.933 200.533-51.2 17.067 21.333 38.4 38.4 64 55.467 0 0-4.267 0-4.267 0-51.2 0-106.667 4.267-157.867 21.333-34.133 0-59.733 12.8-81.067 29.867-29.867 21.333-29.867 42.667 4.267 64 38.4 25.6 81.067 34.133 128 42.667 55.467 8.533 110.933 8.533 166.4 4.267 51.2-4.267 102.4-17.067 149.333-38.4 12.8-4.267 42.667-29.867 38.4-55.467 55.467 0 106.667-12.8 153.6-34.133 17.067 4.267 29.867 8.533 46.933 12.8 0-12.8 0-25.6 0-38.4 21.333-12.8 38.4-25.6 55.467-42.667 0 98.133 0 200.533 0 298.667 0 42.667-17.067 72.533-51.2 93.867-46.933 29.867-98.133 38.4-149.333 42.667-34.133 8.533-72.533 8.533-110.933 8.533-72.533-4.267-140.8-21.333-200.533-64-4.267 0-8.533 4.267-8.533 4.267-51.2 34.133-110.933 46.933-170.667 51.2-51.2 0-102.4 0-153.6-8.533-46.933-8.533-93.867-17.067-136.533-46.933-25.6-21.333-38.4-42.667-38.4-76.8 0-145.067 0-294.4 0-439.467 0-38.4 17.067-64 46.933-81.067 21.333-12.8 46.933-25.6 72.533-29.867 25.6-8.533 51.2-12.8 81.067-17.067 17.067-46.933 55.467-68.267 102.4-85.333 12.8-4.267 29.867-8.533 42.667-12.8-4.267 17.067-8.533 34.133-8.533 55.467zM964.267 686.933c0-8.533-8.533-21.333-17.067-25.6-34.133-21.333-76.8-34.133-119.467-38.4-4.267 38.4-17.067 68.267-55.467 89.6 68.267 0 128 12.8 192 42.667 4.267-25.6 4.267-46.933 0-68.267zM610.133 883.2c68.267 17.067 136.533 25.6 204.8 17.067 42.667-4.267 85.333-12.8 128-34.133 12.8-8.533 21.333-12.8 25.6-34.133-8.533-8.533-17.067-17.067-25.6-21.333-29.867-17.067-64-29.867-98.133-34.133-38.4-4.267-76.8-8.533-115.2-8.533-46.933 0-89.6 8.533-132.267 25.6-21.333 8.533-42.667 17.067-55.467 42.667 12.8 29.867 38.4 42.667 68.267 46.933zM68.267 844.8c25.6 25.6 64 34.133 98.133 38.4 29.867 4.267 59.733 12.8 85.333 12.8 68.267 0 132.267-4.267 196.267-34.133 8.533-4.267 17.067-8.533 25.6-17.067 12.8-8.533 12.8-21.333 0-34.133-8.533-8.533-17.067-12.8-29.867-21.333-42.667-21.333-85.333-29.867-132.267-34.133-17.067 0-29.867 0-42.667 0-55.467 4.267-110.933 12.8-162.133 29.867-12.8 4.267-29.867 12.8-42.667 21.333-12.8 17.067-8.533 25.6 4.267 38.4zM196.267 307.2c-25.6 8.533-51.2 12.8-72.533 21.333-8.533 4.267-21.333 8.533-29.867 12.8-25.6 12.8-38.4 29.867-34.133 59.733 0 17.067 0 29.867 0 51.2 46.933-25.6 89.6-34.133 136.533-38.4 0-42.667 0-72.533 0-106.667zM55.467 529.067c0 21.333 0 42.667 0 59.733 46.933-12.8 93.867-21.333 140.8-34.133 0-29.867 0-59.733 0-93.867-34.133 4.267-64 12.8-93.867 21.333-8.533 4.267-21.333 12.8-29.867 17.067-12.8 8.533-17.067 17.067-17.067 29.867zM196.267 618.667c-4.267 0-12.8-4.267-17.067 0-34.133 0-68.267 12.8-102.4 29.867-12.8 8.533-21.333 21.333-21.333 38.4s0 38.4 0 59.733c59.733-25.6 115.2-38.4 179.2-42.667-21.333-25.6-42.667-51.2-38.4-85.333z" /> <glyph unicode="&#xe92d;" glyph-name="recovery" d="M746.667 477.867c68.267 0 140.8-21.333 196.267-72.533 110.933-102.4 115.2-277.333 8.533-384s-277.333-115.2-384-8.533c-93.867 85.333-110.933 221.867-51.2 328.533l51.2-46.933c-34.133-76.8-17.067-170.667 46.933-230.4 81.067-76.8 209.067-72.533 290.133 8.533 76.8 81.067 72.533 209.067-8.533 290.133-42.667 38.4-93.867 55.467-145.067 55.467l4.267-153.6-170.667 162.133 162.133 170.667v-119.467zM337.067 209.067c0 0 0 0 0 0-17.067 8.533-38.4 17.067-55.467 25.6-21.333 8.533-29.867 25.6-29.867 51.2s0 51.2 0 81.067c29.867-17.067 64-29.867 102.4-38.4 4.267 17.067 12.8 34.133 21.333 51.2-17.067 4.267-34.133 8.533-51.2 17.067-21.333 8.533-38.4 21.333-55.467 29.867-12.8 8.533-17.067 17.067-12.8 34.133 0 29.867 0 55.467 0 85.333 68.267-29.867 132.267-46.933 200.533-51.2 17.067 21.333 38.4 38.4 64 55.467 0 0-4.267 0-4.267 0-51.2 0-106.667 4.267-157.867 21.333-34.133 0-59.733 12.8-81.067 29.867-29.867 21.333-29.867 42.667 4.267 64 38.4 25.6 81.067 34.133 128 42.667 55.467 8.533 110.933 8.533 166.4 4.267 51.2-4.267 102.4-17.067 149.333-38.4 12.8-4.267 42.667-29.867 38.4-55.467 55.467 0 106.667-12.8 153.6-34.133 17.067 4.267 29.867 8.533 46.933 12.8 0-12.8 0-25.6 0-38.4 21.333-12.8 38.4-25.6 55.467-42.667 0 98.133 0 200.533 0 298.667 0 42.667-17.067 72.533-51.2 93.867-46.933 29.867-98.133 38.4-149.333 42.667-34.133 8.533-72.533 8.533-110.933 8.533-72.533-4.267-140.8-21.333-200.533-64-4.267 0-8.533 4.267-8.533 4.267-51.2 34.133-110.933 46.933-170.667 51.2-51.2 0-102.4 0-153.6-8.533-46.933-8.533-93.867-17.067-136.533-46.933-25.6-21.333-38.4-42.667-38.4-76.8 0-145.067 0-294.4 0-439.467 0-38.4 17.067-64 46.933-81.067 21.333-12.8 46.933-25.6 72.533-29.867 25.6-8.533 51.2-12.8 81.067-17.067 17.067-46.933 55.467-68.267 102.4-85.333 12.8-4.267 29.867-8.533 42.667-12.8-4.267 17.067-8.533 34.133-8.533 55.467zM964.267 686.933c0-8.533-8.533-21.333-17.067-25.6-34.133-21.333-76.8-34.133-119.467-38.4-4.267 38.4-17.067 68.267-55.467 89.6 68.267 0 128 12.8 192 42.667 4.267-25.6 4.267-46.933 0-68.267zM610.133 883.2c68.267 17.067 136.533 25.6 204.8 17.067 42.667-4.267 85.333-12.8 128-34.133 12.8-8.533 21.333-12.8 25.6-34.133-8.533-8.533-17.067-17.067-25.6-21.333-29.867-17.067-64-29.867-98.133-34.133-38.4-4.267-76.8-8.533-115.2-8.533-46.933 0-89.6 8.533-132.267 25.6-21.333 8.533-42.667 17.067-55.467 42.667 12.8 29.867 38.4 42.667 68.267 46.933zM68.267 844.8c25.6 25.6 64 34.133 98.133 38.4 29.867 4.267 59.733 12.8 85.333 12.8 68.267 0 132.267-4.267 196.267-34.133 8.533-4.267 17.067-8.533 25.6-17.067 12.8-8.533 12.8-21.333 0-34.133-8.533-8.533-17.067-12.8-29.867-21.333-42.667-21.333-85.333-29.867-132.267-34.133-17.067 0-29.867 0-42.667 0-55.467 4.267-110.933 12.8-162.133 29.867-12.8 4.267-29.867 12.8-42.667 21.333-12.8 17.067-8.533 25.6 4.267 38.4zM196.267 307.2c-25.6 8.533-51.2 12.8-72.533 21.333-8.533 4.267-21.333 8.533-29.867 12.8-25.6 12.8-38.4 29.867-34.133 59.733 0 17.067 0 29.867 0 51.2 46.933-25.6 89.6-34.133 136.533-38.4 0-42.667 0-72.533 0-106.667zM55.467 529.067c0 21.333 0 42.667 0 59.733 46.933-12.8 93.867-21.333 140.8-34.133 0-29.867 0-59.733 0-93.867-34.133 4.267-64 12.8-93.867 21.333-8.533 4.267-21.333 12.8-29.867 17.067-12.8 8.533-17.067 17.067-17.067 29.867zM196.267 618.667c-4.267 0-12.8-4.267-17.067 0-34.133 0-68.267 12.8-102.4 29.867-12.8 8.533-21.333 21.333-21.333 38.4s0 38.4 0 59.733c59.733-25.6 115.2-38.4 179.2-42.667-21.333-25.6-42.667-51.2-38.4-85.333z" />
<glyph unicode="&#xe92e;" glyph-name="regentry" d="M554.667 913.067c-260.267 0-469.333-209.067-469.333-469.333h-85.333l136.533-209.067 140.8 209.067h-85.333c0 200.533 162.133 362.667 362.667 362.667s362.667-162.133 362.667-362.667-162.133-362.667-362.667-362.667c-98.133 0-192 42.667-251.733 106.667l-72.533-72.533c85.333-85.333 200.533-136.533 332.8-136.533 251.733 4.267 460.8 213.333 460.8 473.6s-213.333 460.8-469.333 460.8zM332.8 234.667h430.933v179.2h-110.933v-68.267l-106.667 102.4 102.4 102.4v-68.267h110.933v179.2h-426.667v-426.667z" /> <glyph unicode="&#xe92e;" glyph-name="regentry" d="M554.667 913.067c-260.267 0-469.333-209.067-469.333-469.333h-85.333l136.533-209.067 140.8 209.067h-85.333c0 200.533 162.133 362.667 362.667 362.667s362.667-162.133 362.667-362.667-162.133-362.667-362.667-362.667c-98.133 0-192 42.667-251.733 106.667l-72.533-72.533c85.333-85.333 200.533-136.533 332.8-136.533 251.733 4.267 460.8 213.333 460.8 473.6s-213.333 460.8-469.333 460.8zM332.8 234.667h430.933v179.2h-110.933v-68.267l-106.667 102.4 102.4 102.4v-68.267h110.933v179.2h-426.667v-426.667z" />
<glyph unicode="&#xe92f;" glyph-name="reserve" d="M841.6 864c48 0 86.4-38.4 86.4-86.4v-662.4c0-48-38.4-86.4-86.4-86.4h-659.2c-48 3.2-86.4 41.6-86.4 89.6v659.2c0 48 38.4 86.4 86.4 86.4h659.2zM841.6 960h-659.2c-99.2 0-182.4-83.2-182.4-182.4v-662.4c0-96 83.2-179.2 182.4-179.2h662.4c99.2 0 182.4 83.2 182.4 182.4v659.2c-3.2 99.2-86.4 182.4-185.6 182.4v0zM611.2 192l-99.2 144h-108.8v-144h-118.4v512h220.8c44.8 0 83.2-6.4 118.4-22.4 32-16 57.6-35.2 76.8-64s25.6-60.8 25.6-99.2c0-38.4-9.6-70.4-28.8-99.2s-44.8-48-76.8-64l115.2-163.2h-124.8zM582.4 585.6c-19.2 16-44.8 22.4-80 22.4h-96v-179.2h96c35.2 0 64 6.4 80 22.4 19.2 16 28.8 38.4 28.8 67.2-3.2 28.8-9.6 51.2-28.8 67.2z" /> <glyph unicode="&#xe92f;" glyph-name="reserve" d="M841.6 864c48 0 86.4-38.4 86.4-86.4v-662.4c0-48-38.4-86.4-86.4-86.4h-659.2c-48 3.2-86.4 41.6-86.4 89.6v659.2c0 48 38.4 86.4 86.4 86.4h659.2zM841.6 960h-659.2c-99.2 0-182.4-83.2-182.4-182.4v-662.4c0-96 83.2-179.2 182.4-179.2h662.4c99.2 0 182.4 83.2 182.4 182.4v659.2c-3.2 99.2-86.4 182.4-185.6 182.4v0zM611.2 192l-99.2 144h-108.8v-144h-118.4v512h220.8c44.8 0 83.2-6.4 118.4-22.4 32-16 57.6-35.2 76.8-64s25.6-60.8 25.6-99.2c0-38.4-9.6-70.4-28.8-99.2s-44.8-48-76.8-64l115.2-163.2h-124.8zM582.4 585.6c-19.2 16-44.8 22.4-80 22.4h-96v-179.2h96c35.2 0 64 6.4 80 22.4 19.2 16 28.8 38.4 28.8 67.2-3.2 28.8-9.6 51.2-28.8 67.2z" />
<glyph unicode="&#xe930;" glyph-name="risk" d="M640 320v85.333h-51.2l-85.333-85.333h136.533zM362.667 422.4c0 8.533 0 17.067 0 25.6 0 12.8 0 29.867 4.267 42.667h68.267l85.333 85.333h-128c46.933 89.6 140.8 149.333 247.467 149.333 8.533 0 17.067 0 25.6-4.267l89.6 89.6c-34.133 12.8-76.8 21.333-115.2 21.333-166.4 0-307.2-106.667-362.667-256h-149.333v-85.333h132.267c-4.267-12.8-4.267-29.867-4.267-42.667s0-29.867 4.267-42.667h-132.267v-85.333h136.533l98.133 102.4zM640 170.667c-76.8 0-149.333 34.133-200.533 85.333l-76.8-76.8c72.533-72.533 170.667-115.2 277.333-115.2 98.133 0 187.733 38.4 256 98.133l-76.8 76.8c-46.933-42.667-110.933-68.267-179.2-68.267zM1024 900.267l-59.733 59.733-964.267-964.267 59.733-59.733 964.267 964.267z" /> <glyph unicode="&#xe930;" glyph-name="risk" d="M700.587 143.36c-20.48-3.84-42.24-5.973-64.427-5.973-69.973 0-131.84 17.92-184.747 54.187s-90.453 84.48-112.213 144.213h168.533l-64.853 64.853h-119.467c-2.133 15.36-3.413 31.147-3.413 47.36 0 17.067 1.28 32.853 3.413 47.36h25.173l-114.773 114.773c-6.4-16.213-12.373-32.853-17.067-49.92h-131.413v-64.853h119.893c-1.707-20.053-2.133-35.84-2.133-47.36s0.853-27.307 2.133-47.36h-119.893v-64.853h131.84c16.213-60.16 43.947-112.64 83.2-158.293 39.253-45.227 87.467-80.64 144.213-105.813s119.040-37.547 186.027-37.547c55.467 0 106.667 8.107 154.453 24.747l-84.48 84.48zM580.693 495.36h124.587v64.853h-189.44zM407.467 668.16c13.227 13.227 27.733 25.173 43.947 35.84 52.907 36.267 114.773 54.187 184.747 54.187 91.733 0 167.68-32 228.693-96l73.813 72.533c-36.267 40.96-80.64 72.107-133.547 93.44s-110.933 32.427-174.933 32.427c-66.987 0-128.853-12.373-186.027-37.547-43.52-18.347-82.347-43.947-115.627-75.52l78.933-79.36zM39.253 960c10.24 0 20.053-3.84 27.733-11.52l945.493-945.067c15.36-15.36 15.36-40.107 0-55.893-7.68-7.68-17.92-11.52-27.733-11.52-10.24 0-20.053 3.84-27.733 11.52l-945.493 945.067c-15.36 15.36-15.36 40.107 0 55.893 7.68 7.68 17.92 11.52 27.733 11.52z" />
<glyph unicode="&#xe931;" glyph-name="settings" d="M891.733 396.8c0 17.067 4.267 34.133 4.267 51.2s0 34.133-4.267 51.2l106.667 85.333c8.533 8.533 12.8 21.333 4.267 34.133l-102.4 179.2c-4.267 12.8-21.333 17.067-29.867 12.8l-128-51.2c-25.6 21.333-55.467 38.4-85.333 51.2l-17.067 128c0 12.8-12.8 21.333-25.6 21.333h-204.8c-12.8 0-25.6-8.533-25.6-21.333l-17.067-136.533c-34.133-12.8-59.733-29.867-89.6-51.2l-128 51.2c-8.533 4.267-21.333 0-29.867-8.533l-102.4-179.2c-4.267-8.533-4.267-25.6 8.533-29.867l106.667-85.333c-4.267-17.067-4.267-34.133-4.267-51.2s0-34.133 4.267-51.2l-106.667-85.333c-8.533-8.533-12.8-21.333-4.267-34.133l102.4-179.2c4.267-12.8 21.333-17.067 29.867-12.8l128 51.2c25.6-21.333 55.467-38.4 85.333-51.2l17.067-128c0-12.8 12.8-21.333 25.6-21.333h204.8c12.8 0 25.6 8.533 25.6 21.333l21.333 136.533c29.867 12.8 59.733 29.867 85.333 51.2l128-51.2c12.8-4.267 25.6 0 29.867 12.8l102.4 179.2c4.267 12.8 4.267 25.6-4.267 34.133l-110.933 76.8zM512 268.8c-98.133 0-179.2 81.067-179.2 179.2s81.067 179.2 179.2 179.2 179.2-81.067 179.2-179.2-81.067-179.2-179.2-179.2z" /> <glyph unicode="&#xe931;" glyph-name="settings" d="M891.733 396.8c0 17.067 4.267 34.133 4.267 51.2s0 34.133-4.267 51.2l106.667 85.333c8.533 8.533 12.8 21.333 4.267 34.133l-102.4 179.2c-4.267 12.8-21.333 17.067-29.867 12.8l-128-51.2c-25.6 21.333-55.467 38.4-85.333 51.2l-17.067 128c0 12.8-12.8 21.333-25.6 21.333h-204.8c-12.8 0-25.6-8.533-25.6-21.333l-17.067-136.533c-34.133-12.8-59.733-29.867-89.6-51.2l-128 51.2c-8.533 4.267-21.333 0-29.867-8.533l-102.4-179.2c-4.267-8.533-4.267-25.6 8.533-29.867l106.667-85.333c-4.267-17.067-4.267-34.133-4.267-51.2s0-34.133 4.267-51.2l-106.667-85.333c-8.533-8.533-12.8-21.333-4.267-34.133l102.4-179.2c4.267-12.8 21.333-17.067 29.867-12.8l128 51.2c25.6-21.333 55.467-38.4 85.333-51.2l17.067-128c0-12.8 12.8-21.333 25.6-21.333h204.8c12.8 0 25.6 8.533 25.6 21.333l21.333 136.533c29.867 12.8 59.733 29.867 85.333 51.2l128-51.2c12.8-4.267 25.6 0 29.867 12.8l102.4 179.2c4.267 12.8 4.267 25.6-4.267 34.133l-110.933 76.8zM512 268.8c-98.133 0-179.2 81.067-179.2 179.2s81.067 179.2 179.2 179.2 179.2-81.067 179.2-179.2-81.067-179.2-179.2-179.2z" />
<glyph unicode="&#xe932;" glyph-name="sms" d="M896 729.6h-443.733c-29.867 0-55.467-25.6-55.467-55.467v-332.8c0-29.867 25.6-55.467 55.467-55.467h443.733c29.867 0 55.467 25.6 55.467 55.467v332.8c0 29.867-25.6 55.467-55.467 55.467zM896 618.667l-221.867-140.8-221.867 140.8v55.467l221.867-140.8 221.867 140.8v-55.467zM640 221.867v-55.467h-486.4v652.8h486.4v-25.6h85.333v25.6c0 76.8-64 140.8-140.8 140.8h-371.2c-81.067 0-140.8-64-140.8-140.8v-746.667c0-72.533 59.733-136.533 140.8-136.533h371.2c76.8 0 140.8 64 140.8 140.8v145.067h-85.333zM490.667 29.867h-187.733v46.933h187.733v-46.933z" /> <glyph unicode="&#xe932;" glyph-name="sms" d="M896 729.6h-443.733c-29.867 0-55.467-25.6-55.467-55.467v-332.8c0-29.867 25.6-55.467 55.467-55.467h443.733c29.867 0 55.467 25.6 55.467 55.467v332.8c0 29.867-25.6 55.467-55.467 55.467zM896 618.667l-221.867-140.8-221.867 140.8v55.467l221.867-140.8 221.867 140.8v-55.467zM640 221.867v-55.467h-486.4v652.8h486.4v-25.6h85.333v25.6c0 76.8-64 140.8-140.8 140.8h-371.2c-81.067 0-140.8-64-140.8-140.8v-746.667c0-72.533 59.733-136.533 140.8-136.533h371.2c76.8 0 140.8 64 140.8 140.8v145.067h-85.333zM490.667 29.867h-187.733v46.933h187.733v-46.933z" />
<glyph unicode="&#xe933;" glyph-name="solclaim" d="M1024 917.333v-938.667h-938.667v68.267h234.667v51.2h38.4c8.533-4.267 17.067-4.267 29.867-4.267h298.667c42.667 0 76.8 34.133 76.8 76.8 0 0 0 0 0 0 29.867 12.8 46.933 38.4 46.933 72.533 0 0 0 0 0 0 29.867 12.8 46.933 38.4 46.933 72.533s-21.333 59.733-46.933 72.533c0 0 0 0 0 0 0 42.667-34.133 76.8-76.8 76.8h-106.667c21.333 21.333 29.867 55.467 17.067 89.6-12.8 25.6-38.4 42.667-68.267 42.667-12.8 0-21.333-4.267-34.133-8.533l-217.6-98.133v29.867h-238.933v396.8h362.667v-209.067h209.067v209.067h366.933zM0 89.6h281.6v51.2h89.6c4.267-4.267 12.8-4.267 17.067-4.267h298.667c21.333 0 34.133 12.8 34.133 34.133s-12.8 34.133-34.133 34.133h-136.533v12.8h183.467c21.333 0 34.133 12.8 34.133 29.867 0 21.333-12.8 29.867-34.133 29.867h-179.2v12.8h234.667c21.333 0 34.133 8.533 34.133 29.867s-12.8 29.867-34.133 29.867h-230.4v12.8h183.467c21.333 0 29.867 12.8 29.867 34.133s-12.8 34.133-34.133 34.133h-230.4l93.867 64c12.8 8.533 21.333 29.867 12.8 46.933s-29.867 25.6-51.2 17.067l-251.733-119.467c-4.267 0-4.267-4.267-8.533-4.267-4.267-4.267-8.533-8.533-12.8-12.8h-8.533v55.467h-281.6v-388.267z" /> <glyph unicode="&#xe933;" glyph-name="solclaim" d="M1024 917.333v-938.667h-938.667v68.267h234.667v51.2h38.4c8.533-4.267 17.067-4.267 29.867-4.267h298.667c42.667 0 76.8 34.133 76.8 76.8 0 0 0 0 0 0 29.867 12.8 46.933 38.4 46.933 72.533 0 0 0 0 0 0 29.867 12.8 46.933 38.4 46.933 72.533s-21.333 59.733-46.933 72.533c0 0 0 0 0 0 0 42.667-34.133 76.8-76.8 76.8h-106.667c21.333 21.333 29.867 55.467 17.067 89.6-12.8 25.6-38.4 42.667-68.267 42.667-12.8 0-21.333-4.267-34.133-8.533l-217.6-98.133v29.867h-238.933v396.8h362.667v-209.067h209.067v209.067h366.933zM0 89.6h281.6v51.2h89.6c4.267-4.267 12.8-4.267 17.067-4.267h298.667c21.333 0 34.133 12.8 34.133 34.133s-12.8 34.133-34.133 34.133h-136.533v12.8h183.467c21.333 0 34.133 12.8 34.133 29.867 0 21.333-12.8 29.867-34.133 29.867h-179.2v12.8h234.667c21.333 0 34.133 8.533 34.133 29.867s-12.8 29.867-34.133 29.867h-230.4v12.8h183.467c21.333 0 29.867 12.8 29.867 34.133s-12.8 34.133-34.133 34.133h-230.4l93.867 64c12.8 8.533 21.333 29.867 12.8 46.933s-29.867 25.6-51.2 17.067l-251.733-119.467c-4.267 0-4.267-4.267-8.533-4.267-4.267-4.267-8.533-8.533-12.8-12.8h-8.533v55.467h-281.6v-388.267z" />
@ -79,7 +79,7 @@
<glyph unicode="&#xe945;" glyph-name="linesplit" d="M686.933 217.6h-119.467l-268.8 230.4 268.8 230.4h119.467v-153.6l337.067 196.267-337.067 238.933v-153.6h-153.6l-290.133-251.733h-243.2v-213.333h243.2l290.133-251.733h153.6v-153.6l337.067 238.933-337.067 196.267z" /> <glyph unicode="&#xe945;" glyph-name="linesplit" d="M686.933 217.6h-119.467l-268.8 230.4 268.8 230.4h119.467v-153.6l337.067 196.267-337.067 238.933v-153.6h-153.6l-290.133-251.733h-243.2v-213.333h243.2l290.133-251.733h153.6v-153.6l337.067 238.933-337.067 196.267z" />
<glyph unicode="&#xe946;" glyph-name="linedelete" d="M354.133 192l-98.133 98.133 157.867 153.6-157.867 157.867 98.133 102.4 157.867-157.867 157.867 153.6 98.133-98.133-157.867-157.867 157.867-153.6-98.133-98.133-157.867 157.867-157.867-157.867zM780.8 507.733l-64-64 59.733-55.467h247.467v119.467h-243.2zM307.2 443.733l-64 64h-243.2v-119.467h251.733l55.467 55.467z" /> <glyph unicode="&#xe946;" glyph-name="linedelete" d="M354.133 192l-98.133 98.133 157.867 153.6-157.867 157.867 98.133 102.4 157.867-157.867 157.867 153.6 98.133-98.133-157.867-157.867 157.867-153.6-98.133-98.133-157.867 157.867-157.867-157.867zM780.8 507.733l-64-64 59.733-55.467h247.467v119.467h-243.2zM307.2 443.733l-64 64h-243.2v-119.467h251.733l55.467 55.467z" />
<glyph unicode="&#xe947;" glyph-name="exit" d="M405.333 243.2l81.067-81.067 281.6 285.867-285.867 285.867-76.8-81.067 145.067-149.333h-550.4v-115.2h550.4l-145.067-145.067zM908.8 960h-793.6c-64 0-115.2-51.2-115.2-115.2v-226.133h115.2v226.133h797.867v-797.867h-797.867v230.4h-115.2v-226.133c0-64 51.2-115.2 115.2-115.2h797.867c64 0 115.2 51.2 115.2 115.2v793.6c-4.267 64-55.467 115.2-119.467 115.2z" /> <glyph unicode="&#xe947;" glyph-name="exit" d="M405.333 243.2l81.067-81.067 281.6 285.867-285.867 285.867-76.8-81.067 145.067-149.333h-550.4v-115.2h550.4l-145.067-145.067zM908.8 960h-793.6c-64 0-115.2-51.2-115.2-115.2v-226.133h115.2v226.133h797.867v-797.867h-797.867v230.4h-115.2v-226.133c0-64 51.2-115.2 115.2-115.2h797.867c64 0 115.2 51.2 115.2 115.2v793.6c-4.267 64-55.467 115.2-119.467 115.2z" />
<glyph unicode="&#xe948;" glyph-name="apps" d="M0 704h256v256h-256v-256zM384-64h256v256h-256v-256zM0-64h256v256h-256v-256zM0 320h256v256h-256v-256zM384 320h256v256h-256v-256zM768 960v-256h256v256h-256zM384 704h256v256h-256v-256zM768 320h256v256h-256v-256zM768-64h256v256h-256v-256z" /> <glyph unicode="&#xe948;" glyph-name="invoice-in-create" d="M153.6 443.733c85.333 0 153.6 68.267 153.6 153.6s-68.267 153.6-153.6 153.6-153.6-68.267-153.6-153.6 68.267-153.6 153.6-153.6zM64 605.867h81.067v42.667c0 8.533 4.267 12.8 12.8 8.533l98.133-55.467c8.533-4.267 8.533-12.8 0-17.067l-98.133-55.467c-8.533-4.267-12.8 0-12.8 8.533v42.667h-81.067c-12.8 0-17.067 8.533-17.067 8.533 0 8.533 8.533 17.067 17.067 17.067zM153.6 405.333c5.547 0 11.52 0.427 17.067 0.853v-235.52c0-12.8-8.533-21.333-21.333-21.333s-21.333 8.533-21.333 21.333v236.373c8.533-1.28 17.067-1.707 25.6-1.707zM344.32 576c0.853 6.827 1.28 14.080 1.28 21.333s-0.427 14.507-1.28 21.333h317.013c12.8 0 21.333-8.533 21.333-21.333s-8.533-21.333-21.333-21.333h-317.013zM917.333 810.667c-12.8 0-21.333-8.533-21.333-21.333s8.533-21.333 21.333-21.333h85.333c12.8 0 21.333 8.533 21.333 21.333v64c0 59.733-46.933 106.667-106.667 106.667h-682.667c-59.733 0-106.667-46.933-106.667-106.667v-65.707c8.533 1.28 17.067 1.707 25.6 1.707 5.547 0 11.52-0.427 17.067-0.853v64.853c0 34.133 29.867 64 64 64h597.333c-12.8-17.067-21.333-38.4-21.333-64v-317.44c-29.44 9.387-61.013 14.507-93.867 14.507-53.76 0-104.533-14.080-148.907-38.4h-241.92c-5.973-12.373-13.653-24.32-22.613-35.413 3.84-4.693 9.387-7.253 16.64-7.253h189.013c-21.76-20.053-40.533-43.093-55.893-68.693-1.707 0.427-3.413 0.427-5.12 0.427h-128c-12.8 0-21.333-8.533-21.333-21.333s8.533-21.333 21.333-21.333h112.213c-14.507-35.413-22.613-74.24-22.613-115.2 0-49.067 11.52-95.573 32-136.533h-420.267c-12.8 0-21.333-8.533-21.333-21.333v-42.667c0-59.733 46.933-106.667 106.667-106.667h640c15.36 0 29.867 2.987 43.093 8.96 134.4 32.853 234.24 154.027 234.24 298.24 0 120.747-69.547 224.853-170.667 275.2v334.933c0 34.133 29.867 64 64 64s64-29.867 64-64v-42.667h-64zM128-21.333h-21.333c-34.133 0-64 29.867-64 64v21.333h424.533c24.747-34.56 56.747-63.573 93.44-85.333h-432.64zM897.28 287.573v-89.173h-135.68v-135.68h-89.173v136.107h-135.68v89.173h135.68v135.68h89.173v-135.68h135.68z" />
<glyph unicode="&#xe949;" glyph-name="info" d="M512 960c-281.6 0-512-230.4-512-512s230.4-512 512-512 512 230.4 512 512-230.4 512-512 512zM563.2 192h-102.4v307.2h102.4v-307.2zM563.2 601.6h-102.4v102.4h102.4v-102.4z" /> <glyph unicode="&#xe949;" glyph-name="info" d="M512 960c-281.6 0-512-230.4-512-512s230.4-512 512-512 512 230.4 512 512-230.4 512-512 512zM563.2 192h-102.4v307.2h102.4v-307.2zM563.2 601.6h-102.4v102.4h102.4v-102.4z" />
<glyph unicode="&#xe94a;" glyph-name="delivery" d="M789.333 264.533c-55.467 0-102.4-46.933-102.4-102.4s46.933-102.4 102.4-102.4 102.4 46.933 102.4 102.4c0 59.733-46.933 102.4-102.4 102.4zM789.333 110.933c-29.867 0-51.2 21.333-51.2 51.2s21.333 51.2 51.2 51.2 51.2-21.333 51.2-51.2c0-25.6-25.6-51.2-51.2-51.2zM251.733 264.533c-55.467 0-102.4-46.933-102.4-102.4s46.933-102.4 102.4-102.4c55.467 0 102.4 46.933 102.4 102.4 0 59.733-46.933 102.4-102.4 102.4zM251.733 110.933c-29.867 0-51.2 21.333-51.2 51.2s21.333 51.2 51.2 51.2c29.867 0 51.2-21.333 51.2-51.2 0-25.6-25.6-51.2-51.2-51.2zM1006.933 537.6l-196.267 192c-12.8 12.8-29.867 17.067-46.933 17.067h-98.133v38.4c0 25.6-21.333 51.2-51.2 51.2h-563.2c-29.867 0-51.2-21.333-51.2-51.2v-554.667c0-29.867 25.6-51.2 51.2-51.2h68.267c8.533 64 64 115.2 132.267 115.2 64 0 123.733-51.2 132.267-115.2h268.8c8.533 64 64 115.2 132.267 115.2s128-51.2 136.533-115.2h51.2c29.867 0 51.2 25.6 51.2 51.2v260.267c0 17.067-8.533 34.133-17.067 46.933zM725.333 682.667c0 4.267 4.267 8.533 8.533 8.533h34.133c0 0 4.267 0 4.267-4.267l153.6-145.067c4.267 0 0-12.8-4.267-12.8h-187.733c-8.533 0-8.533 4.267-8.533 8.533v145.067zM311.467 597.333c0 46.933 29.867 85.333 59.733 93.867 4.267 0 4.267 0 8.533 0l98.133 12.8v-51.2c0-46.933-29.867-85.333-59.733-93.867-4.267 0-4.267 0-8.533 0l-98.133-17.067v55.467zM311.467 516.267l46.933 8.533c17.067 4.267 29.867-17.067 29.867-38.4l4.267-29.867-51.2-4.267c-17.067-4.267-29.867 12.8-29.867 38.4v25.6zM149.333 597.333v51.2l85.333 12.8c34.133 4.267 55.467-25.6 55.467-72.533v-51.2l-85.333-12.8c-34.133 0-59.733 29.867-55.467 72.533zM285.867 512v-38.4c0-34.133-21.333-64-42.667-68.267h-4.267l-72.533-8.533v38.4c0 34.133 21.333 64 42.667 68.267h4.267l72.533 8.533z" /> <glyph unicode="&#xe94a;" glyph-name="delivery" d="M789.333 264.533c-55.467 0-102.4-46.933-102.4-102.4s46.933-102.4 102.4-102.4 102.4 46.933 102.4 102.4c0 59.733-46.933 102.4-102.4 102.4zM789.333 110.933c-29.867 0-51.2 21.333-51.2 51.2s21.333 51.2 51.2 51.2 51.2-21.333 51.2-51.2c0-25.6-25.6-51.2-51.2-51.2zM251.733 264.533c-55.467 0-102.4-46.933-102.4-102.4s46.933-102.4 102.4-102.4c55.467 0 102.4 46.933 102.4 102.4 0 59.733-46.933 102.4-102.4 102.4zM251.733 110.933c-29.867 0-51.2 21.333-51.2 51.2s21.333 51.2 51.2 51.2c29.867 0 51.2-21.333 51.2-51.2 0-25.6-25.6-51.2-51.2-51.2zM1006.933 537.6l-196.267 192c-12.8 12.8-29.867 17.067-46.933 17.067h-98.133v38.4c0 25.6-21.333 51.2-51.2 51.2h-563.2c-29.867 0-51.2-21.333-51.2-51.2v-554.667c0-29.867 25.6-51.2 51.2-51.2h68.267c8.533 64 64 115.2 132.267 115.2 64 0 123.733-51.2 132.267-115.2h268.8c8.533 64 64 115.2 132.267 115.2s128-51.2 136.533-115.2h51.2c29.867 0 51.2 25.6 51.2 51.2v260.267c0 17.067-8.533 34.133-17.067 46.933zM725.333 682.667c0 4.267 4.267 8.533 8.533 8.533h34.133c0 0 4.267 0 4.267-4.267l153.6-145.067c4.267 0 0-12.8-4.267-12.8h-187.733c-8.533 0-8.533 4.267-8.533 8.533v145.067zM311.467 597.333c0 46.933 29.867 85.333 59.733 93.867 4.267 0 4.267 0 8.533 0l98.133 12.8v-51.2c0-46.933-29.867-85.333-59.733-93.867-4.267 0-4.267 0-8.533 0l-98.133-17.067v55.467zM311.467 516.267l46.933 8.533c17.067 4.267 29.867-17.067 29.867-38.4l4.267-29.867-51.2-4.267c-17.067-4.267-29.867 12.8-29.867 38.4v25.6zM149.333 597.333v51.2l85.333 12.8c34.133 4.267 55.467-25.6 55.467-72.533v-51.2l-85.333-12.8c-34.133 0-59.733 29.867-55.467 72.533zM285.867 512v-38.4c0-34.133-21.333-64-42.667-68.267h-4.267l-72.533-8.533v38.4c0 34.133 21.333 64 42.667 68.267h4.267l72.533 8.533z" />
<glyph unicode="&#xe94b;" glyph-name="linesprepaired" d="M870.4 857.6h-213.333c-21.333 59.733-76.8 102.4-145.067 102.4s-123.733-42.667-145.067-102.4h-213.333c-55.467 0-102.4-46.933-102.4-102.4v-716.8c0-55.467 46.933-102.4 102.4-102.4h716.8c55.467 0 102.4 46.933 102.4 102.4v716.8c0 55.467-46.933 102.4-102.4 102.4zM512 857.6c29.867 0 51.2-21.333 51.2-51.2s-21.333-51.2-51.2-51.2-51.2 21.333-51.2 51.2 21.333 51.2 51.2 51.2zM614.4 140.8h-358.4v102.4h358.4v-102.4zM768 345.6h-512v102.4h512v-102.4zM768 550.4h-512v102.4h512v-102.4z" /> <glyph unicode="&#xe94b;" glyph-name="linesprepaired" d="M870.4 857.6h-213.333c-21.333 59.733-76.8 102.4-145.067 102.4s-123.733-42.667-145.067-102.4h-213.333c-55.467 0-102.4-46.933-102.4-102.4v-716.8c0-55.467 46.933-102.4 102.4-102.4h716.8c55.467 0 102.4 46.933 102.4 102.4v716.8c0 55.467-46.933 102.4-102.4 102.4zM512 857.6c29.867 0 51.2-21.333 51.2-51.2s-21.333-51.2-51.2-51.2-51.2 21.333-51.2 51.2 21.333 51.2 51.2 51.2zM614.4 140.8h-358.4v102.4h358.4v-102.4zM768 345.6h-512v102.4h512v-102.4zM768 550.4h-512v102.4h512v-102.4z" />
@ -90,10 +90,10 @@
<glyph unicode="&#xe950;" glyph-name="pbx" d="M512 960c-230.4 0-418.133-187.733-418.133-418.133v-324.267c0-76.8 64-140.8 140.8-140.8h140.8v371.2h-187.733v93.867c0 179.2 145.067 324.267 324.267 324.267s324.267-145.067 324.267-324.267v-93.867h-187.733v-371.2h187.733v-46.933h-324.267v-93.867h277.333c76.8 0 140.8 64 140.8 140.8v465.067c0 230.4-187.733 418.133-418.133 418.133z" /> <glyph unicode="&#xe950;" glyph-name="pbx" d="M512 960c-230.4 0-418.133-187.733-418.133-418.133v-324.267c0-76.8 64-140.8 140.8-140.8h140.8v371.2h-187.733v93.867c0 179.2 145.067 324.267 324.267 324.267s324.267-145.067 324.267-324.267v-93.867h-187.733v-371.2h187.733v-46.933h-324.267v-93.867h277.333c76.8 0 140.8 64 140.8 140.8v465.067c0 230.4-187.733 418.133-418.133 418.133z" />
<glyph unicode="&#xe951;" glyph-name="buscaman" d="M774.4 67.2c0-19.2-16-38.4-38.4-38.4s-38.4 16-38.4 38.4 16 38.4 38.4 38.4 38.4-19.2 38.4-38.4zM262.4 102.4c-19.2 0-38.4-16-38.4-38.4s16-38.4 38.4-38.4c19.2 0 38.4 16 38.4 38.4s-16 38.4-38.4 38.4zM809.6 176c0 0 0 0 0 0 35.2-22.4 57.6-64 57.6-108.8 0-70.4-57.6-131.2-131.2-131.2-70.4 0-131.2 57.6-131.2 131.2 0 0 0-3.2 0-3.2-64-3.2-137.6-9.6-214.4-12.8 0 0 0 0 0 0-6.4-64-64-115.2-128-115.2-70.4 0-131.2 57.6-131.2 131.2 0 54.4 32 99.2 80 121.6 0 0 0 0 0 0-3.2 89.6 0 198.4 16 275.2 0 0 73.6 73.6 243.2 86.4 6.4-16 19.2-28.8 38.4-28.8s32 12.8 38.4 28.8c12.8 0 25.6-3.2 38.4-3.2v-249.6c0 0 48-60.8 220.8-67.2zM345.6 67.2c0 44.8-35.2 80-80 80s-80-35.2-80-80c0-44.8 35.2-80 80-80 44.8-3.2 80 35.2 80 80zM416 454.4c0 9.6-6.4 16-16 16s-16-6.4-16-16c3.2-48-6.4-80-28.8-99.2-28.8-25.6-73.6-12.8-73.6-12.8-9.6 3.2-16-3.2-19.2-12.8s3.2-16 12.8-19.2c0 0 12.8-3.2 32-3.2s48 3.2 70.4 22.4c25.6 25.6 38.4 67.2 38.4 124.8zM819.2 67.2c0 44.8-35.2 80-80 80s-80-35.2-80-80c0-44.8 35.2-80 80-80 41.6-3.2 80 35.2 80 80zM886.4 806.4c-118.4 102.4-243.2 156.8-377.6 153.6-214.4-3.2-368-150.4-374.4-156.8-12.8-12.8-12.8-28.8 0-41.6s28.8-12.8 41.6 0c0 0 140.8 137.6 332.8 137.6 115.2 0 230.4-44.8 336-140.8 6.4-6.4 12.8-6.4 19.2-6.4 9.6 0 16 3.2 22.4 9.6 12.8 12.8 12.8 32 0 44.8zM806.4 720c-92.8 83.2-192 121.6-297.6 121.6-169.6-3.2-291.2-118.4-294.4-121.6-12.8-12.8-12.8-28.8 0-41.6s28.8-12.8 41.6 0c0 0 108.8 102.4 252.8 105.6 0 0 3.2 0 3.2 0 86.4 0 172.8-35.2 252.8-105.6 6.4-6.4 12.8-6.4 19.2-6.4 9.6 0 16 3.2 22.4 9.6 12.8 9.6 12.8 28.8 0 38.4zM732.8 636.8c-70.4 60.8-144 92.8-220.8 89.6-128 0-217.6-89.6-220.8-92.8-12.8-12.8-12.8-28.8 0-41.6s28.8-12.8 41.6 0c0 0 76.8 73.6 179.2 73.6 64 0 124.8-25.6 182.4-76.8 6.4-6.4 12.8-6.4 19.2-6.4 9.6 0 16 3.2 22.4 9.6 9.6 12.8 9.6 32-3.2 44.8zM512 585.6c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8c16 0 28.8 12.8 28.8 28.8-3.2 16-16 28.8-28.8 28.8z" /> <glyph unicode="&#xe951;" glyph-name="buscaman" d="M774.4 67.2c0-19.2-16-38.4-38.4-38.4s-38.4 16-38.4 38.4 16 38.4 38.4 38.4 38.4-19.2 38.4-38.4zM262.4 102.4c-19.2 0-38.4-16-38.4-38.4s16-38.4 38.4-38.4c19.2 0 38.4 16 38.4 38.4s-16 38.4-38.4 38.4zM809.6 176c0 0 0 0 0 0 35.2-22.4 57.6-64 57.6-108.8 0-70.4-57.6-131.2-131.2-131.2-70.4 0-131.2 57.6-131.2 131.2 0 0 0-3.2 0-3.2-64-3.2-137.6-9.6-214.4-12.8 0 0 0 0 0 0-6.4-64-64-115.2-128-115.2-70.4 0-131.2 57.6-131.2 131.2 0 54.4 32 99.2 80 121.6 0 0 0 0 0 0-3.2 89.6 0 198.4 16 275.2 0 0 73.6 73.6 243.2 86.4 6.4-16 19.2-28.8 38.4-28.8s32 12.8 38.4 28.8c12.8 0 25.6-3.2 38.4-3.2v-249.6c0 0 48-60.8 220.8-67.2zM345.6 67.2c0 44.8-35.2 80-80 80s-80-35.2-80-80c0-44.8 35.2-80 80-80 44.8-3.2 80 35.2 80 80zM416 454.4c0 9.6-6.4 16-16 16s-16-6.4-16-16c3.2-48-6.4-80-28.8-99.2-28.8-25.6-73.6-12.8-73.6-12.8-9.6 3.2-16-3.2-19.2-12.8s3.2-16 12.8-19.2c0 0 12.8-3.2 32-3.2s48 3.2 70.4 22.4c25.6 25.6 38.4 67.2 38.4 124.8zM819.2 67.2c0 44.8-35.2 80-80 80s-80-35.2-80-80c0-44.8 35.2-80 80-80 41.6-3.2 80 35.2 80 80zM886.4 806.4c-118.4 102.4-243.2 156.8-377.6 153.6-214.4-3.2-368-150.4-374.4-156.8-12.8-12.8-12.8-28.8 0-41.6s28.8-12.8 41.6 0c0 0 140.8 137.6 332.8 137.6 115.2 0 230.4-44.8 336-140.8 6.4-6.4 12.8-6.4 19.2-6.4 9.6 0 16 3.2 22.4 9.6 12.8 12.8 12.8 32 0 44.8zM806.4 720c-92.8 83.2-192 121.6-297.6 121.6-169.6-3.2-291.2-118.4-294.4-121.6-12.8-12.8-12.8-28.8 0-41.6s28.8-12.8 41.6 0c0 0 108.8 102.4 252.8 105.6 0 0 3.2 0 3.2 0 86.4 0 172.8-35.2 252.8-105.6 6.4-6.4 12.8-6.4 19.2-6.4 9.6 0 16 3.2 22.4 9.6 12.8 9.6 12.8 28.8 0 38.4zM732.8 636.8c-70.4 60.8-144 92.8-220.8 89.6-128 0-217.6-89.6-220.8-92.8-12.8-12.8-12.8-28.8 0-41.6s28.8-12.8 41.6 0c0 0 76.8 73.6 179.2 73.6 64 0 124.8-25.6 182.4-76.8 6.4-6.4 12.8-6.4 19.2-6.4 9.6 0 16 3.2 22.4 9.6 9.6 12.8 9.6 32-3.2 44.8zM512 585.6c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8c16 0 28.8 12.8 28.8 28.8-3.2 16-16 28.8-28.8 28.8z" />
<glyph unicode="&#xe952;" glyph-name="catalog" d="M60.8 604.8h64v-310.4h-64v310.4zM979.2 960h-873.6c-25.6 0-44.8-19.2-44.8-44.8v-176h64v156.8h835.2v-896h-835.2v156.8h-64v-176c0-25.6 19.2-44.8 44.8-44.8h873.6c25.6 0 44.8 19.2 44.8 44.8v934.4c0 25.6-19.2 44.8-44.8 44.8zM230.4 688c0 9.6-9.6 19.2-19.2 19.2h-192c-9.6 0-19.2-9.6-19.2-19.2v-35.2c0-9.6 9.6-19.2 19.2-19.2h195.2c9.6 0 19.2 9.6 19.2 19.2v35.2zM230.4 240c0 9.6-9.6 19.2-19.2 19.2h-192c-9.6 0-19.2-9.6-19.2-19.2v-35.2c0-9.6 9.6-19.2 19.2-19.2h195.2c9.6 0 19.2 9.6 19.2 19.2v35.2zM876.8 742.4h-275.2v-275.2h275.2v275.2zM876.8 428.8h-275.2v-275.2h275.2v275.2zM528 710.4h-211.2v-211.2h211.2v211.2zM560 742.4v-275.2h-275.2v275.2h275.2zM560 428.8h-275.2v-275.2h275.2v275.2z" /> <glyph unicode="&#xe952;" glyph-name="catalog" d="M60.8 604.8h64v-310.4h-64v310.4zM979.2 960h-873.6c-25.6 0-44.8-19.2-44.8-44.8v-176h64v156.8h835.2v-896h-835.2v156.8h-64v-176c0-25.6 19.2-44.8 44.8-44.8h873.6c25.6 0 44.8 19.2 44.8 44.8v934.4c0 25.6-19.2 44.8-44.8 44.8zM230.4 688c0 9.6-9.6 19.2-19.2 19.2h-192c-9.6 0-19.2-9.6-19.2-19.2v-35.2c0-9.6 9.6-19.2 19.2-19.2h195.2c9.6 0 19.2 9.6 19.2 19.2v35.2zM230.4 240c0 9.6-9.6 19.2-19.2 19.2h-192c-9.6 0-19.2-9.6-19.2-19.2v-35.2c0-9.6 9.6-19.2 19.2-19.2h195.2c9.6 0 19.2 9.6 19.2 19.2v35.2zM876.8 742.4h-275.2v-275.2h275.2v275.2zM876.8 428.8h-275.2v-275.2h275.2v275.2zM528 710.4h-211.2v-211.2h211.2v211.2zM560 742.4v-275.2h-275.2v275.2h275.2zM560 428.8h-275.2v-275.2h275.2v275.2z" />
<glyph unicode="&#xe953;" glyph-name="unavailable" d="M469.333 524.8v366.933h-136.533v-499.2zM290.133 345.6v546.133h-42.667v-588.8zM776.533 832v59.733h-42.667v-102.4zM644.267 699.733v192h-89.6c0 0 0-145.067 0-277.333l89.6 85.333zM866.133 682.667v-42.667c34.133-17.067 64-42.667 89.6-68.267v200.533l-89.6-89.6zM776.533 593.067l-64-64c8.533 0 17.067 4.267 25.6 4.267 85.333 0 149.333-68.267 149.333-149.333 0-85.333-68.267-149.333-149.333-149.333s-149.333 68.267-149.333 149.333c0 8.533 0 17.067 0 25.6l-68.267-68.267c8.533-38.4 21.333-72.533 46.933-102.4l-12.8-12.8h-25.6l-166.4-170.667 51.2-51.2 166.4 170.667v25.6l8.533 12.8c38.4-34.133 89.6-51.2 145.067-51.2 123.733 0 217.6 98.133 217.6 217.6 0 106.667-76.8 192-174.933 213.333zM157.867 213.333v678.4h-89.6v-733.867h29.867zM460.8 273.067l-119.467-115.2h21.333l102.4 102.4c-4.267 4.267-4.267 8.533-4.267 12.8zM964.267 960l59.733-59.733-964.267-964.267-59.733 59.733 964.267 964.267z" /> <glyph unicode="&#xe953;" glyph-name="unavailable" d="M39.253 960c-9.813 0-20.053-3.84-27.733-11.52-15.36-15.787-15.36-40.533 0-55.893l945.493-945.067c7.68-7.68 17.493-11.52 27.733-11.52 9.813 0 20.053 3.84 27.733 11.52 15.36 15.787 15.36 40.533 0 55.893l-945.493 945.067c-7.68 7.68-17.493 11.52-27.733 11.52zM469.333 606.72v267.947h-128v-139.947zM640 874.667h-85.333c0 0 0-142.080 0-273.92 24.747 21.333 53.333 35.413 85.333 46.080v227.84zM563.2 512.853l46.933-46.933c26.453 36.267 69.973 60.587 118.613 60.587 81.92 0 145.92-64 145.92-145.92 0-49.493-23.893-92.16-60.587-118.187l43.947-43.947c47.36 38.827 77.227 97.707 77.227 162.133 0 117.333-96 209.92-209.92 209.92-66.133-0.427-124.16-30.72-162.133-77.653zM938.667 565.333v309.333h-85.333v-241.92c32-17.493 60.587-38.827 85.333-67.413zM768 657.92v216.747h-42.667l3.413-213.333c14.507 0 28.587 0 39.253-3.413zM298.667 777.387v97.28h-42.667v-54.613zM524.373 320c8.107-28.587 22.187-54.613 40.96-78.080l-10.667-7.253h-24.747l-160-163.413 49.493-49.92 160 163.413v24.747l7.253 10.667c21.76-19.627 48.64-33.28 78.507-41.387l-140.8 141.227zM444.587 376.747c0 7.253 0.427 14.507 1.28 21.333l-104.533 104.533v-335.36h24.747l99.413 99.413c-14.080 35.413-20.907 71.253-20.907 110.080zM85.333 758.613v-591.36h85.333v506.027zM256 587.947v-420.693h42.667v378.027z" />
<glyph unicode="&#xe954;" glyph-name="wand" d="M829.649 565.029l-18.808-50.155-50.155-18.808 50.155-18.808 18.808-50.155 18.808 50.155 50.155 18.808-50.155 18.808-18.808 50.155zM624.849 870.139l-35.527 89.861-33.437-89.861-89.861-35.527 89.861-33.437 33.437-89.861 33.437 89.861 91.951 33.437-89.861 35.527zM969.665 819.984l-20.898 54.335-20.898-54.335-52.245-20.898 52.245-20.898 20.898-52.245 20.898 52.245 54.335 20.898-54.335 20.898zM783.673 648.62l-71.053 71.053c-4.18 4.18-8.359 4.18-12.539 4.18s-8.359-2.090-12.539-4.18l-681.273-681.273c0 0 0 0 0 0v0c-6.269-6.269-6.269-18.808 0-25.078l71.053-71.053c6.269-6.269 16.718-6.269 22.988 0v0c0 0 0 0 0 0l683.363 683.363c6.269 6.269 6.269 16.718 0 22.988zM626.939 506.514l-56.424 56.424 129.567 129.567 56.424-56.424-129.567-129.567z" /> <glyph unicode="&#xe954;" glyph-name="wand" d="M829.649 565.029l-18.808-50.155-50.155-18.808 50.155-18.808 18.808-50.155 18.808 50.155 50.155 18.808-50.155 18.808-18.808 50.155zM624.849 870.139l-35.527 89.861-33.437-89.861-89.861-35.527 89.861-33.437 33.437-89.861 33.437 89.861 91.951 33.437-89.861 35.527zM969.665 819.984l-20.898 54.335-20.898-54.335-52.245-20.898 52.245-20.898 20.898-52.245 20.898 52.245 54.335 20.898-54.335 20.898zM783.673 648.62l-71.053 71.053c-4.18 4.18-8.359 4.18-12.539 4.18s-8.359-2.090-12.539-4.18l-681.273-681.273c0 0 0 0 0 0v0c-6.269-6.269-6.269-18.808 0-25.078l71.053-71.053c6.269-6.269 16.718-6.269 22.988 0v0c0 0 0 0 0 0l683.363 683.363c6.269 6.269 6.269 16.718 0 22.988zM626.939 506.514l-56.424 56.424 129.567 129.567 56.424-56.424-129.567-129.567z" />
<glyph unicode="&#xe955;" glyph-name="basketadd" d="M515.2 512c-16 0-28.8-12.8-28.8-28.8v-83.2c16 22.4 35.2 41.6 57.6 60.8v22.4c0 16-12.8 28.8-28.8 28.8zM416 185.6h-259.2l-44.8 348.8h566.4c32 9.6 64 16 99.2 16 16 0 32 0 48-3.2 3.2 3.2 6.4 9.6 6.4 16v64c0 16-12.8 28.8-32 32h-140.8l-115.2 227.2c6.4 6.4 6.4 19.2 6.4 28.8-6.4 32-35.2 54.4-64 48-32-6.4-54.4-32-48-64s35.2-54.4 64-48l89.6-198.4h-355.2l89.6 198.4c32-6.4 60.8 19.2 64 48s-19.2 57.6-48 64c-32 6.4-60.8-19.2-64-48 0-9.6 3.2-19.2 6.4-28.8l-115.2-233.6h-140.8c-16 0-28.8-12.8-28.8-28.8v-64c0-16 12.8-28.8 28.8-28.8h22.4l51.2-377.6c3.2-12.8 16-22.4 28.8-22.4h288c-3.2 16-3.2 35.2-3.2 54.4zM416 512c-16 0-28.8-12.8-28.8-28.8v-259.2c0-16 12.8-28.8 28.8-28.8 0 0 0 0 0 0 0 44.8 9.6 89.6 28.8 131.2v160c0 12.8-12.8 25.6-28.8 25.6zM198.4 508.8c-16-3.2-25.6-16-25.6-32l16-262.4c0-12.8 12.8-25.6 25.6-22.4h3.2c16 3.2 25.6 16 25.6 32l-12.8 259.2c-3.2 12.8-19.2 25.6-32 25.6zM284.8 483.2v-262.4c0-19.2 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v262.4c0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8zM1024 243.2v-121.6h-185.6v-185.6h-121.6v185.6h-185.6v121.6h185.6v185.6h121.6v-185.6z" /> <glyph unicode="&#xe955;" glyph-name="addperson" d="M716.8 550.4c-169.813 0-307.2-137.387-307.2-307.2s137.387-307.2 307.2-307.2 307.2 137.387 307.2 307.2-137.387 307.2-307.2 307.2zM897.28 287.573v-89.173h-135.68v-135.68h-89.173v136.107h-135.68v89.173h135.68v135.68h89.173v-135.68h92.16l43.52-0.427zM354.133 243.2c0 96.853 37.547 187.733 105.813 256-20.907 2.133-40.107 2.987-56.747 2.987-134.4 0-403.2-70.4-403.2-204.8v-153.6h367.787c-8.96 32-13.653 65.28-13.653 99.413zM605.013 755.2c0-113.108-90.355-204.8-201.813-204.8s-201.813 91.692-201.813 204.8c0 113.108 90.355 204.8 201.813 204.8s201.813-91.692 201.813-204.8z" />
<glyph unicode="&#xe956;" glyph-name="deliveryprices" d="M789.333 264.533c-55.467 0-102.4-46.933-102.4-102.4s46.933-102.4 102.4-102.4 102.4 46.933 102.4 102.4c0 59.733-46.933 102.4-102.4 102.4zM789.333 110.933c-29.867 0-51.2 21.333-51.2 51.2s21.333 51.2 51.2 51.2 51.2-21.333 51.2-51.2c0-25.6-25.6-51.2-51.2-51.2zM251.733 264.533c-55.467 0-102.4-46.933-102.4-102.4s46.933-102.4 102.4-102.4 102.4 46.933 102.4 102.4c0 59.733-46.933 102.4-102.4 102.4zM251.733 110.933c-29.867 0-51.2 21.333-51.2 51.2s21.333 51.2 51.2 51.2 51.2-21.333 51.2-51.2c0-25.6-25.6-51.2-51.2-51.2zM1006.933 537.6l-196.267 192c-12.8 12.8-29.867 17.067-46.933 17.067h-98.133v38.4c0 25.6-21.333 51.2-51.2 51.2h-563.2c-29.867 0-51.2-21.333-51.2-51.2v-554.667c0-29.867 25.6-51.2 51.2-51.2h68.267c8.533 64 64 115.2 132.267 115.2 64 0 123.733-51.2 132.267-115.2h268.8c8.533 64 64 115.2 132.267 115.2s128-51.2 136.533-115.2h51.2c29.867 0 51.2 25.6 51.2 51.2v260.267c0 17.067-8.533 34.133-17.067 46.933zM392.533 605.867v-38.4h-170.667c0-8.533 0-12.8 0-17.067s0-12.8 0-17.067h170.667v-42.667h-157.867c12.8-25.6 25.6-42.667 51.2-59.733 21.333-12.8 46.933-21.333 76.8-21.333 42.667 0 76.8 17.067 102.4 46.933l46.933-42.667c-17.067-21.333-38.4-38.4-68.267-46.933-25.6-12.8-55.467-17.067-89.6-17.067s-64 4.267-89.6 17.067c-25.6 12.8-51.2 29.867-68.267 51.2s-29.867 42.667-38.4 72.533h-64v38.4h55.467c0 4.267 0 8.533 0 17.067s0 12.8 0 17.067h-55.467v42.667h64c8.533 29.867 21.333 51.2 38.4 76.8s42.667 38.4 68.267 51.2c29.867 8.533 59.733 12.8 93.867 12.8 29.867 0 59.733-4.267 89.6-17.067 25.6-8.533 46.933-25.6 64-46.933l-46.933-42.667c-29.867 29.867-64 46.933-102.4 46.933-29.867 0-55.467-8.533-76.8-21.333-25.6-17.067-42.667-34.133-51.2-59.733h157.867zM921.6 529.067h-187.733c-8.533 0-8.533 4.267-8.533 8.533v145.067c0 4.267 4.267 8.533 8.533 8.533h34.133c0 0 4.267 0 4.267-4.267l153.6-145.067c4.267 0 0-12.8-4.267-12.8z" /> <glyph unicode="&#xe956;" glyph-name="deliveryprices" d="M251.733 264.533c-55.467 0-102.4-46.933-102.4-102.4s46.933-102.4 102.4-102.4 102.4 46.933 102.4 102.4c0 59.733-46.933 102.4-102.4 102.4zM251.733 110.933c-29.867 0-51.2 21.333-51.2 51.2s21.333 51.2 51.2 51.2 51.2-21.333 51.2-51.2c0-25.6-25.6-51.2-51.2-51.2zM789.333 264.533c-55.467 0-102.4-46.933-102.4-102.4s46.933-102.4 102.4-102.4 102.4 46.933 102.4 102.4c0 59.733-46.933 102.4-102.4 102.4zM789.333 110.933c-29.867 0-51.2 21.333-51.2 51.2s21.333 51.2 51.2 51.2 51.2-21.333 51.2-51.2c0-25.6-25.6-51.2-51.2-51.2zM1006.933 537.6l-196.267 192c-12.8 12.8-29.867 17.067-46.933 17.067h-98.133v38.4c0 25.6-21.333 51.2-51.2 51.2h-563.2c-29.867 0-51.2-21.333-51.2-51.2v-554.667c0-29.867 25.6-51.2 51.2-51.2h68.267c8.533 64 64 115.2 132.267 115.2 64 0 123.733-51.2 132.267-115.2h268.8c8.533 64 64 115.2 132.267 115.2s128-51.2 136.533-115.2h51.2c29.867 0 51.2 25.6 51.2 51.2v260.267c0 17.067-8.533 34.133-17.067 46.933zM376.32 614.827v-28.16h-166.4c-0.853-6.4-1.707-13.227-1.707-20.48 0-6.827 0.427-14.080 1.707-20.48h166.4v-28.16h-159.147c9.387-26.027 25.6-46.933 48.64-62.72s49.92-23.467 80.213-23.467c39.68 0 72.533 14.080 99.413 42.24l32-31.573c-15.787-17.92-34.987-32-58.453-40.96-23.040-9.387-48.213-14.080-75.947-14.080-29.013 0-55.893 5.547-80.64 16.213s-45.653 26.027-62.72 46.080c-17.067 19.627-29.013 42.667-36.267 68.693h-56.747v28.16h52.053c-0.853 8.533-0.853 15.36-0.853 20.48s0.427 11.947 0.853 20.48h-52.053v28.16h57.173c6.827 26.027 19.2 49.067 36.267 68.693s37.973 34.987 62.72 46.080c24.747 10.667 51.627 16.213 80.64 16.213 27.733 0 53.333-4.693 75.947-14.080 23.040-9.387 42.24-23.040 58.027-40.533l-32-31.573c-26.453 27.733-59.733 41.813-99.413 41.813-30.293 0-57.173-7.68-80.213-23.467s-39.253-36.693-48.64-62.72h159.147zM921.6 529.067h-187.733c-8.533 0-8.533 4.267-8.533 8.533v145.067c0 4.267 4.267 8.533 8.533 8.533h34.133c0 0 4.267 0 4.267-4.267l153.6-145.067c4.267 0 0-12.8-4.267-12.8z" />
<glyph unicode="&#xe957;" glyph-name="fruit" d="M870.4 814.933c-204.8 196.267-529.067 192-725.333-8.533-196.267-204.8-192-529.067 8.533-725.333s524.8-192 725.333 12.8c196.267 200.533 192 524.8-8.533 721.067zM840.533 128c-174.933-179.2-465.067-183.467-644.267-8.533s-179.2 465.067-4.267 644.267 465.067 183.467 644.267 8.533c179.2-174.933 179.2-460.8 4.267-644.267zM145.067 366.933c-38.4 51.2-4.267 149.333 8.533 162.133 29.867 17.067 157.867-25.6 183.467-38.4s98.133-29.867 98.133-55.467c0-29.867-64-46.933-119.467-55.467-59.733-12.8-153.6-38.4-170.667-12.8zM256 170.667c-59.733 17.067-89.6 102.4-85.333 119.467 12.8 29.867 136.533 68.267 162.133 76.8 25.6 4.267 93.867 34.133 106.667 12.8 17.067-25.6-29.867-64-64-106.667-38.4-46.933-89.6-115.2-119.467-102.4zM405.333 622.933c-25.6 51.2-72.533 128-51.2 153.6 38.4 51.2 132.267 51.2 145.067 38.4 25.6-21.333 17.067-157.867 12.8-183.467s0-102.4-25.6-106.667c-29.867-8.533-55.467 46.933-81.067 98.133zM537.6 648.533c8.533 59.733 8.533 149.333 42.667 162.133 59.733 21.333 140.8-29.867 149.333-51.2 8.533-34.133-72.533-145.067-93.867-166.4s-59.733-85.333-85.333-76.8c-29.867 12.8-17.067 76.8-12.8 132.267zM494.933 217.6c-8.533-51.2-12.8-128-38.4-136.533-51.2-17.067-119.467 25.6-123.733 42.667-8.533 29.867 68.267 123.733 85.333 140.8s51.2 72.533 72.533 64c21.333-4.267 8.533-59.733 4.267-110.933zM320 516.267c-55.467 25.6-136.533 51.2-136.533 85.333 0 64 68.267 123.733 85.333 123.733 34.133 0 110.933-110.933 128-132.267 12.8-25.6 64-76.8 46.933-98.133-17.067-29.867-72.533 0-123.733 21.333zM887.467 482.133c38.4-51.2 8.533-149.333-17.067-162.133-29.867-17.067-145.067 38.4-170.667 46.933-25.6 12.8-98.133 29.867-98.133 55.467 0 29.867 64 38.4 123.733 51.2 55.467 8.533 140.8 34.133 162.133 8.533zM785.067 686.933c55.467-17.067 89.6-98.133 85.333-115.2-8.533-29.867-132.267-64-157.867-72.533-25.6-4.267-89.6-29.867-102.4-12.8-17.067 25.6 25.6 64 64 102.4 29.867 42.667 76.8 106.667 110.933 98.133zM725.333 328.533c51.2-17.067 102.4-46.933 102.4-76.8-4.267-51.2-64-115.2-98.133-115.2-29.867 0-89.6 106.667-102.4 132.267-12.8 21.333-51.2 76.8-34.133 98.133s76.8-17.067 132.267-38.4zM610.133 238.933c21.333-46.933 59.733-110.933 38.4-132.267-34.133-42.667-115.2-42.667-128-29.867-21.333 17.067-8.533 136.533-4.267 157.867 4.267 25.6 4.267 89.6 25.6 93.867 29.867 4.267 46.933-46.933 68.267-89.6z" /> <glyph unicode="&#xe957;" glyph-name="fruit" d="M870.4 814.933c-204.8 196.267-529.067 192-725.333-8.533-196.267-204.8-192-529.067 8.533-725.333s524.8-192 725.333 12.8c196.267 200.533 192 524.8-8.533 721.067zM840.533 128c-174.933-179.2-465.067-183.467-644.267-8.533s-179.2 465.067-4.267 644.267 465.067 183.467 644.267 8.533c179.2-174.933 179.2-460.8 4.267-644.267zM145.067 366.933c-38.4 51.2-4.267 149.333 8.533 162.133 29.867 17.067 157.867-25.6 183.467-38.4s98.133-29.867 98.133-55.467c0-29.867-64-46.933-119.467-55.467-59.733-12.8-153.6-38.4-170.667-12.8zM256 170.667c-59.733 17.067-89.6 102.4-85.333 119.467 12.8 29.867 136.533 68.267 162.133 76.8 25.6 4.267 93.867 34.133 106.667 12.8 17.067-25.6-29.867-64-64-106.667-38.4-46.933-89.6-115.2-119.467-102.4zM405.333 622.933c-25.6 51.2-72.533 128-51.2 153.6 38.4 51.2 132.267 51.2 145.067 38.4 25.6-21.333 17.067-157.867 12.8-183.467s0-102.4-25.6-106.667c-29.867-8.533-55.467 46.933-81.067 98.133zM537.6 648.533c8.533 59.733 8.533 149.333 42.667 162.133 59.733 21.333 140.8-29.867 149.333-51.2 8.533-34.133-72.533-145.067-93.867-166.4s-59.733-85.333-85.333-76.8c-29.867 12.8-17.067 76.8-12.8 132.267zM494.933 217.6c-8.533-51.2-12.8-128-38.4-136.533-51.2-17.067-119.467 25.6-123.733 42.667-8.533 29.867 68.267 123.733 85.333 140.8s51.2 72.533 72.533 64c21.333-4.267 8.533-59.733 4.267-110.933zM320 516.267c-55.467 25.6-136.533 51.2-136.533 85.333 0 64 68.267 123.733 85.333 123.733 34.133 0 110.933-110.933 128-132.267 12.8-25.6 64-76.8 46.933-98.133-17.067-29.867-72.533 0-123.733 21.333zM887.467 482.133c38.4-51.2 8.533-149.333-17.067-162.133-29.867-17.067-145.067 38.4-170.667 46.933-25.6 12.8-98.133 29.867-98.133 55.467 0 29.867 64 38.4 123.733 51.2 55.467 8.533 140.8 34.133 162.133 8.533zM785.067 686.933c55.467-17.067 89.6-98.133 85.333-115.2-8.533-29.867-132.267-64-157.867-72.533-25.6-4.267-89.6-29.867-102.4-12.8-17.067 25.6 25.6 64 64 102.4 29.867 42.667 76.8 106.667 110.933 98.133zM725.333 328.533c51.2-17.067 102.4-46.933 102.4-76.8-4.267-51.2-64-115.2-98.133-115.2-29.867 0-89.6 106.667-102.4 132.267-12.8 21.333-51.2 76.8-34.133 98.133s76.8-17.067 132.267-38.4zM610.133 238.933c21.333-46.933 59.733-110.933 38.4-132.267-34.133-42.667-115.2-42.667-128-29.867-21.333 17.067-8.533 136.533-4.267 157.867 4.267 25.6 4.267 89.6 25.6 93.867 29.867 4.267 46.933-46.933 68.267-89.6z" />
<glyph unicode="&#xe958;" glyph-name="deletedTicket" horiz-adv-x="900" d="M96.823 84.328h694.333v640.777c0 0-2.019 234.895-350.243 234.895s-344.090-234.895-344.090-234.895v-640.777zM227.684 652.223h171.244v152.494h102.496v-152.494h171.276v-102.496h-171.276v-357.519h-102.496v357.519h-171.244v102.496zM0 59.649v-123.649h900.415v123.649h-900.415z" /> <glyph unicode="&#xe958;" glyph-name="deletedTicket" horiz-adv-x="900" d="M96.823 84.328h694.333v640.777c0 0-2.019 234.895-350.243 234.895s-344.090-234.895-344.090-234.895v-640.777zM227.684 652.223h171.244v152.494h102.496v-152.494h171.276v-102.496h-171.276v-357.519h-102.496v357.519h-171.244v102.496zM0 59.649v-123.649h900.415v123.649h-900.415z" />
<glyph unicode="&#xe959;" glyph-name="entry" d="M0 328.882l392.882-392.882 265.404 265.404-100.31 100.31-102.4-100.31v303.020h303.020l-100.31-102.4 100.31-100.31 265.404 265.404-392.882 392.882z" /> <glyph unicode="&#xe959;" glyph-name="entry" d="M0 328.882l392.882-392.882 265.404 265.404-100.31 100.31-102.4-100.31v303.020h303.020l-100.31-102.4 100.31-100.31 265.404 265.404-392.882 392.882z" />
@ -103,8 +103,9 @@
<glyph unicode="&#xe95d;" glyph-name="zone" d="M243.2 448c-12.8 17.067-25.6 34.133-38.4 51.2-34.133 46.933-68.267 98.133-89.6 153.6-17.067 34.133-25.6 72.533-17.067 110.933 8.533 51.2 38.4 89.6 85.333 110.933 59.733 25.6 132.267 8.533 174.933-34.133 34.133-38.4 42.667-81.067 34.133-132.267-8.533-46.933-29.867-85.333-51.2-123.733-29.867-46.933-59.733-89.6-89.6-132.267-4.267 0-4.267 0-8.533-4.267zM247.467 823.467c-46.933 0-89.6-38.4-89.6-89.6 0-46.933 38.4-89.6 85.333-89.6s89.6 38.4 89.6 85.333c0 55.467-38.4 93.867-85.333 93.867zM490.667 379.733l-17.067 25.6 12.8 8.533-34.133 183.467c0 0 0 8.533-8.533 8.533l-42.667 4.267c0 0-68.267-110.933-157.867-217.6 4.267 4.267-93.867 110.933-132.267 187.733l-110.933-51.2c0 0-4.267 0-4.267-8.533l25.6-145.067 34.133-21.333-8.533-21.333-17.067 8.533 59.733-332.8 213.333 102.4 238.933-21.333-51.2 290.133zM149.333 285.867c-12.8 4.267-29.867 12.8-42.667 17.067 4.267 8.533 4.267 17.067 8.533 21.333 17.067 0 29.867-4.267 42.667-12.8-4.267-8.533-4.267-17.067-8.533-25.6zM256 268.8c-17.067 0-34.133 4.267-46.933 4.267 0 8.533 4.267 17.067 4.267 25.6 12.8 0 29.867-4.267 42.667-4.267 0-8.533 0-17.067 0-25.6zM315.733 277.333c-4.267 8.533-4.267 12.8-8.533 21.333 17.067 8.533 29.867 17.067 42.667 21.333 4.267-8.533 8.533-12.8 8.533-21.333-12.8-8.533-25.6-12.8-42.667-21.333zM405.333 328.533c-4.267 8.533-8.533 12.8-12.8 21.333 12.8 8.533 25.6 17.067 38.4 25.6 4.267-4.267 8.533-12.8 12.8-21.333-8.533-8.533-21.333-17.067-38.4-25.6zM972.8 460.8l-29.867 25.6 12.8 21.333 12.8-8.533-34.133 187.733c0 0 0 8.533-8.533 8.533l-226.133 17.067-209.067-93.867c0 0-8.533-4.267-4.267-12.8l29.867-170.667 21.333-12.8-17.067-17.067 55.467-307.2 213.333 102.4 234.667-21.333-51.2 281.6zM580.267 465.067c-4.267 4.267-8.533 12.8-12.8 17.067 12.8 12.8 21.333 21.333 29.867 34.133 4.267-4.267 12.8-12.8 17.067-17.067-12.8-8.533-25.6-21.333-34.133-34.133zM657.067 541.867c-4.267 4.267-8.533 12.8-12.8 21.333 12.8 8.533 25.6 17.067 38.4 25.6 8.533-8.533 12.8-17.067 12.8-21.333-12.8-8.533-25.6-17.067-38.4-25.6zM797.867 571.733c-12.8 4.267-25.6 4.267-42.667 4.267 0 8.533 0 17.067 0 25.6 17.067 0 34.133 0 51.2-4.267-4.267-8.533-4.267-17.067-8.533-25.6zM891.733 520.533c-12.8 8.533-25.6 17.067-38.4 25.6 4.267 8.533 8.533 12.8 12.8 21.333 12.8-8.533 25.6-17.067 38.4-25.6-4.267-8.533-8.533-12.8-12.8-21.333z" /> <glyph unicode="&#xe95d;" glyph-name="zone" d="M243.2 448c-12.8 17.067-25.6 34.133-38.4 51.2-34.133 46.933-68.267 98.133-89.6 153.6-17.067 34.133-25.6 72.533-17.067 110.933 8.533 51.2 38.4 89.6 85.333 110.933 59.733 25.6 132.267 8.533 174.933-34.133 34.133-38.4 42.667-81.067 34.133-132.267-8.533-46.933-29.867-85.333-51.2-123.733-29.867-46.933-59.733-89.6-89.6-132.267-4.267 0-4.267 0-8.533-4.267zM247.467 823.467c-46.933 0-89.6-38.4-89.6-89.6 0-46.933 38.4-89.6 85.333-89.6s89.6 38.4 89.6 85.333c0 55.467-38.4 93.867-85.333 93.867zM490.667 379.733l-17.067 25.6 12.8 8.533-34.133 183.467c0 0 0 8.533-8.533 8.533l-42.667 4.267c0 0-68.267-110.933-157.867-217.6 4.267 4.267-93.867 110.933-132.267 187.733l-110.933-51.2c0 0-4.267 0-4.267-8.533l25.6-145.067 34.133-21.333-8.533-21.333-17.067 8.533 59.733-332.8 213.333 102.4 238.933-21.333-51.2 290.133zM149.333 285.867c-12.8 4.267-29.867 12.8-42.667 17.067 4.267 8.533 4.267 17.067 8.533 21.333 17.067 0 29.867-4.267 42.667-12.8-4.267-8.533-4.267-17.067-8.533-25.6zM256 268.8c-17.067 0-34.133 4.267-46.933 4.267 0 8.533 4.267 17.067 4.267 25.6 12.8 0 29.867-4.267 42.667-4.267 0-8.533 0-17.067 0-25.6zM315.733 277.333c-4.267 8.533-4.267 12.8-8.533 21.333 17.067 8.533 29.867 17.067 42.667 21.333 4.267-8.533 8.533-12.8 8.533-21.333-12.8-8.533-25.6-12.8-42.667-21.333zM405.333 328.533c-4.267 8.533-8.533 12.8-12.8 21.333 12.8 8.533 25.6 17.067 38.4 25.6 4.267-4.267 8.533-12.8 12.8-21.333-8.533-8.533-21.333-17.067-38.4-25.6zM972.8 460.8l-29.867 25.6 12.8 21.333 12.8-8.533-34.133 187.733c0 0 0 8.533-8.533 8.533l-226.133 17.067-209.067-93.867c0 0-8.533-4.267-4.267-12.8l29.867-170.667 21.333-12.8-17.067-17.067 55.467-307.2 213.333 102.4 234.667-21.333-51.2 281.6zM580.267 465.067c-4.267 4.267-8.533 12.8-12.8 17.067 12.8 12.8 21.333 21.333 29.867 34.133 4.267-4.267 12.8-12.8 17.067-17.067-12.8-8.533-25.6-21.333-34.133-34.133zM657.067 541.867c-4.267 4.267-8.533 12.8-12.8 21.333 12.8 8.533 25.6 17.067 38.4 25.6 8.533-8.533 12.8-17.067 12.8-21.333-12.8-8.533-25.6-17.067-38.4-25.6zM797.867 571.733c-12.8 4.267-25.6 4.267-42.667 4.267 0 8.533 0 17.067 0 25.6 17.067 0 34.133 0 51.2-4.267-4.267-8.533-4.267-17.067-8.533-25.6zM891.733 520.533c-12.8 8.533-25.6 17.067-38.4 25.6 4.267 8.533 8.533 12.8 12.8 21.333 12.8-8.533 25.6-17.067 38.4-25.6-4.267-8.533-8.533-12.8-12.8-21.333z" />
<glyph unicode="&#xe95e;" glyph-name="inventory" d="M273.067 226.133c4.267 0 8.533 4.267 8.533 8.533v85.333h98.133v-221.867h-217.6v221.867h98.133v-81.067c0-8.533 8.533-12.8 12.8-12.8zM512 226.133c4.267 0 8.533 4.267 8.533 8.533v85.333h98.133v-221.867h-217.6v221.867h98.133v-81.067c0-8.533 8.533-12.8 12.8-12.8zM750.933 226.133c4.267 0 8.533 4.267 8.533 8.533v85.333h98.133v-221.867h-217.6v221.867h98.133v-81.067c4.267-8.533 8.533-12.8 12.8-12.8zM644.267 780.8h98.133v-81.067c0-4.267 4.267-8.533 8.533-8.533s8.533 4.267 8.533 8.533v81.067h98.133v-221.867h-217.6v221.867h4.267zM401.067 780.8h98.133v-81.067c0-4.267 4.267-8.533 8.533-8.533s8.533 4.267 8.533 8.533v81.067h98.133v-221.867h-213.333v221.867zM162.133 780.8h98.133v-81.067c0-4.267 4.267-8.533 8.533-8.533s8.533 4.267 8.533 8.533v81.067h98.133v-221.867h-213.333v221.867zM153.6 537.6h780.8v-38.4h-844.8v38.4zM68.267-42.667h-42.667v981.333h42.667v-908.8zM89.6 38.4v38.4h844.8v-38.4zM998.4-42.667h-42.667v981.333h42.667z" /> <glyph unicode="&#xe95e;" glyph-name="inventory" d="M273.067 226.133c4.267 0 8.533 4.267 8.533 8.533v85.333h98.133v-221.867h-217.6v221.867h98.133v-81.067c0-8.533 8.533-12.8 12.8-12.8zM512 226.133c4.267 0 8.533 4.267 8.533 8.533v85.333h98.133v-221.867h-217.6v221.867h98.133v-81.067c0-8.533 8.533-12.8 12.8-12.8zM750.933 226.133c4.267 0 8.533 4.267 8.533 8.533v85.333h98.133v-221.867h-217.6v221.867h98.133v-81.067c4.267-8.533 8.533-12.8 12.8-12.8zM644.267 780.8h98.133v-81.067c0-4.267 4.267-8.533 8.533-8.533s8.533 4.267 8.533 8.533v81.067h98.133v-221.867h-217.6v221.867h4.267zM401.067 780.8h98.133v-81.067c0-4.267 4.267-8.533 8.533-8.533s8.533 4.267 8.533 8.533v81.067h98.133v-221.867h-213.333v221.867zM162.133 780.8h98.133v-81.067c0-4.267 4.267-8.533 8.533-8.533s8.533 4.267 8.533 8.533v81.067h98.133v-221.867h-213.333v221.867zM153.6 537.6h780.8v-38.4h-844.8v38.4zM68.267-42.667h-42.667v981.333h42.667v-908.8zM89.6 38.4v38.4h844.8v-38.4zM998.4-42.667h-42.667v981.333h42.667z" />
<glyph unicode="&#xe95f;" glyph-name="latestBuy" d="M183.467 750.933h712.533v-38.4h-768v38.4zM89.6 64c8.533 0 12.8 0 21.333-4.267v900.267h-42.667v-900.267c8.533 4.267 12.8 4.267 21.333 4.267zM955.733 512v448h-42.667v-413.867c17.067-12.8 29.867-21.333 42.667-34.133zM145.067-8.533c0-30.633-24.833-55.467-55.467-55.467s-55.467 24.833-55.467 55.467c0 30.633 24.833 55.467 55.467 55.467s55.467-24.833 55.467-55.467zM418.133 426.667h-290.133v-38.4h273.067c4.267 17.067 8.533 29.867 17.067 38.4zM392.533 106.667h-264.533v-38.4h281.6c-8.533 12.8-12.8 25.6-17.067 38.4zM725.333 247.467c-12.8 0-21.333-8.533-21.333-21.333s8.533-21.333 21.333-21.333c12.8 0 21.333 8.533 21.333 21.333 0 8.533-12.8 21.333-21.333 21.333zM721.067 541.867c-166.4 0-298.667-136.533-298.667-302.933s132.267-302.933 298.667-302.933c166.4 0 298.667 136.533 298.667 302.933 0 170.667-132.267 302.933-298.667 302.933zM725.333 34.133c-98.133 0-174.933 72.533-187.733 162.133h-34.133l51.2 64 59.733-64h-38.4c8.533-68.267 72.533-123.733 149.333-123.733 81.067 0 149.333 64 149.333 145.067s-68.267 145.067-149.333 145.067c-68.267 0-128-46.933-145.067-110.933l-21.333 29.867-17.067-12.8c8.533 29.867 25.6 55.467 46.933 76.8l-25.6 21.333c-4.267 4.267-4.267 12.8 0 17.067l12.8 12.8c4.267 4.267 12.8 4.267 17.067 0l25.6-25.6c21.333 12.8 51.2 25.6 76.8 25.6v29.867h-8.533c-8.533 0-12.8 4.267-12.8 12.8v17.067c0 8.533 4.267 12.8 12.8 12.8h59.733c8.533 0 12.8-4.267 12.8-12.8v-17.067c0-8.533-4.267-12.8-12.8-12.8h-8.533v-21.333c29.867-4.267 55.467-12.8 81.067-29.867l34.133 29.867c4.267 4.267 12.8 4.267 17.067 0l12.8-12.8c4.267-4.267 4.267-12.8 0-17.067l-25.6-25.6c29.867-34.133 51.2-76.8 51.2-128 4.267-102.4-81.067-187.733-183.467-187.733zM772.267 226.133c0-25.6-21.333-46.933-46.933-46.933s-46.933 21.333-46.933 46.933c0 25.6 21.333 46.933 46.933 46.933 8.533 0 17.067-4.267 21.333-4.267l46.933 46.933 21.333-21.333-46.933-46.933c4.267-4.267 4.267-12.8 4.267-21.333z" /> <glyph unicode="&#xe95f;" glyph-name="latestBuy" d="M183.467 750.933h712.533v-38.4h-768v38.4zM89.6 64c8.533 0 12.8 0 21.333-4.267v900.267h-42.667v-900.267c8.533 4.267 12.8 4.267 21.333 4.267zM955.733 512v448h-42.667v-413.867c17.067-12.8 29.867-21.333 42.667-34.133zM145.067-8.533c0-30.633-24.833-55.467-55.467-55.467s-55.467 24.833-55.467 55.467c0 30.633 24.833 55.467 55.467 55.467s55.467-24.833 55.467-55.467zM418.133 426.667h-290.133v-38.4h273.067c4.267 17.067 8.533 29.867 17.067 38.4zM392.533 106.667h-264.533v-38.4h281.6c-8.533 12.8-12.8 25.6-17.067 38.4zM725.333 247.467c-12.8 0-21.333-8.533-21.333-21.333s8.533-21.333 21.333-21.333c12.8 0 21.333 8.533 21.333 21.333 0 8.533-12.8 21.333-21.333 21.333zM721.067 541.867c-166.4 0-298.667-136.533-298.667-302.933s132.267-302.933 298.667-302.933c166.4 0 298.667 136.533 298.667 302.933 0 170.667-132.267 302.933-298.667 302.933zM725.333 34.133c-98.133 0-174.933 72.533-187.733 162.133h-34.133l51.2 64 59.733-64h-38.4c8.533-68.267 72.533-123.733 149.333-123.733 81.067 0 149.333 64 149.333 145.067s-68.267 145.067-149.333 145.067c-68.267 0-128-46.933-145.067-110.933l-21.333 29.867-17.067-12.8c8.533 29.867 25.6 55.467 46.933 76.8l-25.6 21.333c-4.267 4.267-4.267 12.8 0 17.067l12.8 12.8c4.267 4.267 12.8 4.267 17.067 0l25.6-25.6c21.333 12.8 51.2 25.6 76.8 25.6v29.867h-8.533c-8.533 0-12.8 4.267-12.8 12.8v17.067c0 8.533 4.267 12.8 12.8 12.8h59.733c8.533 0 12.8-4.267 12.8-12.8v-17.067c0-8.533-4.267-12.8-12.8-12.8h-8.533v-21.333c29.867-4.267 55.467-12.8 81.067-29.867l34.133 29.867c4.267 4.267 12.8 4.267 17.067 0l12.8-12.8c4.267-4.267 4.267-12.8 0-17.067l-25.6-25.6c29.867-34.133 51.2-76.8 51.2-128 4.267-102.4-81.067-187.733-183.467-187.733zM772.267 226.133c0-25.6-21.333-46.933-46.933-46.933s-46.933 21.333-46.933 46.933c0 25.6 21.333 46.933 46.933 46.933 8.533 0 17.067-4.267 21.333-4.267l46.933 46.933 21.333-21.333-46.933-46.933c4.267-4.267 4.267-12.8 4.267-21.333z" />
<glyph unicode="&#xe960;" glyph-name="invoiceIn" d="M320 358.4h128c12.8 0 21.333 8.533 21.333 21.333s-8.533 21.333-21.333 21.333h-128c-12.8 0-21.333-8.533-21.333-21.333s8.533-21.333 21.333-21.333zM832 396.8c-8.533 0-12.8 0-21.333 4.267v-358.4c0-34.133-29.867-64-64-64s-64 29.867-64 64v42.667c0 12.8-8.533 21.333-21.333 21.333h-640c-12.8 0-21.333-8.533-21.333-21.333v-42.667c0-59.733 46.933-106.667 106.667-106.667h640c59.733 0 106.667 46.933 106.667 106.667v358.4c-8.533 0-12.8-4.267-21.333-4.267zM128-21.333h-21.333c-34.133 0-64 29.867-64 64v21.333h597.333v-21.333c0-25.6 8.533-46.933 21.333-64h-533.333zM149.333 149.333c12.8 0 21.333 8.533 21.333 21.333v682.667c0 34.133 29.867 64 64 64h597.333c-12.8-17.067-21.333-38.4-21.333-64v-68.267c8.533 0 12.8 4.267 21.333 4.267s12.8 0 21.333-4.267v68.267c0 34.133 29.867 64 64 64s64-29.867 64-64v-42.667h-64c-12.8 0-21.333-8.533-21.333-21.333 0-4.267 4.267-12.8 4.267-12.8 4.267 0 8.533-4.267 12.8-8.533 0 0 0 0 0 0h85.333c17.067 0 25.6 8.533 25.6 21.333v64c0 59.733-46.933 106.667-106.667 106.667h-682.667c-59.733 0-106.667-46.933-106.667-106.667v-682.667c0-12.8 8.533-21.333 21.333-21.333zM614.4 366.933c8.533 0 17.067 0 21.333-4.267s12.8-4.267 17.067-8.533c4.267-4.267 12.8-4.267 17.067-4.267 0 0 4.267 4.267 4.267 4.267s4.267 4.267 4.267 4.267c0 4.267 4.267 4.267 4.267 8.533s0 8.533-4.267 12.8c-8.533 8.533-17.067 12.8-29.867 17.067-21.333 8.533-51.2 8.533-76.8-4.267-12.8-4.267-25.6-12.8-34.133-25.6-8.533-8.533-12.8-21.333-17.067-29.867h-17.067c-4.267 0-8.533 0-12.8-4.267s-4.267-8.533-4.267-12.8c0-4.267 0-8.533 4.267-12.8s8.533-4.267 12.8-4.267h8.533c0 0 0-4.267 0-4.267s0 0 0-4.267h-8.533c-4.267 0-8.533 0-12.8-4.267s-4.267-8.533-4.267-12.8c0-4.267 0-8.533 4.267-12.8s8.533-4.267 12.8-4.267h12.8c4.267-12.8 8.533-21.333 17.067-34.133s21.333-21.333 34.133-25.6c12.8-4.267 25.6-8.533 42.667-8.533 25.6 0 46.933 8.533 64 21.333 8.533 8.533 8.533 12.8 8.533 21.333 0 4.267 0 8.533-4.267 12.8s-12.8 8.533-21.333 0c-12.8-8.533-25.6-12.8-42.667-12.8-12.8 0-25.6 4.267-38.4 12.8-8.533 4.267-12.8 12.8-21.333 21.333h64c4.267 0 8.533 4.267 12.8 4.267 0 0 4.267 4.267 4.267 12.8 0 4.267 0 8.533-4.267 12.8 0 0-4.267 4.267-12.8 4.267h-72.533c0 0 0 0 0 4.267 0 0 0 4.267 0 4.267h89.6c4.267 0 8.533 4.267 12.8 4.267 4.267 4.267 4.267 8.533 4.267 12.8s0 8.533-4.267 12.8c0 0-4.267 4.267-12.8 4.267h-76.8c4.267 8.533 12.8 12.8 17.067 21.333 12.8-4.267 25.6 0 38.4 0zM635.733 593.067c0 8.533 0 17.067 4.267 25.6h-320c-12.8 0-21.333-8.533-21.333-21.333s8.533-21.333 21.333-21.333h320c0 4.267-4.267 12.8-4.267 17.067zM657.067 512h-337.067c-12.8 0-21.333-8.533-21.333-21.333s8.533-21.333 21.333-21.333h341.333c8.533 0 12.8 4.267 17.067 8.533-8.533 8.533-17.067 21.333-21.333 34.133zM832 746.667c-85.333 0-153.6-68.267-153.6-153.6s68.267-153.6 153.6-153.6 153.6 68.267 153.6 153.6c0 85.333-68.267 153.6-153.6 153.6zM921.6 576h-81.067v-42.667c0-8.533-4.267-12.8-12.8-8.533l-98.133 55.467c-8.533 4.267-8.533 12.8 0 17.067l98.133 55.467c8.533 4.267 12.8 0 12.8-8.533v-42.667h81.067c8.533 0 17.067-8.533 17.067-17.067 0 0-4.267-8.533-17.067-8.533z" /> <glyph unicode="&#xe960;" glyph-name="invoiceOut" d="M320 358.4h128c12.8 0 21.333 8.533 21.333 21.333s-8.533 21.333-21.333 21.333h-128c-12.8 0-21.333-8.533-21.333-21.333s8.533-21.333 21.333-21.333zM832 746.667c85.333 0 153.6-68.267 153.6-153.6s-68.267-153.6-153.6-153.6-153.6 68.267-153.6 153.6 68.267 153.6 153.6 153.6zM742.4 576h81.067v-42.667c0-8.533 4.267-12.8 12.8-8.533l98.133 55.467c8.533 4.267 8.533 12.8 0 17.067l-98.133 55.467c-8.533 4.267-12.8 0-12.8-8.533v-42.667h-81.067c-8.533 0-17.067-8.533-17.067-17.067 0 0 4.267-8.533 17.067-8.533zM720.64 231.68c-3.413-8.533-8.96-16.213-15.36-22.613-6.827-6.4-14.080-11.947-22.613-16.64-8.533-4.267-17.493-7.68-26.88-10.24s-18.773-3.413-28.16-3.413c-12.373 0-24.32 2.133-35.413 6.4s-20.907 9.813-29.867 17.067c-8.96 7.253-16.64 15.36-23.040 25.173-6.4 9.387-11.52 19.627-14.933 30.72h-33.28l9.813 23.467h17.92c-0.427 4.267-0.853 8.96-0.853 14.080v2.133h-22.187l9.387 23.467h15.787c2.56 11.52 6.827 22.613 12.8 32.853 5.973 10.667 13.653 19.627 23.040 27.733s20.053 14.507 32 19.2c12.373 4.693 25.6 7.253 40.533 7.253 20.907 0 38.827-4.693 54.187-13.653s26.453-20.907 34.133-35.84l-33.707-23.467c-2.987 6.4-6.827 11.947-10.667 16.213-4.267 4.267-8.96 7.68-13.653 10.24s-9.813 4.267-15.36 5.547c-5.547 1.28-10.667 1.707-15.787 1.707-8.107 0-15.787-1.28-22.613-3.84s-12.8-5.973-17.92-10.24c-5.12-4.267-9.387-9.387-13.227-15.36s-6.4-11.947-8.107-18.773h81.92l-9.387-23.467h-76.373v-3.413c0-4.267 0.427-8.533 0.853-12.8h74.667l-9.387-23.467h-58.453c5.547-11.947 13.227-21.76 23.467-29.013s21.76-11.093 35.413-11.093c5.12 0 10.24 0.427 15.787 1.707s10.667 3.413 15.787 5.973c5.12 2.987 9.387 6.4 14.080 10.667 4.267 4.267 7.68 9.813 10.24 15.787l35.413-20.053zM634.88 576h-314.88c-12.8 0-21.333 8.533-21.333 21.333s8.533 21.333 21.333 21.333h315.733c-1.28-8.533-2.56-16.64-2.56-25.6 0-5.973 1.28-11.52 1.707-17.067zM673.707 473.6c-2.987-2.56-6.827-4.267-12.373-4.267h-341.333c-12.8 0-21.333 8.533-21.333 21.333s8.533 21.333 21.333 21.333h330.667c5.973-13.653 14.080-26.453 23.040-38.4zM832 394.24c-7.253 0-14.080 1.28-21.333 2.133v-353.707c0-34.133-29.867-64-64-64s-64 29.867-64 64v42.667c0 12.8-8.533 21.333-21.333 21.333h-640c-12.8 0-21.333-8.533-21.333-21.333v-42.667c0-59.733 46.933-106.667 106.667-106.667h640c59.733 0 106.667 46.933 106.667 106.667v353.707c-7.253-0.853-14.080-2.133-21.333-2.133zM128-21.333h-21.333c-34.133 0-64 29.867-64 64v21.333h597.333v-21.333c0-25.6 8.533-46.933 21.333-64h-533.333zM832 917.333h-597.333c-34.133 0-64-29.867-64-64v-682.667c0-12.8-8.533-21.333-21.333-21.333s-21.333 8.533-21.333 21.333v682.667c0 59.733 46.933 106.667 106.667 106.667h682.667c59.733 0 106.667-46.933 106.667-106.667v-64c0-12.8-8.533-21.333-25.6-21.333h-73.387c-8.533 4.267-17.067 8.533-26.027 11.52-1.28 2.987-2.987 7.253-2.987 9.813 0 12.8 8.533 21.333 21.333 21.333h64v42.667c0 34.133-29.867 64-64 64s-64-29.867-64-64v-63.573c-7.253 0.853-14.080 2.133-21.333 2.133s-14.080-1.28-21.333-2.133v63.573c0 25.6 8.533 46.933 21.333 64z" />
<glyph unicode="&#xe961;" glyph-name="invoiceOut" d="M320 358.4h128c12.8 0 21.333 8.533 21.333 21.333s-8.533 21.333-21.333 21.333h-128c-12.8 0-21.333-8.533-21.333-21.333s8.533-21.333 21.333-21.333zM832 396.8c-8.533 0-12.8 0-21.333 4.267v-358.4c0-34.133-29.867-64-64-64s-64 29.867-64 64v42.667c0 12.8-8.533 21.333-21.333 21.333h-640c-12.8 0-21.333-8.533-21.333-21.333v-42.667c0-59.733 46.933-106.667 106.667-106.667h640c59.733 0 106.667 46.933 106.667 106.667v358.4c-8.533 0-12.8-4.267-21.333-4.267zM128-21.333h-21.333c-34.133 0-64 29.867-64 64v21.333h597.333v-21.333c0-25.6 8.533-46.933 21.333-64h-533.333zM149.333 149.333c12.8 0 21.333 8.533 21.333 21.333v682.667c0 34.133 29.867 64 64 64h597.333c-12.8-17.067-21.333-38.4-21.333-64v-68.267c8.533 0 12.8 4.267 21.333 4.267s12.8 0 21.333-4.267v68.267c0 34.133 29.867 64 64 64s64-29.867 64-64v-42.667h-64c-12.8 0-21.333-8.533-21.333-21.333 0-4.267 4.267-12.8 4.267-12.8 4.267 0 8.533-4.267 12.8-8.533 0 0 0 0 0 0h85.333c17.067 0 25.6 8.533 25.6 21.333v64c0 59.733-46.933 106.667-106.667 106.667h-682.667c-59.733 0-106.667-46.933-106.667-106.667v-682.667c0-12.8 8.533-21.333 21.333-21.333zM614.4 366.933c8.533 0 17.067 0 21.333-4.267s12.8-4.267 17.067-8.533c4.267-4.267 12.8-4.267 17.067-4.267 0 0 4.267 4.267 4.267 4.267s4.267 4.267 4.267 4.267c0 4.267 4.267 4.267 4.267 8.533s0 8.533-4.267 12.8c-8.533 8.533-17.067 12.8-29.867 17.067-21.333 8.533-51.2 8.533-76.8-4.267-12.8-4.267-25.6-12.8-34.133-25.6-8.533-8.533-12.8-21.333-17.067-29.867h-17.067c-4.267 0-8.533 0-12.8-4.267s-4.267-8.533-4.267-12.8c0-4.267 0-8.533 4.267-12.8s8.533-4.267 12.8-4.267h8.533c0 0 0-4.267 0-4.267s0 0 0-4.267h-8.533c-4.267 0-8.533 0-12.8-4.267s-4.267-8.533-4.267-12.8c0-4.267 0-8.533 4.267-12.8s8.533-4.267 12.8-4.267h12.8c4.267-12.8 8.533-21.333 17.067-34.133s21.333-21.333 34.133-25.6c12.8-4.267 25.6-8.533 42.667-8.533 25.6 0 46.933 8.533 64 21.333 8.533 8.533 8.533 12.8 8.533 21.333 0 4.267 0 8.533-4.267 12.8s-12.8 8.533-21.333 0c-12.8-8.533-25.6-12.8-42.667-12.8-12.8 0-25.6 4.267-38.4 12.8-8.533 4.267-12.8 12.8-21.333 21.333h64c4.267 0 8.533 4.267 12.8 4.267 0 0 4.267 4.267 4.267 12.8 0 4.267 0 8.533-4.267 12.8 0 0-4.267 4.267-12.8 4.267h-72.533c0 0 0 0 0 4.267 0 0 0 4.267 0 4.267h89.6c4.267 0 8.533 4.267 12.8 4.267 4.267 4.267 4.267 8.533 4.267 12.8s0 8.533-4.267 12.8c0 0-4.267 4.267-12.8 4.267h-76.8c4.267 8.533 12.8 12.8 17.067 21.333 12.8-4.267 25.6 0 38.4 0zM635.733 593.067c0 8.533 0 17.067 4.267 25.6h-320c-12.8 0-21.333-8.533-21.333-21.333s8.533-21.333 21.333-21.333h320c0 4.267-4.267 12.8-4.267 17.067zM657.067 512h-337.067c-12.8 0-21.333-8.533-21.333-21.333s8.533-21.333 21.333-21.333h341.333c8.533 0 12.8 4.267 17.067 8.533-8.533 8.533-17.067 21.333-21.333 34.133zM832 746.667c-85.333 0-153.6-68.267-153.6-153.6s68.267-153.6 153.6-153.6 153.6 68.267 153.6 153.6c0 85.333-68.267 153.6-153.6 153.6zM934.4 584.533l-98.133-55.467c-8.533-4.267-12.8 0-12.8 8.533v38.4h-81.067c-12.8 0-17.067 8.533-17.067 17.067s8.533 17.067 17.067 17.067h81.067v42.667c0 8.533 4.267 12.8 12.8 8.533l98.133-55.467c8.533-8.533 8.533-17.067 0-21.333z" /> <glyph unicode="&#xe961;" glyph-name="invoiceIn" d="M320 358.4h128c12.8 0 21.333 8.533 21.333 21.333s-8.533 21.333-21.333 21.333h-128c-12.8 0-21.333-8.533-21.333-21.333s8.533-21.333 21.333-21.333zM832 746.667c-85.333 0-153.6-68.267-153.6-153.6s68.267-153.6 153.6-153.6 153.6 68.267 153.6 153.6-68.267 153.6-153.6 153.6zM921.6 576h-81.067v-42.667c0-8.533-4.267-12.8-12.8-8.533l-98.133 55.467c-8.533 4.267-8.533 12.8 0 17.067l98.133 55.467c8.533 4.267 12.8 0 12.8-8.533v-42.667h81.067c8.533 0 17.067-8.533 17.067-17.067 0 0-4.267-8.533-17.067-8.533zM720.64 231.68c-3.413-8.533-8.96-16.213-15.36-22.613-6.827-6.4-14.080-11.947-22.613-16.64-8.533-4.267-17.493-7.68-26.88-10.24s-18.773-3.413-28.16-3.413c-12.373 0-24.32 2.133-35.413 6.4s-20.907 9.813-29.867 17.067c-8.96 7.253-16.64 15.36-23.040 25.173-6.4 9.387-11.52 19.627-14.933 30.72h-33.28l9.813 23.467h17.92c-0.427 4.267-0.853 8.96-0.853 14.080v2.133h-22.187l9.387 23.467h15.787c2.56 11.52 6.827 22.613 12.8 32.853 5.973 10.667 13.653 19.627 23.040 27.733s20.053 14.507 32 19.2c12.373 4.693 25.6 7.253 40.533 7.253 20.907 0 38.827-4.693 54.187-13.653s26.453-20.907 34.133-35.84l-33.707-23.467c-2.987 6.4-6.827 11.947-10.667 16.213-4.267 4.267-8.96 7.68-13.653 10.24s-9.813 4.267-15.36 5.547c-5.547 1.28-10.667 1.707-15.787 1.707-8.107 0-15.787-1.28-22.613-3.84s-12.8-5.973-17.92-10.24c-5.12-4.267-9.387-9.387-13.227-15.36s-6.4-11.947-8.107-18.773h81.92l-9.387-23.467h-76.373v-3.413c0-4.267 0.427-8.533 0.853-12.8h74.667l-9.387-23.467h-58.453c5.547-11.947 13.227-21.76 23.467-29.013s21.76-11.093 35.413-11.093c5.12 0 10.24 0.427 15.787 1.707s10.667 3.413 15.787 5.973c5.12 2.987 9.387 6.4 14.080 10.667 4.267 4.267 7.68 9.813 10.24 15.787l35.413-20.053zM634.88 576h-314.88c-12.8 0-21.333 8.533-21.333 21.333s8.533 21.333 21.333 21.333h315.733c-1.28-8.533-2.56-16.64-2.56-25.6 0-5.973 1.28-11.52 1.707-17.067zM673.707 473.6c-2.987-2.56-6.827-4.267-12.373-4.267h-341.333c-12.8 0-21.333 8.533-21.333 21.333s8.533 21.333 21.333 21.333h330.667c5.973-13.653 14.080-26.453 23.040-38.4zM832 394.24c-7.253 0-14.080 1.28-21.333 2.133v-353.707c0-34.133-29.867-64-64-64s-64 29.867-64 64v42.667c0 12.8-8.533 21.333-21.333 21.333h-640c-12.8 0-21.333-8.533-21.333-21.333v-42.667c0-59.733 46.933-106.667 106.667-106.667h640c59.733 0 106.667 46.933 106.667 106.667v353.707c-7.253-0.853-14.080-2.133-21.333-2.133zM128-21.333h-21.333c-34.133 0-64 29.867-64 64v21.333h597.333v-21.333c0-25.6 8.533-46.933 21.333-64h-533.333zM832 917.333h-597.333c-34.133 0-64-29.867-64-64v-682.667c0-12.8-8.533-21.333-21.333-21.333s-21.333 8.533-21.333 21.333v682.667c0 59.733 46.933 106.667 106.667 106.667h682.667c59.733 0 106.667-46.933 106.667-106.667v-64c0-12.8-8.533-21.333-25.6-21.333h-73.387c-8.533 4.267-17.067 8.533-26.027 11.52-1.28 2.987-2.987 7.253-2.987 9.813 0 12.8 8.533 21.333 21.333 21.333h64v42.667c0 34.133-29.867 64-64 64s-64-29.867-64-64v-63.573c-7.253 0.853-14.080 2.133-21.333 2.133s-14.080-1.28-21.333-2.133v63.573c0 25.6 8.533 46.933 21.333 64z" />
<glyph unicode="&#xe962;" glyph-name="supplierfalse" d="M198.827 882.773c22.187 0.427 41.813-14.080 48.64-34.133l8.107-22.187 105.813-105.813-54.187 149.333c-25.6 59.733-89.6 89.6-149.333 72.533l-13.653-5.12 54.613-54.613zM708.693 129.28l-173.653 173.653 15.36-43.093c-8.533-4.267-12.8-4.267-21.333-4.267l-29.867 83.2-108.373 108.373 74.24-208.64c-42.667-25.6-72.533-76.8-72.533-132.267 0-89.6 72.533-157.867 157.867-157.867 89.6 0 157.867 72.533 157.867 157.867 0 8.533-4.267 12.8-4.267 21.333l4.693 1.707zM550.4 12.373c-51.2 0-93.867 42.667-93.867 93.867s42.667 93.867 93.867 93.867 93.867-42.667 93.867-93.867c0-55.467-42.667-93.867-93.867-93.867zM960 289.707l-122.453-45.227 49.493-49.067 94.293 34.56zM504.32 577.707l-0.853 2.133 76.8 29.867 17.067-51.2c4.267-12.8 17.067-21.333 29.867-21.333 4.267 0 8.533 0 12.8 0l115.2 42.667c8.533 4.267 12.8 8.533 17.067 17.067s4.267 17.067 0 25.6l-17.067 51.2 76.8 29.867 119.467-332.8-174.507-65.707 45.653-45.653 180.053 64.427c8.533 4.267 12.8 8.533 17.067 17.067s4.267 17.067 4.267 21.333l-145.067 396.8c-4.267 8.533-8.533 12.8-17.067 17.067s-17.067 4.267-25.6 0l-136.533-51.2-115.2-42.667-134.4-50.347 54.187-54.187zM695.467 656.64l8.533-21.333-59.733-21.333-8.533 21.333 59.733 21.333zM896 439.040l-98.133-34.133 21.333-59.733 98.133 34.133zM39.253 960c-9.813 0-20.053-3.84-27.733-11.52-15.36-15.787-15.36-40.533 0-55.893l945.493-945.067c7.68-7.68 17.493-11.52 27.733-11.52 9.813 0 20.053 3.84 27.733 11.52 15.36 15.787 15.36 40.533 0 55.893l-945.493 945.067c-7.68 7.68-17.493 11.52-27.733 11.52z" />
<glyph unicode="&#xe968;" glyph-name="wiki" d="M793.6 733.867c0 0 4.267 0 4.267 0l76.8 12.8v-42.667c0-34.133-21.333-68.267-46.933-72.533 0 0-4.267 0-4.267 0l-76.8-12.8v42.667c0 34.133 21.333 64 46.933 72.533zM742.4 597.333l38.4 4.267c12.8 0 25.6-12.8 25.6-29.867v-21.333l-38.4-4.267c-12.8 0-25.6 12.8-25.6 29.867v21.333zM618.667 699.733l68.267 8.533c25.6 4.267 42.667-21.333 42.667-55.467v-38.4l-68.267-8.533c-25.6-4.267-42.667 21.333-42.667 55.467v38.4zM665.6 588.8c4.267 0 4.267 0 0 0l59.733 4.267v-29.867c0-25.6-17.067-46.933-34.133-55.467 0 0-4.267 0-4.267 0l-55.467-8.533v29.867c4.267 29.867 17.067 51.2 34.133 59.733zM443.733 648.533c0 0-4.267 0-4.267 0-119.467 85.333-273.067 46.933-277.333 46.933s-8.533 0-12.8 8.533c0 4.267 0 8.533 8.533 12.8 0 0 42.667 12.8 98.133 8.533 51.2 0 128-12.8 196.267-59.733 4.267-4.267 4.267-8.533 4.267-12.8-4.267-4.267-8.533-4.267-12.8-4.267zM443.733 512c0 0-4.267 0-4.267 0-119.467 85.333-273.067 46.933-277.333 46.933s-8.533 0-12.8 8.533c0 4.267 0 8.533 8.533 12.8 0 0 42.667 12.8 98.133 8.533 51.2 0 128-12.8 196.267-59.733 4.267-4.267 4.267-8.533 4.267-12.8-4.267 0-8.533-4.267-12.8-4.267zM443.733 379.733c0 0-4.267 0-4.267 0-119.467 85.333-273.067 46.933-277.333 46.933s-8.533 0-12.8 8.533c0 4.267 0 8.533 8.533 12.8 0 0 42.667 12.8 98.133 8.533 51.2 0 128-12.8 196.267-59.733 4.267-4.267 4.267-8.533 4.267-12.8-4.267 0-8.533-4.267-12.8-4.267zM443.733 247.467c0 0-4.267 0-4.267 0-119.467 85.333-273.067 46.933-277.333 46.933s-8.533 0-12.8 8.533c0 4.267 0 8.533 8.533 12.8 0 0 42.667 12.8 98.133 8.533 51.2 0 128-12.8 196.267-59.733 4.267-4.267 4.267-8.533 4.267-12.8-4.267 0-8.533-4.267-12.8-4.267zM588.8 379.733c-4.267 0-4.267 0-8.533 4.267s0 8.533 4.267 12.8c68.267 46.933 140.8 59.733 196.267 59.733s93.867-8.533 98.133-8.533c4.267 0 8.533-8.533 8.533-12.8s-8.533-8.533-12.8-8.533v0c0 0-153.6 38.4-277.333-46.933-4.267 4.267-4.267 0-8.533 0zM588.8 247.467c-4.267 0-4.267 0-8.533 4.267s0 8.533 4.267 12.8c68.267 46.933 140.8 59.733 196.267 59.733s93.867-8.533 98.133-8.533c4.267 0 8.533-8.533 8.533-12.8s-8.533-8.533-12.8-8.533v0c0 0-153.6 38.4-277.333-46.933-4.267 4.267-4.267 0-8.533 0zM985.6 738.133v64l-8.533 4.267c-4.267 0-81.067 29.867-179.2 29.867-106.667 0-200.533-34.133-277.333-98.133-76.8 64-170.667 98.133-277.333 98.133-102.4 0-174.933-29.867-179.2-29.867l-12.8-4.267v-59.733c-34.133-4.267-51.2-17.067-51.2-34.133v-614.4h452.267c17.067-12.8 38.4-21.333 64-21.333s46.933 8.533 64 21.333h443.733v614.4c0 17.067-17.067 25.6-38.4 29.867v0zM512 145.067c-38.4 17.067-166.4 64-298.667 64-51.2 0-98.133-8.533-136.533-21.333v597.333c21.333 8.533 85.333 25.6 162.133 25.6 98.133 0 183.467-29.867 256-89.6v-358.4l17.067 17.067v-234.667zM955.733 183.467c-42.667 17.067-89.6 25.6-140.8 25.6-128 0-251.733-51.2-290.133-64v238.933l17.067-17.067v349.867c68.267 59.733 153.6 89.6 256 89.6 76.8 0 136.533-17.067 162.133-25.6v-597.333z" /> <glyph unicode="&#xe968;" glyph-name="wiki" d="M793.6 733.867c0 0 4.267 0 4.267 0l76.8 12.8v-42.667c0-34.133-21.333-68.267-46.933-72.533 0 0-4.267 0-4.267 0l-76.8-12.8v42.667c0 34.133 21.333 64 46.933 72.533zM742.4 597.333l38.4 4.267c12.8 0 25.6-12.8 25.6-29.867v-21.333l-38.4-4.267c-12.8 0-25.6 12.8-25.6 29.867v21.333zM618.667 699.733l68.267 8.533c25.6 4.267 42.667-21.333 42.667-55.467v-38.4l-68.267-8.533c-25.6-4.267-42.667 21.333-42.667 55.467v38.4zM665.6 588.8c4.267 0 4.267 0 0 0l59.733 4.267v-29.867c0-25.6-17.067-46.933-34.133-55.467 0 0-4.267 0-4.267 0l-55.467-8.533v29.867c4.267 29.867 17.067 51.2 34.133 59.733zM443.733 648.533c0 0-4.267 0-4.267 0-119.467 85.333-273.067 46.933-277.333 46.933s-8.533 0-12.8 8.533c0 4.267 0 8.533 8.533 12.8 0 0 42.667 12.8 98.133 8.533 51.2 0 128-12.8 196.267-59.733 4.267-4.267 4.267-8.533 4.267-12.8-4.267-4.267-8.533-4.267-12.8-4.267zM443.733 512c0 0-4.267 0-4.267 0-119.467 85.333-273.067 46.933-277.333 46.933s-8.533 0-12.8 8.533c0 4.267 0 8.533 8.533 12.8 0 0 42.667 12.8 98.133 8.533 51.2 0 128-12.8 196.267-59.733 4.267-4.267 4.267-8.533 4.267-12.8-4.267 0-8.533-4.267-12.8-4.267zM443.733 379.733c0 0-4.267 0-4.267 0-119.467 85.333-273.067 46.933-277.333 46.933s-8.533 0-12.8 8.533c0 4.267 0 8.533 8.533 12.8 0 0 42.667 12.8 98.133 8.533 51.2 0 128-12.8 196.267-59.733 4.267-4.267 4.267-8.533 4.267-12.8-4.267 0-8.533-4.267-12.8-4.267zM443.733 247.467c0 0-4.267 0-4.267 0-119.467 85.333-273.067 46.933-277.333 46.933s-8.533 0-12.8 8.533c0 4.267 0 8.533 8.533 12.8 0 0 42.667 12.8 98.133 8.533 51.2 0 128-12.8 196.267-59.733 4.267-4.267 4.267-8.533 4.267-12.8-4.267 0-8.533-4.267-12.8-4.267zM588.8 379.733c-4.267 0-4.267 0-8.533 4.267s0 8.533 4.267 12.8c68.267 46.933 140.8 59.733 196.267 59.733s93.867-8.533 98.133-8.533c4.267 0 8.533-8.533 8.533-12.8s-8.533-8.533-12.8-8.533v0c0 0-153.6 38.4-277.333-46.933-4.267 4.267-4.267 0-8.533 0zM588.8 247.467c-4.267 0-4.267 0-8.533 4.267s0 8.533 4.267 12.8c68.267 46.933 140.8 59.733 196.267 59.733s93.867-8.533 98.133-8.533c4.267 0 8.533-8.533 8.533-12.8s-8.533-8.533-12.8-8.533v0c0 0-153.6 38.4-277.333-46.933-4.267 4.267-4.267 0-8.533 0zM985.6 738.133v64l-8.533 4.267c-4.267 0-81.067 29.867-179.2 29.867-106.667 0-200.533-34.133-277.333-98.133-76.8 64-170.667 98.133-277.333 98.133-102.4 0-174.933-29.867-179.2-29.867l-12.8-4.267v-59.733c-34.133-4.267-51.2-17.067-51.2-34.133v-614.4h452.267c17.067-12.8 38.4-21.333 64-21.333s46.933 8.533 64 21.333h443.733v614.4c0 17.067-17.067 25.6-38.4 29.867v0zM512 145.067c-38.4 17.067-166.4 64-298.667 64-51.2 0-98.133-8.533-136.533-21.333v597.333c21.333 8.533 85.333 25.6 162.133 25.6 98.133 0 183.467-29.867 256-89.6v-358.4l17.067 17.067v-234.667zM955.733 183.467c-42.667 17.067-89.6 25.6-140.8 25.6-128 0-251.733-51.2-290.133-64v238.933l17.067-17.067v349.867c68.267 59.733 153.6 89.6 256 89.6 76.8 0 136.533-17.067 162.133-25.6v-597.333z" />
<glyph unicode="&#xe96c;" glyph-name="attach" d="M960 866.133c-42.667 42.667-98.133 64-157.867 64s-115.2-21.333-157.867-64l-593.067-593.067c-34.133-34.133-55.467-85.333-51.2-136.533 0-42.667 17.067-81.067 46.933-110.933 34.133-38.4 81.067-59.733 132.267-59.733 46.933 0 93.867 17.067 128 51.2l541.867 546.133c25.6 25.6 42.667 64 42.667 98.133s-12.8 68.267-38.4 93.867c-25.6 25.6-59.733 38.4-98.133 38.4-34.133 0-72.533-17.067-98.133-42.667l-354.133-354.133c-4.267 0-4.267-4.267-4.267-12.8s4.267-12.8 8.533-17.067 25.6-8.533 34.133 0l354.133 354.133c12.8 17.067 38.4 25.6 59.733 25.6 25.6 0 51.2-12.8 68.267-34.133 8.533-12.8 17.067-25.6 17.067-42.667 4.267-25.6-4.267-55.467-25.6-72.533l-541.867-541.867c-25.6-25.6-55.467-38.4-93.867-38.4-34.133 0-68.267 12.8-93.867 38.4s-38.4 59.733-38.4 93.867c0 34.133 12.8 68.267 38.4 93.867l588.8 584.533c34.133 34.133 76.8 51.2 123.733 51.2s89.6-17.067 123.733-51.2c34.133-34.133 51.2-76.8 51.2-123.733s-17.067-89.6-51.2-123.733l-401.067-401.067c-4.267-4.267-8.533-12.8-8.533-17.067 0-8.533 4.267-12.8 8.533-17.067 8.533-8.533 25.6-8.533 34.133 0l401.067 401.067c89.6 89.6 89.6 230.4 4.267 320z" /> <glyph unicode="&#xe96c;" glyph-name="attach" d="M960 866.133c-42.667 42.667-98.133 64-157.867 64s-115.2-21.333-157.867-64l-593.067-593.067c-34.133-34.133-55.467-85.333-51.2-136.533 0-42.667 17.067-81.067 46.933-110.933 34.133-38.4 81.067-59.733 132.267-59.733 46.933 0 93.867 17.067 128 51.2l541.867 546.133c25.6 25.6 42.667 64 42.667 98.133s-12.8 68.267-38.4 93.867c-25.6 25.6-59.733 38.4-98.133 38.4-34.133 0-72.533-17.067-98.133-42.667l-354.133-354.133c-4.267 0-4.267-4.267-4.267-12.8s4.267-12.8 8.533-17.067 25.6-8.533 34.133 0l354.133 354.133c12.8 17.067 38.4 25.6 59.733 25.6 25.6 0 51.2-12.8 68.267-34.133 8.533-12.8 17.067-25.6 17.067-42.667 4.267-25.6-4.267-55.467-25.6-72.533l-541.867-541.867c-25.6-25.6-55.467-38.4-93.867-38.4-34.133 0-68.267 12.8-93.867 38.4s-38.4 59.733-38.4 93.867c0 34.133 12.8 68.267 38.4 93.867l588.8 584.533c34.133 34.133 76.8 51.2 123.733 51.2s89.6-17.067 123.733-51.2c34.133-34.133 51.2-76.8 51.2-123.733s-17.067-89.6-51.2-123.733l-401.067-401.067c-4.267-4.267-8.533-12.8-8.533-17.067 0-8.533 4.267-12.8 8.533-17.067 8.533-8.533 25.6-8.533 34.133 0l401.067 401.067c89.6 89.6 89.6 230.4 4.267 320z" />
<glyph unicode="&#xe96d;" glyph-name="zone2" d="M98.133 17.067c-4.267 29.867-12.8 64-17.067 93.867-17.067 98.133-34.133 192-51.2 290.133-12.8 46.933-21.333 98.133-29.867 149.333 0 4.267 0 8.533 4.267 8.533 42.667 21.333 85.333 42.667 128 59.733 0 0 0 0 4.267 0 4.267-8.533 8.533-12.8 12.8-21.333-21.333-8.533-42.667-21.333-64-29.867-17.067-8.533-34.133-17.067-51.2-21.333-4.267 0-4.267-4.267-4.267-8.533 8.533-42.667 17.067-85.333 25.6-132.267 0-4.267 4.267-4.267 4.267-8.533 8.533-4.267 17.067-8.533 25.6-17.067 0-4.267-4.267-12.8-8.533-17.067-4.267 4.267-12.8 4.267-17.067 8.533 17.067-102.4 38.4-209.067 55.467-311.467 17.067 8.533 29.867 12.8 42.667 21.333 51.2 25.6 102.4 51.2 153.6 72.533 4.267 0 8.533 0 17.067 0 68.267-4.267 136.533-12.8 204.8-17.067 0 0 4.267 0 8.533 0-4.267 17.067-4.267 34.133-8.533 51.2-12.8 68.267-25.6 136.533-38.4 204.8 0 8.533-4.267 17.067-12.8 25.6-4.267 4.267-4.267 8.533-8.533 12.8 12.8 4.267 8.533 17.067 8.533 25.6-8.533 51.2-17.067 106.667-29.867 157.867 0 4.267 0 4.267-8.533 4.267-17.067 0-38.4 4.267-55.467 4.267 4.267 8.533 8.533 17.067 12.8 21.333 0 0 4.267 4.267 8.533 4.267 17.067 0 34.133-4.267 46.933-4.267 4.267 0 8.533 0 12.8 0 68.267 29.867 132.267 64 200.533 93.867 4.267 4.267 8.533 8.533 12.8 8.533 68.267-4.267 136.533-8.533 204.8-17.067 8.533 0 17.067 0 29.867-4.267 4.267 0 8.533-4.267 8.533-8.533 12.8-64 25.6-132.267 34.133-196.267 17.067-102.4 38.4-204.8 55.467-311.467 0-8.533 4.267-17.067 4.267-25.6-17.067 0-34.133 4.267-51.2 4.267-42.667 4.267-89.6 8.533-132.267 12.8-17.067 0-38.4 4.267-55.467 4.267-4.267 0-12.8 0-17.067-4.267-68.267-29.867-132.267-64-200.533-93.867 0 0-4.267 0-8.533 0-76.8 8.533-149.333 12.8-226.133 21.333-4.267 0-8.533 0-12.8 0-72.533-34.133-140.8-68.267-213.333-102.4 0-4.267 0-8.533-4.267-8.533zM989.867 217.6c0 4.267 0 4.267 0 8.533-8.533 34.133-12.8 72.533-21.333 106.667-8.533 46.933-17.067 89.6-25.6 136.533 0 8.533-4.267 12.8-8.533 17.067-8.533 4.267-12.8 12.8-21.333 17.067 4.267 8.533 8.533 12.8 12.8 17.067 4.267-4.267 8.533-4.267 12.8-8.533-4.267 12.8-4.267 21.333-4.267 34.133-8.533 46.933-17.067 93.867-25.6 145.067 0 4.267-4.267 8.533-8.533 8.533-68.267 4.267-136.533 12.8-209.067 17.067-4.267 0-8.533 0-12.8-4.267-64-29.867-123.733-59.733-187.733-85.333-4.267-4.267-8.533-4.267-4.267-12.8 4.267-29.867 12.8-64 17.067-93.867 4.267-21.333 8.533-42.667 12.8-59.733 12.8-4.267 12.8-12.8 21.333-21.333-12.8-4.267-12.8-12.8-12.8-25.6 12.8-68.267 25.6-132.267 38.4-200.533 4.267-25.6 8.533-51.2 12.8-76.8 4.267 0 4.267 0 8.533 4.267 59.733 29.867 119.467 59.733 183.467 89.6-4.267 4.267 0 4.267 4.267 4.267 51.2-4.267 106.667-8.533 157.867-12.8 21.333 0 38.4-4.267 59.733-4.267zM260.267 469.333c-12.8 17.067-25.6 34.133-38.4 46.933-29.867 46.933-59.733 93.867-85.333 145.067-12.8 29.867-21.333 64-17.067 102.4 8.533 51.2 34.133 85.333 81.067 102.4 55.467 21.333 123.733 8.533 162.133-34.133 34.133-34.133 42.667-76.8 34.133-123.733-8.533-42.667-25.6-76.8-46.933-115.2-25.6-42.667-55.467-81.067-85.333-123.733 0 4.267-4.267 0-4.267 0zM260.267 819.2c-46.933 0-81.067-34.133-81.067-81.067s38.4-81.067 81.067-81.067c46.933 0 81.067 38.4 85.333 81.067 0 42.667-38.4 81.067-85.333 81.067zM358.4 349.867c4.267-8.533 4.267-12.8 8.533-21.333-12.8-4.267-25.6-12.8-38.4-17.067-4.267 8.533-4.267 12.8-8.533 21.333 12.8 4.267 25.6 12.8 38.4 17.067zM226.133 302.933c0 8.533 4.267 17.067 4.267 21.333 12.8 0 25.6-4.267 38.4-4.267 0-8.533 0-12.8 0-25.6-12.8 8.533-29.867 8.533-42.667 8.533zM413.867 354.133c-4.267 8.533-8.533 12.8-12.8 21.333 12.8 8.533 21.333 17.067 34.133 25.6 4.267-4.267 8.533-12.8 12.8-17.067-12.8-12.8-21.333-21.333-34.133-29.867zM179.2 341.333c-4.267-8.533-4.267-12.8-8.533-21.333-12.8 4.267-25.6 8.533-38.4 17.067 4.267 8.533 4.267 12.8 8.533 21.333 12.8-8.533 25.6-12.8 38.4-17.067zM682.667 580.267c-12.8-8.533-21.333-17.067-34.133-21.333-4.267 4.267-8.533 12.8-12.8 17.067 12.8 8.533 25.6 17.067 38.4 25.6 4.267-8.533 4.267-17.067 8.533-21.333zM878.933 558.933c-4.267-8.533-8.533-12.8-12.8-21.333-12.8 8.533-25.6 17.067-34.133 21.333 4.267 8.533 8.533 12.8 8.533 21.333 12.8-8.533 25.6-17.067 38.4-21.333zM571.733 486.4c-4.267 4.267-8.533 12.8-12.8 17.067 8.533 8.533 21.333 21.333 29.867 29.867 4.267-4.267 8.533-12.8 12.8-17.067-8.533-8.533-17.067-21.333-29.867-29.867zM785.067 610.133c-4.267-8.533-4.267-17.067-8.533-21.333-12.8 0-25.6 4.267-38.4 4.267 0 8.533 0 12.8 0 21.333 17.067 0 29.867-4.267 46.933-4.267z" /> <glyph unicode="&#xe96d;" glyph-name="zone2" d="M98.133 17.067c-4.267 29.867-12.8 64-17.067 93.867-17.067 98.133-34.133 192-51.2 290.133-12.8 46.933-21.333 98.133-29.867 149.333 0 4.267 0 8.533 4.267 8.533 42.667 21.333 85.333 42.667 128 59.733 0 0 0 0 4.267 0 4.267-8.533 8.533-12.8 12.8-21.333-21.333-8.533-42.667-21.333-64-29.867-17.067-8.533-34.133-17.067-51.2-21.333-4.267 0-4.267-4.267-4.267-8.533 8.533-42.667 17.067-85.333 25.6-132.267 0-4.267 4.267-4.267 4.267-8.533 8.533-4.267 17.067-8.533 25.6-17.067 0-4.267-4.267-12.8-8.533-17.067-4.267 4.267-12.8 4.267-17.067 8.533 17.067-102.4 38.4-209.067 55.467-311.467 17.067 8.533 29.867 12.8 42.667 21.333 51.2 25.6 102.4 51.2 153.6 72.533 4.267 0 8.533 0 17.067 0 68.267-4.267 136.533-12.8 204.8-17.067 0 0 4.267 0 8.533 0-4.267 17.067-4.267 34.133-8.533 51.2-12.8 68.267-25.6 136.533-38.4 204.8 0 8.533-4.267 17.067-12.8 25.6-4.267 4.267-4.267 8.533-8.533 12.8 12.8 4.267 8.533 17.067 8.533 25.6-8.533 51.2-17.067 106.667-29.867 157.867 0 4.267 0 4.267-8.533 4.267-17.067 0-38.4 4.267-55.467 4.267 4.267 8.533 8.533 17.067 12.8 21.333 0 0 4.267 4.267 8.533 4.267 17.067 0 34.133-4.267 46.933-4.267 4.267 0 8.533 0 12.8 0 68.267 29.867 132.267 64 200.533 93.867 4.267 4.267 8.533 8.533 12.8 8.533 68.267-4.267 136.533-8.533 204.8-17.067 8.533 0 17.067 0 29.867-4.267 4.267 0 8.533-4.267 8.533-8.533 12.8-64 25.6-132.267 34.133-196.267 17.067-102.4 38.4-204.8 55.467-311.467 0-8.533 4.267-17.067 4.267-25.6-17.067 0-34.133 4.267-51.2 4.267-42.667 4.267-89.6 8.533-132.267 12.8-17.067 0-38.4 4.267-55.467 4.267-4.267 0-12.8 0-17.067-4.267-68.267-29.867-132.267-64-200.533-93.867 0 0-4.267 0-8.533 0-76.8 8.533-149.333 12.8-226.133 21.333-4.267 0-8.533 0-12.8 0-72.533-34.133-140.8-68.267-213.333-102.4 0-4.267 0-8.533-4.267-8.533zM989.867 217.6c0 4.267 0 4.267 0 8.533-8.533 34.133-12.8 72.533-21.333 106.667-8.533 46.933-17.067 89.6-25.6 136.533 0 8.533-4.267 12.8-8.533 17.067-8.533 4.267-12.8 12.8-21.333 17.067 4.267 8.533 8.533 12.8 12.8 17.067 4.267-4.267 8.533-4.267 12.8-8.533-4.267 12.8-4.267 21.333-4.267 34.133-8.533 46.933-17.067 93.867-25.6 145.067 0 4.267-4.267 8.533-8.533 8.533-68.267 4.267-136.533 12.8-209.067 17.067-4.267 0-8.533 0-12.8-4.267-64-29.867-123.733-59.733-187.733-85.333-4.267-4.267-8.533-4.267-4.267-12.8 4.267-29.867 12.8-64 17.067-93.867 4.267-21.333 8.533-42.667 12.8-59.733 12.8-4.267 12.8-12.8 21.333-21.333-12.8-4.267-12.8-12.8-12.8-25.6 12.8-68.267 25.6-132.267 38.4-200.533 4.267-25.6 8.533-51.2 12.8-76.8 4.267 0 4.267 0 8.533 4.267 59.733 29.867 119.467 59.733 183.467 89.6-4.267 4.267 0 4.267 4.267 4.267 51.2-4.267 106.667-8.533 157.867-12.8 21.333 0 38.4-4.267 59.733-4.267zM260.267 469.333c-12.8 17.067-25.6 34.133-38.4 46.933-29.867 46.933-59.733 93.867-85.333 145.067-12.8 29.867-21.333 64-17.067 102.4 8.533 51.2 34.133 85.333 81.067 102.4 55.467 21.333 123.733 8.533 162.133-34.133 34.133-34.133 42.667-76.8 34.133-123.733-8.533-42.667-25.6-76.8-46.933-115.2-25.6-42.667-55.467-81.067-85.333-123.733 0 4.267-4.267 0-4.267 0zM260.267 819.2c-46.933 0-81.067-34.133-81.067-81.067s38.4-81.067 81.067-81.067c46.933 0 81.067 38.4 85.333 81.067 0 42.667-38.4 81.067-85.333 81.067zM358.4 349.867c4.267-8.533 4.267-12.8 8.533-21.333-12.8-4.267-25.6-12.8-38.4-17.067-4.267 8.533-4.267 12.8-8.533 21.333 12.8 4.267 25.6 12.8 38.4 17.067zM226.133 302.933c0 8.533 4.267 17.067 4.267 21.333 12.8 0 25.6-4.267 38.4-4.267 0-8.533 0-12.8 0-25.6-12.8 8.533-29.867 8.533-42.667 8.533zM413.867 354.133c-4.267 8.533-8.533 12.8-12.8 21.333 12.8 8.533 21.333 17.067 34.133 25.6 4.267-4.267 8.533-12.8 12.8-17.067-12.8-12.8-21.333-21.333-34.133-29.867zM179.2 341.333c-4.267-8.533-4.267-12.8-8.533-21.333-12.8 4.267-25.6 8.533-38.4 17.067 4.267 8.533 4.267 12.8 8.533 21.333 12.8-8.533 25.6-12.8 38.4-17.067zM682.667 580.267c-12.8-8.533-21.333-17.067-34.133-21.333-4.267 4.267-8.533 12.8-12.8 17.067 12.8 8.533 25.6 17.067 38.4 25.6 4.267-8.533 4.267-17.067 8.533-21.333zM878.933 558.933c-4.267-8.533-8.533-12.8-12.8-21.333-12.8 8.533-25.6 17.067-34.133 21.333 4.267 8.533 8.533 12.8 8.533 21.333 12.8-8.533 25.6-17.067 38.4-21.333zM571.733 486.4c-4.267 4.267-8.533 12.8-12.8 17.067 8.533 8.533 21.333 21.333 29.867 29.867 4.267-4.267 8.533-12.8 12.8-17.067-8.533-8.533-17.067-21.333-29.867-29.867zM785.067 610.133c-4.267-8.533-4.267-17.067-8.533-21.333-12.8 0-25.6 4.267-38.4 4.267 0 8.533 0 12.8 0 21.333 17.067 0 29.867-4.267 46.933-4.267z" />

Before

Width:  |  Height:  |  Size: 115 KiB

After

Width:  |  Height:  |  Size: 120 KiB

View File

@ -16,6 +16,7 @@ export default function moduleImport(moduleName) {
case 'travel' : return import('travel/front'); case 'travel' : return import('travel/front');
case 'worker' : return import('worker/front'); case 'worker' : return import('worker/front');
case 'invoiceOut' : return import('invoiceOut/front'); case 'invoiceOut' : return import('invoiceOut/front');
case 'invoiceIn' : return import('invoiceIn/front');
case 'route' : return import('route/front'); case 'route' : return import('route/front');
case 'entry' : return import('entry/front'); case 'entry' : return import('entry/front');
case 'account' : return import('account/front'); case 'account' : return import('account/front');

View File

@ -1,10 +1,57 @@
<div> <div>
<div class="top-border">
<span translate>Favorites</span>
</div>
<div
ng-if="!$ctrl.starredCount"
class="starred-info vn-py-md">
<span translate class="empty">You can set modules as favorites by clicking their icon</span>
<vn-icon icon="push_pin"></vn-icon>
</div>
<div class="modules"> <div class="modules">
<a <a
ng-repeat="mod in ::$ctrl.modules" ng-repeat="mod in ::$ctrl.modules"
ng-if='mod.starred'
ui-sref="{{::mod.route.state}}" ui-sref="{{::mod.route.state}}"
translate-attr="{title: mod.name}" translate-attr="{title: mod.name}"
class="vn-shadow"> class="vn-shadow">
<div
vn-tooltip="Remove from favorites"
class="pin"
ng-click="$ctrl.toggleStarredModule(mod, $event)">
<vn-icon icon="remove_circle"></vn-icon>
</div>
<div>
<vn-icon icon="{{::mod.icon || 'photo'}}"></vn-icon>
</div>
<h4 ng-bind-html="$ctrl.getModuleName(mod)"></h4>
<span
ng-show="::mod.keyBind"
vn-tooltip="Ctrl + Alt + {{::mod.keyBind}}">
({{::mod.keyBind}})
</span>
<span ng-show="::!mod.keyBind">&nbsp;</span>
</a>
</div>
</div>
<div>
<div
class="top-border"
ng-if="$ctrl.regularCount > 0 && $ctrl.starredCount > 0">
</div>
<div class="modules">
<a
ng-repeat="mod in ::$ctrl.modules"
ng-if='!mod.starred'
ui-sref="{{::mod.route.state}}"
translate-attr="{title: mod.name}"
class="vn-shadow">
<div
vn-tooltip="Add to favorites"
class="pin"
ng-click="$ctrl.toggleStarredModule(mod, $event)">
<vn-icon icon="push_pin"></vn-icon>
</div>
<div> <div>
<vn-icon icon="{{::mod.icon || 'photo'}}"></vn-icon> <vn-icon icon="{{::mod.icon || 'photo'}}"></vn-icon>
</div> </div>

View File

@ -9,6 +9,55 @@ export default class Controller extends Component {
this.$sce = $sce; this.$sce = $sce;
} }
get modules() {
return this._modules;
}
set modules(value) {
this._modules = value;
this.getStarredModules();
}
countModules() {
this.starredCount = 0;
this.regularCount = 0;
this.modules.forEach(module => {
if (module.starred) this.starredCount ++;
else this.regularCount ++;
});
}
getStarredModules() {
this.$http.get('starredModules/getStarredModules')
.then(res => {
if (!res.data.length) return;
for (let starredModule of res.data) {
const module = this.modules.find(mod => mod.name === starredModule.moduleFk);
module.starred = true;
}
this.countModules();
});
}
toggleStarredModule(module, event) {
if (event.defaultPrevented) return;
event.preventDefault();
event.stopPropagation();
const params = {moduleName: module.name};
const query = `starredModules/toggleStarredModule`;
this.$http.post(query, params).then(res => {
if (res.data)
module.starred = true;
else
module.starred = false;
this.vnApp.showSuccess(this.$t('Data saved!'));
this.countModules();
});
}
getModuleName(mod) { getModuleName(mod) {
let getName = mod => { let getName = mod => {
let name = this.$t(mod.name); let name = this.$t(mod.name);

View File

@ -0,0 +1,75 @@
import './home';
describe('Salix Component vnHome', () => {
let controller;
let $httpBackend;
let $scope;
let $element;
beforeEach(ngModule('salix'));
beforeEach(inject(($componentController, $rootScope, _$httpBackend_, _vnApp_, $window) => {
$httpBackend = _$httpBackend_;
$scope = $rootScope.$new();
$element = angular.element('<vn-home></vn-home>');
$window.routes = [{module: 'client', name: 'Clients'}];
controller = $componentController('vnHome', {$element, $scope, $window});
}));
describe('getStarredModules()', () => {
it('should not set any of the modules as starred if there are no starred modules for the user', () => {
const expectedResponse = [];
controller._modules = [{module: 'client', name: 'Clients'}];
$httpBackend.whenRoute('GET', 'starredModules/getStarredModules').respond(expectedResponse);
$httpBackend.expectGET('starredModules/getStarredModules').respond(expectedResponse);
controller.getStarredModules();
$httpBackend.flush();
expect(controller._modules.length).toEqual(1);
expect(controller._modules[0].starred).toBeUndefined();
});
it('should set the example module as starred since its the starred module for the user', () => {
const expectedResponse = [{id: 1, moduleFk: 'Clients', workerFk: 9}];
controller._modules = [{module: 'client', name: 'Clients'}];
$httpBackend.whenRoute('GET', 'starredModules/getStarredModules').respond(expectedResponse);
$httpBackend.expectGET('starredModules/getStarredModules').respond(expectedResponse);
controller.getStarredModules();
$httpBackend.flush();
expect(controller._modules.length).toEqual(1);
expect(controller._modules[0].starred).toBe(true);
});
});
describe('toggleStarredModule()', () => {
it(`should set the received module as starred if it wasn't starred`, () => {
const expectedResponse = [{id: 1, moduleFk: 'Clients', workerFk: 9}];
const event = new Event('target');
controller._modules = [{module: 'client', name: 'Clients'}];
$httpBackend.whenRoute('GET', 'starredModules/getStarredModules').respond(expectedResponse);
$httpBackend.expectPOST('starredModules/toggleStarredModule').respond(expectedResponse);
controller.toggleStarredModule(controller._modules[0], event);
$httpBackend.flush();
expect(controller._modules.length).toEqual(1);
expect(controller._modules[0].starred).toBe(true);
});
it(`should set the received module as regular if it was starred`, () => {
const event = new Event('target');
controller._modules = [{module: 'client', name: 'Clients', starred: true}];
$httpBackend.whenRoute('GET', 'starredModules/getStarredModules').respond([]);
$httpBackend.expectPOST('starredModules/toggleStarredModule').respond(undefined);
controller.toggleStarredModule(controller._modules[0], event);
$httpBackend.flush();
expect(controller._modules.length).toEqual(1);
expect(controller._modules[0].starred).toBe(false);
});
});
});

View File

@ -0,0 +1,4 @@
Favorites: Favoritos
You can set modules as favorites by clicking their icon: Puedes establecer módulos como favoritos haciendo clic en el icono
Add to favorites: Añadir a favoritos.
Remove from favorites: Quitar de favoritos.

View File

@ -10,28 +10,76 @@ vn-home {
text-align: center; text-align: center;
margin-bottom: 15px; margin-bottom: 15px;
} }
& > .modules {
display: flex; & .starred-info{
flex: 1; display: block;
text-align: center;
box-sizing: border-box;
color: $color-font-secondary;
font-size: 1.375rem;
& > .empty {
text-align: center;
box-sizing: border-box;
color: $color-font-secondary;
font-size: 1em;
}
& > vn-icon {
font-size: 1.2rem;
}
}
& > .top-border {
margin: 0 auto;
flex-direction: row; flex-direction: row;
justify-content: center; float: center;
max-width: 690px;
border-bottom: 2px solid $color-font-secondary;
line-height: 2px;
> span {
height: 10px;
margin-left: 30px;
background-color: $color-bg;
padding:0 11px;
}
}
& > .modules {
padding: 10px 0 10px 0;
display: flex;
flex-wrap: wrap; flex-wrap: wrap;
flex: 1;
max-width: 704px; max-width: 704px;
margin: 0 auto; margin: 0 auto;
& > a { & > a {
@extend %clickable-light; @extend %clickable-light;
overflow:hidden;
border-radius: 6px;
background-color: $color-button;
color: $color-font-dark;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
overflow:hidden;
justify-content: center;
border-radius: 6px;
height: 128px; height: 128px;
width: 128px; width: 128px;
margin: 8px; margin: 8px;
padding: 16px; padding: 16px;
justify-content: center; background-color: $color-button;
color: $color-font-dark;
& .pin {
opacity: 0;
flex-direction: row;
justify-content: left;
height: 20px;
width: 20px;
vn-icon {
margin: auto;
font-size: 1.5rem;
}
}
&:hover .pin {
opacity: 1;
}
& > div { & > div {
height: 70px; height: 70px;
@ -56,10 +104,6 @@ vn-home {
color: inherit; color: inherit;
margin: 0; margin: 0;
line-height: 24px; line-height: 24px;
/* & > .bind-letter {
color: #FD0;
} */
} }
} }
} }

View File

@ -43,6 +43,7 @@ Workers: Trabajadores
Routes: Rutas Routes: Rutas
Locator: Localizador Locator: Localizador
Invoices out: Facturas emitidas Invoices out: Facturas emitidas
Invoices in: Fact. recibidas
Entries: Entradas Entries: Entradas
Users: Usuarios Users: Usuarios
Suppliers: Proveedores Suppliers: Proveedores

View File

@ -6,6 +6,7 @@ import './modules/zone/front/module.js';
import './modules/claim/front/module.js'; import './modules/claim/front/module.js';
import './modules/client/front/module.js'; import './modules/client/front/module.js';
import './modules/invoiceOut/front/module.js'; import './modules/invoiceOut/front/module.js';
import './modules/invoiceIn/front/module.js';
import './modules/item/front/module.js'; import './modules/item/front/module.js';
import './modules/order/front/module.js'; import './modules/order/front/module.js';
import './modules/route/front/module.js'; import './modules/route/front/module.js';

View File

@ -92,5 +92,6 @@
"New ticket request has been created with price": "New ticket request has been created *'{{description}}'* for day *{{shipped}}*, with a quantity of *{{quantity}}* and a price of *{{price}} €*", "New ticket request has been created with price": "New ticket request has been created *'{{description}}'* for day *{{shipped}}*, with a quantity of *{{quantity}}* and a price of *{{price}} €*",
"New ticket request has been created": "New ticket request has been created *'{{description}}'* for day *{{shipped}}*, with a quantity of *{{quantity}}*", "New ticket request has been created": "New ticket request has been created *'{{description}}'* for day *{{shipped}}*, with a quantity of *{{quantity}}*",
"There's a new urgent ticket": "There's a new urgent ticket: [{{title}}](https://cau.verdnatura.es/WorkOrder.do?woMode=viewWO&woID={{issueId}})", "There's a new urgent ticket": "There's a new urgent ticket: [{{title}}](https://cau.verdnatura.es/WorkOrder.do?woMode=viewWO&woID={{issueId}})",
"Swift / BIC cannot be empty": "Swift / BIC cannot be empty" "Swift / BIC cannot be empty": "Swift / BIC cannot be empty",
"Role name must be written in camelCase": "Role name must be written in camelCase"
} }

View File

@ -174,5 +174,7 @@
"That item doesn't exists": "Ese artículo no existe", "That item doesn't exists": "Ese artículo no existe",
"There's a new urgent ticket": "Hay un nuevo ticket urgente: [{{title}}](https://cau.verdnatura.es/WorkOrder.do?woMode=viewWO&woID={{issueId}})", "There's a new urgent ticket": "Hay un nuevo ticket urgente: [{{title}}](https://cau.verdnatura.es/WorkOrder.do?woMode=viewWO&woID={{issueId}})",
"Invalid account": "Cuenta inválida", "Invalid account": "Cuenta inválida",
"Compensation account is empty": "La cuenta para compensar está vacia" "Compensation account is empty": "La cuenta para compensar está vacia",
"This genus already exist": "Este genus ya existe",
"This specie already exist": "Esta especie ya existe"
} }

View File

@ -0,0 +1,171 @@
const ParameterizedSQL = require('loopback-connector').ParameterizedSQL;
const buildFilter = require('vn-loopback/util/filter').buildFilter;
const mergeFilters = require('vn-loopback/util/filter').mergeFilters;
module.exports = Self => {
Self.remoteMethodCtx('filter', {
description: 'Find all instances of the model matched by filter from the data source.',
accessType: 'READ',
accepts: [
{
arg: 'filter',
type: 'object',
description: 'Filter defining where, order, offset, and limit - must be a JSON-encoded string',
http: {source: 'query'}
},
{
arg: 'search',
type: 'string',
description: 'Searchs the invoiceOut by id',
http: {source: 'query'}
},
{
arg: 'supplierRef',
type: 'string',
description: 'The supplier reference'
},
{
arg: 'fi',
type: 'string',
description: 'The supplier fiscal id'
},
{
arg: 'serialNumber',
type: 'number',
description: 'The serial number'
},
{
arg: 'serial',
type: 'string',
description: 'The serial'
},
{
arg: 'amount',
type: 'number',
description: 'The amount'
},
{
arg: 'from',
type: 'date',
description: `The from date filter`
}, {
arg: 'to',
type: 'date',
description: `The to date filter`
},
{
arg: 'issued',
type: 'date',
description: 'The issued date'
},
{
arg: 'account',
type: 'number',
description: 'The account number'
},
{
arg: 'awbCode',
type: 'string',
description: 'The Air Waybill code'
},
{
arg: 'isBooked',
type: 'boolean',
description: 'Whether the the invoice is booked or not',
},
],
returns: {
type: ['object'],
root: true
},
http: {
path: `/filter`,
verb: 'GET'
}
});
Self.filter = async(ctx, filter) => {
const conn = Self.dataSource.connector;
const args = ctx.args;
if (args && args.to) {
const dateTo = args.to;
dateTo.setHours(23, 59, 0, 0);
}
let where = buildFilter(ctx.args, (param, value) => {
switch (param) {
case 'search':
return /^\d+$/.test(value)
? {'ii.id': value}
: {'s.name': {like: `%${value}%`}};
case 'from':
return {'ii.created': {gte: value}};
case 'to':
return {'ii.created': {lte: value}};
case 'account':
case 'fi':
return {[`s.${param}`]: value};
case 'supplierRef':
case 'serialNumber':
case 'serial':
case 'issued':
case 'isBooked':
return {[`ii.${param}`]: value};
case 'awbCode':
return {'awb.code': value};
}
});
filter = mergeFilters(filter, {where});
let stmts = [];
let stmt;
stmt = new ParameterizedSQL(
`SELECT
ii.id,
ii.serialNumber,
ii.serial,
ii.issued,
ii.isBooked,
ii.supplierRef,
ii.docFk AS dmsFk,
s.id AS supplierFk,
s.name AS supplierName,
s.account,
SUM(iid.amount) AS amount,
awb.code AS awbCode
FROM invoiceIn ii
JOIN supplier s ON s.id = ii.supplierFk
LEFT JOIN invoiceInDueDay iid ON iid.invoiceInFk = ii.id
LEFT JOIN duaInvoiceIn dii ON dii.invoiceInFk = ii.id
LEFT JOIN dua d ON d.id = dii.duaFk
LEFT JOIN awb ON awb.id = d.awbFk
LEFT JOIN company co ON co.id = ii.companyFk`
);
const sqlWhere = conn.makeWhere(filter.where);
stmt.merge(sqlWhere);
stmt.merge(`GROUP BY ii.id`);
const amount = ctx.args.amount;
if (amount) {
stmt.merge({
sql: `HAVING SUM(iid.amount) = ?`,
params: [amount],
});
}
stmt.merge(conn.makePagination(filter));
let itemsIndex = stmts.push(stmt) - 1;
let sql = ParameterizedSQL.join(stmts, ';');
let result = await conn.executeStmt(sql);
return itemsIndex === 0 ? result : result[itemsIndex];
};
};

View File

@ -0,0 +1,111 @@
const app = require('vn-loopback/server/server');
describe('InvoiceIn filter()', () => {
it('should return the invoice in matching supplier name', async() => {
let ctx = {
args: {
search: 'Plants SL',
}
};
let result = await app.models.InvoiceIn.filter(ctx);
expect(result.length).toEqual(5);
expect(result[0].supplierName).toEqual('Plants SL');
});
it('should return the invoice in matching supplier reference', async() => {
let ctx = {
args: {
supplierRef: '1241',
}
};
let result = await app.models.InvoiceIn.filter(ctx);
expect(result.length).toEqual(1);
expect(result[0].supplierRef).toEqual('1241');
});
it('should return the invoice in matching the serial number', async() => {
let ctx = {
args: {
serialNumber: '1002',
}
};
let result = await app.models.InvoiceIn.filter(ctx);
expect(result.length).toEqual(1);
expect(result[0].serialNumber).toEqual(1002);
});
it('should return the invoice in matching the account', async() => {
let ctx = {
args: {
account: '4000020002',
}
};
let result = await app.models.InvoiceIn.filter(ctx);
expect(result.length).toEqual(5);
expect(result[0].account).toEqual('4000020002');
});
it('should return the invoice in matching the awb code', async() => {
let ctx = {
args: {
awbCode: '07546491432',
}
};
let result = await app.models.InvoiceIn.filter(ctx);
const firstRow = result[0];
expect(result.length).toEqual(1);
expect(firstRow.id).toEqual(7);
expect(firstRow.awbCode).toEqual('07546491432');
});
it('should return the invoice in matching the amount', async() => {
let ctx = {
args: {
amount: '64.23',
}
};
let result = await app.models.InvoiceIn.filter(ctx);
expect(result.length).toEqual(1);
expect(result[0].amount).toEqual(64.23);
});
it('should return the invoice in matching "from" and "to"', async() => {
const from = new Date();
const to = new Date();
from.setHours(0, 0, 0, 0);
to.setHours(23, 59, 59, 999);
to.setDate(to.getDate() + 1);
const ctx = {
args: {from, to}
};
const result = await app.models.InvoiceIn.filter(ctx);
expect(result.length).toEqual(6);
});
it('should return the booked invoice in', async() => {
let ctx = {
args: {
isBooked: true,
}
};
let result = await app.models.InvoiceIn.filter(ctx);
expect(result.length).toEqual(6);
expect(result[0].isBooked).toBeTruthy();
});
});

View File

@ -0,0 +1,5 @@
{
"InvoiceIn": {
"dataSource": "vn"
}
}

View File

@ -0,0 +1,3 @@
module.exports = Self => {
require('../methods/invoice-in/filter')(Self);
};

View File

@ -0,0 +1,67 @@
{
"name": "InvoiceIn",
"base": "VnModel",
"options": {
"mysql": {
"table": "invoiceIn"
}
},
"properties": {
"id": {
"id": true,
"type": "Number",
"description": "Identifier"
},
"serialNumber": {
"type": "number"
},
"serial": {
"type": "string"
},
"issued": {
"type": "date"
},
"created": {
"type": "date"
},
"isBooked": {
"type": "boolean"
},
"booked": {
"type": "date"
},
"operated": {
"type": "date"
},
"dmsFk": {
"type": "number",
"mysql": {
"columnName": "docFk"
}
}
},
"relations": {
"company": {
"type": "belongsTo",
"model": "Company",
"foreignKey": "companyFk"
},
"supplier": {
"type": "belongsTo",
"model": "Supplier",
"foreignKey": "supplierFk"
},
"currency": {
"type": "belongsTo",
"model": "Currency",
"foreignKey": "currencyFk"
},
"dms": {
"type": "belongsTo",
"model": "Dms",
"foreignKey": "dmsFk"
}
}
}

View File

@ -0,0 +1,5 @@
<vn-portal slot="menu">
<vn-invoice-in-descriptor invoice-in="$ctrl.invoiceIn"></vn-invoice-in-descriptor>
<vn-left-menu source="card"></vn-left-menu>
</vn-portal>
<ui-view></ui-view>

View File

@ -0,0 +1,17 @@
import ngModule from '../module';
import ModuleCard from 'salix/components/module-card';
class Controller extends ModuleCard {
reload() {
const filter = {};
this.$http.get(`InvoiceIns/${this.$params.id}`, {filter})
.then(res => this.invoiceIn = res.data);
}
}
ngModule.vnComponent('vnInvoiceInCard', {
template: require('./index.html'),
controller: Controller
});

View File

@ -0,0 +1,27 @@
import './index.js';
describe('vnInvoiceIn', () => {
let controller;
let $httpBackend;
let data = {id: 1, name: 'fooName'};
beforeEach(ngModule('invoiceIn'));
beforeEach(inject(($componentController, _$httpBackend_, $stateParams) => {
$httpBackend = _$httpBackend_;
let $element = angular.element('<div></div>');
controller = $componentController('vnInvoiceInCard', {$element});
$stateParams.id = data.id;
$httpBackend.whenRoute('GET', 'InvoiceIns/:id').respond(data);
}));
it('should request data and set it on the controller', () => {
controller.reload();
$httpBackend.flush();
expect(controller.invoiceIn).toEqual(data);
});
});

View File

@ -0,0 +1,4 @@
<slot-descriptor>
<vn-invoice-in-descriptor>
</vn-invoice-in-descriptor>
</slot-descriptor>

View File

@ -0,0 +1,9 @@
import ngModule from '../module';
import DescriptorPopover from 'salix/components/descriptor-popover';
class Controller extends DescriptorPopover {}
ngModule.vnComponent('vnInvoiceInDescriptorPopover', {
slotTemplate: require('./index.html'),
controller: Controller
});

View File

@ -0,0 +1,36 @@
import ngModule from '../module';
import Descriptor from 'salix/components/descriptor';
class Controller extends Descriptor {
get invoiceIn() {
return this.entity;
}
set invoiceIn(value) {
this.entity = value;
}
loadData() {
const filter = {
include: [
{
relation: 'company',
scope: {
fields: ['id', 'code']
}
}
]
};
return this.getData(`InvoiceIns/${this.id}`, {filter})
.then(res => this.entity = res.data);
}
}
ngModule.vnComponent('vnInvoiceInDescriptor', {
template: require('./index.html'),
controller: Controller,
bindings: {
invoiceIn: '<'
}
});

View File

@ -0,0 +1,26 @@
import './index';
describe('vnInvoiceInDescriptor', () => {
let controller;
let $httpBackend;
beforeEach(ngModule('invoiceIn'));
beforeEach(inject(($componentController, _$httpBackend_) => {
$httpBackend = _$httpBackend_;
controller = $componentController('vnInvoiceInDescriptor', {$element: null});
}));
describe('loadData()', () => {
it(`should perform a get query to store the invoice in data into the controller`, () => {
const id = 1;
const response = {id: 1};
$httpBackend.expectGET(`InvoiceIns/${id}`).respond(response);
controller.id = id;
$httpBackend.flush();
expect(controller.invoiceIn).toEqual(response);
});
});
});

View File

@ -0,0 +1,8 @@
export * from './module';
import './main';
import './index/';
import './search-panel';
import './card';
import './descriptor';
import './descriptor-popover';

View File

@ -0,0 +1,102 @@
<vn-auto-search
model="model">
</vn-auto-search>
<vn-data-viewer
model="model"
class="vn-w-lg">
<vn-card>
<vn-table model="model">
<vn-thead>
<vn-tr>
<vn-th field="id">ID</vn-th>
<vn-th field="supplierFk">Supplier</vn-th>
<vn-th field="supplierRef">Supplier ref.</vn-th>
<vn-th field="serialNumber">Serial number</vn-th>
<vn-th field="serial">Serial</vn-th>
<vn-th field="account">Account</vn-th>
<vn-th field="issued" expand>Issued</vn-th>
<vn-th field="isBooked" center>Is booked</vn-th>
<vn-th field="awbCode" vn-tooltip="Air Waybill">AWB</vn-th>
<vn-th field="amount" filter-enabled="false">Amount</vn-th>
<vn-th></vn-th>
</vn-tr>
</vn-thead>
<vn-tbody>
<a ng-repeat="invoiceIn in model.data"
class="clickable vn-tr search-result">
<vn-td>{{::invoiceIn.id}}</vn-td>
<vn-td>
<span
class="link"
vn-click-stop="supplierDescriptor.show($event, invoiceIn.supplierFk)">
{{::invoiceIn.supplierName}}
</span>
</vn-td>
<vn-td>{{::invoiceIn.supplierRef | dashIfEmpty}}</vn-td>
<vn-td>{{::invoiceIn.serialNumber}}</vn-td>
<vn-td>{{::invoiceIn.serial}}</vn-td>
<vn-td>{{::invoiceIn.account}}</vn-td>
<vn-td expand>{{::invoiceIn.issued | date:'dd/MM/yyyy' | dashIfEmpty}}</vn-td>
<vn-td center>
<vn-check disabled="true"
ng-model="invoiceIn.isBooked">
</vn-check>
</vn-td>
<vn-td>{{::invoiceIn.awbCode}}</vn-td>
<vn-td>{{::invoiceIn.amount | currency:'EUR'}}</vn-td>
<vn-td shrink>
<vn-icon-button
vn-click-stop="$ctrl.preview(invoiceIn)"
vn-tooltip="Preview"
icon="preview">
</vn-icon-button>
<vn-icon-button
ng-show="invoiceIn.dmsFk"
vn-click-stop="$ctrl.openPdf(invoiceIn.dmsFk)"
icon="cloud_download"
title="Download PDF"
vn-tooltip="Download PDF">
</vn-icon-button>
</vn-td>
</a>
</vn-tbody>
</vn-table>
</vn-card>
</vn-data-viewer>
<vn-popup vn-id="summary">
<vn-invoice-in-summary
invoice-in="$ctrl.selectedinvoiceIn">
</vn-invoice-in-summary>
</vn-popup>
<vn-supplier-descriptor-popover
vn-id="supplierDescriptor">
</vn-supplier-descriptor-popover>
<vn-contextmenu vn-id="contextmenu" targets="['vn-data-viewer']" model="model"
expr-builder="$ctrl.exprBuilder(param, value)">
<slot-menu>
<vn-item translate
ng-if="contextmenu.isFilterAllowed()"
ng-click="contextmenu.filterBySelection()">
Filter by selection
</vn-item>
<vn-item translate
ng-if="contextmenu.isFilterAllowed()"
ng-click="contextmenu.excludeSelection()">
Exclude selection
</vn-item>
<vn-item translate
ng-if="contextmenu.isFilterAllowed()"
ng-click="contextmenu.removeFilter()">
Remove filter
</vn-item>
<vn-item translate
ng-click="contextmenu.removeAllFilters()">
Remove all filters
</vn-item>
<vn-item translate
ng-if="contextmenu.isActionAllowed()"
ng-click="contextmenu.copyValue()">
Copy value
</vn-item>
</slot-menu>
</vn-contextmenu>

View File

@ -0,0 +1,42 @@
import ngModule from '../module';
import Section from 'salix/components/section';
export default class Controller extends Section {
exprBuilder(param, value) {
switch (param) {
case 'issued':
return {'ii.issued': {
between: this.dateRange(value)}
};
case 'id':
case 'supplierFk':
case 'supplierRef':
case 'serialNumber':
case 'serial':
case 'created':
case 'isBooked':
return {[`ii.${param}`]: value};
case 'account':
case 'fi':
return {[`s.${param}`]: value};
case 'awbCode':
return {'awb.code': value};
default:
return {[param]: value};
}
}
dateRange(value) {
const minHour = new Date(value);
minHour.setHours(0, 0, 0, 0);
const maxHour = new Date(value);
maxHour.setHours(23, 59, 59, 59);
return [minHour, maxHour];
}
}
ngModule.vnComponent('vnInvoiceInIndex', {
template: require('./index.html'),
controller: Controller
});

View File

@ -0,0 +1,6 @@
Created: Fecha creación
Issued: Fecha emisión
Supplier ref.: Ref. proveedor
Serial number: Num. serie
Serial: Serie
Is booked: Conciliada

View File

@ -0,0 +1,2 @@
InvoiceIn: Facturas recibidas
Search invoices in by reference: Buscar facturas recibidas por referencia

View File

@ -0,0 +1,18 @@
<vn-crud-model
vn-id="model"
url="InvoiceIns/filter"
limit="20"
order="isBooked, issued DESC">
</vn-crud-model>
<vn-portal slot="topbar">
<vn-searchbar
vn-focus
panel="vn-invoice-in-search-panel"
info="Search invoices in by reference"
model="model">
</vn-searchbar>
</vn-portal>
<vn-portal slot="menu">
<vn-left-menu></vn-left-menu>
</vn-portal>
<ui-view></ui-view>

View File

@ -0,0 +1,9 @@
import ngModule from '../module';
import ModuleMain from 'salix/components/module-main';
export default class InvoiceIn extends ModuleMain {}
ngModule.vnComponent('vnInvoiceIn', {
controller: InvoiceIn,
template: require('./index.html')
});

View File

@ -0,0 +1,3 @@
import {ng} from 'core/vendor';
export default ng.module('invoiceIn', ['vnCore']);

View File

@ -0,0 +1,44 @@
{
"module": "invoiceIn",
"name": "Invoices in",
"icon": "icon-invoiceIn",
"validations" : true,
"dependencies": ["worker", "supplier"],
"menus": {
"main": [
{"state": "invoiceIn.index", "icon": "icon-invoiceIn"}
]
},
"routes": [
{
"url": "/invoice-in",
"state": "invoiceIn",
"abstract": true,
"component": "vn-invoice-in",
"description": "InvoiceIn"
},
{
"url": "/index?q",
"state": "invoiceIn.index",
"component": "vn-invoice-in-index",
"description": "InvoiceIn",
"acl": ["administrative"]
},
{
"url": "/:id",
"state": "invoiceIn.card",
"abstract": true,
"component": "vn-invoice-in-card"
},
{
"url": "/summary",
"state": "invoiceIn.card.summary",
"component": "vn-invoice-in-summary",
"description": "Summary",
"params": {
"invoice-In": "$ctrl.invoiceIn"
},
"acl": ["developer"]
}
]
}

View File

@ -0,0 +1,82 @@
<div class="search-panel">
<form ng-submit="$ctrl.onSearch()">
<vn-horizontal>
<vn-textfield
vn-one
label="General search"
ng-model="filter.search"
info="Search invoices in by id or supplier fiscal name"
vn-focus>
</vn-textfield>
</vn-horizontal>
<vn-horizontal>
<vn-textfield
vn-one
label="Supplier ref."
ng-model="filter.supplierRef">
</vn-textfield>
<vn-textfield
vn-one
label="Supplier fiscal id"
ng-model="filter.fi">
</vn-textfield>
</vn-horizontal>
<vn-horizontal>
<vn-textfield
vn-one
label="Account"
ng-model="filter.account">
</vn-textfield>
<vn-textfield
vn-one
label="Amount"
ng-model="filter.amount">
</vn-textfield>
</vn-horizontal>
<vn-horizontal>
<vn-date-picker
vn-one
label="From"
ng-model="filter.from">
</vn-date-picker>
<vn-date-picker
vn-one
label="To"
ng-model="filter.to">
</vn-date-picker>
<vn-date-picker
vn-one
label="Issued"
ng-model="filter.issued">
</vn-date-picker>
</vn-horizontal>
<vn-horizontal>
<vn-textfield
vn-one
label="Serial number"
ng-model="filter.serialNumber">
</vn-textfield>
<vn-textfield
vn-one
label="Serial"
ng-model="filter.serial">
</vn-textfield>
<vn-textfield
vn-one
label="AWB"
ng-model="filter.awbCode">
</vn-textfield>
</vn-horizontal>
<vn-horizontal>
<vn-check
vn-one
triple-state="true"
label="Is booked"
ng-model="filter.isBooked">
</vn-check>
</vn-horizontal>
<vn-horizontal class="vn-mt-lg">
<vn-submit label="Search"></vn-submit>
</vn-horizontal>
</form>
</div>

Some files were not shown because too many files have changed in this diff Show More