Posts Tagged Proge

Proge

Non mi avete più sentito parlare di PROGE, vero? Beh, perché è in completa riscrittura, quindi tutto il lavoro che ci stiamo facendo sopra in realtà ha prodotto al momento un gran casino. Speriamo di finire presto questa riscrittura e poter rilasciare una nuova versione il mese prossimo …

No Comments

Currency e globalize

Proge, il semi-quasi-gestionale in ruby on rails che sto cercando di scrivere, deve ovviamente gestire dei campi monetari; basta pensare all’ammontare di una fattura, o alla registrazione in contabilità di un movimento. Dato che sto usando il plugin globalize per l’i18n dell’applicazione (anche se al massimo, la userò solo io :-) ), ho pensato di avere il campo monetario localizzato a sua volta.

La documentazione mi ha un po’ tratto in inganno, percui lascio un paio di appunti sul blog a futura memoria e sperando che possano essere d’aiuto anche a altri.

Quello che volevo fare era avere un campo “price” salvato sul database come integer (sul perché è un male gestire queste cose con un float, c’è parecchia documentazione in giro) e che potesse essere gestito con la localizzazione.

Nel modello dell’oggetto, chiamiamolo nell’esempio “prodotto”, la documentazione dice di aggiungere:

composed_of :price, :class_name => “Globalize::Currency”, :mapping => [ %w(price cents) ]

Quando in una view farò <%= @product.price %> questo mi verrà visualizzato opportunamente localizzato.

E fin qua è facile. Il problema era che non capivo come salvare quel campo, lasciando libero l’utente di inserire un valore nel campo price seguendo le convenzioni della locale impostata. Insomma, se sono italiano, voglio essere libero di inserire 6,52 per esperimere 6 euro e 52 centesimi, e inserire 7.64 per inserire 7 dollari e 64 centesimi se sono americano: il controller dovrà salvare rispettivamente 652 e 764 nel database.

Nella view del classico _form.rhtml avrò l’ancora più classico:



<%= text_field 'pp', 'price' %>

Mentre nel controller, avrò:

@product.price = Currency.parse(@params[:pp][:price]).cents

In pratica devo fare il parsing del valore passato nel form, tramite la funzione della classe Currency e dovrò poi prendere l’attributo cents; dalla documentazione questo non era chiaro, sembrava che parse avrebbe fatto tutto, invece leggendo il codice ho capito dove stava l’inghippo.

Ah, infine, affinché il parse funzioni con qualsiasi locale bisogna patchare globalize con questa patch, altrimenti lui capisce solo valute americane.

, ,

No Comments

Proge, globalize

Oggi ho aggiunto a Proge, il “gestionale” di cui parlavo alcuni giorni fa che sto sviluppando con Ruby On Rails, il supporto per l’internazionalizzazione. In realtà non ho fatto molto, dato che come al solito in Ruby On Rails è sufficiente installare un plugin e iniziarlo a usarlo. Giusto mentre lo stavo usando, è uscito un articolo in italiano a tal proposito su therubymine.com.

Proge comincia a avere la sua consistenza e gestisce ad oggi (più o meno correttamente :-) ):

  • clienti/fornitori
  • prodotti e servizi
  • registrazione fatture attive e passive
  • categorie (di prodotti, servizi o altro)
  • progetti e ticketing system con priorità
  • movimentazione merci, carico, scarico, trasferimenti
  • lotti/partite di merci, in acquisto e vendita
  • magazzini/porti, vettori e altro utile alla movimentazione merci

Il tutto senza aver scritto quasi una riga di codice. Dico quasi, perché la situazione di magazzino non sono riuscito a farla senza.

Pur avendo detto che magazzini has_many :lotti, :through quantità, non sono riuscito a fare qualcosa tipo Magazzino.quantità.sum(:group quantità) e ho dovuto farmi un find_by_sql a mano. Amen.

,

No Comments

Proge

Per imparare un nuovo linguaggio, dopo aver letto le basi, io inizio subito a produrre un programma “reale”, in modo da scontrarmi con problemi “reali” e imparare sul campo.

Nel caso di Ruby on Rails ho fatto così: dopo aver letto il manuale (mooooolto velocemente), ho iniziato a riscrivere FreeGo in Ruby on Rails. Purtroppo però non era particolarmente difficile (ciò nonostante, ho fatto le mie belle porcherie), quindi non ho imparato molto.

Così in questi giorni sta prendendo forma “PROGE”, il PROsa GEstionale (fantasia di nome, eh?), dove effettivamente qualche problema comincia farsi interessante.

Per esempio, le fatture, le quali contengono n elementi fatturati: creare e modificare questo tipo di oggetti, non era banale, per il principiante che sono io, ma alla fine ci sono riuscito.

Chissà se nascerà qualcosa di interessante, stavolta.

No Comments

Le tasse in Ruby On Rails

Provando Ruby on Rails su una applicazione “reale”, mi sono scontrato con un problema di pluralizzazione (si dice cosi`?).

Avevo creato una semplice tabella “taxes”, e usando il metodo ’scaffold’ per generare controller, model e view varie.

Richiamando http://applicazione/taxes/list però, ottenevo un errore, in quanto Ruby On Rails non era in grado di trovare la costante “Taxis”. Si, avete letto bene, cercava il plurale di “Taxi” e non di “Tax”; il bello è che trova correttamente il plurale di “Tax”, ma non il singolare di “Taxes” :-) .

Ho risolto, forzando il corretto plurale e singolare in enviroment.rb:

Inflector.inflections do |inflect|
  inflect.plural ''tax'', ''taxes''
  inflect.singular ''taxes'', ''tax''
end

Però mi sono fatto due risate: tu, RoR, mi “costringi” a usare queste tue convenzioni per tabelle, nomi di controller, etc. e poi fai questi errori? :-)

,

No Comments