Szukając narzędzi do projektowania baz w PostgreSQL'u natknąłem się na program do tworzenia aplikacji WaveMaker.

Wygląda przyzwoicie i jest OpenSource. Standardowo działa także z bazą PostgreSQL. Nie mam teraz czasu mu się dokładnie przyjrzeć i potestować, ale może kiedyś się przyda.

Potrzebowałem podać do serwisu www pozycję mojego stacjonarnego (oczywiście laptop, tutaj w znaczeniu nie telefon komórkowy) komputera. Innym zastosowaniem może być testowanie (wcale nie oszukiwanie) działania stron www z geo-lokalizacją.

Metoda jest prosta. Trzeba przygotować plik (niech będzie lokalizacja.json) zawierający pożądane współrzędne w postaci:

{
    "status": "OK",
    "accuracy": 10.0,
    "location": {
        "lat": 54.560,
        "lng": 18.430,
        "latitude": 54.560,
        "longitude": 18.430,
        "accuracy": 10.0
    }
}

Następnie taki plik trzeba dopisać nową wpis do konfiguracji, zgodnie z opisem. W moim przykładzie parametr o nazwie geo.wifi.uri powinien mieć wartość file:///home/jaqb/lokalizacja.json.

Gotowiec jak wystawiać faktury pro forma trochę niżej. Najpierw poznęcam się nad interfejsem programu.

Jak nie wystawiać faktur pro forma

Wydrukowanie faktury pro forma w programie Symfonia jest dość dobrze ukryte przed użytkownikiem. Aby wystawić fakturę pro forma w dziwny-i-dziurawiący-numerację sposób trzeba zacząć tworzyć fakturę, ale jej nie wystawiać, tylko wcisnąć "Drukuj" w prawym dolnym rogu okna. na okienku dialogowym drukowania trzeba wskazać dodatkowy napis do zamieszczenia na dokumencie. Do wyboru jest m.in. Test i ProForma. Tak przygotowana (nie wolno jej wystawić - musi być w Buforze) faktura dostaje swój numer i czeka na lepsze czasy.

W idealnym przypadku klient w końcu się zjawi, modlimy się (do swojego i kilku innych Bogów), żeby to było w tym samym miesiącu. Wtedy można wreszcie wystawić czekający dokument. Problem będzie gdy wystawimy fakturę pod koniec miesiąca, a klient się zjawi po np dwóch tygodniach i już numer się nie będzie zgadzał (jeżeli w numerze mamy miesiąc), a jak tym miesiącem będzie grudzień ...

W mniej idealnym przypadku klient się nie zjawi. Wtedy wystarczy anulować dokument - powstaje dziura w numeracji. Księgowa, a potem urząd skarbowy na pewno się ucieszą z takiego obrotu sprawy. Niby nie ma obowiązku nadawania ciągłej numeracji, ale ...

Teraz do rzeczy.

Sensowny sposób wystawiania faktur pro forma opisał dawno temu niejaki "robert":

<ciach>

Według sage proforma jest raczej zamówieniem obcym. Oto sposób na dodanie takiego dokumentu:
Należy zdefiniować nowy typ dokumentu o charakterze "Zamówienie Obce" i nazwać go Faktura Pro Forma. Dla utworzonego typu dokumentu na zwykłych zasadach stworzyć odpowiedni szablon numeracji.
Na podstawie wystawianych Faktur Pro Forma można następnie tworzyć dokumenty sprzedaży. Podczas ich wystawiania można dokonać zmian, za wyjątkiem zmiany nabywcy i dodania nowych towarów lub zwiększenia ich ilości.
Zwiększenia ilości lub uzupełnienia o nowe towary należy dokonać edytując dokument Pro Forma przed przystąpieniem do wystawiania dokumentu sprzedaży.

</ciach>

I to faktycznie się sprawdza. Faktur możemy wystawiać do woli. Mają zachowaną numerację niezależną od normalnych (faktura pro forma nie jest dokumentem księgowym) faktur. Na jej podstawie można szybko wystawić fakturę sprzedaży. Z bliżej nieznanych przyczyn ta metoda nie jest promowana przez producenta - może za prosta?

GnuCash domyślnie nie ma czegoś takiego jak rachunek. Jest tylko możliwość wystawienia faktury. Na potrzeby stowarzyszenia (lub małej firmy) można jednak wystawić fakturę która będzie drukowana jak rachunek. Do tego trzeba stworzyć własny raport.

