Mój Alfred – obliczanie VAT
Znacie moje zamiłowanie do Alfreda (znacie, prawda?). Każdemu komu mogę polecam ten program. Dlatego między innymi powstała seria screencastów o Alfredzie, która tak przy okazji przeniosła się na łamy naszego czasopisma (w nadchodzącym numerze wakacyjnym czekać będzie na Was nigdy nie publikowana część trzecia). Wiem, że część z Was zaraziła się już moim entuzjazmem i nawet kupiła PowerPack. Ponieważ siła Alfreda 2 opiera się głównie na tzw. workflows, czyli swoistych makrach, chciałbym się z Wami podzielić, jakich workflows ja używam.
Zdaję sobie sprawę, że opisywane tu przepisy będą dość niszowe, ponieważ dostosowuję je pod własne potrzeby. Ale być może znajdzie się osoba, której to się przyda, a nawet jeśli nie, to zobaczycie jakie są możliwości, rozwiązania, itp. A może ktoś będzie miał lepszy sposób na rozwiązanie moich zadań i posłuży radą w komentarzach.
Na pierwszy ogień idzie workflow do liczenia kwoty VAT (23% lub 8%). Jest to związane z moją pracą grafika komputerowego. Co miesiąc tworzę gazetkę z produktami, na których są ceny nanoszone z dostarczonej mi od klienta rozpiski. Chociaż są tam naniesione ceny zarówno netto jak i brutto, to wpisanie każdej z nich zajmuje trochę czasu. Dlatego postanowiłem sobie ten proces ułatwić i wpisać cenę netto, a brutto wygenerować automatycznie (no, prawie). Poniżej możecie zobaczyć „drzewko” mojego workflow, a potem wyjaśnię, co i jak:
Jak to działa?
- zaznaczam cenę,
- wciskam skrót klawiszowy (odpowiedni dla ilości % VAT-u, jaki chcę obliczyć),
- cena jest przekazana do skryptu, który liczy VAT, wywołuje wciśnięcie klawisza strzałki w prawo (co odznacza zaznaczony tekst) i klawisza
Return
(czyli przenosi kursor do nowej linii), - na końcu wklejana jest cena brutto.
A teraz, jak to „wytłumaczyłem” Alfredowi. Wszystko jest podzielone na trzy sekcje: wejście, wykonanie akcji i wyjście.
Wejście
Pierwsze dwa „puzzle”, na które składa się mój workflow odpowiadają za jego uruchomienie. Różnią się skrótami klawiszowymi – Ctrl
+Cmd
+V
dla obliczania 23% VAT i Ctrl
+Alt
+Cmd
+V
dla obliczania 8% VAT. Każdy z nich pobiera zaznaczenie – Selection in OS X – i dodaje odpowiedni prefiks do obliczenia ceny – 1.23*
oraz 1.08*
. Jak nietrudno się domyśleć po pobraniu ceny z zaznaczenia będziemy mieli dwa wyrażenia, które trzeba ze sobą pomnożyć.
Wykonanie akcji
W tym miejscu wywołujemy skrypt, który zliczy cenę i ustawi kursor na odpowiednim miejscu.
Skrypt, który wykonuje powyższe czynności, wygląda tak:
LICZBA={query}
LICZBAOK=${LICZBA//,/.}
LICZENIE=`echo "scale=2;(((10^2)*$LICZBAOK)+0.5)/(10^2)" | bc`
LICZENIEOK=${LICZENIE//./,}
osascript -e 'tell application "System Events" to key code 124'
osascript -e 'tell application "System Events" to key code 52'
echo -n $LICZENIEOK
Co to wszystko oznacza? Po kolei:
LICZBA={query}
– przekazany tekst z wejścia –{query}
– przyporządkowany jest do zmiennejLICZBA
.LICZBAOK=${LICZBA//,/.}
– ponieważ ceny zapisuję „po naszemu”, czyli rozdzielam miejsca dziesiętne przecinkiem, natomiast system takie liczby rozdziela kropką, to tym sposobem podmieniam przecinek na kropkę i przypisuję nowe wyrażenie do nowej zmiennejLICZBAOK
.LICZENIE=`echo “scale=2;(((10^2)*$LICZBAOK)+0.5)/(10^2)” | bc`
– do zmiennejLICZENIE
przypisujemy wynik obliczenia wykonanego przy pomocy wbudowanego w system języka kalkulującegobc
.scale=2
wskazuje na liczbę miejsc po przecinku, jaką będzie miał wynik. Jako żebc
nie potrafi zaokrąglać liczb w górę jeśli jest taka potrzeba (np. w przypadku liczby 1,236bc
zaokrągli ją do 1,23 zamiast do 1,24), to trzeba było jakoś to obejść innym sposobem – wynik mnożenia ceny i VAT-u jest pomnożony przez 100, następnie dodana jest wartość 0.5, a na końcu wszystko jest dzielone przez 100. Może wygląda to zawile, ale najważniejsze, że działa i liczy dobrze.LICZENIEOK=${LICZENIE//./,}
– ponieważ wynik otrzymujemy z miejscami po przecinku rozdzielonymi kropką, a chcemy przecinek, to pod zmiennąLICZENIEOK
podstawiamy podmieniony wynik.osascript -e 'tell application "System Events" to key code 124’
– tą komendą wywołujemy zasymulowanie wciśnięcia klawisza strzałki w prawo na klawiaturze korzystając z odwołania do AppleScript. Spowoduje to odznaczenie zaznaczonej ceny i ustawienie kursora na końcu ceny.osascript -e 'tell application "System Events" to key code 52’
– tu z kolei symulujemy wciśnięcie klawiszaReturn
(czyli tego na numerycznej klawiaturze), który powoduje przeniesienie kursora do nowej linii. Czemu nie użyję po prostu znaku nowej linii\n
? Ponieważ gazetkę składam w InDesignie, a tam cenę brutto mam w osobnym polu tekstowym, które jest połączone z polem zawierającym cenę netto. KlawiszReturn
wywołuje przejście z jednego pola do drugiego.echo -n $LICZENIEOK
– tym poleceniem „ogłaszamy” zmienną$LICZENIEOK
, co posłuży nam za wejście do kolejnej części workflow. Znacznik-n
powstrzymuje wstawienie nowej linii po zmiennej.
Cały skrypt działa bardzo dobrze, a co najważniejsze – szybko. Jedyne miejsce, gdzie musiałem pójść na kompromis to użycie AppleScript do wywołania wciśnięcia konkretnych klawiszy. Jeśli wiecie, jak je wywołać z „czystego” shell’a, to koniecznie dajcie znać.
Wyjście
Ostatnim krokiem jest przekazanie wyjścia z poprzedniego kroku, czyli naszej obliczonej ceny brutto, która jest pod zmienną $LICZENIEOK
do schowka. Dlatego użyte w tym polu tekstowym wyrażenie {query}
jest czym innym niż to, użyte w poprzednim kroku. To jest wyjście z poprzedniej akcji. A żeby nie trzeba było ręcznie wklejać tekstu, to zaznaczona opcja Automatically paste to front most app zrobi to za nas.
W ten sposób przebrnęliśmy przez pierwszy workflow, którym chciałem się z Wami podzielić. Tak jak pisałem na wstępie, mam nadzieję, że komuś się to przyda lub chociaż pomoże przy tworzeniu własnych workflows. Dla wszystkich chętnych załączam oczywiście powyższy workflow. Smacznego!