Като един млад фирмаджия, нямаше начин да не реша проблема с фактурите. На всяка фирма и се налага да произвежда фактури. По прични, за които съм писал и преди, не ми се занимаваше с никакъв готов счетоводен софтуер. Отделих един ден и една нощ и започнах. В началото мислех да е някаква простра Ruby програмка, която да пише в SQLite и да произвежда LaTeX файл за печат. Надявах се да намеря някакъв читав LaTeX binding за Ruby, но за съжаление не успях. Пробвах да генерирам PDF с pdf-writer, но се сблъсках с неприятен проблем с кодировките – по някакви причини в PDF формата нямалко поддръжка за UTF-8. Остана единствено варианта да произвеждам HTML+CSS, колкото и да го мразя, като формат за печатане. Казах си че, щом така или иначе ще ползвам HTML, по-добре цялото нещо “да е на релси”, сложих последния Ruby on Rails и започнах. След кратък размисъл реших, че ще е добре да имам три основни обекта – клиент, услуга и фактура. Смятайки на пръсти се вижда, че една фактура може да има един клиент и много услуги. Ето ми ги и моделите:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
След като написах полетата, които ми трябва във валидиращите функции, вече мога да си направя и базата данни. Все пак е хубаво да се сложат още няколко полета, който мисля да произвеждам автоматично:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | |
Ясно е, че за тази проста/просташка програмка, няма никакъв смисъл да мисля някакъв изгъзен интерфейс, реших да ползвеам ActiveScaffold. Освен това е добре поне част от имената да са на български:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | |
Мда, до тук добре, остана досадната част от работата. Да се измисли някакъв HTML+CSS template за принтиране. За HTML частта използвах Malline от чист мързел. CSS нещата ги нагодих някакси на око, след принтиране на няколко неуспешни дизайнерски решения. Тези неща няма да си ги давам, щото са уникални за фирмата, който иска да ги види да дойде да му напиша фактура (и да си я плати после). Друго хубаво нещо, което се сетих да сложа е “цифров подпис”. Това е една хеш стойност, която генерирам по мой си начин от някои полета на фактурата. Не е кой знае каква сигурност, но за тези фактури ще свърши добра работа (всъшност хич не е лесно човек да я фалшифицира). Стойността на цялата фактура смятам автоматично, като сумирам цените на отделните услуги. Данните на мойта си фирма съм ги сложил статично в генерирания от Malline HTML файл. Това ще ми върши работа засега, но подозирам, че през годините тази програма ще се превърне в една огромна система за документооборот, която ще се чопли непрекъснато и ще се добавят нови неща в нея. Както и да е, дано да съм лош пророк.