Żeby nie tworzyć całego raportu od nowa użyłem raportu "Prosta faktura" jako wzorca:

cp /usr/share/gnucash/guile-modules/gnucash/report/easy-invoice.scm ~/Dokumenty/rachunek.scm

teraz zmieniłem w pliku rachunek.scm wszystkie wystąpienia easy-invoice na rachunek-prosty oraz wygenerowałem nowy guid poleceniem

uuidgen | sed -e s/-//g

który wstawiłem zamiast oryginalnego (musi być unikalny). Usunąłem wpis menu-path oraz dodałem podpowiedź (opis wyświetlany w pasku stanu). Poniżej kompletny "diff":

--- /usr/share/gnucash/guile-modules/gnucash/report/easy-invoice.scm    2011-04-05 22:16:40.000000000 +0200
+++ /home/jaqb/Dokumenty/rachunek.scm    2013-08-22 20:42:41.951017739 +0200
@@ -28,7 +24,7 @@
 ;; Boston, MA  02110-1301,  USA       gnu@gnu.org
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(define-module (gnucash report easy-invoice))
+(define-module (gnucash report rachunek-prosty))
 
 (use-modules (srfi srfi-1))
 (use-modules (ice-9 slib))
@@ -708,7 +704,7 @@
      (invoice (opt-val invoice-page invoice-name))
      (owner '())
      (references? (opt-val "Display" "References"))
-     (default-title (_ "Invoice"))
+     (default-title (_ "Rachunek"))
      (custom-title (opt-val invoice-page "Custom Title"))
      (title "")
      (invoice? #f))
@@ -729,7 +725,7 @@
            (set! default-title (_ "Bill")))
           ((eqv? type GNC-OWNER-EMPLOYEE)
            (set! default-title (_ "Expense Voucher")))))
-      (set! title (sprintf #f (_"%s #%d") (title-string default-title custom-title)
+      (set! title (sprintf #f (_"%s nr. %d") (title-string default-title custom-title)
                    (gncInvoiceGetID invoice)))))
 
 ;    (gnc:html-document-set-title! document title)
@@ -887,22 +883,23 @@
 
     document))
 
