From 7ed03fde7d717d81e381dbd8e74fe2c539d53b84 Mon Sep 17 00:00:00 2001 From: Marcos Oliveira Date: Sat, 6 Feb 2021 00:51:03 -0300 Subject: [PATCH] Add files --- TerminalFinances.pro | 59 ++ TerminalFinances.pro.user | 268 +++++ accountslist.cpp | 12 + accountslist.h | 15 + assets/terminal-finances/balance.png | Bin 0 -> 1647 bytes assets/terminal-finances/close.png | Bin 0 -> 3622 bytes assets/terminal-finances/dark.png | Bin 0 -> 11153 bytes assets/terminal-finances/db.png | Bin 0 -> 2797 bytes assets/terminal-finances/en.png | Bin 0 -> 1579 bytes assets/terminal-finances/es.png | Bin 0 -> 1028 bytes assets/terminal-finances/light.png | Bin 0 -> 2992 bytes assets/terminal-finances/mail.png | Bin 0 -> 2548 bytes assets/terminal-finances/pdf.png | Bin 0 -> 2082 bytes assets/terminal-finances/pt.png | Bin 0 -> 2144 bytes assets/terminal-finances/search.png | Bin 0 -> 3064 bytes assets/terminal-finances/send-credit.png | Bin 0 -> 2802 bytes assets/terminal-finances/send-debit.png | Bin 0 -> 2799 bytes assets/terminal-finances/spreadsheet.png | Bin 0 -> 1033 bytes assets/terminal-finances/start.png | Bin 0 -> 18210 bytes assets/terminal-finances/tab3.png | Bin 0 -> 1607 bytes .../terminal-finances/terminal-finances.png | Bin 0 -> 18210 bytes filesave.cpp | 44 + filesave.h | 24 + gendoc.cpp | 64 ++ gendoc.h | 22 + initial.cpp | 64 ++ initial.h | 33 + main.cpp | 26 + model.cpp | 71 ++ model.h | 30 + start.cpp | 29 + start.h | 20 + terminal-finances.desktop | 18 + terminalfinances.cpp | 594 +++++++++++ terminalfinances.h | 95 ++ terminalfinances.ui | 959 ++++++++++++++++++ terminalfinances/TerminalFinances_en_US.qm | Bin 0 -> 18737 bytes terminalfinances/TerminalFinances_en_US.ts | 746 ++++++++++++++ terminalfinances/TerminalFinances_es_ES.qm | Bin 0 -> 19556 bytes terminalfinances/TerminalFinances_es_ES.ts | 746 ++++++++++++++ terminalfinances/terminalfinances.db | Bin 0 -> 16384 bytes tools.cpp | 96 ++ tools.h | 30 + updatefields.cpp | 52 + updatefields.h | 32 + updatefields.ui | 131 +++ views.cpp | 3 + views.h | 91 ++ 48 files changed, 4374 insertions(+) create mode 100644 TerminalFinances.pro create mode 100644 TerminalFinances.pro.user create mode 100644 accountslist.cpp create mode 100644 accountslist.h create mode 100644 assets/terminal-finances/balance.png create mode 100644 assets/terminal-finances/close.png create mode 100644 assets/terminal-finances/dark.png create mode 100644 assets/terminal-finances/db.png create mode 100644 assets/terminal-finances/en.png create mode 100644 assets/terminal-finances/es.png create mode 100644 assets/terminal-finances/light.png create mode 100644 assets/terminal-finances/mail.png create mode 100644 assets/terminal-finances/pdf.png create mode 100644 assets/terminal-finances/pt.png create mode 100644 assets/terminal-finances/search.png create mode 100644 assets/terminal-finances/send-credit.png create mode 100644 assets/terminal-finances/send-debit.png create mode 100644 assets/terminal-finances/spreadsheet.png create mode 100644 assets/terminal-finances/start.png create mode 100644 assets/terminal-finances/tab3.png create mode 100644 assets/terminal-finances/terminal-finances.png create mode 100644 filesave.cpp create mode 100644 filesave.h create mode 100644 gendoc.cpp create mode 100644 gendoc.h create mode 100644 initial.cpp create mode 100644 initial.h create mode 100644 main.cpp create mode 100644 model.cpp create mode 100644 model.h create mode 100644 start.cpp create mode 100644 start.h create mode 100644 terminal-finances.desktop create mode 100644 terminalfinances.cpp create mode 100644 terminalfinances.h create mode 100644 terminalfinances.ui create mode 100644 terminalfinances/TerminalFinances_en_US.qm create mode 100644 terminalfinances/TerminalFinances_en_US.ts create mode 100644 terminalfinances/TerminalFinances_es_ES.qm create mode 100644 terminalfinances/TerminalFinances_es_ES.ts create mode 100644 terminalfinances/terminalfinances.db create mode 100644 tools.cpp create mode 100644 tools.h create mode 100644 updatefields.cpp create mode 100644 updatefields.h create mode 100644 updatefields.ui create mode 100644 views.cpp create mode 100644 views.h diff --git a/TerminalFinances.pro b/TerminalFinances.pro new file mode 100644 index 0000000..811a71d --- /dev/null +++ b/TerminalFinances.pro @@ -0,0 +1,59 @@ +QT += core gui sql printsupport + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = terminal-finances + +TEMPLATE = app + +SOURCES += \ + accountslist.cpp \ + filesave.cpp \ + gendoc.cpp \ + initial.cpp \ + main.cpp \ + model.cpp \ + start.cpp \ + terminalfinances.cpp \ + tools.cpp \ + updatefields.cpp \ + views.cpp + +HEADERS += \ + accountslist.h \ + filesave.h \ + gendoc.h \ + initial.h \ + model.h \ + start.h \ + terminalfinances.h \ + tools.h \ + updatefields.h \ + views.h + +FORMS += \ + terminalfinances.ui \ + updatefields.ui + +TRANSLATIONS += \ + terminalfinances/TerminalFinances_en_US.ts \ + terminalfinances/TerminalFinances_es_ES.ts + +CONFIG+=lrelease + +shortcut.path = /usr/share/applications +shortcut.files = terminal-finances.desktop + +images.path = /usr/share/pixmaps +images.files = assets/terminal-finances + +configs.path = /etc/xdg +configs.files = terminalfinances + +trans.path = = /etc/xdg/terminalfinances +trans.commands = @mv .qm/* /etc/xdg/terminalfinances + +target.path = /usr/local/bin + +INSTALLS += target shortcut images configs trans + diff --git a/TerminalFinances.pro.user b/TerminalFinances.pro.user new file mode 100644 index 0000000..ca20ab8 --- /dev/null +++ b/TerminalFinances.pro.user @@ -0,0 +1,268 @@ + + + + + + EnvironmentId + {4667f7a2-7241-4e6f-8d83-410093b3f9a8} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + Desktop + Desktop + {73385c4b-0196-40c4-a87a-8e71a5f209b3} + 0 + 0 + 0 + + true + 0 + /home/marcos/TerminalRoot/Programas/build-TerminalFinances-Desktop-Debug + /home/marcos/TerminalRoot/Programas/build-TerminalFinances-Desktop-Debug + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + 2 + 2 + + + true + 2 + /home/marcos/TerminalRoot/Programas/build-TerminalFinances-Desktop-Release + /home/marcos/TerminalRoot/Programas/build-TerminalFinances-Desktop-Release + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 2 + + + true + 0 + /home/marcos/TerminalRoot/Programas/build-TerminalFinances-Desktop-Profile + /home/marcos/TerminalRoot/Programas/build-TerminalFinances-Desktop-Profile + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Profile + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 0 + + 3 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + 2 + + Qt4ProjectManager.Qt4RunConfiguration:/home/marcos/TerminalRoot/Programas/TerminalFinances/TerminalFinances.pro + /home/marcos/TerminalRoot/Programas/TerminalFinances/TerminalFinances.pro + + false + + false + true + true + false + false + true + + /home/marcos/TerminalRoot/Programas/build-TerminalFinances-Desktop-Debug + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/accountslist.cpp b/accountslist.cpp new file mode 100644 index 0000000..39dce7f --- /dev/null +++ b/accountslist.cpp @@ -0,0 +1,12 @@ +#include "accountslist.h" + +AccountsList::AccountsList(QWidget *parent) : QWidget(parent){} + +QStringList AccountsList::m_accounts( int z){ + Views v; + QStringList adds; + adds << v.m_msg[37] << v.m_msg[38] << v.m_msg[39] << v.m_msg[40] ; + QStringList dels; + dels << v.m_msg[41] << v.m_msg[42] << v.m_msg[43] << v.m_msg[44] << v.m_msg[45] << v.m_msg[46] ; + return ( z == 0 ? adds : dels ); +} diff --git a/accountslist.h b/accountslist.h new file mode 100644 index 0000000..9a71dfd --- /dev/null +++ b/accountslist.h @@ -0,0 +1,15 @@ +#ifndef ACCOUNTSLIST_H +#define ACCOUNTSLIST_H + +#include +#include "views.h" + +class AccountsList : public QWidget { + Q_OBJECT +public: + explicit AccountsList(QWidget *parent = nullptr); + QStringList m_accounts(int); +signals: +}; + +#endif // ACCOUNTSLIST_H diff --git a/assets/terminal-finances/balance.png b/assets/terminal-finances/balance.png new file mode 100644 index 0000000000000000000000000000000000000000..b0b26c00a72f7f0cb7e014e840d09bef2ace02aa GIT binary patch literal 1647 zcmV-#29WuQP)EX>4Tx04R}tkv&MmKpe$iQ;Q-k4t5Z6$WWauh!t_vDionYs1;guFuC*#nlvOS zE{=k0!NHHks)LKOt`4q(Aou~|=H{g6A|?JWDYS_3;J6>}?mh0_0YbCNG^=L<&~)3( zq>^GTzbf{=LO=)+Bp}GlGUg;H4d3x~j{slq;yla$+@B+&7Ayt?MB-Uym^SeS@${x` zaNZ}5va+lapA(OpbV1@rt}7nDaW1(m@XV;0&CC-=iN#VED_zXWrbawP98)!&@`aqo zD(5ZETD8vF_v9}O7xa~7uG1Vr3X52R1Q81AsGtfPaawg!EM#au>Ej=E{Svtpa#g^{ zv49#h$gUs!4}N!R6%&(QQaA~OUL5CR6zJUrS`EkfK6aee2@re+uJn$-)&yogNpEzt z*by+W4P0DzG-VIC+yRE34B3=jDM(W&7J>IO`ldWEcnkEedA+swaryvcsjKu2aBv8W zl_-1N=iPnXz5RQp-QN!*6LN>8;-1j}000JJOGiWi006ZBt&*`=(EtDd32;bRa{vGh z*8l(w*8xH(n|J^K00(qQO+^Rg0tF2<2^4l}f&c&nZAnByRCwC$m|tidMI6V!GyCUu z?=F`;n@DVWY45J05``iyC{z!XLQ+ucgSJnl0euv#h!h|6)xP`SgGGsN)+$z^ick`f zh()Ef7?YAF(&R`?8}Byve|K-khm?5d?OrY>n{)T}3-@rlv&{THGxPoZW&mHleEIU# zxgvHiMn*@JPAN@X?$hI*cfB%<``j=LY107Qy6iU_3+?nQ z-~;dhbh!AP>`WSX2B8O!gGy0o%U6-V_CBhmmCgVV=sSqWqp#NdKLjfGAT#zl(8i3j zV_P8jz=?)uLU$a3vfuk2AnY215Va1JMiSl!An$+Peh+qg8~_*I4e7o^_NzlldK-Y8 zc(&Q88=|rggbLmSK!h;lfu}YY0S_)R;7tI*#8D7_<3lAEiF*$Kp#r3RL#_Elw+8`8 zu@pG@p4QT28;#I00D<_?mfMO-0wA1s0EqVCHzC#?$~O`S*S z&ujlHBV0cWz4!?el_K5+!zln!CpuGq{}e)`A9CLTi;_4FV5}}Zh6hhViaiY~hPT}J zE62b9WI*syHi$FlUm{u^fM@|{8St7@q^lJbm4z{o-H%%vVKj+S&HwP=Nd%M6ZTB#u zU^pEufB-mMw*^dQo^o=jWv9M?zya0OIcwjDCf6%Q8c-m|haDSBZLGA$oQP8$GE+x+ z?h*(gV8tbvM#-Wel)-oPucgrVu(RcHO|0tx3M;q1a;iUd`XV^9u+||ZsQfi!YlMUo z5ljp_YJ9b^t|#C5>C0DR4#=3yY&cV$5=FSTdOS7W{T6V7W z6gqhxJjZzl003y2nbwT7oPoYL;m!+@X3{e^TT7u+pM$5&djRZ=u+A%tGK#ZbgAn39 z0A_w3tg1I{le_s11X6M5g~*0RNEo#2AI-{D6lT73boSc{U?U^UFZ=*nS$5}z$aVn8 zOpSTwgNEKSyU|2VdnbB;CbHr0630f>GE61&rg7vI`sS! zmcBoW>g`{4Yz#cwtN&&d^e>i%KenmK0*lZ)|uCJePVKQ@{Fpg3s!BKoizmj tdjWL0*egr`s{n2R(BaFMFJHdu^*4~gX=K87QOW=S002ovPDHLkV1hSQ=_mjI literal 0 HcmV?d00001 diff --git a/assets/terminal-finances/close.png b/assets/terminal-finances/close.png new file mode 100644 index 0000000000000000000000000000000000000000..ffdf147e2f66828f1a8d23c045d88123811fa796 GIT binary patch literal 3622 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 literal 0 HcmV?d00001 diff --git a/assets/terminal-finances/dark.png b/assets/terminal-finances/dark.png new file mode 100644 index 0000000000000000000000000000000000000000..704fa588448afd6081e6206b2c2b8891bfa51f46 GIT binary patch literal 11153 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 literal 0 HcmV?d00001 diff --git a/assets/terminal-finances/en.png b/assets/terminal-finances/en.png new file mode 100644 index 0000000000000000000000000000000000000000..1ade178b04f000ae6f5d4924a46335a8ff6dd4af GIT binary patch literal 1579 zcmV+`2Gse9P)&0%;E-lfDsd}+>($-CbRBaNX(NG3r zL^K3Kn#2bG!GDi^&MwRjiL|>Z(vkcXNAfj}S-2m}IwKp+qZ3JwcE zbJKynfO5Znq#~Q(dy%VHb=^#7S6{p_^^pv)VZ(#(0S>3j&T=Sfe8N>>ClvhuYr7g} zTk?k4{`@ddF8{aM^W9z4)wwz44*<~8QcGu-kK@PAplKRaRS(kN-%W4tTcpz}c6$kL zyzwJ?U;Hi6Xabu};ni1qIB{Z-#l<^Fl0;u$7lFViH!gl|?iF}+_X{gUMY03nff5_r zYO9!>oI}%eii#9Go-IsHUPIF~BuS#7p_(tg_!5f+bR8NSw=(&!YiKzQNwUz;u$AfQ z>tr%20Gl_J@tfn%nC$3!*wNrwpMXpz3qWII4c?|2E?=Gj;E~N0_6zk|go$ zp>{?`u0SfqFMr%_vH{S;4|hDaJ^`szhWYth04Rz~Dy6b;{WhAWp(rx3)g-}SgmhZX z*RdqgNP<`_iK57)(<-50#Hdv@%fj{Bq*5x{!V+W8zhv$S02~0`rW)GXc5wRCFuJbe zc31NK=bqs8fk9L?hts){zL&Z<@rywci4-LzHu_&ah~FPzITS^ftsL#|=J)UX#c1dz zHO>!$S4?MteRG$~?`eS3xe-Z{C@n2!e*P9Nmz|87<)KO^v$Ko1Ty~<-I3ACiiHSK} zE<2%66tB02>FIgw_EJKjDBHeK#aB0%DJqf)g`#Y&a`EezyG$2?<=*XvhMK*=nuRp@{^mTMyN0zN@-~KhD2B@oZGc`4jBuQvmj=H*Prl#ie zUuXf3$IZ;l0@-X1fQQRV`PEN4Oc#O=wY9EKKsudww%1!jb8{`@<5%+z-&{d^$4aibaV!>S@7PH=yvp3%O#l)LH@Nh}UXyFE zzS`mOY#|UB1;FjDq_x${;NaiLUTWcSD1nojwAA5krFqx*zAyA6+su z*nO~#^P>|aug;k^1n-%Eg@rq78nlwhs4Ojo$mKK?#Y%iNNhBO!)1Z}DEJ-4nUelhH zbXp}6j}s6b zBcGZq1ND0|;E6robTrg&#qS>ipt-r0{rmG8%-;qpINE=ZzPoON{!@qP>wU|}0RO4O z4BT}aeC@R!-X9ua>CzSRKL`~UD-K;>w}H*3V6i|dr5caNvTP-pOt0zALTPC+@p#JU z<^v@*vT6=h&0nmFi;K{8owC)ixf?L?`K*xv_X9=OsMOPDTY<1^XH&ibx~|{X2AGuf z5WGG5S^g2OkXTz=8Q@~i3kCaDSQf9vfza6a3Kol_z*Zpa+SMXLPzJd3$;HAB!3)p* zRD@tbhhXsHKMOJgD!#o#grE!%{B*3aL-4ahheZe$bOSELSDq@sW@Hfv1OkCTAP@)y d0)e0~`48S@%uFioRf_-s002ovPDHLkV1oBJ0*L?s literal 0 HcmV?d00001 diff --git a/assets/terminal-finances/es.png b/assets/terminal-finances/es.png new file mode 100644 index 0000000000000000000000000000000000000000..e71bc6693cc92a2962ecc229d8def5bcd3ab3cd8 GIT binary patch literal 1028 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 literal 0 HcmV?d00001 diff --git a/assets/terminal-finances/mail.png b/assets/terminal-finances/mail.png new file mode 100644 index 0000000000000000000000000000000000000000..162babf43ad55371bc8b5d712d22c49a3cd767cb GIT binary patch literal 2548 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 M07*qoM6N<$g67lK8~^|S literal 0 HcmV?d00001 diff --git a/assets/terminal-finances/pt.png b/assets/terminal-finances/pt.png new file mode 100644 index 0000000000000000000000000000000000000000..2ca076c9904f3c4082b79a6b9c77471cdbc71b80 GIT binary patch literal 2144 zcmV-m2%qQp+Puh;vE)tIMz&>REDB?n)Pw>lq$SY6 zFfh!Jq=lx0jwz6VG%!q>knuFMkd_Qg$imtg(ln$gq@)=)#5kd0H7QHt)EF7rk{7&5 z-Z#m%me)V*U{o(yc!6Mj|Gj(fyYJoao^$Rw-vu9h@WBTkeDJ{sAI2s`034e69uPFf z*4{>X&Pr+b!y+JLj1kZXARX&2;3L3Cz&%7_pdElBd*Ik2Kq_*xSzAelt{f29Ry=`S zrBOHq@qZdNc8X9d~dIcs{m@r4jY4FVJzaPW9a;AWY_9S5gTp zH8qGtgMTkRu!9q+298vRvB?-utwZ)*BS2t6p2JYB!ZRWYgrK5$Yx_4?^TE2%G^hy7HAl*R5&i6oqc*U z3ql)v=n&v@rrpwup~%lDwL4=}aSk+42d>Ku1sY;u4c#((*>xcw9rbhT$V1 zMbXAVeGzHn+C17@?K0-S_yk`TMBmlC4<}dh*{gp?aT^H$SDJ%Jzn;i9twHyefB>uj;%x{7CfVX0L!;8;rRJUL)xZgvu<$g<&S#>QHNW^?y@LeF~`t;cSmL;={c&q z4uW%4O&rjhm?&@Wv;XMXu4nN*C%-!b4wxBpz`EdCKrr<;y8H%)ds z4V}$sRbi-t15wBVX>-OA6By3%%UAj4YAuFKttf;1IeWRd*L;N)YR=?M;L((ueea?O zR!3V|7}mgVjPV?`gbw=1925aD{vEuXY-VwI!=NVJb5zb-nWyMwbUHoW%et)Vmw<1f@ptgSR3j@iDxNLS zQQqM{G#3yfur{We9f@TGOI?Gum7l(}oG<>HK)71bi-5im9U08*IZ-TMG8wn3jS6cs z=RT_E<4hwicUN$oKdqRo9mfX!56w;qTZ^>pE7#!e+ZqOTfyqHO4(d(J3~BK?uvi-9 zIGpZ5Egqo4(#+@CPBJr1%y~GT6~9Pk;c6)h7HK)KC!eqKE3q`nz50h>sf#z0i}|^x zhIB(B*W2XYxj>ssOtbUuDzg59V}dr6N=p;=4ri~vy2h^Z_|wxyvd$P;x#auIep1Yf zJ5xCG;RJHdW!}}lG`pnOTw?EIKxumb3v=~-=Ja=hM&+3hDdc{%+Bz|n)p@i>gepJ) zYkh04sQ%Y~e$C0VL2THZ%KWDySTc92R|~J{l(NYf&ynh|0Ry7+P9fq*bvRjdA?)^| zs!L642y)xE|7yLTMFa&pgOFVws(6F-2Tj2mi%rRAj016z~1g)*0eY-d{yER_yoZ-P5^|dAab=u!SqWhY|>Vcp({szTL}!Xc!r6m=UwC7 z&wGN`#az!_>~!?x7E-AMiCBatT#27df}c!Ep0S#z=jE|@hN;*0?JhCf%rWdL8=9It zBt^(6h}c;g!#}K{9MGHjvAW5lfB(j8Dr%LS%8lzvk=;VSb2YWtN!CSRFj*NNuB57_ zg`cFBuzzEAud)BG4`!_)VOZ`HhEWj`cqYoqYZFUR%X*H?_D%`w-+GL9vZwYsjwBLs zw^Zh7J&~ab9-nrRy&JL#@awUXdPkT09j=TR4tZ>N6`@-{@7KxeNyR)7S?A%mCobuD z`JG3|HAfCCuIMamUv-X!)6E`7+c9e>&)tZ}(&=}9N@D+yMPc>4ooq%M(CM*|%SKJN zC>n{Sp({O&RM|+;Sy?#UOj=Tv2XQys{dl%O$G>XT!>xyoECB#YiHq%trL2poM&hN# zx&+u)u3>ADmKN8Dh}T0?ga(5amxPTsbi7|3&Ov<wQhYf9;=WIV4!4LM#WDP;B%01qx+opByFrH_<`2aa_|Ou{0lkSw zRG!)2`35Cx3<(t2? literal 0 HcmV?d00001 diff --git a/assets/terminal-finances/search.png b/assets/terminal-finances/search.png new file mode 100644 index 0000000000000000000000000000000000000000..132291d7fb860ad12d4896d9b7fd6f25b7e4f0e6 GIT binary patch literal 3064 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 HjJWnESYF=q literal 0 HcmV?d00001 diff --git a/assets/terminal-finances/send-debit.png b/assets/terminal-finances/send-debit.png new file mode 100644 index 0000000000000000000000000000000000000000..31f45cd06ae2628e54b9f38702a28c838afb98d4 GIT binary patch literal 2799 zcmeH{`8U+xAIIM_24nr&x5(JZHbnM52t&59?;2*tG-1q)5u+Z*AJ22oecji2rXcMQT#MgxFiR#cXeWv8)7;!L@q`3dfeJiKp^#VYh9 z-3x-(kWyppkMs+?zq8tkWeW%++MmzP4*9=t@AhzGbu-~P0FgpN9VuCSt=8=-G zNqa4OOB)8pl{X3l5?%wg4Fk^7Y5{fC{>#dcn^K&9-U0a<3RYJ1jG9XjdbIF@$6;7Z z#&K<&1`NhGq}ll_MJKsJC-~|gr%CaG*gSes#MpffzTe0`TlDnMc5EEZ;w|MuiLR-N z(1bf4?W(0cuQXp-wVJDrF?7`nA${m``OvHo}voFG;A0B5hKx(-z zQ9%MjO5>DYE!B+0721yks;Wjpwh2taTkneiPkw56jh07S|I zKx{k!d}pL$R{$Uk4gjA~0H9w00K&wgmkx#i0M@dOT zn|l0z z9J6_SJNCYrbnZ9*#0y_|Jt-YH_+zdoxBsE3WXQndoHj1%_;zaC%GVh=&<9KJ&xHz! zQ!1Vov!$Z#+)*4}*L@)J%cog%1iI5m6#E4w?HA>?3IFQjM|_DiyfgZ{>dD6YNpz%Q z#F(2H{DF;&P*n`8L8WfX_djZ`j=XY)g}o1#2+|V7T}%6$P#59RA~4IB=(<8BfXH{uX*yIH(92LcHKiaW)t~`)XzJY8VOG*nX9->xQn-b;PaNs!{ zi^hxy#pJrbZfd&pGss|xrB@8kVfQhnMxzviHTFaWP*Zts@}_SlFZ+c;tOU~uL9NvX0MHd#)$(k3+ONy8oL{Qh-w4d{af2Z?tp zbua2^{9oSOdzs!`5X@~d0==(vvX@MKH>EX^0&|jx>u^GO_cazc_EmS-Ox|xEojSfd zI^oy)BBbL7;x0leQN3^xCa%o0XY~vwP>#IL?jVM1TcFkcG8tAM$jp8edSoaKSHQ#4vr zbo9|4FeQFOBSy7Nw%w*}qL}WI$|nW*f@XP0)13PU$fv!-b*Mx`P6dlbm#6vUG^Mo&*?6vl#rR)oZc6czYC=X88wY5^XwBcx`u}* zfEF#jMt8fF#}?1v}RXK8pbFzLTB3^o)^#uF*{5CVX(vPHuD!|*{ARXhO} z>WDD4!I|(gXu-efU_U}wfFGI?M#hr=!fi@2`xpTCe}E7SHVF77^+H*lVVnR~=5}U} IO;K0=1f*Q-E&u=k literal 0 HcmV?d00001 diff --git a/assets/terminal-finances/spreadsheet.png b/assets/terminal-finances/spreadsheet.png new file mode 100644 index 0000000000000000000000000000000000000000..943af328a002023744e46ce5a7700d44ee8ebf4c GIT binary patch literal 1033 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU~J8Fb`J1#c2+1T%1_J8No8Qr zm{>c}*5j~)%+dH@Z&$6RGJ(Pq0kTJ$R&-coigpDkUg276H6zA;p{MhtM~^gih{^nk zSYx%r;`OTsS{zOC3VC^cU3x)}{!eo1mf-LE{qfzs$M0knuAKHUwLZoWy16ICMs1n# z>ZA{%OiVA1a-^lCy(*qGrQ!LHUG4qr%LC^$7f07t1f_ zcj(&Xb%%ky{XjwErt7x%?%uq2dw=?@zkeB)R2J<{=Lpyaj2E^fZ+90Uy_I3@q>T|5 zfh^7fkH}(R6kZ2mMkkHg6+l7u5>H=O_NPp&LfX6+6iPW67?@Z+T^vIyZoQrD?{(Ng zwh77dumw z=bB9RblcB=D8*3abKUz|XSELuU5i%K>!kNq_B}LJ+kZ!zdBQotPj<4h%#F*hJH_2n ztmyj8!tniv*BtJNGK?R5m)d8!^Q+%p%*;?IDd5uQ_0gA|pTSY0ggt+5^v}4rSJg$D z#WzLOge*|t+0|TF63^CRBl;k0XEgiSWA9$>SS;%#$H1o*c7tb&v%m%)Z;p#|^*F9E zMmS}>dD)bp$}m@84eJNyhg&6BRx>g<+|Xh>SjFI~ctze}l7{mO`}cQJ6g1|RX7ML{ zvJ0Gd`xe*t-}-N}e_mWBGCRDSVev)fnD?Acw&AgntT%<1>}6n3n0LHG@VV{NI!|tu zV~jB}dRy!_o1b|aws05cv@k|X@io#bf-M=QwtjDO%JiH0OZYycYe*LBij?(lcrG(- zVbFEpzJP;jP-IB`Bek8);cDblIR^$7B=n16$y#k=?xbHQ)`V*}RM-{kW%DIU`Oh`h zxt%?QVTGCRP6jiEoKqLweXBT(qE0-iVVZHOP?ba9ops5~`Q8eCXE)71(eS)zZIrgc z*6x$rc9t?M(Jgz~5vq`rF(-zdC8TLNLk+WT+J;-|+?GYaG{WHN>gTe~DWM4f08^`( literal 0 HcmV?d00001 diff --git a/assets/terminal-finances/start.png b/assets/terminal-finances/start.png new file mode 100644 index 0000000000000000000000000000000000000000..213da0fd9be1756ab0a2c67f06dba201668e5b3c GIT binary patch literal 18210 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 literal 0 HcmV?d00001 diff --git a/assets/terminal-finances/tab3.png b/assets/terminal-finances/tab3.png new file mode 100644 index 0000000000000000000000000000000000000000..7d1dcbec7b82a665a561db3b1aa58f233a80c0eb GIT binary patch literal 1607 zcmV-N2Dtf&P)EX>4Tx04R}tkv&MmKpe$iQ;Q-k4t5Z6$WWauh!t_vDionYs1;guFuC*#nlvOS zE{=k0!NHHks)LKOt`4q(Aou~|=H{g6A|?JWDYS_3;J6>}?mh0_0YbCNG^=L<&~)3( zq>^GTzbf{=LO=)+Bp}GlGUg;H4d3x~j{slq;yla$+@B+&7Ayt?MB-Uym^SeS@${x` zaNZ}5va+lapA(OpbV1@rt}7nDaW1(m@XV;0&CC-=iN#VED_zXWrbawP98)!&@`aqo zD(5ZETD8vF_v9}O7xa~7uG1Vr3X52R1Q81AsGtfPaawg!EM#au>Ej=E{Svtpa#g^{ zv49#h$gUs!4}N!R6%&(QQaA~OUL5CR6zJUrS`EkfK6aee2@re+uJn$-)&yogNpEzt z*by+W4P0DzG-VIC+yRE34B3=jDM(W&7J>IO`ldWEcnkEedA+swaryvcsjKu2aBv8W zl_-1N=iPnXz5RQp-QN!*6LN>8;-1j}000JJOGiWi006ZBt&*`=(EtDd32;bRa{vGh z*8l(w*8xH(n|J^K00(qQO+^Rg0tF2;1asUcegFUjMM*?KRCwC$T3t*OR}}u{kA+1R z?XV)O3esKvVyKn2N{}?sNaAnmL(}L((+7OCwoQEKYx`i6n#T0CnzS!Ap{d3uEx{Ta zl?bV!7Avv{Tf336OJLdMXLs41zdrN@cX64WW$ui_oX43nckcP_IrpCL%LQz+&9?Py zROW-P5B=hpWn*6e)JX-Xv`Cy`MaK6Pa`~qp_8d+vf5B#Y&d_t`Q*q%VAuU0X6>F?A zO>HT1upiG9&jG+E%iqzN&P$2($@G$Fncx9Hkrkwp0+y1gQ_$zq8*d%;;nKNZF*lvi{14j9E8lhDU{>(U&EwSV%a) z-N$Rp7|N)`+5>RnJvhAls(v0HkG;q1(f8vB*$grT>(h`9Z>E2Z(y1{0JnrUa97-g1;wcg z0I}YmRr?O~43j?vL@>A^?7n0to}dV&*6IU_6elj8 z?M84koHO`~XS-1ZC;1E@q17n!CHVaPZ_#n01?`7hu+_U60Pt*V3io>c!rf~Rv4P=1 zQIs`XVVYv#V%_M!`UJmqKY%C;|4*9cP|TLX#ksM9sAVlO1W<5tE;u=tJ|M4mI&A9! zR^j!g27m;wH*E=!;`PKcKw)G=I{a8@o`6`IdZFL3x+CzY#uxvM>DTC z?H)ji*PFN#B*W`X-3pW7^)G=Qpf9ht>97re=}W+zI)R}8m_a9?ja+#%=meTGKw=mS zwC#kyu?F$dlDxk^<746RIttPW4Alb$+IC{FwNX>>0B~xndfyl61cvGX{>IvZQm<(v zw`MwlL3%)eHw5zF{;TN(hUfu}{$N4zKaM2VOeZiz57^uP2(5#DY=|c{eSgItD_AEm zR1aVz3GIDDXzv@+^nIF&BY62;!*v3~`T(=&1O|43=FkZYZH3LC6PVzBfU!D(tp{ZF z_=*^^YOs*p7A{+BaPb~SCZ=yR6Cb8P6w&@iu2ZBMM%g;UX zoU?}OHI`O+MP6DBd3D?gB{mJPJ$7b9IN~f*W4>NYTEhhzj~;%kVj>HNNm1)Io<(J4 zc3WGya4oR}NmINw zK6W)&csjZpNLd9+(dox0ZR?`Xp;8sXi!)&jH8EM%ThcT9AQL{sxX)lh_sk}vytoj` z%+6Y63tLW;r^6%@tnm(5NcW^mOm43^^@e}|thRdL+7v8{&Yza1C@YV3+qNB*ma5v? zEY^!E9m}gLO6_e6^Xfu<7{$kvq?ILxv2`U)ldSJ}_!Tuirni@m2u3N7P>b*me7v{) za1M-5d^R4BySr_#FuXt9mVcPRI9(!NslNy=tFAO#nzV*k07@$D^ICJ`@gnZEDq7vH z$&Cz}HoERs&wi#F)ozqkR_4+>sF8BXBhuk0nJa|gr)GVyjmZzdR(~5elV@Ic#3?8^ z8Y#k2bD<-af8ReNvG1!YO%v}Nv;)Q>e@R86oV9Ol_1TNqgxteW;YTHuD02z^<}g@I zbvE&z@HAO=yRPJ`TJ_P&=@eAZ7|)|N$HgM5F1sw}Rkba0jLU8BGo7@u3`j`zI@@X) z0`{9u9ZQVWb&|&ob&B!`b4}MeFinXy?|M#|wP#I+i2n#LdL#Qh^>)d*Z5z$mcT)s% zUkSYGVW~E3p42tUHuco{8g3K(oe9VJqc4C7-b_QCw5bH^r*t2+-D>Jw%Q4Bc;Kru= zLAb+vcOx1KO8vG^x5Ry@C)+(CVwiv;V$+Giaw1X^-P*It=D^z~e=#pe)6Y!`gT{jN zMqV5ea|u?dPP0M|)K2Qs$RG1xltbf*Cd&Cft}RPK(h^llMx&I}c%!sJE5?`hc$ zULuA58osaNX$r4Xs^{}-&K*X4&7RBTEZSlwrW*y_k)=dN8ivW@%R zMrf;7(&kP`=K{IoL`B6nbz)3IFD3spYpQE>$#IKB?W1Ws%PXfZmkR#$$<_|7Uu9iR zJg~5UXO#R+5E*i0L<$Vu5Y@IUKA)%l8J)}vEhE!~)tC$sPxHB-o378FFP^$1mMUzV z%~hl_e1=>9jKUoq7h@-4Q7H~#59C|LVG+#0-BuxcqT*v-gcSh2vVyp=ReURsxj_oRo-S_QURmrRaJbaQ5eYFS( zBCYlH*UrH19fX+|d1^|?BOZbTn+>;5U2SKRV(Y6bi{qn%{M+4>s*g)^sId_^oQzsJ zm(y8hU{5(L+4flfa|k|f<87Yh+Wm(QMWTuF{W1RMuUn@`;`VQ=e%I{hJGY(1-g{LV zDp&`G%3sDwJ%8gfN*Q3guxnU^XQBNu!Z_uvdL1{F@s`wnf8Bdsij|~ZvFY`(vlDC( zbajMBn7JK#fF5o^m$*P$y%uzR_}+QNu5od&MP@|J)<(f3LHy$R$Mn~%+4DBN*Pp#9l<#DN{M#G=CvWFm>Y zF)8`jN(CsCeDAUUbMubSc{RxWIw2kYcI3#4$)O=tA}$C)Pws=ZM;C3{eOu9fxW(>nMg9vXi{w!xY*@n1v5s5AyvbBq<(na|S38aOiLaK|34>j* z^N;rWd$1uc8HJffd`8}9cWWt4O*5LLL%);}V#TSFLp14UuVsAb8QoKGNcw=tz@9TmT4FYUs7@ARchpNHUUZTd->D$My?;_2UuuD3-oI*!g|)%it&@09|L z1S6Pl+TZQ-9uXsW>LsC!UfNs9(0ncAwH$+GOi*$CXjaCf+|_j49_aLiud)Gyiux-DGUM zFwosC11altKPp8rZ-z=M8AmX+($w7itL2r45q)AuePPSvv8OY6q$Y|WQZ z-w@Tq*uFh>>HWr3E_UWdxObP>enH*y6oR!l7RNviv7g9Ry~>mr`akN?#g)3Igx%~W zUhDHksB9Y^5N*n?Sd7tbHL@-8M==#E}Y0qp6GWDo>M^dS; z@>>>hE746FwpsW{_u$9dS-xG+xC5k>KcAA~)sMo#7xbg+CGiA627u4lA zWq8ld&U8~6nN!Cc!G8`##pE6zQ5$&Pn>07H@M6b=agKAnMGO2|`Z))Fb;KAK5F^d; zb>lkkL3sa1i||{g2g#dYPK{>lb2DMa^vyAMHHIoYWD+kBXj8B(C6VYl{;T z9=lTj4!d+xH=2_TvDgr16ZRYi=Hz5A8|ZN{)J?Qvn9x_(^j(eaPawCzPJBIhajNtZ z$Fg#hH*vDalMe13xCOCP!XcM*G;3I^Z4b;z(msfi6Da%EjL&sklc%&jKZk;^t{*MN ztKrz^xni^Nq#t?gyuH(VJmTefNDXlA0<#W7g3H=*X;v#As^#=!5UAh!6_tUauZY}whXqZk5$C*joE276(Zp4ZHn-op7tY==fn=NO%}rDLP3Bo8MWDof#V zsgU8(Y$IFPRk+2Y{g_3DFOWus#LbYP`kGJ=v1%+xekfL37n-p%WA>MwH4&WTK|M6k;6l2TOI z;))ioZ!VME8V{*8SMXOqx9@Tk(H-``-@Y-Pzl=oV&o^9drt3-B8lQiBm^$og#`tKy zL3B8w$JL!iDEEhE;{h<+;F4s1Zv!Lu`S2HiY>Z^C+8%ja#u-hLBnuV`HsgiEVOg0T zA>&G6h7ofpv=@klYP15<5;Wss28j8(-D?n@GIJEJ^bB`6RraFls{_62Kd@-OQ8^E+ zP^;0uCJ~ZJ*~j=FAj`^N^l~1n5DEyZ_0GZ;Zv~4GqKl}S2~qUkx{#6feKlRf)YmZV z50)(DS7Y20AsZ_0`tFk`^E)@Ai)!r$nyC{&VES|O;h{|%zjLlz>@0VnwP8-X_dU#y zd#3~66d!Zf?6h|U{ig!4e8OMVmZBHaGo|zfqbP7)>SY?##~*&eAQ#RwN!4mfry~xS z<51Oqg*gsz@?qvSnhsM}Zlmbs`lyY+z!%18@gs6LRG4*o*uoz)&Of-&Oa&`(3BU6~ zRdNuT6E2XQwJAs9o}9(d)AS~8o7g9?xW*eS7TWwfjFW8;4YNxy6`>Mmv~O$=N1q$7 zmzAleL6$%X-{|MpBujSzwlE?C_-;!<5q?2|c=bnfqcQXl9Mk9+jOij$As-B!o0B6l$sI#2>e+C8Rs$6k8m)cravLRGUo6uBhSLp1>_spq*~nPjj+rIXCy!i03S}=`dL;EQ>B3Zqekbq;kT7G+^AI{qsz(c-r>c*yKo-(qw80MdqbC}8FWE(lp%Ng2ie$wu*bUt%j_{8vYp7} zH_KjxNQUK4bJhmiX;W!iijF%%NSsAPtCm>M)<#zJU_1K{iiMk9=^{^7tnat)5Qb z7)N$DXLR40BU`BqJAgBO?2ibqFsH|yW$S>F^}B@Rud!N3=Rq&d`tYk7{GWGyj$yU6 zFh0>WahhgsCP}KMe(cMqdb`>wUdBUL=8P=D6)F0HN`tjA4}ZQ#XV{XyH6#|Ir-Rjf ztQi9IwGEA~eD_7XjUsFte^d+n-Kt22btKtU!OT3vwOV>uBjfB$17^(6$;VO?`d-88 zf}Fdn83?CRkU!0BnbLmpL>N4n@ab9!bNPL>4DQupR<-rR=6f@wO!rO_=gYgPYHJZC znl`x^lUH`>zTwC}hPJ}rLd3xi3}rv$tY&{5GbLHjI{ga2e7!fDUx4LIZ+;vK?DHrl zQ)Uvk`7?s$(W?yb=zCOWob+3s?!#hzQs_Gna;5p-c^ares^2Jk4^ z175uFdd->jaspcCVh=Kzvt9%*7MAFI;9&g#5ROUzF_<<=^BJeYhK!a>Mjz(8?8S-euYPX2g3-Wy-_bVSzf|7eDA zTu_+n0E1GRB*k56WLz!Da+ABV(yny+JU!p&$VV_tWfeKD`B6Mg-d_qko3N4u9>`$< zQzs`UTQ1!@VGD2IEmj zxpH=OY2=s*+uIXM1MO7>*Rs>FHs?df0L*FzUs~BFDP~AAU5jy z!sbH!v67cSqQ|7FLR=Z$?Y9eK?&C}x&>RUigo8rFZEpbhbd~z%$iF9X(8e>+mM4>> zEJml@-N?#uxul$?rWVcq`OV(o!ja|MRk&pDX&J&Z8whLnHNgPhHN4Afc4LAmLT)am z#i?I~zth{B86o72UkKc3KN>H6CJ+3P94VVE_ zPx`Or{nmTybCTTGVAK(UMDg-|cXxM6`)wlddeXbSqX7u%L})cWsaRPKTDS#1FI}{p za#XK3=#APh(%{t!l&K!NOvP+v2}XGP0T#rHXqOLH9)$5&TnpRs*#@GP#zlHxMSf&`?P%^d!23eT5xhw)ZY9}fznf? zl|iC_hpyZ3o*tz_Pu6sTYqQ!2%gAlIX;;pw^0fkoGrk7^KmN_I)_$=5y}#ew%g(+6 zCI$hcABipU7wjN<9Mj^W;f&KEwv+>>ii7YRF4M~u0s{OYBz`L= zjN7T8qYbRfFpihh0qxF`SCNR-@Pn7q9x$zbO<GF4)8v)cIzXbYIXBv5RWOeU~(p_Z(u;m9Lk3a5^7fu*HM~6@a5KDrr}u z5{-xPl%#L{&&jfkq`zLxBxF4=acxbtB^Z)2UV1=?)2j_9bRdtX%0=o^n%bJ+Fm>aD zTxT&KGpTFlv+H|cN;dfJxOu(n^}spkWw80Zj+dv)H1f6g=H|pvl8TgP#^T##51zNS zj`AOWMt}c`h=PcY&ZH(jqGtIG6HhM!tQpB|f#64v8f{5_61uWRatg0Ww$kg$1zi5MgI4h@!!mD>oBu0Z)A@hV%}v4x~jbz zzt&^*!B1H|UM+YB?1lgAyo%@Ruu@ovD*Tg54F=Ch-C!ODn(!&3&-J6i*M!0-k4dM~ z>l6Lb-}2eA2|;6|##X2LWWx^P&>Y)od0$xSii&5!?=@pR6>yIuT9ZQk%Ug>Ls1Da9 z?D}=Dm7T(WN5Si2MF{(wjF{ifky6*ojkV|)^mW_V(p>>$lI9=nAKn@hNgFS1cQok` zPLQvP4%2IFimcZ_7*zK~*E4RP{Z*A`$#T^sH*)7<7*j63O{q$m>lAuyZ7Dmj3oq_Dlq-`tY|8cjs$j_?Qu*ucNhns^kK9 zT!i^xdn7=&=l5Dv@R>%o*yDg4u*O+9QLmnk$hMOP*KBUo&n5>R|OA0cW7$^300uO{n+E>{@!{Ckz2M59C-96A|Rwh|> z&u!~sc>bU#n}S^#+)Xq(x1d1Sp+Jr>QaEz;q`By{M z{+ZpOm1c;zn*FOh4Gv`I@>2djMTPX?QA4%;Qy@6Ud9z`$!niqdV->K_p~1(aLl0TQ z7}MFj$%-+kXkWfstG(j`;L+KLLDHaG;9kEtYy|=}QXR&xdoVO+Ta7 z_S`r~)n*W$wf_{(*D#iK^W&;?n-?)h8@<+ZHv1~hD*dJmUAhmzreURg4KfNPcQ584 z-5%;gAAbE*XZN>7X1I0A%zZHFyJp&&1G;)RG)#)o1+x6_-w(G)#zr37PTt*d2?(q> zryulzbZD*FjkA7U|G-)EYS zvL}oY$`{WWmud=H5e@Ff%Rg+#0dGFbb%DE^Z?9slgh9)ykgZ#j6v%s|%RBG(#GYKU zR)0Ue+PZog-sH~J+DrokL&Ca>SRcj=dD*-=W)fNwbX?9C=HGXQZiO^>E3Bo4u^#W@ zc75gh03OCHB7i>_@D(Pq`7`7ZcW0u_c4vYocJ|AUf1EcjTRBJp+-Gn=FG>d0%unWA zGWR394!_-0j5TB@m4@iEZR(9nr-@v!j8Nhm4E zNyx~k=-3&kXjo~<$Qb#USUKPE@bFMF2#D}=3A1zaaQ(dr3gGWF_LPkMFgEnZy{yS1| zu<&pQ2=MUGvw_g_0C*e(TkFfuXo@V@8c7Z8+^mXVc{S5VZ@)Y8_`)zi1IwEARiV{7N`;pye=Z|94IbWcz8H?q`$aeV7>nW$AL$neus!F zp@wAUibum0f{ZU2pIh65Ld&gwNnq|agZhS!XZtPaFSLJ<{oer#{r^JtU%>u1u2ld! z91Qf~!QlYJ0FU4(#vIuHLlPM2erywpzLs}hF7?J(>!a|10uz?AEPo-miLDqH-{8+1 zET<{R7-a>0J$H%HeMX(Fxx6bZmA7bYO!-8vO~)>`Zz5@vjrt-|_;viU@#Vxl%|{sm z_{Bf8#Jjm-QzwTVyRj0EJ)CIu?%BjO%JFra{Y^19N_ay| z(`vvG5)-`SSHQTw$e1>CAP?5Mm^rcl>rXr|ma`P-b7*~fYJSjooxLW!*x&Q91j08I zLI8TD%E0w7xrh0~t*WqC4rlHgRWNxzA?-$R<(PAX*iWVg#{B6 z;Mv?&@MCt#LI5NJrJ^AtMh;V{7o8+_UN|k;eG0BPU?H?r_Ac>(E-jJM#J0=V420bH ziwdU*YWCdGU6J8FtP+iE#b;C%oM3vUkUO)ek@*JrmahXqGlFqx4-ZVSr+GI?1J1if z3y}09`3qmbFvWCVKwHz!N?kW}G{qhKcL@^d+@x3rn7QPmwc^83YKlh6ggD@jeRLmzuWQWmFzH*hJA4Y7?HM?f}MQSAQhS`i+ zjF(hJ8NKNROFFP?Ps%z`wOZ6?jZslPVUv0DMtEAgTf7TDL81Qc-nfKB(WN*(AO3&P z=D*X3X*h;9Od`PsCI{CAQK725w-a$eSj7W(1DA#}NM~63Dci(s!ZQf)V8UKOJMSre zxqPcObMWNH(G|3CkuDlZraiN|BA#+r8x6<@03$0cFgR$5=a*81G9tn{$!#epa9aEB z#Tb@C|n;XU$mPSWcgB2f9@@eB^ zU2iUo5C~jL8Pg_{tXg)A86QlFPByG2)0zfv_LAZ5KLie4zRK;{k2DIA%Som+WPTcN zhpD4U6_THHCymY461fayIW6xHB+W4(r2}7r8;2hv`n*~*^L0;}##mKGn_U7m?|6&b zM4GwUk1xtZH9BWB#_ThB_p%U(6X;Dg`Z*OC$Owp@`#`X@<#WP1TkA?a_ut&n+Ec8$ z+&wY~L}Owj9>K}u>$*c#?;mg(dFch1k>w9}o2>$3GvKm@sy?uhmeNAEK3` zscTIj)-??kB5_oZkiq{5^S=cqF=R2A?CUJQ7BPKC#CCO`XRG{epfT&3%XDuag)LGk z1Yo_^HCJWbM+pOTFoFPVPH=!ZlDopg(XQDX&*zQrlAidA@qN+ z3p42M?m%cojovi(7i`XR;O5Ica56>;EQtr~&?>)f*Jf_5<|(=lG;v=p{(y-lIkk2U z0UWl0J)4UZuk~1l2Yw`uR5`V>(Sjw8Z^b4%ltVl8e-stdFJxUz5SeciVBq-ua?}~< zTFIhnYnZ3GZa5p|V|>hgloQ<*i@T~iXpb8pO6>Owroy)Dp$sOt|G}(Q`o3`aaeN9# z5Pz4^`;~aXSZ`(X_)&x4Ak*y^60tT??R_;oXeng>a$;(=5>BB=aamUQN8G)^6XliP ztB^t0Wyf^^#(}=P+oc%u?h~b}QAfvl>Q2mi8_7tTc+?4JhK-Mbz<%w<%h~X!s_pOr z$)a*q+C#K&&Sx)=2{b3nKVoHf&xpWp#5RUxMf@n156DUQEIpY|=KyhK# zmz`D9FH_d+`Wq%%H=?@`K((%5Oxej@!UhxNDre}mlasZ$fRidTwLmT>A~6N0ErNgU zuBj#?-}|5OZxus)aN6xp-+L2}jwoO)f`hc-+}GUU4wAJ>{^-eYRb9|Y^k8ZeM5&ZU zGq8VzE^$)&!t$!Rv|5JxMSS)=Z}*dDdm^MU~{=;0Rx(4ct>OgmP8Ak1l;v8BAiQY{60PJU_?`43@?DYOT~ zF1sek9;UWm#uj#0PcN2k;UEB2Ofec6e+-|_Jn*Mt4+vl*ZR*7S#<0bI)_VBR`QF9& z(}!Z`L;Z8O!?^f!p+&aF@x@dWk@gs}61R%tcq1|W1E=k0k-0%ZxcHlDEBkz5J3N1K z>H9kh?wM?b`B4Ltz$5yhu>;I6ew0oSK%uW_Zt=!ZbC8ctsK0NtdN8MXlKUghu*l<0 zRSB#-T!MX$BfDM$OX=-1kU`a^SHW!yCCL(jUpTWM6w459lE0dTG%T7>*ktS_4v6qA zX_GGb1p*icIl2uHj?Gslu{DlR$4m5c#kIGH#Hme5#SYe%H>UU8oGIQ*%r_0jZYW2~ zN^(9YV3~b)Ust%T65K&ybFykq^BTiT^1Pwiin>}kiJy_d4`$3ug6)Ty2Z@uX_QhcW zogY#*1OS}W*H*(*!v&T>46vPLGmg^D6t-%0?4QY>brN5wX0-eI5>C(&pNm(EDZ5)J z%dM}fUFIsmQx+tY?Xm|?>2o$=-?WI+f~Kj+TGWS@)yHW1@Z=9s^XY4E($WvrvaFxS zyS`7jEcKUpnkhIlJdpHe^BA_$Iz=&7 zs4&J6y|o*%Pu7m?i^7>xXxKH^|5yvU6`j$>O%NB&n7|DChh`-&tw8`o?I!0~`-XvD zZy*5B1>y5&sEKrWab(WsnBN+5#7mzC?$Q3kL(zN)fSMRep|XXYo&4v=r>^log_j%> zD^+oF5Wsi0K-KFiyH+Dgu*Aq;6UG|#zQ0TEF+ZF1h4;jm0g$Z-BF40|I8pI;2>!8* zSwN!$HHF7FLPr4E%701;rbBlfVUp{K_Hlq^h;R?t9=jgW+;z2E&1^-(@SVOvL4au!*U*Vy`W28u60^1x-K~l& zND69Hj2hkrtvWI3>0Y0jQsCm0GI*`G$H`2$zs)@Y$?+!FDbWIYccePveu*G$>$Tn` zqmOu+2|6|Xk}R-(P$kH|?CYn$Rt==szUD1iM-kb*dBHl8@myW#`f2kP?jZW`l6QYW zBTR?5En6ZYi9v;*h4!GDz!vj~x%B@aWYUp??DzUM0n>ixrzfwnRXp>@h%(9p=B!+?RgS^{P-gxS)01W% zn<9-Wx+2)~Dxu$B*{^g)D4Jn$aBd3%2++}Ecxrkg*{i^MQKtHPZ1B(VlX9|t z^ea$md?>(Xms{4hC7<^?Afni8rD|{!ERqKSxB!`Vxs5WrUi@XiTTtiR(rz|;_!{&q zy?=`b0pR^Z<&|=hcnBae2?Ds#GF*y_jJqg4fdIJc67Fe_gm~v{Hm@-Ln%c30)<8nA zMCo5*lcl`x7gN0w0FB+-&rjz?v7BJhv5d5T3VD$$p+4%71M{;i+K;qruDz%P0N3EI zKC*PNgIR8bqxZo(qFwp?9ax%)GK*)t$PmE(x6r-?Rdg{L`y)@AYKOjjq;Sj8nj_8F z#%s;b4$&eg1ZO~uMyV1XEh;zk6eqK%YAvwO3rjIqp-8 zcvA>K9~6hz&C!Wtb6rD!C^Jt#SHOQ%kRT?Wyf1p#_;&uvD2RV|i9K2hXH@#6YaN%- zrSoAu`dQo2$^NHh&0Nt{=r3IHNu*6wDfFlKE=q9`7R($8yVt+%WL=RQBA2e%6*drbPZ} zK?U351JXhapK)Ni2J{U$DyBc${%AXD6klL5p(Qtdz^9QS8CxY-I$ZW#vTj0_GuLuM zmWg>stZk#Nb##JUyvPvY44-o5Fmw>T9~9nndU~X#Wm|eL>ea~i!HJbQym2s@WBX;m zq~gqFSN`WE*gRVG()y@34n%trYv4&*Mn3OU{e4gLTT)kX^NTVY)codvJ(otnrQq;i z9Rl^G23SuvVwqkEz%t;yivNnTqoQ$f;tv+h$iDM@PpQ_Jg{>=!W~TQiXO$4Z?kdMU z(p43fr?=N8=oIU(m90-4{L4po0xP`a`8ATvq32r-PnEJJUW2&%ldO{~5ccbz4wD0K z^|}rzU>~@G?7k)3netyiNqQFPs_sthkYYwrO z00l4z?71Gm)P-%oq^-P6$hj|9&NOw!W=NVj`|g%*@i6opp*p&u1*MzY0Rrd@F*!Ak zr6-%WY>y3KZDAhB>Zz_`HwS7C?E#-|_nY5b{(cbJ5lwBzaP~;;TdvWW0`mg}Z-Llx z35YkWV#&UZVfnx9#c){%VOnQ*nX*mZ28(3|97>&}-{T3B+(u`Sq;tVsRprMk2$wK# z*WUI9NnIYY#fWYBjfYU`n5MNT0;;3zKv`{Cr=>TKLZJcs?mSZ{2|(JR4l%n1kGBN_PI*#sv?_Q zaoYBMU9naR2=|{bNq=y@-_KX&uB;x z0zldGi`{AaRj9D7VBt92N41oGUU`9K54$R1D`ZY6MoYOZwq-xvy?E!GV8A^&v~9S1 zM%ya*G_e%RV+#RniH&O~TRnW)mCgo3-L_oRTbABxmO;OL!FIp~HZSQ8%h~58uT*7K?bH>Ox zss%!6*;;qBT7JWS&1=Upzeop@;KJOP(PgXMLN<7a^IUTAaQkFl&nq<8*`@MkA=coa zH69o$x_jam#M@L>5)}o|A_903oR+#Psl@M&lEv$+gH0|!m<)LjuE{7_QSpv##ofs< z+z$8_OwxwSiS-sN$?dYqojsin7Qb7=Vsi1zI=tS!tWwhWE@%F7waHkW+cURU(0(f_ z#94Y)%f7~j3FLKFO6nY8lbuV<#j6%7WVy!O++=D(DG zxqMIvaNoI99d0$02d}6DlfA&y&JXvhpBQecMW+j%MN2^p>Ynuc4!dODYjC(odo24? zH3^M$0nglm$IZDq)OjC=rhUJh-p)V%iSD7h5Vun2}bY1u^KsX=Bj8}Zq(F>~Y{ug$ex zvmnO2Q`rdDaLD&P60eggsnqYM9+Wr;Yu0`*9!Uvz5st=nY`Bm zRs4nkK8bv8dN3gM_B12|of)}QJd)A*Cf8kT3|5Ms992WDB;pC54g>Y^Rl1*&wQl{t zNIbm{0jNU&=jqphf=&@5*QjmTjxD8-L>KFo=7emn!dW6Z!3fLtXk~* z{iDLYPLUpT?k9J>x^t1r~OM8t!xmfcdOva3bryOGWNAzldXP3#@@oQp(pK9D)g-6@!u1NzuPk- zcaKdZhKaXgI|5Yrl9V?C`!UqZS%rg;av)c8%DOhxL@R??+R>No8Xx7?0!) z`4c?tQ~FDL7y%_%za_FOefN_WMc?>bYXOs;E*N6p3p*LI+Q&^%>YoItma%0*1J<|L zgXj56aB+Jq;h=ay%I<8e;|M0+>w-EKmmz`V`iJD|A9Bk&hBeWuByFr&E;_6%Ge;&RsKTY+9D4eYl_Qd> zQXMw>oS%5Ox2v=YkYkl)XwPrbG{y;$rnD<3B~_Xm-8h%-h2)?G!6mzfTYG}4xIkwl{ z@9kb*=<1a^RjEw$$@_Vz9WkRXNqmf8uKBa%eL1-~);fPH*#)`)M52J7vo9$tUG%DT zE*G-zoWt0t8SYaV&eZ)a&E#IMU|#IMQEDW7Gn&$1>3cR*{L{!Cpc_~EK6(2{*EhX# zM~-SrR55cBNX3%ya9lp*yVE8@50^Zbv)b+D-81xhh1&*1Zy?;@Tnte4t+8Fj$8dzN zaD&_Rs1QM>Sj;u{dOYCI28_)d@}`sDZd^m7)=KDLXS;8M*C9mqybknMLc zT`}hyG0*4f-L=hAjkg|NTji}9bzUt;e&FmK6^;+~3Wxq@tXma1&SmfokVw^!YM z3Y_b*C*M3tOWiWx(Cg`a(E2JmSZJ`aR1g6=D09m96jkFdZV9l{fO%oK%zsvNmU$@) zKjG7;C#;V%2hD$ij<Di=E%LCsd7+&~#DzveT`%k#;waSf+1)5q?_XD;y}DKfGMO zK%HWLFz*tbExuiRSsr6I)Q$1i8jN%A9yq)-J|{PsfB@pB9{hXmNN_6((7sJx^FMc; z$3nd&X8Tszu=UWg=oE`!1eZ=4&<>Tq5qYzi>@V67@X^I>)hN$fwW}UVrf-8MCrinj zx3$eXs`zV1u0;83Y^PW$qGRWq+s1mHz9MI1zYT{ilPC3JBB9QJ%OLQ}uA}M8+G;v}mF-TaW^e;qTImCZ7~| zOd1C82PzhCV=z4PDe`eM;;jRQM6`skhN}0~9|G1+1#dUMH6r00>0^5~xCQCGg*!|n z?>-Va?HydaYh-Pbn>S^A)xbET9N-upeE95^h4A25>?67;!?!fn30f*g-=74oIw95Y z?)VjUH_WKd5cw`SA1K3FR@mRekk=_V`6Gx3-iXpJ(SzcmoE!b~j-A63oj0y>C3<65 z&X(Ue`)%Kn_LbP-84;k8cWT1H;JcKG2E#n)yi3!LVl3dyi(&+nztM5iGc1^?XHv)1 z+zJ)MIcM&`hq*Zn5jO0knN5(QGLqbc{V4Rre+LZ+n0)9`It{pdYfKKT3{c&!#$JE$ z*9<>dRVl;@iWVxpf0mVFdRCn6uD5_RHdcGc)_){POm z1;h*t#CjwX%>-ffr%T6RjCa{0do_3~T{BUCCYBsc&S{ItUUY-W z+n-n6q&I46Rj0{ah)hGrzn8KdRU0gHfHnVe5%QoTNCmcV2aY%Rdh`^^pLU9On_S|S0?OYcJ2Mmk*B zqg@4v-PxU+F7k}!{tT3zHMytPc(ohOqMg-*&Xh3AZO57U`V7ae$On!q{vVxhj# zS65PhwB)WTl~e%_Uen>vIGGW?8O_IYH&r3$XZghbUz30hTUx{~N_hr{;|q>3&S%rvaZg7HWksyUal0cnzhosuix2$%=Lza7yTlLOJ57pk2`4M06}a~ zhZkT5!;$2g+F0t91IM8&B5>mjI`oq}you82qRf4kuJ)TED;d^)=GcO)y7Jn)r6@!(R0(Ew?;4==wK=*^&5(8 zWOD?$voE{HqX#fT0F;Au?rNWjQM zT~99l2+%EIa^nrR(6)&vx51Ywt!X_F?vRW(``wjOhBc(p?Cd#p{4$oQARiIi5J6gO z5sS)VY-ns~zGM$pw7r8--zt6nBS`PRbrooEY(PP`xbqf}sfPjfn;|NWZd!VM*k zwz}CQ$!qU5!1kO_sgduxmai_<5&O!0dUWNFz)(4sg|VWxh~R>eo?&UldSL8A!;h=C z>?CIqZU7bv2{7&lx%-G`-jEO8wsf{+DPDB7A|pl9mjB6#{w)b+d^85UJ4xmf{C!1D zT91bIJ#WNzS6fyYNgRdpp#eSAho&WiMuT-hqePCUW!;$JK;(0*N&^r_IGeBzsqylc z=0$=aOJUY6tiy}Pr=_uU%r5`j%^_Du7ZBGak$cFIoa>qK^L8A?>PauMvzNZ{FGPB* zAH|2nvbV#>^AtiPE*Yg`=?oSgAho^Hg0_sXf%ZEc4rh0~0Um36+GuRsoTbW>r@)A> zIXEY3$t`MMFK8(RpE<$Q#Qd>a(s8%KRpEVtQrNb{Ym1T_A*8h4-@GP8&f@0z=4 zF?MKYj!Kk?FPGW6qrI+ZT$e8NoU=5_Z@IF|!1iqDRsk%hQFl`ujKw zCu!rPnG*C|H5P6ya_1lPd9%{DaJDz6TBhM=!az`<8olQwaeYrUm{Aqt&<756E?Hb#S|W5 zg4sa=a3=`#iMy&ewq^Q@cWj>qIk^)%lKt^s?2oTqjkJG)tQE7(H&>@@4$B!Xu!9W2 z$?Yuj5$X6x+xB)Hi@ui@rynp*>=!YXJ_}3H>pKei77&e?CQ$Az=tI3H;r_<<`*+qk zI_O9T+)qo&uHS)gB6#XXfA$ple&@+q@?_{^LVBvyGI)J>2LaTRdWAmzVgz7Pja|X+B@n=TK{gCn|}CKPJ^rwO@NF z)@9Qh@89+l4?bJk#JMg-@SyOi=Zh9iQ~w}(YmFT9B~Ih}N6Qud$(x)i{`aarO8&Um zw*r+Yw|>zjMKYcGDc&i{zYiAgY`+jzbZq^mUghc0KQ?<`4w^Refv?w__Pwc_yKSYP z6#<8ie$2Yl^xWaY(^EHJnr(Vjbuf34b>Xv9#;@EtY^%a$S5+Ll_vF;BzSZR`Rvx<@ zYw5do=QksR&l2?q+^=ntK052_oBZV&Vk?*4@-Vn|D<{RcKYa4^{F*u8x?WecYW$s- zaka`nJobLKb!~CrwwB6y##b5+N__Y>T_OE^jK6|~yw9(s9cQbL-P+%oAeGu9_;Qzt z_tXtrekzB`M&9oEHL1Y*_jN<#m)|V2Z*MF#Wa-eAjaT3Hk}V|tcH!d%C)UhOU z`Su>&t+UM@vN$vMu|0cr_t(6?t91p9rYw7}mf^qhR_4s;gz4oo4o;kI=u-Gc`NxT` z_WCk;EK&z|?3nfHk#~1zT;!6ZbMJ~GeoY2;;Ner|h*ccOD>?$0AI*wT5pq^O_IRWCZ-8@~W*6e~nT;%NYS=BjE@}Th515taS>Kg=p#DBD=gu61i7cyZzw7Z? z6>k5$`l87P3$v)B+nC;k_kB%z{NkvG-Hk<+nEZYpYoI@6Tb~xg+^=NxFTM z#sWXzcgOekzTNog9mAF+bC#V`6I7}io}?|D66q*(vUufz*#2KDjJ5lV+)o3?Rnu?F zTy)j$I-w{P-F(M=mt=BtScF7q#1 z#h`xYqO0P}FGy>BVD(%5|CIU# z09rR{XrOIiU}a!Xvvj%?iiX_$l+3hB+!}a)=mWdy3{oH)QY$jktei4SiUU%Mf)jHK za#9&AbQC~H=&c=SX{#w*m2-YUWl?5&MhTJ2RV&j!9tIkq2sgk5=#7xfT!>fDmcX*S zYda5AECN^TnVXoN>XVw6UXsCJZfZO?>w^bSUKmwAJTnC-ZDC|F_vVZ3Kxu@Rg7ec# c$`gxH8ITv>zL0zV4ycO3)78&qol`;+09yY*w*UYD literal 0 HcmV?d00001 diff --git a/filesave.cpp b/filesave.cpp new file mode 100644 index 0000000..6e4ee17 --- /dev/null +++ b/filesave.cpp @@ -0,0 +1,44 @@ +#include "filesave.h" + +FileSave::FileSave(QWidget *parent) : QWidget(parent){} + +bool FileSave::m_file_exists(QString path){ + QFileInfo check_file(path); + + return (check_file.exists() && check_file.isFile()); +} + +void FileSave::m_save_file( QString content ){ + Views v; + QFile file( m_filename ); + if ( m_file_exists( m_filename ) ){ + if( !file.remove() ){ + qDebug() << v.m_msg[47]; + } + } + if( ! file.open(QFile::ReadWrite|QFile::Text)){ + QMessageBox::critical( this, v.m_msg[48], v.m_msg[49] ); + return; + } + QTextStream out_file( &file ); + out_file << content << '\n'; + file.flush(); + file.close(); +} + +QString FileSave::m_save_content(){ + Views v; + QString str {}; + QFile file( m_filename ); + if( ! file.open(QFile::ReadOnly|QFile::Text)){ + qDebug() << v.m_msg[50]; + str = v.m_msg[14]; + }else{ + QTextStream out_file( &file ); + str = out_file.read( 9999999999 ); + file.flush(); + file.close(); + } + return str; +} + diff --git a/filesave.h b/filesave.h new file mode 100644 index 0000000..b9328f9 --- /dev/null +++ b/filesave.h @@ -0,0 +1,24 @@ +#ifndef FILESAVE_H +#define FILESAVE_H + +#include +#include +#include +#include +#include +#include +#include "views.h" + +class FileSave : public QWidget{ + Q_OBJECT +public: + explicit FileSave(QWidget *parent = nullptr); + void m_save_file( QString ); + bool m_file_exists( QString ); + QString m_filename = "/tmp/reports-finances.html"; + QString m_save_content(); +signals: + +}; + +#endif // FILESAVE_H diff --git a/gendoc.cpp b/gendoc.cpp new file mode 100644 index 0000000..cba4759 --- /dev/null +++ b/gendoc.cpp @@ -0,0 +1,64 @@ +#include "gendoc.h" + +GenDoc::GenDoc(QWidget *parent) : QWidget(parent){} + +const QString GenDoc::m_gen_tags( QStringList result ){ + Tools t; + Initial z; + Views v; + QString combo_month = result[0], combo_year = result[1], total_cred = result[2], total_deb = result[3], balance_color = result[4], balance_string = result[5]; + if( combo_month == v.m_msg[3] && combo_year == v.m_msg[3] ){ combo_month = ""; combo_year = ""; }; + QString result_r = "" + "
" + "" + "" + "" + "" + " " + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + ""; + return result_r; +} + +void GenDoc::m_set_t(){ + m_t << "" << "" << "" << + "

" + combo_month.toUpper() + " " + combo_year.toUpper() + "

" + v.m_msg[51] + z.m_currency.leftJustified(6, ' ') + " " + t.m_currency( total_cred ) + " " + v.m_msg[52] + z.m_currency.leftJustified(6, ' ') + " " + t.m_currency( total_deb ) + " " + v.m_msg[53] + z.m_currency.leftJustified(6, ' ') + " " + t.m_currency( balance_string ) + "
" + v.m_msg[54] + "" + v.m_msg[28] + "" + v.m_msg[55] + "" + v.m_msg[27] + "" + v.m_msg[25] + "" + v.m_msg[24] + "
" << "
" << "" << + "
" << + "background: #fff;color:#000;border:1px solid #2D3037;text-align:center;"; +} + +const QStringList GenDoc::m_gen_color(){ + Views v; + const QStringList r = { + "#1e7e34", v.m_msg[56], v.m_msg[57], + "color:#00b5ad;text-align:center;", "#57B4C0", + v.m_msg[58], v.m_msg[59], + "color: #2D3037;text-align:center;", "#a71d2a", + v.m_msg[60] , v.m_msg[61], + "color: #ef325a;text-align:center;" + }; + return r; +} diff --git a/gendoc.h b/gendoc.h new file mode 100644 index 0000000..761d0bc --- /dev/null +++ b/gendoc.h @@ -0,0 +1,22 @@ +#ifndef GENDOC_H +#define GENDOC_H + +#include +#include "tools.h" +#include "initial.h" +#include "views.h" + +class GenDoc : public QWidget +{ + Q_OBJECT +public: + explicit GenDoc(QWidget *parent = nullptr); + const QString m_gen_tags( QStringList ); + const QStringList m_gen_color(); + QStringList m_t; + void m_set_t(); +signals: + +}; + +#endif // GENDOC_H diff --git a/initial.cpp b/initial.cpp new file mode 100644 index 0000000..f628742 --- /dev/null +++ b/initial.cpp @@ -0,0 +1,64 @@ +#include "initial.h" + +Initial::Initial(QWidget *parent) : QWidget(parent){} + +bool Initial::m_check_file(){ + QFileInfo local_file( m_path_file ); + if( local_file.exists() ){ + m_read_file(); + }else{ + QDir().mkpath( m_dir ); + m_file_create(); + } + return true; +} + +void Initial::m_file_create(){ + QFile file( m_path_file ); + QTextStream out_file( &file ); + m_set_content(); + file.open(QFile::ReadWrite|QFile::Text); + out_file << m_content << '\n'; + file.flush(); + file.close(); +} + +void Initial::m_set_content(){ + QString content = "# --------------------------------\n" + "# Terminal Finances 1.0.0\n" + "# Developed by Marcos Oliveira\n" + "# \n" + "# --------------------------------\n" + "lang = " + m_lang + "\n" + "theme = " + m_theme + "\n" + "currency = " + m_currency; + m_content = content; +} + +void Initial::m_read_file(){ + QFile inputFile( m_path_file ); + if(inputFile.open( QFile::ReadOnly | QFile::Text )){ + QTextStream content(&inputFile); + while ( ! content.atEnd() ){ + + QString line = content.readLine(); + line.replace(" ", ""); + //line.remove('#'); + QStringList fullline = line.split('='); + + if( fullline.first() == "lang" ){ + m_lang = fullline.last(); + } + + if( fullline.first() == "theme" ){ + m_theme = fullline.last(); + } + + if( fullline.first() == "currency" ){ + m_currency = fullline.last(); + } + + } + } + inputFile.close(); +} diff --git a/initial.h b/initial.h new file mode 100644 index 0000000..d38d266 --- /dev/null +++ b/initial.h @@ -0,0 +1,33 @@ +#ifndef INITIAL_H +#define INITIAL_H + +#include +#include +#include +#include +#include +#include + +class Initial : public QWidget{ + Q_OBJECT +public: + explicit Initial(QWidget *parent = nullptr); + const QString m_home = qgetenv("HOME"), + m_file_ini = "config.ini", + m_dir = m_home + "/.config/terminalfinances", + m_path_file = m_dir + "/" + m_file_ini, + m_en = "/etc/xdg/terminalfinances/TerminalFinances_en_US.qm", + m_es = "/etc/xdg/terminalfinances/TerminalFinances_en_US.qm"; + + QString m_content, m_lang = "pt", m_theme = "light", + m_get_lang = qgetenv("LANG"), m_currency = "R$"; + + bool m_check_file(); + void m_file_create(); + void m_set_content(); + void m_read_file(); +signals: + +}; + +#endif // INITIAL_H diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..815ae7c --- /dev/null +++ b/main.cpp @@ -0,0 +1,26 @@ +#include "terminalfinances.h" +#include +#include "initial.h" +#include +#include + +int main(int argc, char ** argv ){ + QApplication a(argc, argv); + Initial z; + QTranslator t; + z.m_check_file(); + + if( z.m_lang == "en" ){ + t.load( z.m_en ); + }else if( z.m_lang == "es" ){ + t.load( z.m_es ); + } + + if( z.m_lang != "pt" ){ + a.installTranslator( &t ); + } + + TerminalFinances w; + w.show(); + return a.exec(); +} diff --git a/model.cpp b/model.cpp new file mode 100644 index 0000000..bac0b53 --- /dev/null +++ b/model.cpp @@ -0,0 +1,71 @@ +#include "model.h" + +Model::Model(QWidget *parent) : QWidget(parent){} + +bool Model::m_insert(QStringList insert ){ + QString values, fields = "tf_value, tf_account, tf_desc, tf_op, tf_user"; + for( int i = 3; i >= 0; --i ){ + values += "'" + insert[i] + "', "; + } + values += "'" + m_user + "'"; + m_sql = "INSERT INTO " + m_table + "( " + fields + " ) VALUES ( " + values + " )"; + return m_query.exec( m_sql ); +} + +QString Model::m_read_show_data(){ + Views v; + + for( int k = 24; k <= 31; k++){ + m_set_headers << v.m_msg[k]; + } + + m_sql = "SELECT * FROM " + m_table + " ORDER BY id DESC LIMIT 20"; + return m_sql; +} + +bool Model::m_update(QStringList insert ){ + m_sql = "UPDATE " + m_table + " SET tf_value='" + insert[1] + "', tf_desc='" + insert[2] + "', tf_date_update=CURRENT_TIMESTAMP WHERE id=" + insert[0]; + return m_query.exec( m_sql ); +} + +bool Model::m_delete( QString id ){ + m_sql = "DELETE FROM " + m_table + " WHERE id=" + id; + return m_query.exec( m_sql ); +} + +QString Model::m_select_distinct_year(){ + m_sql = "SELECT DISTINCT SUBSTR(tf_date_update,1,4) FROM " + m_table + " ORDER BY SUBSTR(tf_date_update,1,4) DESC"; + return m_sql; +} + +void Model::m_set_sql(QStringList sqlist ){ + Views v; + // combo_month, combo_year, combo_month_index_str + // sqlist[0], sqlist[1], sqlist[2] + QString sql, sql_c, sql_d; + if( sqlist[0] == v.m_msg[3] && sqlist[1] == v.m_msg[3] ){ + sql = "SELECT * FROM terminalfinances"; + sql_c = "SELECT tf_value FROM terminalfinances WHERE tf_op == '0'"; + sql_d = "SELECT tf_value FROM terminalfinances WHERE tf_op == '1'"; + } + + if( sqlist[0] == v.m_msg[3] && sqlist[1] != v.m_msg[3] ){ + sql = "SELECT * FROM terminalfinances WHERE SUBSTR(tf_date_update,1,4) == '" + sqlist[1] + "'"; + sql_c = "SELECT tf_value FROM terminalfinances WHERE SUBSTR(tf_date_update,1,4) == '" + sqlist[1] + "' AND tf_op == '0'"; + sql_d = "SELECT tf_value FROM terminalfinances WHERE SUBSTR(tf_date_update,1,4) == '" + sqlist[1] + "' AND tf_op == '1'"; + } + + if( sqlist[0] != v.m_msg[3] && sqlist[1] == v.m_msg[3] ){ + sql = "SELECT * FROM terminalfinances WHERE SUBSTR(tf_date_update,6,2) == '" + sqlist[2] + "'"; + sql_c = "SELECT tf_value FROM terminalfinances WHERE SUBSTR(tf_date_update,6,2) == '" + sqlist[2] + "' AND tf_op == '0'"; + sql_d = "SELECT tf_value FROM terminalfinances WHERE SUBSTR(tf_date_update,6,2) == '" + sqlist[2] + "' AND tf_op == '1'"; + } + + if( sqlist[0] != v.m_msg[3] && sqlist[1] != v.m_msg[3] ){ + sql = "SELECT * FROM terminalfinances WHERE SUBSTR(tf_date_update,1,4) = '" + sqlist[1] + "' AND SUBSTR(tf_date_update,6,2) == '" + sqlist[2] + "'"; + sql_c = "SELECT tf_value FROM terminalfinances WHERE SUBSTR(tf_date_update,1,4) = '" + sqlist[1] + "' AND SUBSTR(tf_date_update,6,2) == '" + sqlist[2] + "' AND tf_op == '0'"; + sql_d = "SELECT tf_value FROM terminalfinances WHERE SUBSTR(tf_date_update,1,4) = '" + sqlist[1] + "' AND SUBSTR(tf_date_update,6,2) == '" + sqlist[2] + "' AND tf_op == '1'"; + } + + m_sqlist << sql << sql_c << sql_d; +} diff --git a/model.h b/model.h new file mode 100644 index 0000000..b0fb24f --- /dev/null +++ b/model.h @@ -0,0 +1,30 @@ +#ifndef MODEL_H +#define MODEL_H + +#include +#include +#include +#include "views.h" + +class Model : public QWidget{ + Q_OBJECT +public: + explicit Model(QWidget *parent = nullptr); + QSqlQuery m_query; + QString m_sql; + QString m_table = "terminalfinances"; + const QString m_user = qgetenv( "USER" ); + bool m_insert( QStringList ); + bool m_delete( QString ); + bool m_update( QStringList ); + QString m_read_show_data(); + QString m_select_distinct_year( ); + QStringList m_set_headers; + void m_set_sql( QStringList ); + QStringList m_sqlist; + +signals: + +}; + +#endif // MODEL_H diff --git a/start.cpp b/start.cpp new file mode 100644 index 0000000..99097d7 --- /dev/null +++ b/start.cpp @@ -0,0 +1,29 @@ +#include "start.h" + +Start::Start(QWidget *parent) : QWidget(parent){} + +void Start::m_run( QStringList files ){ + Views v; + QString user_filedb = files[0], userdir = files[1], absolute_dir_filedb = files[2]; + QFileInfo localdb( user_filedb ); + QFile file( user_filedb ); + QDir localdir( userdir ); + + if ( !localdir.exists() ){ + if( QDir().mkpath( userdir ) ){ + if( QFile::copy( absolute_dir_filedb , user_filedb ) ){ + if( ! file.setPermissions( QFile::ReadOwner|QFile::WriteOwner ) ){ + qDebug() << v.m_msg[62]; + } + } + } + } + + if( ! localdb.exists() ){ + if( QFile::copy( absolute_dir_filedb , user_filedb ) ){ + if( ! file.setPermissions( QFile::ReadOwner|QFile::WriteOwner ) ){ + qDebug() << v.m_msg[62]; + } + } + } +} diff --git a/start.h b/start.h new file mode 100644 index 0000000..ef55dd9 --- /dev/null +++ b/start.h @@ -0,0 +1,20 @@ +#ifndef START_H +#define START_H + +#include +#include +#include +#include +#include +#include "views.h" + +class Start : public QWidget{ + Q_OBJECT +public: + explicit Start(QWidget *parent = nullptr); + void m_run( QStringList ); +signals: + +}; + +#endif // START_H diff --git a/terminal-finances.desktop b/terminal-finances.desktop new file mode 100644 index 0000000..51f981b --- /dev/null +++ b/terminal-finances.desktop @@ -0,0 +1,18 @@ +[Desktop Entry] +Version=1.0 +Name=Terminal Finances +GenericName=Financial management +Comment=Personal Financial Management +Exec=terminal-finances %u +Icon=/usr/share/pixmaps/terminal-finances/terminal-finances.png +Terminal=false +Type=Application +StartupNotify=true +Categories=Utility;Qt; +Keywords=finances;financial;accounting; +GenericName[pt_BR]=Gestão Financeira +Comment[pt_BR]=Gestão Financeira pessoal +GenericName[es_ES]=Gestión financiera +Comment[es_ES]=Gestión financiera personal +GenericName[en_US]=Financial management +Comment[en_US]=Personal Financial Management diff --git a/terminalfinances.cpp b/terminalfinances.cpp new file mode 100644 index 0000000..6078e67 --- /dev/null +++ b/terminalfinances.cpp @@ -0,0 +1,594 @@ +#include "terminalfinances.h" +#include "ui_terminalfinances.h" +#include + +TerminalFinances::TerminalFinances(QWidget *parent) : QMainWindow(parent) , ui(new Ui::TerminalFinances){ + ui->setupUi(this); + m_set_checked_lang(); + m_start_db(); + m_set_accounts(); + m_set_month_year(); + m_show_data(); + m_set_combos(); +} + +TerminalFinances::~TerminalFinances(){ + delete ui; +} + +void TerminalFinances::m_show_data(){ + Model m; + Tools t; + Views v; + m.m_query.prepare( m.m_read_show_data() ); + int count = 0, w = 70; + if( m.m_query.exec() ){ + ui->selData->setColumnCount(8); + while ( m.m_query.next() ) { + ui->selData->insertRow(count); + for ( int c = 0; c <= 8; c++ ) { + if( c == 1 ){ + ui->selData->setItem(count, c, new QTableWidgetItem( t.m_currency( m.m_query.value(c).toString() ) ) ); + }else if( c == 2 ){ + ui->selData->setItem(count, c, new QTableWidgetItem( t.m_get_account_str( m.m_query.value(c).toString(), m.m_query.value(4).toString() ) ) ); + }else if( c == 4 ){ + ui->selData->setItem(count, c, new QTableWidgetItem( t.m_get_op_str( m.m_query.value(c).toString() ) ) ); + }else if( c > 5 ){ + ui->selData->setItem(count, c, new QTableWidgetItem( t.m_dateformat( m.m_query.value(c).toString(), 0 ) ) ); + }else{ + ui->selData->setItem(count, c, new QTableWidgetItem( m.m_query.value(c).toString() ) ); + } + } + ui->selData->setRowHeight( count , 30 ); + count++; + } + for( int i = 0; i <= 7; ++i){ + if( i == 1 ){ w = 105; } + if( i == 2 ){ w = 160; } + if( i == 3){ w = 780; } + if( i == 4 || i == 5){ w = 118; } + if( i == 6 || i == 7){ w = 200; } + ui->selData->setColumnWidth(i, w); + } + ui->selData->setHorizontalHeaderLabels( m.m_set_headers ); + m_set_data_ui(); + while( count < ui->selData->rowCount() ){ + ui->selData->removeRow( count ); + } + } +} + +void TerminalFinances::m_set_lang( QString language ){ + Initial z; + Views v; + z.m_read_file(); + z.m_lang = language; + z.m_file_create(); + QMessageBox::StandardButton reply; + reply = QMessageBox::question(this, v.m_msg[0], v.m_msg[1], QMessageBox::Yes|QMessageBox::No); + if(reply == QMessageBox::Yes){ + close(); + } + ui->statusbar->showMessage(v.m_msg[2]); +} + +void TerminalFinances::m_set_checked_lang(){ + Initial z; + z.m_check_file(); + if( z.m_lang == "pt" ){ + ui->actionPortugu_s->setChecked( true ); + }else if( z.m_lang == "es" ){ + ui->actionEspa_ol->setChecked( true ); + }else{ + ui->actionIngl_s->setChecked( true ); + } + + if( z.m_theme == "dark" ){ + this->setStyleSheet("background-color:#383c4a;color:#d4dce3;font-size:15px;"); + ui->actionDark->setChecked( true ); + ui->actionLight->setChecked( false ); + }else{ + this->setStyleSheet("font-size:15px;"); + ui->actionDark->setChecked( false ); + ui->actionLight->setChecked( true ); + } + + m_currency = z.m_currency; +} + +void TerminalFinances::m_set_combos(){ + Tools t; + Views v; + QStringList months = t.m_all_months(); + ui->combo_rel_month->addItem( v.m_msg[3] ); + for( int i = 0; i < months.size(); ++i ){ + ui->combo_rel_month->addItem( months[i] ); + } + + Model m; + m.m_query.prepare( m.m_select_distinct_year() ); + m.m_query.prepare( m.m_sql ); + ui->combo_rel_year->addItem(v.m_msg[3]); + if( m.m_query.exec() ){ + while( m.m_query.next() ) { + ui->combo_rel_year->addItem( m.m_query.value( 0 ).toString() ); + } + } + + ui->balance_status->setStyleSheet("color:#57B4C0;"); + + ui->tabWidget->setCurrentIndex(0); + connect(ui->field_search, SIGNAL(returnPressed()),ui->btn_search,SIGNAL(clicked())); + //connect(ui->btn_c, SIGNAL(returnPressed()),ui->desc_c,SIGNAL(clicked())); + +} + +void TerminalFinances::m_set_data_ui(){ + ui->selData->setEditTriggers( QAbstractItemView::NoEditTriggers); + ui->selData->setSelectionBehavior( QAbstractItemView::SelectRows); + ui->selData->verticalHeader()->setVisible(false); + ui->selData->verticalHeader()->setMinimumWidth(30); + ui->selData->setStyleSheet("QTableView {selection-background-color: #57B4C0;}"); +} + +void TerminalFinances::m_set_month_year(){ + Tools t; + ui->current_month_year_c->setText( t.m_get_month() ); + ui->current_month_year_d->setText( t.m_get_month() ); +} + +void TerminalFinances::m_start_db(){ + Start s; + Views v; + QStringList files; + files << m_user_filedb << m_userdir << m_absolute_dir_filedb; + s.m_run( files ); + m_db.setDatabaseName( m_user_filedb ); + ! m_db.open() ? ui->statusbar->showMessage( tr("Falha ao conectar ao banco.") ) : ui->statusbar->showMessage( v.m_msg[4] ); + QTimer::singleShot( 3000, [&](){ ui->statusbar->clearMessage(); } ); +} + +void TerminalFinances::m_set_accounts(){ + AccountsList a; + QStringList accounts_c = a.m_accounts(0); + QStringList accounts_d = a.m_accounts(1); + for( int i = 0; i < accounts_c.size() ; ++i ){ + ui->account_type_c->addItem( accounts_c[i] ); + } + for( int i = 0; i < accounts_d.size() ; ++i ){ + ui->account_type_d->addItem( accounts_d[i] ); + } +} + +void TerminalFinances::on_btn_c_clicked(){ + Tools t; + Views v; + Model m; + QStringList fields; + + fields << "0" << ui->desc_c->text() << QString::number( ui->account_type_c->currentIndex() ) << t.m_rm_semidot( ui->value_c->text() ); + + if( ! t.m_fields_validate( fields ) ){ + QMessageBox::warning( this, v.m_msg[6], v.m_msg[7] ); + return; + } + + if( m.m_insert( fields ) ){ + ui->info_c->clear(); + ui->desc_c->clear(); + ui->value_c->setValue(0.00); + ui->statusbar->showMessage( v.m_msg[8] ); + ui->selData->clear(); + m_show_data(); + QTimer::singleShot( 3000, [&](){ ui->statusbar->clearMessage(); } ); + }else{ + QMessageBox::critical( this, v.m_msg[9] , v.m_msg[10]); + } +} + +void TerminalFinances::on_selData_cellDoubleClicked(int row, int column){ + column = 0; + ui->selData->setStyleSheet("QTableView {selection-background-color: #E06C75;}"); + QStringList fields = { ui->selData->item( row , column)->text(), ui->selData->item( row , 1)->text(), ui->selData->item( row , 3)->text() }; + UpdateFields u( fields ); + u.exec(); + ui->selData->clear(); + m_show_data(); +} + +void TerminalFinances::on_btn_d_clicked(){ + Tools t; + Views v; + Model m; + QStringList fields; + fields << "1" << ui->desc_d->text() << QString::number(ui->account_type_d->currentIndex() ) << t.m_rm_semidot( ui->value_d->text() ); + if( ! t.m_fields_validate( fields ) ){ + QMessageBox::warning( this, v.m_msg[6] , v.m_msg[7] ); + return; + } + + if( m.m_insert( fields ) ){ + ui->info_d->clear(); + ui->desc_d->clear(); + ui->value_d->setValue(0.00); + ui->statusbar->showMessage( v.m_msg[12] ); + ui->selData->clear(); + m_show_data(); + QTimer::singleShot( 3000, [&](){ ui->statusbar->clearMessage(); } ); + }else{ + QMessageBox::critical( this, v.m_msg[9] , v.m_msg[10]); + } +} + +void TerminalFinances::on_btn_send_mail_clicked(){ + FileSave f; + Views v; + QString content = f.m_save_content(); + QProcess * process = new QProcess(this); + QString sendmail = "xdg-email"; + QStringList arguments; + arguments << "--utf8" << + "--subject" << + "Terminal Finances" << + "--body" << + content ; + process->start(sendmail, arguments ); + + ui->statusbar->showMessage( v.m_msg[13] ); + QTimer::singleShot( 3000, [&](){ ui->statusbar->clearMessage(); } ); +} + +void TerminalFinances::on_btn_save_clicked(){ + + FileSave f; + Views v; + QFile file( f.m_filename ); + + if( !file.open( QFile::ReadOnly | QFile::Text) ){ + QMessageBox::warning( this , v.m_msg[14] , v.m_msg[15] ); + return; + } + + QTextStream enter_file( &file ); + QString text = enter_file.readAll(); + qDebug() << f.m_filename; + QTextEdit parent; + parent.setText( text ); + + + QPrinter printer; + printer.setOutputFileName("terminalfinances.pdf"); + printer.setPrinterName("Terminal Finances"); + QPrintDialog diag_printer( &printer, this ); + if( diag_printer.exec() == QDialog::Rejected ){ + return; + } + + parent.print(&printer); + ui->statusbar->showMessage( v.m_msg[16] ); + QTimer::singleShot( 3000, [&](){ ui->statusbar->clearMessage(); } ); + +} + +void TerminalFinances::on_btn_search_clicked(){ + m_search_list(); +} + + +void TerminalFinances::on_btn_generate_rel_clicked(){ + + Views v; + Tools t; + FileSave s; + GenDoc g; + Model m; + m.m_read_show_data(); + g.m_set_t(); + + QString combo_month = ui->combo_rel_month->currentText(), + combo_month_index_str {}, + combo_year = ui->combo_rel_year->currentText(), + result {}, sql, sql_c, sql_d,balance_color {},balance_name {}, + balance_string, total_cred, total_deb; + + QStringList to_result, sqlist; + + float total {0}, total_c {0}, total_d {0}, balance; + qint64 combo_month_index = ui->combo_rel_month->currentIndex(); + + combo_month_index_str = ( combo_month_index < 10 ? "0" + QString::number( combo_month_index ) : QString::number( combo_month_index ) ); + QSqlQuery query, query_c, query_d; + + sqlist << combo_month << combo_year << combo_month_index_str; + m.m_set_sql( sqlist ); + sql = m.m_sqlist[0], sql_c = m.m_sqlist[1], sql_d = m.m_sqlist[2]; + + + if( query.exec( sql ) ){ + while( query.next() ){ + total += query.value( 1 ).toFloat(); + } + } + + if( query_c.exec( sql_c ) ){ + while( query_c.next() ){ + total_c += query_c.value( 0 ).toFloat(); + } + } + + if( query_d.exec( sql_d ) ){ + while( query_d.next() ){ + total_d += query_d.value( 0 ).toFloat(); + } + } + + balance = total_c - total_d; + const QStringList gencolor = g.m_gen_color(); + + if( balance > 0 ){ + balance_color = gencolor[0]; + balance_name = gencolor[1]; + ui->balance_status->setText( gencolor[2] ); + ui->balance_status->setStyleSheet( gencolor[3] ); + }else if( balance == 0 ){ + balance_color = gencolor[4]; + balance_name = gencolor[5]; + ui->balance_status->setText( gencolor[6] ); + ui->balance_status->setStyleSheet( gencolor[7] ); + }else{ + balance_color = gencolor[8]; + balance_name = gencolor[9]; + ui->balance_status->setText( gencolor[10] ); + ui->balance_status->setStyleSheet( gencolor[11] ); + } + + balance_string = QString::number( balance ); + total_cred = QString::number( total_c); + total_deb = QString::number( total_d); + + to_result << combo_month << combo_year << total_cred << total_deb << balance_color << balance_string; + + + if( total > 0 ){ + result = g.m_gen_tags( to_result ); + } + + if( query.exec() ){ + int count = 0, w = 70; + while( query.next() ){ + result += g.m_t[0] + g.m_t[1] + t.m_dateformat( query.value( 7 ).toString(), 1) + g.m_t[2] + + g.m_t[1] + t.m_get_op_str( query.value( 4 ).toString() ) + g.m_t[2] + + g.m_t[1] + t.m_get_account_str( query.value( 2 ).toString(), query.value(4).toString() ) + g.m_t[2] + + g.m_t[1] + query.value( 3 ).toString() + g.m_t[2] + + g.m_t[1] + m_currency.leftJustified(6, ' ') + t.m_currency( query.value( 1 ).toString() ) + g.m_t[2] + + g.m_t[1] + query.value( 0 ).toString() + g.m_t[2] + g.m_t[3]; + + ui->tableWidget->setColumnCount(8); + + ui->tableWidget->insertRow(count); + for ( int c = 0; c <= 8; c++ ) { + if( c == 1 ){ + ui->tableWidget->setItem(count, c, new QTableWidgetItem( t.m_currency( query.value(c).toString() ) ) ); + }else if( c == 2 ){ + ui->tableWidget->setItem(count, c, new QTableWidgetItem( t.m_get_account_str( query.value(c).toString(), query.value(4).toString() ) ) ); + }else if( c == 4 ){ + ui->tableWidget->setItem(count, c, new QTableWidgetItem( t.m_get_op_str( query.value(c).toString() ) ) ); + }else if( c > 5 ){ + ui->tableWidget->setItem(count, c, new QTableWidgetItem( t.m_dateformat( query.value(c).toString(), 0 ) ) ); + }else{ + ui->tableWidget->setItem(count, c, new QTableWidgetItem( query.value(c).toString() ) ); + } + } + ui->tableWidget->setRowHeight( count , 30 ); + count++; + + + + } + + for( int i = 0; i <= 7; ++i){ + if( i == 1 ){ w = 105; } + if( i == 2 ){ w = 160; } + if( i == 3){ w = 780; } + if( i == 4 || i == 5){ w = 118; } + if( i == 6 || i == 7){ w = 200; } + ui->tableWidget->setColumnWidth(i, w); + } + ui->tableWidget->setHorizontalHeaderLabels( m.m_set_headers ); + ui->tableWidget->setEditTriggers( QAbstractItemView::NoEditTriggers); + ui->tableWidget->setSelectionBehavior( QAbstractItemView::SelectRows); + ui->tableWidget->verticalHeader()->setVisible(false); + ui->tableWidget->verticalHeader()->setMinimumWidth(30); + ui->tableWidget->setStyleSheet("QTableView {selection-background-color: #57B4C0;}"); + ui->label_rel_c->setText( "

" + m_currency.leftJustified(6, ' ') + t.m_currency( QString::number( total_c ) ) + "

" ); + ui->label_rel_d->setText( "

" + m_currency.leftJustified(6, ' ') + t.m_currency( QString::number( total_d ) ) + "

" ); + ui->label_rel_s->setText( "

" + m_currency.leftJustified(6, ' ') + t.m_currency( QString::number( balance ) ) + "

" ); + while( count < ui->tableWidget->rowCount() ){ + ui->tableWidget->removeRow( count ); + } + + if( total > 0 ){ + s.m_save_file( result ); + } + + }else{ + QMessageBox::critical(this, v.m_msg[17] , v.m_msg[18] ); + } + +} + +void TerminalFinances::m_search_list(){ + Views v; + QString search = ui->field_search->text(); + if( search.isEmpty() ){ + QMessageBox::warning( this, v.m_msg[19] , v.m_msg[20] ); + return; + } + + QSqlQuery query, query_t; + + query.prepare("SELECT * FROM terminalfinances WHERE tf_desc LIKE '%" + search + "%' OR tf_account LIKE '%" + search + "%' OR tf_value LIKE '%" + search + "%'"); + query_t.prepare("SELECT SUM(tf_value) FROM terminalfinances WHERE tf_desc LIKE '%" + search + "%' OR tf_account LIKE '%" + search + "%' OR tf_value LIKE '%" + search + "%'"); + int count = 0; + + Tools t; + if( query.exec() ){ + + float total_search = {0}; + if( query_t.exec() ){ + while ( query_t.next() ) { + total_search = query_t.value( 0 ).toFloat(); + } + + ui->label_total_search->setText( "

" + t.m_currency( QString::number( total_search ) ) + "

" ); + } + + ui->search_tab->setColumnCount(8); + while ( query.next() ) { + + ui->search_tab->insertRow(count); + + for ( int c = 0; c <= 8; c++ ) { + if( c == 1){ + ui->search_tab->setItem(count, c, new QTableWidgetItem( t.m_currency( query.value(c).toString() ) ) ); + }else if( c == 2 ){ + ui->search_tab->setItem(count, c, new QTableWidgetItem( t.m_get_account_str( query.value(c).toString(), query.value(4).toString() ) ) ); + }else if( c == 4 ){ + ui->search_tab->setItem(count, c, new QTableWidgetItem( t.m_get_op_str( query.value(c).toString() ) ) ); + }else if( c > 5 ){ + ui->search_tab->setItem(count, c, new QTableWidgetItem( t.m_dateformat( query.value(c).toString(), 0 ) ) ); + }else{ + ui->search_tab->setItem(count, c, new QTableWidgetItem( query.value(c).toString() ) ); + } + } + + ui->search_tab->setRowHeight( count , 30 ); + + count++; + } + + + if( count == 0 ){ + ui->label_total_search->setText( "

0,00

" ); + for ( int r = 7; r > -1; r-- ) { + ui->search_tab->removeColumn( r ); + } + for (int m = ui->search_tab->rowCount(); m > -1 ; --m) { + ui->search_tab->removeRow( m ); + } + QMessageBox::information( this , v.m_msg[21] , v.m_msg[22] + " '" + search + "' .", v.m_msg[23] ); + ui->field_search->clear(); + ui->field_search->setFocus(); + return; + } + + ui->field_search->clear(); + + ui->search_tab->setColumnWidth(0, 100); + ui->search_tab->setColumnWidth(1, 100); + ui->search_tab->setColumnWidth(2, 200); + ui->search_tab->setColumnWidth(3, 700); + ui->search_tab->setColumnWidth(4, 100); + ui->search_tab->setColumnWidth(5, 100); + ui->search_tab->setColumnWidth(6, 200); + ui->search_tab->setColumnWidth(7, 200); + + + QStringList headers; + + for( int k = 24; k <= 31; k++){ + headers << v.m_msg[k]; + } + + ui->search_tab->setHorizontalHeaderLabels( headers ); + + + ui->search_tab->setEditTriggers( QAbstractItemView::NoEditTriggers); + ui->search_tab->setSelectionBehavior( QAbstractItemView::SelectRows); + ui->search_tab->verticalHeader()->setMinimumWidth(30); + ui->search_tab->setStyleSheet("QTableView {selection-background-color: #57B4C0;}"); + + + while( count < ui->search_tab->rowCount() ){ + ui->search_tab->removeRow( count ); + } + + }else{ + qDebug() << v.m_msg[32]; + } +} + + +void TerminalFinances::on_actionTerminal_Finances_triggered(){ + Views v; + QMessageBox::about( this , v.m_msg[33] , v.m_msg[34] ); +} + +void TerminalFinances::on_actionSair_triggered(){ + close(); +} + +void TerminalFinances::on_actionLan_amentos_triggered(){ + ui->tabWidget->setCurrentIndex(1); +} + +void TerminalFinances::on_actionRelat_rios_triggered(){ + ui->tabWidget->setCurrentIndex(2); +} + +void TerminalFinances::on_actionPesquisar_triggered(){ + ui->tabWidget->setCurrentIndex(3); + ui->field_search->setFocus(); +} + +void TerminalFinances::on_actionPortugu_s_triggered(){ + ui->actionEspa_ol->setChecked( false ); + ui->actionIngl_s->setChecked( false ); + m_set_lang("pt"); +} + +void TerminalFinances::on_actionIngl_s_triggered(){ + Initial z; + ui->actionEspa_ol->setChecked( false ); + ui->actionPortugu_s->setChecked( false ); + m_set_lang("en"); +} + +void TerminalFinances::on_actionEspa_ol_triggered(){ + ui->actionPortugu_s->setChecked( false ); + ui->actionIngl_s->setChecked( false ); + m_set_lang("es"); +} + +void TerminalFinances::on_actionDark_triggered(){ + Initial z; + z.m_read_file(); + z.m_theme = "dark"; + z.m_file_create(); + this->setStyleSheet("background-color:#383c4a;color:#d4dce3;font-size:15px;"); + ui->actionDark->setChecked( true ); + ui->actionLight->setChecked( false ); +} + +void TerminalFinances::on_actionLight_triggered(){ + Initial z; + z.m_read_file(); + z.m_theme = "light"; + z.m_file_create(); + this->setStyleSheet(""); + this->setStyleSheet("font-size:15px;"); + ui->actionDark->setChecked( false ); + ui->actionLight->setChecked( true ); + +} + +void TerminalFinances::on_actionExportar_Banco_de_Dados_triggered(){ + Tools t; + Views v; + QString filename = QFileDialog::getSaveFileName( this, v.m_msg[35] , QDir::homePath() + t.m_return_filename_db(), "*.db"); + QString user_filedb = m_user_filedb; + if( QFile::copy( user_filedb, filename ) ){ + ui->statusbar->showMessage( v.m_msg[36] ); + QTimer::singleShot( 4000, [&](){ ui->statusbar->clearMessage(); } ); + } +} diff --git a/terminalfinances.h b/terminalfinances.h new file mode 100644 index 0000000..cee7a0d --- /dev/null +++ b/terminalfinances.h @@ -0,0 +1,95 @@ +#ifndef TERMINALFINANCES_H +#define TERMINALFINANCES_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "start.h" +#include "tools.h" +#include "accountslist.h" +#include "model.h" +#include "updatefields.h" +#include "filesave.h" +#include "initial.h" +#include "gendoc.h" +#include "views.h" + +QT_BEGIN_NAMESPACE +namespace Ui { class TerminalFinances; } +QT_END_NAMESPACE + +class TerminalFinances : public QMainWindow{ + Q_OBJECT + +public: + TerminalFinances(QWidget *parent = nullptr); + ~TerminalFinances(); + + const QString m_home_user = qgetenv("HOME"); + const QString m_filedb = "terminalfinances.db"; + const QString m_absolute_dir_filedb = "/etc/xdg/terminalfinances/terminalfinances.db"; // from + const QString m_userdir = m_home_user + "/.config/terminalfinances"; + const QString m_user_filedb = m_home_user + "/.config/terminalfinances/" + m_filedb; // for + + QSqlDatabase m_db = QSqlDatabase::addDatabase("QSQLITE"); + QString m_currency; + + void m_set_combos(); + void m_show_data(); + void m_set_accounts(); + void m_start_db(); + void m_set_month_year(); + void m_set_data_ui(); + void m_search_list(); + void m_set_checked_lang(); + void m_set_lang( QString ); + +private slots: + void on_btn_c_clicked(); + + void on_selData_cellDoubleClicked(int row, int column); + + void on_btn_d_clicked(); + + void on_btn_generate_rel_clicked(); + + void on_btn_send_mail_clicked(); + + void on_btn_save_clicked(); + + void on_btn_search_clicked(); + + void on_actionTerminal_Finances_triggered(); + + void on_actionSair_triggered(); + + void on_actionLan_amentos_triggered(); + + void on_actionRelat_rios_triggered(); + + void on_actionPesquisar_triggered(); + + void on_actionPortugu_s_triggered(); + + void on_actionIngl_s_triggered(); + + void on_actionEspa_ol_triggered(); + + void on_actionDark_triggered(); + + void on_actionLight_triggered(); + + void on_actionExportar_Banco_de_Dados_triggered(); + +private: + Ui::TerminalFinances *ui; +}; +#endif // TERMINALFINANCES_H diff --git a/terminalfinances.ui b/terminalfinances.ui new file mode 100644 index 0000000..569c7c8 --- /dev/null +++ b/terminalfinances.ui @@ -0,0 +1,959 @@ + + + TerminalFinances + + + + 0 + 0 + 1920 + 1080 + + + + + 0 + 0 + + + + Terminal Finances + + + + /usr/share/pixmaps/terminal-finances/start.png/usr/share/pixmaps/terminal-finances/start.png + + + + + + + + + 0 + + + + 32 + 32 + + + + + Terminal Finances + + + + + + + + + + <html><head><title>Terminal Finances 1.0.0</title></head><body><table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" align="center" cellspacing="2" cellpadding="0"><tr><td rowspan="6"><p><img src="/usr/share/pixmaps/terminal-finances/start.png"/></p></td><td/><td rowspan="2"><p><span style=" font-size:30px; font-weight:600;">Terminal Finances</span><br/><span style=" font-style:italic;">Versão 1.0.0</span></p></td><td/><td rowspan="2"><p><span style=" font-size:18px; font-weight:600;">Atalhos de comandos</span></p></td></tr><tr><td/><td/></tr><tr><td/><td><p><a href="https://terminalroot.com.br/cpp/"><span style=" text-decoration: underline; color:#17a2b8;">terminalroot.com.br</span></a></p></td><td/><td><p>Ctrl + E, Exportar o banco de dados</p></td></tr><tr><td/><td><p><a href="https://github.com/terroo/terminal-finances"><span style=" text-decoration: underline; color:#17a2b8;">github.com/terroo/terminal-finances</span></a></p></td><td/><td><p>Ctrl + Q, Para fechar esse programa</p></td></tr><tr><td/><td><p><a href="https://github.com/terroo/terminal-finances/issues"><span style=" text-decoration: underline; color:#17a2b8;">github.com/terroo/terminal-finances/issues</span></a></p></td><td/><td><p>Ctrl + A, Sobre o Terminal Finances</p></td></tr><tr><td/><td><p>Por Marcos Oliveira</p></td><td/><td><p>Ctrl + F, Pesquise contas, dados e valores</p></td></tr></table></body></html> + + + + + + + + + + + + Inserir Crédito e/ou Débito, Editar e Excluir Lançamentos + + + + + + + + Adicionar Crédito + + + Qt::AlignCenter + + + + + + QLayout::SetDefaultConstraint + + + + + Mês/Ano + + + + + + + Descrição + + + + + + + + + + + + + + true + + + + + + true + + + true + + + false + + + + + + + false + + + + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Lançar Crédito + + + + /usr/share/pixmaps/terminal-finances/send-credit.png/usr/share/pixmaps/terminal-finances/send-credit.png + + + true + + + + + + + 999999.989999999990687 + + + 1.000000000000000 + + + QAbstractSpinBox::DefaultStepType + + + 0.000000000000000 + + + + + + + Tipo de Conta + + + + + + + Valor + + + + + + + 200 + + + Descreva o crédito + + + + + + + + + + + + + + + + Adicionar Débito + + + Qt::AlignCenter + + + false + + + false + + + + QLayout::SetDefaultConstraint + + + 10 + + + + + + + Valor + + + + + + + 999999.989999999990687 + + + QAbstractSpinBox::DefaultStepType + + + + + + + + + + + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Lançar Débito + + + + /usr/share/pixmaps/terminal-finances/send-debit.png/usr/share/pixmaps/terminal-finances/send-debit.png + + + true + + + + + + + Tipo de Conta + + + + + + + true + + + + + + true + + + + + + + Mês/Ano + + + + + + + 200 + + + Descreva o débito + + + + + + + Descrição + + + + + + + + + + + + + + + + Últimos Lançamentos + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + Relatórios de Lançamentos e Consultar Saldos + + + + + + + + Relatórios de lançamentos + + + + + + + + + + + + 0 + 0 + + + + Salvar PDF ou Imprimir + + + + /usr/share/pixmaps/terminal-finances/pdf.png/usr/share/pixmaps/terminal-finances/pdf.png + + + + + + + + 0 + 0 + + + + Enviar E-mail + + + + /usr/share/pixmaps/terminal-finances/mail.png/usr/share/pixmaps/terminal-finances/mail.png + + + + + + + + 0 + 0 + + + + Gerar Relatório + + + + /usr/share/pixmaps/terminal-finances/spreadsheet.png/usr/share/pixmaps/terminal-finances/spreadsheet.png + + + + + + + + + + + + 13 + 50 + false + PreferDefault + + + + <html><head/><body><p align="center">STATUS DO SALDO</p></body></html> + + + + + + + false + + + + 75 + true + PreferDefault + + + + <html><head/><body><p align="center"> ◉ Aguardando</p></body></html> + + + Qt::AlignCenter + + + + + + + + + Qt::Horizontal + + + + + + + + + + + + <html><head/><body> +<p align="right">Conta: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p> +</body></html> + + + + + + + true + + + + + + + Qt::LeftToRight + + + false + + + <html><head/> +<body> +<p align="right">Mês: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p> +</body> +</html> + + + + + + + false + + + + Todas + + + + + + + + <html><head/><body><p align="right">Ano:      </p></body></html> + + + + + + + + + + + + + <html><head/><body><p align="center">Saldo</p></body></html> + + + + + + + <html><head/><body><p align="center">Crédito</p></body></html> + + + + + + + <html><head/><body><p align="center">Débito</p></body></html> + + + + + + + background-color:#ef325a;border-color:#dc3545; + + + + <h1 style="text-align:center;">0,00</h1> + + + + + + + + + + <h1 style="text-align:center;">0,00</h1> + + + + + + + background-color:#00b5ad;border-color:#28a745;text-align:center; + + + + <h1 style="text-align:center;">0,00</h1> + + + + + + + + + + + Qt::Horizontal + + + + + + + + + + + + + Pesquisa por Descrição, Valores e Contas + + + + + + + + Pesquisa por Descrição + + + + + + + + + + 80 + + + 0 + + + Informe a palavra de pesquisa + + + + + + + Pesquisar + + + + /usr/share/pixmaps/terminal-finances/search.png/usr/share/pixmaps/terminal-finances/search.png + + + + + + + + + + + + + + Qt::Vertical + + + + + + + Total da pesquisa + + + + + + + + + + <html><head/><body><p><span style=" text-decoration: underline;">Total: </span></p></body></html> + + + + + + + <html><head/><body><h2><span style=" font-weight:600;">0,00</span></h2></body></html> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Barra de Ferramentas + + + false + + + Qt::AllToolBarAreas + + + Qt::Vertical + + + + 40 + 40 + + + + LeftToolBarArea + + + false + + + + + + + + + + + + + 0 + 0 + 1920 + 19 + + + + + Arquivo + + + + + + + + Ferramentas + + + + + + + + + Sobre + + + + + + Idiomas + + + + + + + + Temas + + + + + + + + + + + + + + /usr/share/pixmaps/terminal-finances/close.png/usr/share/pixmaps/terminal-finances/close.png + + + Sair + + + Ctrl+Q + + + + + + /usr/share/pixmaps/terminal-finances/start.png/usr/share/pixmaps/terminal-finances/start.png + + + Terminal Finances + + + Ctrl+A + + + + + + /usr/share/pixmaps/terminal-finances/balance.png/usr/share/pixmaps/terminal-finances/balance.png + + + Lançamentos + + + + + + /usr/share/pixmaps/terminal-finances/tab3.png/usr/share/pixmaps/terminal-finances/tab3.png + + + Relatórios + + + + + + /usr/share/pixmaps/terminal-finances/search.png/usr/share/pixmaps/terminal-finances/search.png + + + Pesquisar + + + Ctrl+F + + + + + true + + + + /usr/share/pixmaps/terminal-finances/pt.png/usr/share/pixmaps/terminal-finances/pt.png + + + Português + + + + + true + + + + /usr/share/pixmaps/terminal-finances/en.png/usr/share/pixmaps/terminal-finances/en.png + + + English + + + + + true + + + + /usr/share/pixmaps/terminal-finances/es.png/usr/share/pixmaps/terminal-finances/es.png + + + Español + + + + + true + + + + /usr/share/pixmaps/terminal-finances/dark.png/usr/share/pixmaps/terminal-finances/dark.png + + + Dark + + + + + true + + + + /usr/share/pixmaps/terminal-finances/light.png/usr/share/pixmaps/terminal-finances/light.png + + + Light + + + + + + /usr/share/pixmaps/terminal-finances/db.png/usr/share/pixmaps/terminal-finances/db.png + + + Exportar Banco de Dados + + + Ctrl+E + + + + + desc_c + account_type_c + current_month_year_c + value_c + btn_c + desc_d + account_type_d + current_month_year_d + value_d + btn_d + selData + tabWidget + tableWidget + btn_save + btn_send_mail + btn_generate_rel + combo_rel_month + combo_rel_year + combo_rel_op + field_search + btn_search + search_tab + + + + diff --git a/terminalfinances/TerminalFinances_en_US.qm b/terminalfinances/TerminalFinances_en_US.qm new file mode 100644 index 0000000000000000000000000000000000000000..928e29dc45f2013ab0b6b00a9d309d8870024a5f GIT binary patch literal 18737 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 literal 0 HcmV?d00001 diff --git a/terminalfinances/TerminalFinances_en_US.ts b/terminalfinances/TerminalFinances_en_US.ts new file mode 100644 index 0000000..0094256 --- /dev/null +++ b/terminalfinances/TerminalFinances_en_US.ts @@ -0,0 +1,746 @@ + + + + + TerminalFinances + + + + + Terminal Finances + + + + <html><head><title>Terminal Finances 1.0.0</title></head><body><table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" align="center" cellspacing="2" cellpadding="0"><tr><td rowspan="6"><p><img src=":/assets/img/start.png"/></p></td><td/><td rowspan="2"><p><span style=" font-size:30px; font-weight:600;">Terminal Finances</span><br/><span style=" font-style:italic;">Versão 1.0.0</span></p></td><td/><td rowspan="2"><p><span style=" font-size:18px; font-weight:600;">Atalhos de comandos</span></p></td></tr><tr><td/><td/></tr><tr><td/><td><p><a href="https://terminalroot.com.br/cpp/"><span style=" text-decoration: underline; color:#17a2b8;">terminalroot.com.br</span></a></p></td><td/><td><p>Ctrl + E, Exportar o banco de dados</p></td></tr><tr><td/><td><p><a href="https://github.com/terroo/terminal-finances"><span style=" text-decoration: underline; color:#17a2b8;">github.com/terroo/terminal-finances</span></a></p></td><td/><td><p>Ctrl + Q, Para fechar esse programa</p></td></tr><tr><td/><td><p><a href="https://github.com/terroo/terminal-finances/issues"><span style=" text-decoration: underline; color:#17a2b8;">github.com/terroo/terminal-finances/issues</span></a></p></td><td/><td><p>Ctrl + A, Sobre o Terminal Finances</p></td></tr><tr><td/><td><p>Por Marcos Oliveira</p></td><td/><td><p>Ctrl + F, Pesquise contas, dados e valores</p></td></tr></table></body></html> + <html><head><title>Terminal Finances 1.0.0</title></head><body><table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" align="center" cellspacing="2" cellpadding="0"><tr><td rowspan="6"><p><img src=":/assets/img/start.png"/></p></td><td/><td rowspan="2"><p><span style=" font-size:30px; font-weight:600;">Terminal Finances</span><br/><span style=" font-style:italic;">Versão 1.0.0</span></p></td><td/><td rowspan="2"><p><span style=" font-size:18px; font-weight:600;">Command shortcuts</span></p></td></tr><tr><td/><td/></tr><tr><td/><td><p><a href="https://terminalroot.com.br/cpp/"><span style=" text-decoration: underline; color:#17a2b8;">terminalroot.com.br</span></a></p></td><td/><td><p>Ctrl + E, Export the database</p></td></tr><tr><td/><td><p><a href="https://github.com/terroo/terminal-finances"><span style=" text-decoration: underline; color:#17a2b8;">github.com/terroo/terminal-finances</span></a></p></td><td/><td><p>Ctrl + Q, To close this program</p></td></tr><tr><td/><td><p><a href="https://github.com/terroo/terminal-finances/issues"><span style=" text-decoration: underline; color:#17a2b8;">github.com/terroo/terminal-finances/issues</span></a></p></td><td/><td><p>Ctrl + A, About Terminal Finances</p></td></tr><tr><td/><td><p>By Marcos Oliveira</p></td><td/><td><p>Ctrl + F, Search accounts, data and values</p></td></tr></table></body></html> + + + + <html><head><title>Terminal Finances 1.0.0</title></head><body><table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" align="center" cellspacing="2" cellpadding="0"><tr><td rowspan="6"><p><img src="/usr/share/pixmaps/terminal-finances/start.png"/></p></td><td/><td rowspan="2"><p><span style=" font-size:30px; font-weight:600;">Terminal Finances</span><br/><span style=" font-style:italic;">Versão 1.0.0</span></p></td><td/><td rowspan="2"><p><span style=" font-size:18px; font-weight:600;">Atalhos de comandos</span></p></td></tr><tr><td/><td/></tr><tr><td/><td><p><a href="https://terminalroot.com.br/cpp/"><span style=" text-decoration: underline; color:#17a2b8;">terminalroot.com.br</span></a></p></td><td/><td><p>Ctrl + E, Exportar o banco de dados</p></td></tr><tr><td/><td><p><a href="https://github.com/terroo/terminal-finances"><span style=" text-decoration: underline; color:#17a2b8;">github.com/terroo/terminal-finances</span></a></p></td><td/><td><p>Ctrl + Q, Para fechar esse programa</p></td></tr><tr><td/><td><p><a href="https://github.com/terroo/terminal-finances/issues"><span style=" text-decoration: underline; color:#17a2b8;">github.com/terroo/terminal-finances/issues</span></a></p></td><td/><td><p>Ctrl + A, Sobre o Terminal Finances</p></td></tr><tr><td/><td><p>Por Marcos Oliveira</p></td><td/><td><p>Ctrl + F, Pesquise contas, dados e valores</p></td></tr></table></body></html> + <html><head><title>Terminal Finances 1.0.0</title></head><body><table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" align="center" cellspacing="2" cellpadding="0"><tr><td rowspan="6"><p><img src="/usr/share/pixmaps/terminal-finances/start.png"/></p></td><td/><td rowspan="2"><p><span style=" font-size:30px; font-weight:600;">Terminal Finances</span><br/><span style=" font-style:italic;">Versão 1.0.0</span></p></td><td/><td rowspan="2"><p><span style=" font-size:18px; font-weight:600;">Command shortcuts</span></p></td></tr><tr><td/><td/></tr><tr><td/><td><p><a href="https://terminalroot.com.br/cpp/"><span style=" text-decoration: underline; color:#17a2b8;">terminalroot.com.br</span></a></p></td><td/><td><p>Ctrl + E, Export the database</p></td></tr><tr><td/><td><p><a href="https://github.com/terroo/terminal-finances"><span style=" text-decoration: underline; color:#17a2b8;">github.com/terroo/terminal-finances</span></a></p></td><td/><td><p>Ctrl + Q, To close this program</p></td></tr><tr><td/><td><p><a href="https://github.com/terroo/terminal-finances/issues"><span style=" text-decoration: underline; color:#17a2b8;">github.com/terroo/terminal-finances/issues</span></a></p></td><td/><td><p>Ctrl + A, About Terminal Finances</p></td></tr><tr><td/><td><p>By Marcos Oliveira</p></td><td/><td><p>Ctrl + F, Search accounts, data and values</p></td></tr></table></body></html> + + + + Inserir Crédito e/ou Débito, Editar e Excluir Lançamentos + Insert Credit and/or Debit, Edit and Delete Entries + + + + Adicionar Crédito + Add Credit + + + + + Mês/Ano + Month/Year + + + + + Descrição + Description + + + + Lançar Crédito + Post Credit + + + + + Tipo de Conta + Account Type + + + + + Valor + Value + + + + Descreva o crédito + Describe the credit + + + + Adicionar Débito + Add Debit + + + + Lançar Débito + Post Debit + + + + Descreva o débito + Describe the debt + + + + Últimos Lançamentos + Last Releases + + + + Relatórios de Lançamentos e Consultar Saldos + Launch Reports and Consult Balances + + + + Relatórios de lançamentos + Release reports + + + + Salvar PDF ou Imprimir + Save PDF or Print + + + + Enviar E-mail + Send Email + + + + Gerar Relatório + Generate Report + + + + <html><head/><body><p align="center">STATUS DO SALDO</p></body></html> + <html><head/><body><p align="center">BALANCE STATUS</p></body></html> + + + + <html><head/><body><p align="center"> ◉ Aguardando</p></body></html> + <html><head/><body><p align="center"> ◉ Awaiting</p></body></html> + + + + <html><head/><body> +<p align="right">Conta: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p> +</body></html> + <html><head/><body> +<p align="right">Account: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p> +</body></html> + + + + <html><head/> +<body> +<p align="right">Mês: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p> +</body> +</html> + <html><head/> +<body> +<p align="right">Month: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p> +</body> +</html> + + + + Todas + All + + + + <html><head/><body><p align="right">Ano:      </p></body></html> + <html><head/><body><p align="right">Year: </p></body></html> + + + + <html><head/><body><p align="center">Saldo</p></body></html> + <html><head/><body><p align="center">Balance</p></body></html> + + + + <html><head/><body><p align="center">Crédito</p></body></html> + <html><head/><body><p align="center">Credit</p></body></html> + + + + <html><head/><body><p align="center">Débito</p></body></html> + <html><head/><body><p align="center">Debit</p></body></html> + + + + + + <h1 style="text-align:center;">0,00</h1> + <h1 style="text-align:center;">0,00</h1> + + + + Pesquisa por Descrição, Valores e Contas + Search by Description, Values and Accounts + + + + Barra de Ferramentas + ToolBar + + + Pesquisa por Descrição e Cadastro de Contas + Search by Description, Values and Accounts + + + + Pesquisa por Descrição + Search by Description + + + + Informe a palavra de pesquisa + Enter the search word + + + + + Pesquisar + Search + + + + Total da pesquisa + Search Total + + + + <html><head/><body><p><span style=" text-decoration: underline;">Total: </span></p></body></html> + + + + + <html><head/><body><h2><span style=" font-weight:600;">0,00</span></h2></body></html> + + + + toolBar + ToolBar + + + + Arquivo + File + + + + Ferramentas + Tools + + + + Sobre + About + + + + Idiomas + Languages + + + + Temas + Themes + + + + Sair + Quit + + + + Ctrl+Q + + + + + Ctrl+A + + + + + Lançamentos + Postings + + + + Relatórios + reports + + + + Ctrl+F + + + + + Português + Portuguese + + + + English + + + + + Español + Spanish + + + + Dark + + + + + Light + + + + + Exportar Banco de Dados + Export Database + + + + Ctrl+E + + + + + Falha ao conectar ao banco. + Failed to connect to the database. + + + + UpdateFields + + + Terminal Finances::Atualizar Lançamento + Terminal Finances::Update Posting + + + + Editar o lançamento de código: + Edit the code post: + + + + 99 + + + + + Valor + Value + + + + Descrição + Description + + + + Excluir + Delete + + + + Editar + Edit + + + + Views + + + Ação + Action + + + + É necessário reiniciar o Terminal Finances para que as alterações tenham efeito e não haja problemas. <br><b>Deseja fazer isso agora ?</b> + Terminal Finances must be restarted for the changes to take effect and there are no problems.<br><b>Do you want to do that now?</b> + + + + Feche a abra o Terminal Finances. + Close and open Terminal Finances. + + + + Todos + All + + + + Conectado ao banco! + Connected to the database! + + + + credito + credit + + + + Aviso + Notice + + + + Preencha todos os campos + Fill in all fields + + + + Crédito inserido com sucesso! + Credit inserted successfully! + + + + Falha + Failure + + + + Falha ao inserir os dados + Failed to enter data + + + + debito + debit + + + + Débito inserido com sucesso! + Debit successfully inserted! + + + + Abrindo seu cliente de e-mail com relatório no corpo da mensagem! + Opening your email client with report in the message body! + + + + Erro + Error + + + + Arquivo não pode ser salvo. + File cannot be saved. + + + + PDF ou impressão realizada com sucesso! + PDF or print done successfully! + + + + Erro ao gerar relatório + Error generating report + + + + Falha ao consultar dados. + Failed to query data. + + + + Uso correto + Correct use + + + + Informe o termo que deseja pesquisar. + Enter the term you want to search for. + + + + Resultado vazio + Empty result + + + + Nenhum resultado encontrado para o termo: + No results found for the term: + + + + Vou Pesquisar outro termo + I'll search another term + + + + Código + Number + + + + Valor + Value + + + + Tipo de Conta + Account Type + + + + Descrição + Description + + + + Operação + Operation + + + + Usuário + User + + + + Data de Criação + Creation date + + + + Última atualização + Last update + + + + Falha ao resgatar dados. + Failed to retrieve data. + + + + Sobre Terminal Finances + About Terminal Finances + + + + <h2>Terminal Finances 1.0.0</h2><p>Desenvolvido por Marcos Oliveira<br>Copyright 2021 Terminal Root Sistemas Inc.</p><p><a style='color:#17a2b8;font-weight:bold;' href='https://terminalroot.com.br/cpp/'>terminalroot.com.br</a></p><hr><p><i>The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.</i></p><br> + <h2>Terminal Finances 1.0.0</h2><p>Developed by Marcos Oliveira<br>Copyright 2021 Terminal Root Sistemas Inc.</p><p><a style='color:#17a2b8;font-weight:bold;' href='https://terminalroot.com.br/cpp/'>terminalroot.com.br</a></p><hr><p><i>The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.</i></p><br> + + + + Exportar Banco de Dados + Export Database + + + + Banco de dados exportado com sucesso! + Database exported successfully! + + + + Salário + Salary + + + + Décimo Terceiro + Bonus + + + + Férias + Vacation + + + + Renda extra + Extra income + + + + Conta de Luz + Electricity bill + + + + Conta de Água + Water bill + + + + Alimentação + Food + + + + Pagamentos + Payments + + + + Telefone + Telephone bill + + + + Internet + Internet bill + + + + Erro ao remover o arquivo anterior. + Error removing the previous file. + + + + Erro ao criar arquivo + Error creating file + + + + Não foi possível criar o arquivo. + The file could not be created. + + + + Não foi possível ler o arquivo. + The file could not be read. + + + + Crédito: + Credit: + + + + Débito: + Debit: + + + + Saldo: + Balance: + + + + Data + Date + + + + Tipo + Type + + + + Positivo + Positive + + + + ⬤ SALDO POSITIVO + ⬤ POSITIVE BALANCE + + + + Zerado + Zeroed + + + + ◯ SALDO ZERADO + ◯ ZERO BALANCE + + + + Negativo + Negative + + + + ⬤ SALDO NEGATIVO + ⬤ BALANCE NEGATIVE + + + + Falha ao aplicar permissões. + Failed to apply permissions. + + + + Janeiro + January + + + + Fevereiro + February + + + + Março + March + + + + Abril + April + + + + Maio + May + + + + Junho + June + + + + Julho + July + + + + Agosto + August + + + + Setembro + September + + + + Outubro + October + + + + Novembro + November + + + + Dezembro + December + + + + Erro ao atualizar os dados. + Error updating data. + + + + Deseja realmente deletar o item + Do you really want to delete the item + + + diff --git a/terminalfinances/TerminalFinances_es_ES.qm b/terminalfinances/TerminalFinances_es_ES.qm new file mode 100644 index 0000000000000000000000000000000000000000..0d8b0d57a5c6b00ee534c2cfe40aa6d6b46af31c GIT binary patch literal 19556 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 aKi@9)hlK_;qUS<>U0k_&8 + + + + TerminalFinances + + + + + Terminal Finances + + + + <html><head><title>Terminal Finances 1.0.0</title></head><body><table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" align="center" cellspacing="2" cellpadding="0"><tr><td rowspan="6"><p><img src=":/assets/img/start.png"/></p></td><td/><td rowspan="2"><p><span style=" font-size:30px; font-weight:600;">Terminal Finances</span><br/><span style=" font-style:italic;">Versão 1.0.0</span></p></td><td/><td rowspan="2"><p><span style=" font-size:18px; font-weight:600;">Atalhos de comandos</span></p></td></tr><tr><td/><td/></tr><tr><td/><td><p><a href="https://terminalroot.com.br/cpp/"><span style=" text-decoration: underline; color:#17a2b8;">terminalroot.com.br</span></a></p></td><td/><td><p>Ctrl + E, Exportar o banco de dados</p></td></tr><tr><td/><td><p><a href="https://github.com/terroo/terminal-finances"><span style=" text-decoration: underline; color:#17a2b8;">github.com/terroo/terminal-finances</span></a></p></td><td/><td><p>Ctrl + Q, Para fechar esse programa</p></td></tr><tr><td/><td><p><a href="https://github.com/terroo/terminal-finances/issues"><span style=" text-decoration: underline; color:#17a2b8;">github.com/terroo/terminal-finances/issues</span></a></p></td><td/><td><p>Ctrl + A, Sobre o Terminal Finances</p></td></tr><tr><td/><td><p>Por Marcos Oliveira</p></td><td/><td><p>Ctrl + F, Pesquise contas, dados e valores</p></td></tr></table></body></html> + <html><head><title>Terminal Finances 1.0.0</title></head><body><table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" align="center" cellspacing="2" cellpadding="0"><tr><td rowspan="6"><p><img src=":/assets/img/start.png"/></p></td><td/><td rowspan="2"><p><span style=" font-size:30px; font-weight:600;">Terminal Finances</span><br/><span style=" font-style:italic;">Versão 1.0.0</span></p></td><td/><td rowspan="2"><p><span style=" font-size:18px; font-weight:600;">Atajos de comando</span></p></td></tr><tr><td/><td/></tr><tr><td/><td><p><a href="https://terminalroot.com.br/cpp/"><span style=" text-decoration: underline; color:#17a2b8;">terminalroot.com.br</span></a></p></td><td/><td><p>Ctrl + E, Exportar la base de datos</p></td></tr><tr><td/><td><p><a href="https://github.com/terroo/terminal-finances"><span style=" text-decoration: underline; color:#17a2b8;">github.com/terroo/terminal-finances</span></a></p></td><td/><td><p>Ctrl + Q, Para fechar esse programa</p></td></tr><tr><td/><td><p><a href="https://github.com/terroo/terminal-finances/issues"><span style=" text-decoration: underline; color:#17a2b8;">github.com/terroo/terminal-finances/issues</span></a></p></td><td/><td><p>Ctrl + A, Acerca de Terminal Finances</p></td></tr><tr><td/><td><p>Por Marcos Oliveira</p></td><td/><td><p>Ctrl + F, Buscar cuentas, datos y valores</p></td></tr></table></body></html> + + + + <html><head><title>Terminal Finances 1.0.0</title></head><body><table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" align="center" cellspacing="2" cellpadding="0"><tr><td rowspan="6"><p><img src="/usr/share/pixmaps/terminal-finances/start.png"/></p></td><td/><td rowspan="2"><p><span style=" font-size:30px; font-weight:600;">Terminal Finances</span><br/><span style=" font-style:italic;">Versão 1.0.0</span></p></td><td/><td rowspan="2"><p><span style=" font-size:18px; font-weight:600;">Atalhos de comandos</span></p></td></tr><tr><td/><td/></tr><tr><td/><td><p><a href="https://terminalroot.com.br/cpp/"><span style=" text-decoration: underline; color:#17a2b8;">terminalroot.com.br</span></a></p></td><td/><td><p>Ctrl + E, Exportar o banco de dados</p></td></tr><tr><td/><td><p><a href="https://github.com/terroo/terminal-finances"><span style=" text-decoration: underline; color:#17a2b8;">github.com/terroo/terminal-finances</span></a></p></td><td/><td><p>Ctrl + Q, Para fechar esse programa</p></td></tr><tr><td/><td><p><a href="https://github.com/terroo/terminal-finances/issues"><span style=" text-decoration: underline; color:#17a2b8;">github.com/terroo/terminal-finances/issues</span></a></p></td><td/><td><p>Ctrl + A, Sobre o Terminal Finances</p></td></tr><tr><td/><td><p>Por Marcos Oliveira</p></td><td/><td><p>Ctrl + F, Pesquise contas, dados e valores</p></td></tr></table></body></html> + <html><head><title>Terminal Finances 1.0.0</title></head><body><table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" align="center" cellspacing="2" cellpadding="0"><tr><td rowspan="6"><p><img src="/usr/share/pixmaps/terminal-finances/start.png"/></p></td><td/><td rowspan="2"><p><span style=" font-size:30px; font-weight:600;">Terminal Finances</span><br/><span style=" font-style:italic;">Versão 1.0.0</span></p></td><td/><td rowspan="2"><p><span style=" font-size:18px; font-weight:600;">Atajos de comando</span></p></td></tr><tr><td/><td/></tr><tr><td/><td><p><a href="https://terminalroot.com.br/cpp/"><span style=" text-decoration: underline; color:#17a2b8;">terminalroot.com.br</span></a></p></td><td/><td><p>Ctrl + E, Exportar la base de datos</p></td></tr><tr><td/><td><p><a href="https://github.com/terroo/terminal-finances"><span style=" text-decoration: underline; color:#17a2b8;">github.com/terroo/terminal-finances</span></a></p></td><td/><td><p>Ctrl + Q, Para fechar esse programa</p></td></tr><tr><td/><td><p><a href="https://github.com/terroo/terminal-finances/issues"><span style=" text-decoration: underline; color:#17a2b8;">github.com/terroo/terminal-finances/issues</span></a></p></td><td/><td><p>Ctrl + A, Acerca de Terminal Finances</p></td></tr><tr><td/><td><p>Por Marcos Oliveira</p></td><td/><td><p>Ctrl + F, Buscar cuentas, datos y valores</p></td></tr></table></body></html> + + + + Inserir Crédito e/ou Débito, Editar e Excluir Lançamentos + Insertar Crédito y/o Débito, Editar y Eliminar Entradas + + + + Adicionar Crédito + Añadir crédito + + + + + Mês/Ano + Mes/Año + + + + + Descrição + Descripción + + + + Lançar Crédito + Post Crédito + + + + + Tipo de Conta + Tipo de Cuenta + + + + + Valor + Valor + + + + Descreva o crédito + Describe el Crédito + + + + Adicionar Débito + Agregar Débito + + + + Lançar Débito + Post Débito + + + + Descreva o débito + Describe el Débito + + + + Últimos Lançamentos + Ultimos Lanzamientos + + + + Relatórios de Lançamentos e Consultar Saldos + Lanzar informes y consultar saldos + + + + Relatórios de lançamentos + Reportes de Lanzamiento + + + + Salvar PDF ou Imprimir + Guardar PDF o Imprimir + + + + Enviar E-mail + Enviar Correo Electrónico + + + + Gerar Relatório + Generar Informe + + + + <html><head/><body><p align="center">STATUS DO SALDO</p></body></html> + <html><head/><body><p align="center">ESTADO DE BALANCE</p></body></html> + + + + <html><head/><body><p align="center"> ◉ Aguardando</p></body></html> + <html><head/><body><p align="center"> ◉ Esperando</p></body></html> + + + + <html><head/><body> +<p align="right">Conta: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p> +</body></html> + <html><head/><body> +<p align="right">Cuenta: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p> +</body></html> + + + + <html><head/> +<body> +<p align="right">Mês: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p> +</body> +</html> + <html><head/> +<body> +<p align="right">Mes: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p> +</body> +</html> + + + + Todas + Todos + + + + <html><head/><body><p align="right">Ano:      </p></body></html> + <html><head/><body><p align="right">Año: </p></body></html> + + + + <html><head/><body><p align="center">Saldo</p></body></html> + <html><head/><body><p align="center">Saldo</p></body></html> + + + + <html><head/><body><p align="center">Crédito</p></body></html> + <html><head/><body><p align="center">Crédito</p></body></html> + + + + <html><head/><body><p align="center">Débito</p></body></html> + + + + + + + <h1 style="text-align:center;">0,00</h1> + + + + + Pesquisa por Descrição, Valores e Contas + Búsqueda por Descripción, Valores y Cuentas + + + + Barra de Ferramentas + Barra de herramientas + + + Pesquisa por Descrição e Cadastro de Contas + Búsqueda por Descripción, Valores y Cuentas + + + + Pesquisa por Descrição + Buscar por Descripción + + + + Informe a palavra de pesquisa + Ingrese la Palabra de Búsqueda + + + + + Pesquisar + Buscar + + + + Total da pesquisa + Total de búsqueda + + + + <html><head/><body><p><span style=" text-decoration: underline;">Total: </span></p></body></html> + <html><head/><body><p><span style=" text-decoration: underline;">Total: </span></p></body></html> + + + + <html><head/><body><h2><span style=" font-weight:600;">0,00</span></h2></body></html> + <html><head/><body><h2><span style=" font-weight:600;">0,00</span></h2></body></html> + + + toolBar + Barra de herramientas + + + + Arquivo + Archivo + + + + Ferramentas + Herramientas + + + + Sobre + Acerca de + + + + Idiomas + Idiomas + + + + Temas + Temas + + + + Sair + Salir + + + + Ctrl+Q + Ctrl+Q + + + + Ctrl+A + Ctrl+A + + + + Lançamentos + Lanzamientos + + + + Relatórios + Informes + + + + Ctrl+F + Ctrl+F + + + + Português + Portugués + + + + English + Inglés + + + + Español + Español + + + + Dark + Dark + + + + Light + Light + + + + Exportar Banco de Dados + Exportar base de datos + + + + Ctrl+E + Ctrl+E + + + + Falha ao conectar ao banco. + No se pudo conectar a la base de datos. + + + + UpdateFields + + + Terminal Finances::Atualizar Lançamento + Terminal Finances::Lanzamiento de actualización + + + + Editar o lançamento de código: + Edite el lanzamiento del código: + + + + 99 + + + + + Valor + Valor + + + + Descrição + Descripción + + + + Excluir + Eliminar + + + + Editar + Editar + + + + Views + + + Ação + Acción + + + + É necessário reiniciar o Terminal Finances para que as alterações tenham efeito e não haja problemas. <br><b>Deseja fazer isso agora ?</b> + Terminal Finances debe reiniciarse para que los cambios surtan efecto y no haya problemas. <br><b>¿Quieres hacer eso ahora?</b> + + + + Feche a abra o Terminal Finances. + Cierre y abra Terminal Finances. + + + + Todos + Todos + + + + Conectado ao banco! + ¡Conectado a la base de datos! + + + + credito + credito + + + + Aviso + + + + + Preencha todos os campos + Completa todos los campos + + + + Crédito inserido com sucesso! + ¡Crédito insertado correctamente! + + + + Falha + Fracaso + + + + Falha ao inserir os dados + Error al ingresar datos + + + + debito + debito + + + + Débito inserido com sucesso! + ¡Débito insertado correctamente! + + + + Abrindo seu cliente de e-mail com relatório no corpo da mensagem! + ¡Abriendo su cliente de correo electrónico con informe en el cuerpo del mensaje! + + + + Erro + Error + + + + Arquivo não pode ser salvo. + No se puede guardar el archivo. + + + + PDF ou impressão realizada com sucesso! + PDF o impresión realizada con éxito! + + + + Erro ao gerar relatório + Error al generar el informe + + + + Falha ao consultar dados. + No se pudieron consultar los datos. + + + + Uso correto + Uso correcto + + + + Informe o termo que deseja pesquisar. + Ingrese el término que desea buscar. + + + + Resultado vazio + Resultado vacío + + + + Nenhum resultado encontrado para o termo: + No se encontraron resultados para el término: + + + + Vou Pesquisar outro termo + Buscaré otro término + + + + Código + + + + + Valor + + + + + Tipo de Conta + Tipo de cuenta + + + + Descrição + Descripción + + + + Operação + Operación + + + + Usuário + Usuario + + + + Data de Criação + Fecha de creación + + + + Última atualização + Última actualización + + + + Falha ao resgatar dados. + No se pudieron recuperar los datos. + + + + Sobre Terminal Finances + Acerca de Terminal Finances + + + + <h2>Terminal Finances 1.0.0</h2><p>Desenvolvido por Marcos Oliveira<br>Copyright 2021 Terminal Root Sistemas Inc.</p><p><a style='color:#17a2b8;font-weight:bold;' href='https://terminalroot.com.br/cpp/'>terminalroot.com.br</a></p><hr><p><i>The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.</i></p><br> + <h2>Terminal Finances 1.0.0</h2><p>Desarrollado por Marcos Oliveira<br>Copyright 2021 Terminal Root Sistemas Inc.</p><p><a style='color:#17a2b8;font-weight:bold;' href='https://terminalroot.com.br/cpp/'>terminalroot.com.br</a></p><hr><p><i>The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.</i></p><br> + + + + Exportar Banco de Dados + Exportar base de datos + + + + Banco de dados exportado com sucesso! + ¡Base de datos exportada correctamente! + + + + Salário + Salario + + + + Décimo Terceiro + Prima + + + + Férias + Vacaciones + + + + Renda extra + Ingresos extra + + + + Conta de Luz + Factura de electricidad + + + + Conta de Água + Factura de agua + + + + Alimentação + Alimentación + + + + Pagamentos + Pagos + + + + Telefone + Factura telefónica + + + + Internet + Factura de Internet + + + + Erro ao remover o arquivo anterior. + Error al eliminar el archivo anterior. + + + + Erro ao criar arquivo + Error al crear el archivo + + + + Não foi possível criar o arquivo. + El archivo no podría ser creado. + + + + Não foi possível ler o arquivo. + No se pudo leer el archivo. + + + + Crédito: + + + + + Débito: + + + + + Saldo: + + + + + Data + Fecha + + + + Tipo + + + + + Positivo + + + + + ⬤ SALDO POSITIVO + ⬤ BALANCE POSITIVO + + + + Zerado + Cero + + + + ◯ SALDO ZERADO + ◯ BALANCE ZERO + + + + Negativo + + + + + ⬤ SALDO NEGATIVO + ⬤ BALANCE NEGATIVO + + + + Falha ao aplicar permissões. + No se pudieron aplicar los permisos. + + + + Janeiro + Enero + + + + Fevereiro + Febrero + + + + Março + Marzo + + + + Abril + + + + + Maio + May + + + + Junho + Junio + + + + Julho + Julio + + + + Agosto + + + + + Setembro + Septiembre + + + + Outubro + Octubre + + + + Novembro + Noviembre + + + + Dezembro + Diciembre + + + + Erro ao atualizar os dados. + Error al actualizar los datos. + + + + Deseja realmente deletar o item + ¿De verdad quieres eliminar el elemento? + + + diff --git a/terminalfinances/terminalfinances.db b/terminalfinances/terminalfinances.db new file mode 100644 index 0000000000000000000000000000000000000000..ab71d5b7bae26a20a8c1573debf9baf2e7e77780 GIT binary patch literal 16384 zcmeI%zfZzI6bJCDAQ}@yC)PJY6cc~MxM_t`8%x1*H8M4|90>`u2(588areLR|8jEl zjwq21#=(hvoAjEy*Y|q&=`Bq=H})Wr)Q=~lAfZFH#SDX;5i!OJ>ddS2`^ff<@4zqD z0^7TOEtWo5uJ~>g-#2;b?U%a|f&c^{009U<00Izz00bZafqxWe=L+SW9iy8B_d_{- z7^=@de<~kR8HL$yzV32Ua1!RZ%_(zlB??AzS7la9&vAaOT&o!`+q0sHoQwuhFzl;F z7tQup7RqL$RG~qSEJyH5?o!*enx@;OYu+W(6D`Y8$xZGE@*L~NDdVS2WpO5Jl^HG5x=c7)k%SLZqDSf~Cer+T_tD0gZG z8$><%^z~wbG>K<@KTGQGXGd~sL#^vgRn*OvZg4;V0uX=z1Rwwb2tWV=5P$##Ah4_g z8+u{*{$JMDi*-Q&0uX=z1Rwwb2tWV=5P$##W&-&CkBtBU2tWV=5P$##AOHafKmY;| HSbl*|4`H%F literal 0 HcmV?d00001 diff --git a/tools.cpp b/tools.cpp new file mode 100644 index 0000000..01ec389 --- /dev/null +++ b/tools.cpp @@ -0,0 +1,96 @@ +#include "tools.h" + +Tools::Tools(QWidget *parent) : QWidget(parent){ + m_get_datetime(); +} + +QString Tools::m_currency( QString value ){ + double valor = value.toDouble(); + auto lang = QLocale("pt_BR"); + return lang.toString(valor, 'f', 2) ; +} + +bool Tools::m_fields_validate( QStringList fields ){ + for( int i = 0; i < fields.size(); ++i ){ + if( fields[i].isEmpty() || fields[i] == "0.00" ){ + return false; + } + } + return true; +} + +void Tools::m_get_datetime(){ + QDateTime UTC(QDateTime::currentDateTimeUtc()); + QDateTime local(UTC.toLocalTime()); + int int_day = QDate::currentDate().day(), + int_month = QDate::currentDate().month(), + int_year = QDate::currentDate().year(), + int_hour = local.time().hour(), + int_min = local.time().minute(), + int_sec = local.time().second(); + int c_datetime[6] { int_day, int_month, int_year, int_hour, int_min, int_sec }; + for( int i = 0; i < 6; ++i){ + m_datetime[i] = c_datetime[i]; + } + +} + +QString Tools::m_get_month(){ + QStringList months = m_all_months(); + QString str = months[ m_datetime[1] - 1 ] + "/" + QString::number( m_datetime[2] ); + return str; +} + +QString Tools::m_rm_semidot(QString str ){ + return str.replace(",", "."); +} + +QStringList Tools::m_all_months(){ + Views v; + QStringList r; + for( int i = 63; i <= 74; ++i ){ + r << v.m_msg[i]; + } + return r; +} + +QString Tools::m_return_filename_db(){ + QString str_d, str_m; + str_d = ( m_datetime[0] < 10 ? "0" + QString::number( m_datetime[0] ) : QString::number( m_datetime[0] ) ); + str_m = ( m_datetime[1] < 10 ? "0" + QString::number( m_datetime[1] ) : QString::number( m_datetime[1] ) ); + return ("/terminalfinances-" + QString::number( m_datetime[2] ) + "-" + str_m + "-" + str_d + ".db" ); +} + +QString Tools::m_dateformat(QString str, int n ){ + QString fmt = "yyyy-MM-dd hh:mm:ss"; + QDateTime dt = QDateTime::fromString(str, fmt); + if( n == 0 ){ + str = dt.toString(" dd/MM/yyyy hh:mm:ss"); + }else{ + str = dt.toString(" dd/MM/yyyy"); + } + + return str; +} + +QString Tools::m_get_account_str( QString account, QString op ){ + Views v; + QString account_name; + int n = 0; + for (int j = 37; j <= 46; ++j) { + n = j - 37; + + if( account == QString::number( n ) ){ + if( op == "1" ){ + j += 4; + } + account_name = v.m_msg[j]; + } + } + return account_name; +} + +QString Tools::m_get_op_str( QString op ){ + Views v; + return ( op == "0" ? v.m_msg[5] : v.m_msg[11] ); +} diff --git a/tools.h b/tools.h new file mode 100644 index 0000000..1a3d5a4 --- /dev/null +++ b/tools.h @@ -0,0 +1,30 @@ +#ifndef TOOLS_H +#define TOOLS_H + +#include +#include +#include +#include +#include +#include "views.h" + +class Tools : public QWidget{ + Q_OBJECT +public: + explicit Tools(QWidget *parent = nullptr); + bool m_fields_validate( QStringList ); + void m_get_datetime(); + QString m_get_month(); + QString m_rm_semidot( QString ); + int m_datetime[6]; + QStringList m_all_months(); + QString m_currency( QString ); + QString m_return_filename_db(); + QString m_dateformat( QString, int ); + QString m_get_account_str( QString, QString ); + QString m_get_op_str( QString ); +signals: + +}; + +#endif // TOOLS_H diff --git a/updatefields.cpp b/updatefields.cpp new file mode 100644 index 0000000..6dafa8e --- /dev/null +++ b/updatefields.cpp @@ -0,0 +1,52 @@ +#include "updatefields.h" +#include "ui_updatefields.h" + +UpdateFields::UpdateFields( QStringList fields, QWidget *parent ) : QDialog(parent), ui(new Ui::UpdateFields){ + ui->setupUi(this); + fields[1].remove("."); + fields[1].replace(",", "."); + ui->fiel_desc_edit_balance->setText( fields[2] ); + ui->value_edit_balance->setValue( fields[1].toDouble() ); + ui->label_id->setText( fields[0] ); + m_update_fields = fields; +} + +UpdateFields::~UpdateFields(){ + delete ui; +} + +void UpdateFields::on_button_edit_balance_clicked(){ + Views v; + Tools t; + QStringList fields = { ui->label_id->text(), t.m_rm_semidot( ui->value_edit_balance->text() ), ui->fiel_desc_edit_balance->text() }; + if( ! t.m_fields_validate( fields ) ){ + QMessageBox::warning( this, v.m_msg[6], v.m_msg[7] ); + return; + } + + Model m; + if( m.m_update( fields ) ){ + this->close(); + }else{ + QMessageBox::critical( this, v.m_msg[14], v.m_msg[75] ); + this->close(); + } + +} + +void UpdateFields::on_pushButton_clicked(){ + Views v; + Model m; + QMessageBox::StandardButton reply; + reply = QMessageBox::question(this, v.m_msg[6], v.m_msg[76] + ui->label_id->text() + "?", + QMessageBox::Yes|QMessageBox::No); + if (reply == QMessageBox::Yes) { + if( m.m_delete( ui->label_id->text() ) ){ + this->close(); + }else{ + QMessageBox::critical( this, v.m_msg[14], v.m_msg[75] ); + this->close(); + } + + } +} diff --git a/updatefields.h b/updatefields.h new file mode 100644 index 0000000..9abd13a --- /dev/null +++ b/updatefields.h @@ -0,0 +1,32 @@ +#ifndef UPDATEFIELDS_H +#define UPDATEFIELDS_H + +#include +#include +#include "model.h" +#include "tools.h" +#include "views.h" + +namespace Ui { +class UpdateFields; +} + +class UpdateFields : public QDialog{ + Q_OBJECT + +public: + explicit UpdateFields(QStringList fields = {""}, QWidget *parent = nullptr ); + ~UpdateFields(); + QStringList m_update_fields; + bool m_item_del = false; + +private slots: + void on_button_edit_balance_clicked(); + + void on_pushButton_clicked(); + +private: + Ui::UpdateFields *ui; +}; + +#endif // UPDATEFIELDS_H diff --git a/updatefields.ui b/updatefields.ui new file mode 100644 index 0000000..b8e2ea9 --- /dev/null +++ b/updatefields.ui @@ -0,0 +1,131 @@ + + + UpdateFields + + + + 0 + 0 + 554 + 168 + + + + Terminal Finances::Atualizar Lançamento + + + + + 9 + 10 + 531 + 141 + + + + + + + + + Editar o lançamento de código: + + + + + + + true + + + + 15 + 75 + true + + + + 99 + + + + + + + + + Valor + + + + + + + 999999.989999999990687 + + + 1.000000000000000 + + + QAbstractSpinBox::AdaptiveDecimalStepType + + + 0.000000000000000 + + + + + + + + + + + + + Descrição + + + + + + + + + + + + + + color:#fff; +background-color:#dc3545; +border-color:#dc3545; +font-weight:bold; + + + Excluir + + + + + + + color:#fff; +/*background-color:#28a745;*/ +background-color:#57B4C0; +border-color:#28a745; +font-weight:bold; + + + Editar + + + + + + + + + + + diff --git a/views.cpp b/views.cpp new file mode 100644 index 0000000..370fe4a --- /dev/null +++ b/views.cpp @@ -0,0 +1,3 @@ +#include "views.h" + +Views::Views(QWidget *parent) : QWidget(parent){} diff --git a/views.h b/views.h new file mode 100644 index 0000000..efe9a26 --- /dev/null +++ b/views.h @@ -0,0 +1,91 @@ +#ifndef VIEWS_H +#define VIEWS_H + +#include + +class Views : public QWidget{ + Q_OBJECT +public: + explicit Views(QWidget *parent = nullptr); + const QStringList m_msg = {tr("Ação"), tr("É necessário reiniciar o Terminal Finances para que as alterações tenham efeito e não haja problemas.
Deseja fazer isso agora ?"), + tr("Feche a abra o Terminal Finances."), + tr("Todos"), + tr("Conectado ao banco!"), + tr("credito"), + tr("Aviso"), + tr("Preencha todos os campos"), + tr("Crédito inserido com sucesso!"), + tr("Falha"), + tr("Falha ao inserir os dados"), + tr("debito"), + tr("Débito inserido com sucesso!"), + tr("Abrindo seu cliente de e-mail com relatório no corpo da mensagem!"), + tr("Erro"), + tr("Arquivo não pode ser salvo."), + tr("PDF ou impressão realizada com sucesso!"), + tr("Erro ao gerar relatório"), + tr("Falha ao consultar dados."), + tr("Uso correto"), + tr("Informe o termo que deseja pesquisar."), + tr("Resultado vazio"), + tr("Nenhum resultado encontrado para o termo:"), + tr("Vou Pesquisar outro termo"), + tr("Código"), + tr("Valor"), + tr("Tipo de Conta"), + tr("Descrição"), + tr("Operação"), + tr("Usuário"), + tr("Data de Criação"), + tr("Última atualização"), + tr("Falha ao resgatar dados."), + tr("Sobre Terminal Finances"), + tr("

