TODO
$ sudo apt-get install barcode $ wget http://www.ashberg.de/php-barcode/download/files/genbarcode-0.4.tar.gz $ tar xvzf genbarcode-0.4.tar.gz $ cd genbarcode-0.4/ $ sudo apt-get install make $ make $ sudo make install
Per tal de poder enviar la recuperació de paraules de pas per correu electrònics cal tenir un MTA instal·lat. A Ubuntu podeu instal·lar Postfix amb:
$ sudo tasksel
I Instal·leu el servidor de correu
Llegiu primer l'apartat requeriments.
IMPORTANT: Des de l'agost de 2013, ebre-inventory no incorpora de sèrie code-igniter i per tant el pas previ és instal·lar codeigniter. Vegeu:
Code igniter instal·lació per a múltiples aplicacions
També cal instal·lar el language pack en català seguint les passes de:
Code Igniter traducció al català
Cal tenir un servidor amb LAMP instal·lat i un servidor Ldap si es vol utilitzar Ldap. Per instal·lar un servidor LAMP podeu executar:
$ sudo apt-get install tasksel $ sudo tasksel install lamp-server
Vegeu LAMP, tasksel i Ubuntu Server per a més informació.
Per instal·lar un servidor Ldap us recomanem utilitzar OpenLdap. El podeu instal·lar sol seguint els passos de l'article Ldap () o podeu instal·lar un Ldap més l'aplició web Gosa. En aquest últim cas, l'aplicació installgosa seguint els passos de:
Instal·lació d'install-gosa
NOTA: Per a més informació de com crear un servidor de gestió d'usuaris amb Ldap podeu consultar OpenFPnet. Servidor centralitzat de gestió d'usuaris
Escolliu una carpeta on fer la instal·lació, al nostre exemple:
/usr/share/ebre-inventory
La URL de l'exemple:
http://www.ebretic.com/ebre-inventory/
Com a requeriments també cal instal·lar la llibreria Ldap de PHP:
$ sudo apt-get install php5-ldap $ sudo /etc/init.d/apache2 reload
També cal configurar Apache per tal d'apuntar la URL:
/ebre-inventory
Del vostre servidor web a la carpeta:
/usr/share/ebre-inventory
Per això poden crear un fitxer:
$ sudo joe /etc/apache2/conf.d/ebreinventory
NOTA: Si utilitzeu Virtual hosts d'Apache la configuració és lleugerament diferent
I poseu:
Alias /ebre-inventory /usr/share/ebre-inventory
I apliqueu els canvis:
$ sudo /etc/init.d/apache2 reload
Coloqueu-vos a la carpeta on voleu fer la instal·lació, per exemple:
$ cd /usr/share
Feu un clone del repositori git per obtenir la última versió:
$ sudo apt-get install git $ sudo git clone https://github.com/acacha/ebre-inventory.git
.NOTA: A la URL https://github.com/acacha/ebre-inventory es pot també obtenir un zip
Ara cal que instal·leu les llibreries de tercers que utilitza l'aplicació: grocery-crud, image-crud i qrcode
Aquestes llibreries s'instal·len a la carpeta application/third_party:
$ cd /usr/share/ebre-inventory/application/third_party
Heu de crear dos carpetes amb els noms grocery-crud i image-crud a on posar el codi d'estes llibreries. Es pot obtenir el codi des de les corresponents webs (fitxers zip i descomprimir) o es pot fer un clone dels repositoris git:
$ sudo git clone https://github.com/acacha/grocery-crud $ sudo git clone https://github.com/scoumbourdis/image-crud $ sudo git clone https://github.com/dwisetiyadi/CodeIgniter-PHP-QR-Code
NOTA: Si voleu fer modificacions a les llibreries de tercers potser preferireu fer el clone a un fork propi de github de les llibreries
Ara cal crear i configurar la base de dades:
Per crear la base de dades i l'usuari d'accés, primer obteniu una clau aleatòria:
$ mkpasswd
Per l'exemple suposem que ens dona:
6RqN5CCc1zuVE
Ara entreu al servidor de MySQL, heu de saber la paraula de pas de l'usuari root o d'un usuari amb permisos (a Debian per exemple es pot utilitzar l'usuari debian-sys-maint del fitxer /etc/mysql/debian.cnf )
$ sudo mysql -u root -p
Les comandes per crear la base de dades són:
mysql> CREATE DATABASE ebreinventory; mysql> CREATE USER 'ebreinventory'@'localhost' IDENTIFIED BY '6RqN5CCc1zuVE'; mysql> GRANT ALL PRIVILEGES ON ebreinventory.* TO 'ebreinventory'@'%' WITH GRANT OPTION; mysql> FLUSH PRIVILEGES; mysql> exit;
o també podeu modificar el fitxer create_user_and_database.sql (poseu el password que pertoqui) i executar:
$ sudo mysql -p < create_user_and_database.sql
NOTA: Si us equivoqueu al establir la paraula de pas la podeu canviar amb:
SET PASSWORD FOR 'ebreinventory'@'localhost' = PASSWORD('cleartext password')
A l'arrel del projecte trobareu un fitxer mysql amb l'estructura:
$ cd /usr/share/ebre-inventory $ sudo mysql -p ebreinventory < inventory_only_structure.sql
Se us proporciona un fitxer de base de dades exemple, feu una còpia:
$ sudo cp application/config/database.php.example application/config/database.php
Ara poseu les dades de connexió al fitxer:
$ sudo joe application/config/database.php
Canvieu les dades:
$db['default']['hostname'] = 'localhost'; $db['default']['username'] = 'ebreinventory'; $db['default']['password'] = '6RqN5CCc1zuVE'; $db['default']['database'] = 'ebreinventory'; $db['default']['dbdriver'] = 'mysql';
Ara cal configurar l'accés per Ldap. Teniu un fitxer d'exemple:
$ sudo cp application/config/auth_ldap.php.example application/config/auth_ldap.php
IMPORTANT: Els següents passos de configuració de Ldap "només" són necessaris per tal que funcioni l'autenticació d'usuaris per Ldap. És clar, és imprescindible que al servidor Ldap que us connecteu existeixin els usuaris adequats i que configureu els grups/rols d'accés per determinar quins permisos d'accés tindran els usuaris. Vegeu l'apartat Rols
Si voleu utilitzar el reialme d'autenticació Ldap editeu el fitxer i poseu les vostres dades de connexió al servidor Ldap:
$ sudo joe application/config/auth_ldap.php
Poseu els valors del vostre server Ldap. Un exemple:
$config['hosts'] =array('10.140.128.22'); $config['ports'] = array(389); $config['basedn'] = 'dc=augute,dc=org'; $config['login_attribute'] = 'uid'; $config['proxy_user'] = 'cn=admin,dc=augute,dc=org'; $config['proxy_pass'] = 'PASSWORD';
canvieu les dades de l'exemple pel que us pertoqui.
IMPORTANT: Si utilitzeu git com a desenvolupadors, afegiu al fitxer .git/info/exclude els fitxers application/config/auth_ldap.php i application/config/database.php per tal d'ignorar-los per part de git. Consulteu Excloure els fitxers amb dades sensibles. És necessari fer això si feu commits al repositori git del projecte o a repositoris/forks propis sobretot si els repositoris són públics per tal d'evitar publicar dades sensibles com les paraules d'accés a les bases de dades
$ sudo joe .git/info/exclude
I afegiu les línies:
application/config/auth_ldap.php application/config/database.php application/logs/audit.log
NOTA: audit.log és un fitxer que guarda un registre dels accessos al sistema. No cal pujar-lo al repositori és informació diferent a cada instal·lació i a més no cal fer-la pública
Ara canvieu la URL:
$ sudo joe application/config/config.php
Canvieu:
$config['base_url'] = 'http://IP/codeigniter';
Per la vostra URL, al nostre exemple:
$config['base_url'] = 'http://www.ebretic.com/ebre-inventory';
IMPORTANT: Modifiqueu el nom de màquina per el que correspongui en el vostre cas. Si esteu instal·lant l'aplicació a l'ordinador local poseu http://localhost/ebre-inventory
IMPORTANT: Si heu de fer commits git a repositoris remots és important que s'exclogui el fitxer config. Consulteu Git#Ignorar_canvis_a_un_fitxer_local_.28.git.2Finfo.2Fexclude.29_i_--assume-unchanged
$ sudo git update-index --assume-unchanged application/config/config.php
Finalment configureu el fitxer de configuració de l'aplicació d'inventari:
$ sudo joe application/config/inventory.php
El més destacable es canviar el nom de la institució:
$config['institution_name'] = "EL NOM DE LA VOSTRE INSTITUCIÓ";
Un altre cop eviteu que git pugi els canvis dels vostres fitxers de configuració als repositoris remots amb:
$ sudo git update-index --assume-unchanged application/config/inventory.php
Ara cal configurar els permisos de carpetes:
Primer cal permetre crear els fitxers de log:
$ sudo chown -R www-data:www-data application/logs/
I també el upload de fitxers:
$ sudo chown www-data:www-data -R assets/uploads/
Finalment per tal que els usuaris de Ldap tinguin accés a l'aplicació d'inventari cal que pertanyin a un dels grups que assignen un rol vàlid al usuari. Els rols és defineixen al fitxer:
application/config/auth_ldap.php
Els rols són:
$config['roles'] = array( 1 => 'inventory_readonly', 3 => 'inventory_admin', 5 => 'inventory_dataentry', 7 => 'inventory_organizationalunit' );
Utilitzeu Gosa o ADS per afegir l'usuari Ldap al grup que pertoqui. Per exemple, per crear un usuari admin al grup inventory_admin:
dn: cn=inventory_admin,ou=groups,ou=maninfo,ou=Personal,ou=All,dc=augute,dc=org objectClass: posixGroup objectClass: top cn: inventory gidNumber: 2082 memberUid: sergitur memberUid: unaltreusuari memberUid: unaltreusuari2
NOTA: L'anterior tros de text és un extracte LDIF d'un objecte posixGroup indicant quins usuaris (segons el seu uid) pertanyen al grup inventory_admin i pert tant tenen el rol d'administradors a l'aplicació d'inventari
Aneu a la carpeta on teniu instal·lat l'aplicació d'inventari:
$ cd /usr/share/ebre-inventory $ git pull origin master
TODO:
Es fa:
$ git remote -v origin https://github.com/acacha/ebre-inventory.git (fetch) origin https://github.com/acacha/ebre-inventory.git (push)
Si surt el origin és que està ok. Sinó cal afegir-lo
$ git remote add origin https://github.com/acacha/ebre-inventory.git
# En primer lloc comprovem el tipus de dades i el format que conté cada camp de la taula location:
Fitxer taula location de la base de dades Inventory
Fitxer:Rafelmelichebreinventory location1.CSV
Al fitxer de configuració application/config/auth_ldap.php es defineixen els rols Ldap de l'aplicació:
$ cat application/config/auth_ldap.php ... $config['roles'] = array( 1 => 'inventory_readonly', 3 => 'inventory_admin', 5 => 'inventory_dataentry', 7 => 'inventory_organizationalunit' );
Els rols estan associats a grups, o el que és el mateix utilitzarem sense distincions les paraules Rol i Grup. La següent és la descripció de l'objectiu de cada rol:
Si no s'assigna un dels rols a un usuari, l'usuari no podra entrar a l'aplicació.
IMPORTANT: No assigneu més d'un rol a un usuari. Només es pot assignar un rol. Si assigneu més d'un rol, l'aplicació no sabrà quin rol utilitzar i o bé no anirà o s'assignarà un dels rols aleatòriament
És important tenir en compte que els rols es guarden a la taula:
roles
de la base de dades MySQL. LA taula pot estar buida inicialment i un cop entri per primer cop un usuari Ldap, a més d'afegir aquest usuari (si no existia encara) a la base de dades MySQL, també s'afegeix el rol que porta associa a la taula (si no existia encara) i la relació n-n users-groups (si no existia encara també).
Millores:
Crear fitxer de config a la carpeta:
/application/config
El fitxer l'anomenem:
inventory.php
Al constructor del controlador:
$this->config->load('inventory');
Exemple de com mostrar un valor per defecte:
... $this->grocery_crud->callback_add_field('quantityInStock',array($this,'add_field_callback_quantityInStock')); ...
function add_field_callback_quantityInStock() { return '<input id="field-quantityInStock" type="text" maxlength="6" value="1" name="quantityInStock">'; }
Decidir el format dels identificadors públics
Pendent afegir camps:
Altres:
Camps automàtics:
Relacions entre taules:
Valors per defecte o valors inicials:
Validacions:
Altres:
Base de dades
Objectes específics
Qüestions a tenir en compte:
Identificadors:
Tracking del origen dels productes:
Factura:
Informes
Etiquetes: Abans hi havia:
Taules
inventory_object
CREATE TABLE IF NOT EXISTS `inventory_object` ( `inventory_objectId`int(11) NOT NULL AUTO_INCREMENT, `publicId` varchar(50) NOT NULL, `externalID` varchar(100) NOT NULL, `name` varchar(150) NOT NULL, `shortName` varchar(150) NOT NULL, `description` text, `ownerOrganizationalUnit` int(11) DEFAULT NULL, `entryDate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `manualEntryDate` datetime NOT NULL, `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `creationUserId` int(11) DEFAULT NULL, `lastupdateUserId` int(11) DEFAULT NULL, `location` int(11) DEFAULT NULL, `preservationState` enum('Good','Regular,'Bad') NOT NULL, `quantityInStock` smallint(6) NOT NULL, `price` double NOT NULL, `moneySourceId` int(11) DEFAULT NULL, `ProviderId` int(11) DEFAULT NULL, `markedForDeletion` enum('n','y') NOT NULL, `markedForDeletionDate` datetime NOT NULL, PRIMARY KEY (`inventory_objectId`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Locations
Les localitzacions són jeràrquiques.
OrganizationalUnit
Aquí es pot posar qualsevol cosa: departaments/famílies/seccions. Ha de ser configurable per a qualsevol institució/empresa.
ObjectorganizationalUnit
Porta les relacions 1-n (un objecte pot tenir de 0 a n unitats organitzacionals possibles)
Attachment
Els attachments són objectes binaris/fitxers relacionats amb un objecte (fotos, PDFs, documents, etc). Cada objecte pot tenir de 0 a n attachments.
ObjectAttachment
Porta les relacions 1-n (un objecte pot tenir de 0 a n attachments possibles)
organizationalUnitsLocation TODO
Una unitat organitzativa pot tenir múltiples espais/localitzacions assignades
Camps configurables
Camps que s'han de mantenir a part com opcionals
Traducció antic accés a nova aplicació:
Els noms dels camps de l'aplicació accés es mostre segon el nom que apareix al formulari principal
La idea és implementar un servei web RESTful. Estaria fet amb Restler. HI ha un clar exemple de com implementar el CRUD i com fer-ho amb un backend MySQL. A més incorpora documentació "automàtica" a partir dels comentaris PHP
Vegeu també:
Idees:
El generador el trobareu a la URL (si no heu instal·lat a localhost poseu el nom de màquin del vostre servidor):
http://localhost/ebre-inventory/index.php/qr/barcode
Si no podeu res es mostra el codi 123456789012 en format CODE_128, l'escala és 2 i el mode és imatge en format PNG.
Cal indicar el codi i el tipus de codi de barres, un exemple:
http://localhost/ebre-inventory/index.php/qr/barcode?code=1234567891234&barcodetype=EAN
Els tipus de codis de barres els trobareu a:
:*http://www.ashberg.de/php-barcode/?code=1234567891234&scale=2&bar=EAN
Per que utilitzar QR, per que en menys espai es codifica més informació. Per exemple per codificar les URL d'objectes de l'inventari, per exemple la URL:
http://localhost/ebre-inventory/index.php/main/index/read/1
En un codi de barres de 1D seria:
Díficil de llegir pel lector.
Amb URL més curta (http://localhost/ebre-inventory/Drewr43s):
Exemples
Ubiquiti:
Els dos codis estan molt aprop i a vegades és llegeix el que no pertoca.
Procediment: inventariar per codi de barres
La idea és utilitzar una plantilla per que sigui el més ràpid possible.
Exemple: arriba un component ubiquiti
Formulari
NOTA: Si alguns components no tenen codi de barres amb el tipus però són comuns es pot crear un full "xuleta" amb els codis per escanejar
NOTA: Deixar sempre l'opció d'introduir a mà
Com implementar la plantilla
Que ens estalviem per plantilla?:
IMPORTANT: Quan té sentit el tipus de material a nivell objecte: NO se ara un exemple però pot tenir sentit...
Concepte Comanda
Objectes: Nou camp
L'aplicació utilitza navbar un component de bootstrap.
Ara les incidències de l'aplicació es controlen a:
https://github.com/acacha/ebre-inventory/issues?state=open
A PHP Error was encountered Severity: Notice Message: Undefined index: homephone Filename: libraries/Auth_Ldap.php Line Number: 292
A PHP Error was encountered Severity: Notice Message: Undefined index: email Filename: libraries/Auth_Ldap.php Line Number: 314
A Database Error Occurred Error Number: 1048 Column 'email' cannot be null INSERT INTO `users` (`username`, `password`, `email`, `ip_address`, `created_on`, `last_login`, `active`) VALUES ('rafelmelich', '0f36a93353327b36a19367794e1d738b753f7093', NULL, '\n���', 1371467951, 1371467951, 1) Filename: /usr/share/chroot_web/ebretic/ebre-inventory/models/ion_auth_model.php Line Number: 824
Solucionat l'error de correu ens apreix el següent:
A Database Error Occurred Error Number: 1452 Cannot add or update a child row: a foreign key constraint fails (`ebreinventory`.`users_groups`, CONSTRAINT `fk_users_groups_groups1` FOREIGN KEY (`group_id`) REFERENCES `groups` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION) INSERT INTO `users_groups` (`group_id`, `user_id`) VALUES (0, 27) Filename: /usr/share/chroot_web/ebretic/ebre-inventory/models/ion_auth_model.php Line Number: 1304
No apareix la imatge del codi QR al final de l'entrada del dispositiu (Inventari/objectes)
Vegeu GIT#git_ls
L'aplicació Grocery crud cal instal·lar-la com aplicació de tercers a la carpeta:
$ cd /usr/share/ebre-inventory/application/third_party
Heu de crear dos carpetes amb els noms grocery-crud i image-crud a on posar el codi d'estes llibreries. Es pot obtenir el codi des de les corresponents webs (fitxers zip i descomprimir) o es pot fer un clone dels repositoris git:
$ sudo git clone https://github.com/scoumbourdis/grocery-crud $ sudo git clone https://github.com/scoumbourdis/image-crud $ sudo git clone https://github.com/dwisetiyadi/CodeIgniter-PHP-QR-Code
Vegeu també Aplicació_inventari#Instal.C2.B7laci.C3.B3
Cal instal·lar el suport d'idioma en català per a Code Iginiter. Vegeu:
Code_Igniter#Traducci.C3.B3ns_en_catal.C3.A0
Consulteu Instal·lació. Allà explica que cal crear un fitxer application/config/database.php. Teniu un exemple de fitxer a:
application/config/database.php.example
Consulteu Instal·lació. Allà explica que cal crear un fitxer application/config/auth_ldap.php. Teniu un exemple de fitxer a:
application/config/auth_ldap.php.example
No deuen ser les correctes per connectar-se al servidor Ldap.
Si us dona aquest error, aleshores les dades indicades al fitxer:
application/config/auth_ldap.php
En aquest cas l'usuari deLdap és correcte però no se li ha assignat cap rol. Consulteu l'apartat:
Aplicació_inventari#Rols
A l'apartat Instal·lació també s'indica quin és el pas a seguir per instal·lar correctamen l'aplciació i configurar els usuaris. Podeu utilitzar aplicacions com Apache Directory Studio per modificar l'arbre Ldap i crear el rol i/o assignar l'usuari al grup del rol.