-(define easy-invoice-guid "67112f318bef4fc496bdc27d106bbda4")
+(define rachunek-prosty-guid "b4488998de8642d7908f5e8939b9f338")
 
 (gnc:define-report
  'version 1
- 'name (N_ "Easy Invoice")
- 'report-guid easy-invoice-guid
- 'menu-path (list gnc:menuname-business-reports)
+ 'name (N_ "Rachunek")
+ 'report-guid rachunek-prosty-guid
+;; 'menu-path (list gnc:menuname-business-reports)
+ 'menu-tip (N_ "Unstable. Used for Testing.")
  'options-generator options-generator
  'renderer reg-renderer
  'in-menu? #t)
 
-(define (gnc:easy-invoice-report-create-internal invoice)
-  (let* ((options (gnc:make-report-options easy-invoice-guid))
+(define (gnc:rachunek-prosty-report-create-internal invoice)
+  (let* ((options (gnc:make-report-options rachunek-prosty-guid))
          (invoice-op (gnc:lookup-option options invoice-page invoice-name)))
 
     (gnc:option-set-value invoice-op invoice)
-    (gnc:make-report easy-invoice-guid options)))
+    (gnc:make-report rachunek-prosty-guid options)))
 
-(export gnc:easy-invoice-report-create-internal)
+(export gnc:rachunek-prosty-report-create-internal)

teraz raport powinien działać, ale nie widać go w programie.

Trzeba w pliku .gnucash/config.user (jak nie ma to utworzyć) wpisać:

(load "/home/jaqb/Dokumenty/rachunek.scm")

jak widać wpisałem pełną ścieżkę (bez użycia ~, ale nie wiem, czy to konieczne) i musi być w cudzysłowie.

Teraz restart programu GnuCash i w menu Raporty powinien się pokazać wpis Rachunek, w którym zamiast "Faktura #" jest "Rachunek nr.".

Docelowo trzeba by zmienić jeszcze kilka innych elementów, np. "Dziękujemy za patronat" (które jest akurat błędem tłumaczenia) lub napis "Odbiorca" przed danymi odbiorcy rachunku, ale to w następnym odcinku...

Sometimes you need to cut characters from string. If you need substring starting from characters 4 it is simple:

[you@host ~]$ test="abcdefgh"
[you@host ~]$ echo $test | cut -c 4-
defgh

If you want to remove last 3 characters you can do this using:

[you@host ~]$ echo ${test:0:${#test}-3}
abcde

or

[you@host ~]$ echo $test | rev | cut -c 4- | rev
abcde

I prefer the second method.

Po rozpakowaniu redmine_issue_checklist-2_0_5.zip (nazwy katalogu nie trzeba zmieniać, ma zostać redmine_issue_checklist) należy uruchomić polecenie (ja uruchamiałem w katalogu redmine):

cd /var/www/redmine
bundle exec rake redmine:plugins NAME=redmine_issue_checklist RAILS_ENV=production

które przygotowuje bazę - zakłada tablicę issue_checklists. Bez tego Redmine nie będzie wyświetlał zagadnień - zgłasza Internal Error. Nie ma tego w redmine_issue_checklist/README.rdoc, ale jest na stronie.

W Administration->Plugins można ustawić, czy zmiany mają być odkładane z logu i czy ma być automatycznie ustawiany postęp zadania.

Trzeba też pamiętać o ustawieniu uprawnień (Roles and permissions) dla użytkowników do przeglądania (View checklist), odhaczania (Done checklist items) i edycji (Edit checklist items) list.

Tak jak inne (1 i 2) wymaga rozpakowania do katalogu o ustalonej nazwie - redmine_tags. Następnie, zgodnie z instrukcją należy wykonać polecenia w katalogu w którym jest zainstalowany redmine:

[root@jaqb redmine]# bundle install
[root@jaqb redmine]# RAILS_ENV=production rake redmine:plugins:migrate

oraz zrestartować Redmine.

Jak sama nazwa wskazuje ta wtyczka pozwala oznaczać zagadnienia i strony wiki etykietami.

To kolejna z wtyczek których działanie zależy od nazwy katalogu. Musi być zainstalowana w katalogu o nazwie redmine_all_files.

Działanie całkiem przyjemne - pokazuje wszystkie pliki które są dostępne w projekcie - zarówno te w "plikach" jak i dołączone do zagadnień czy zamieszczone na wiki. nawet przy małym projekcie zdarzają się duplikaty lub problemy ze znalezieniem pliku.

Wtyczkę Timelog Timer należy zainstalować, zgodnie z README.rdoc, do katalogu timelog_timer. Jak rozpakowałem do innego katalogu, to Redmie nie wstawał po restarcie.

Pewnego pięknego dnia okazało się, że moje konto (założone jak każde inne) też ma nałożone ograniczenia rozmiaru skrzynki (btw. to skandal, żeby nakładać ograniczenia na admina. Co innego użytkownikom, ale dla admina ?)

Nie było innego wyjścia jak zwiększyć (docelowo zdjąć) sobie limit. Uruchomiłem konsolę cyradm. Trzeba to zrobić jako użytkownik cyrus (który jest definiowany w /etc/imapd.conf jako admin), bo nie potrafiłem ustawić quota na własnym koncie. Wcześniej oczywiście ustawiłem mu hasło. Wyglądało to tak:

cyradm -user cyrus localhost

teraz można sobie wypisać konta:

localhost> listmailbox user/%

jak to nie zadziała (konta są zakładane wg innej konwencji) to można spróbować:

listmailbox *

teraz najważniejsze sprawdzenie ustawienia bieżącego, ustawienie nowej wartości i ponowne sprawdzenie:

localhost> listquota user/jaqb
 STORAGE 18606/20480 (90.849609375%)
localhost> setquota user/jaqb 40960
quota:40960
localhost> listquota user/jaqb
 STORAGE 18606/40960 (45.4248046875%)
localhost> quit

jak widać miałem limit 20MB a zwiększyłem do 40. Teraz mam zajęte 45%. Ostatniego polecenia też chyba nie trzeba objaśniać...

Docelowo trzeba by sobie ten limit zdjąć. Wg. Managing IMAP rozdział 9 to nawet wykonalne, ale to w następnym odcinku ;-)

Just my blog...

Mon Di Mi Do Fr Sa So
  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      
eZ Publish™ copyright © 1999-2025 eZ Systems AS