Terminal Finances 1.0.0

Desenvolvido por Marcos Oliveira
Copyright 2021 Terminal Root Sistemas Inc.

terminalroot.com.br


The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.


"), + tr("Exportar Banco de Dados"), + tr("Banco de dados exportado com sucesso!"), + tr("Salário"), + tr("Décimo Terceiro"), + tr("Férias"), + tr("Renda extra"), + tr("Conta de Luz"), + tr("Conta de Água"), + tr("Alimentação"), + tr("Pagamentos"), + tr("Telefone"), + tr("Internet"), + tr("Erro ao remover o arquivo anterior."), + tr("Erro ao criar arquivo"), + tr("Não foi possível criar o arquivo."), + tr("Não foi possível ler o arquivo."), + tr("Crédito: "), + tr("Débito: "), + tr("Saldo: "), + tr("Data"), + tr("Tipo"), + tr("Positivo"), + tr(" \u2B24 SALDO POSITIVO"), + tr("Zerado"), + tr(" \u25EF SALDO ZERADO"), + tr("Negativo"), + tr(" \u2B24 SALDO NEGATIVO"), + tr("Falha ao aplicar permissões."), + tr("Janeiro"), + tr("Fevereiro"), + tr("Março"), + tr("Abril"), + tr("Maio"), + tr("Junho"), + tr("Julho"), + tr("Agosto"), + tr("Setembro"), + tr("Outubro"), + tr("Novembro"), + tr("Dezembro"), + tr("Erro ao atualizar os dados."), + tr("Deseja realmente deletar o item ") + }; +signals: + +}; + +#endif // VIEWS_H