Compare commits
1654 Commits
laundry_ma
...
havari_lic
| Author | SHA1 | Date | |
|---|---|---|---|
| 7726948957 | |||
| 1f83918b72 | |||
| 7e5c3431a7 | |||
| a3bde81378 | |||
| 86d79da36b | |||
| 425b6ee820 | |||
| 310c606270 | |||
| 2b70b8beb7 | |||
| 25daae9eef | |||
| 10ee25b1ac | |||
| ea03d56c8e | |||
| 96a2438b13 | |||
| 46b73edadf | |||
| 7d35b4a377 | |||
| bd4df2fc3e | |||
| 6991e4956c | |||
| 807c474af4 | |||
| 62e3b75c64 | |||
| a875de6ab9 | |||
| adf867464e | |||
| 9ed6dddba1 | |||
| 45bacfa973 | |||
| ebade46d0a | |||
| f63282ef6d | |||
| 9fe857ebd7 | |||
| f37d7240fc | |||
| 6376ea081d | |||
| 1ff139ba75 | |||
| 6d40e0caa6 | |||
| be10c7bdd8 | |||
| 8b0af310fc | |||
| a1145a7773 | |||
| 773a390bed | |||
| 5c61e3dfad | |||
| f7a44ace9e | |||
| c688b17afb | |||
| d7337681f6 | |||
| 44f11fa3ab | |||
| 204c353b16 | |||
| b0e561d572 | |||
| f2423bd49d | |||
| 5520ca5d4f | |||
| e5f4d4483e | |||
| dcc929a326 | |||
| 87828837c6 | |||
| 71cf5380ff | |||
| a592f6cc70 | |||
| 4c8d4f5f7d | |||
| ac1a9b8cdc | |||
| ce13daaa58 | |||
| 20540056fa | |||
| 3f481c75d4 | |||
| 5b59a07033 | |||
| 8b1fb96368 | |||
| 5c8f90ff77 | |||
| 0667f24bd7 | |||
| 54ac099597 | |||
| 7341099882 | |||
| cc78bca1dc | |||
| 734b356286 | |||
| 4dd14c3fa0 | |||
| b29092491b | |||
| 255ec20637 | |||
| b70114419a | |||
| 4e5ceb11fb | |||
| ab4ea51bff | |||
| 02fc2bbc84 | |||
| 7aa2cf424a | |||
| 5e6726ee08 | |||
| f6f43fbca2 | |||
| e161f17642 | |||
| c661356c1f | |||
| 2001a64180 | |||
| 99d1daa1e8 | |||
| fa1a7d42e1 | |||
| 6d90045065 | |||
| 88f656b55c | |||
| a0b28de2bf | |||
| f810819876 | |||
| 739fb53837 | |||
| 6f8ed82b4c | |||
| 9309fb6768 | |||
| 8da7e5a08b | |||
| b15f459f58 | |||
| 0a657d2f43 | |||
| 31fea6f015 | |||
| 601b399d65 | |||
|
|
7cef9f1a32 | ||
| 18dd9c7a1f | |||
| 1c6d6b1dcc | |||
| b3d78f3f06 | |||
| 5d5fbb835e | |||
| f259d7da1b | |||
| 433f68b5a4 | |||
| 3729ee8cd6 | |||
| 261e8aea62 | |||
| a1dd66ec6a | |||
| f579fbc83f | |||
| bd2cfbcc3d | |||
| 9c009dddb5 | |||
| fd94630e79 | |||
| c8274bd0a6 | |||
| 4bea3edbeb | |||
| 3aa73a29a5 | |||
| 5934b7cf4d | |||
| 39f0b6d406 | |||
| 1c1a16a55a | |||
| 991507c29a | |||
| 553f5fa25f | |||
| 8c5ef8bfd2 | |||
| 4e0580a2b4 | |||
| 451e109b7f | |||
| fa79d8c15d | |||
| 55800608ec | |||
| 63e66334af | |||
| 4b7d2f2efc | |||
| a7b02a742a | |||
| 825ad03236 | |||
| 484763b809 | |||
| b0d2c5668c | |||
| 444278accb | |||
| c8b19a8c62 | |||
| 1a3285cdc4 | |||
| cd55fd9f19 | |||
| d75d397e6a | |||
| 4e95aa47de | |||
| 0911b0d951 | |||
| 1ea59d44f0 | |||
| b4fcbfdf2a | |||
| cca99e065a | |||
| ec6e3c8fd2 | |||
| 2c1d9c3ef2 | |||
| 583dd0dd15 | |||
| 66ae014a38 | |||
| b2f175536a | |||
| 6794a1b842 | |||
| 191f857aff | |||
| bf6065aeb7 | |||
| 00e6ff7e78 | |||
| 1f5b011fce | |||
| 61db219e01 | |||
| 771994f944 | |||
| def74bd656 | |||
| 6e4be30e3a | |||
| 96a2eeda3a | |||
| a6209db573 | |||
| bfc350252a | |||
| 64efc9b0b4 | |||
| 8d4ddfb7d2 | |||
| 447b8431e6 | |||
| 007783c1e2 | |||
| 72a4524aed | |||
| 7e37a29bee | |||
| 1f0cf23801 | |||
| 999a996df8 | |||
| 8966de83af | |||
| 403368df7a | |||
| fef59e7a73 | |||
| c2285f865e | |||
| 34d8248b79 | |||
| f64852997f | |||
| fcf45b130e | |||
| fd4665364d | |||
| 91a344cbc2 | |||
| 7b8f5090db | |||
| e2039f54f4 | |||
| 445b34f452 | |||
| c3a4151359 | |||
| c05ba71bcd | |||
| 389a32d760 | |||
| 609ef99c44 | |||
| 71e98f5b3f | |||
| 25052f2e2d | |||
| a5c0f76f89 | |||
| 81d2547e9d | |||
| a0c172c649 | |||
| 8a65785c52 | |||
| 85fff4657e | |||
| 114449be53 | |||
| df1dabb253 | |||
| 65094d2031 | |||
| 9d8a226283 | |||
| 7bff54cb58 | |||
| 4f9f60b121 | |||
| f0cee69a24 | |||
| 0d6e910d3e | |||
| 64f515e11b | |||
| ef22709eb7 | |||
| 65c6df9940 | |||
| cbc12f44b8 | |||
| 45eba87eda | |||
| 510be1ffcb | |||
| 9ceb54d29c | |||
| 942da80b9c | |||
| 3da4cc2dec | |||
| b4572fa6f1 | |||
| 01f5ee1c46 | |||
| 952b235888 | |||
| f98c11412d | |||
| a8e27776d3 | |||
| 6038b70592 | |||
| e259a897fe | |||
| 05027ef13c | |||
| d65b12bc80 | |||
| 905d4a6c04 | |||
| a213ef10a8 | |||
| f2b16e50a7 | |||
| 4d25cf4ade | |||
| 82b2acd792 | |||
| 7522999082 | |||
| f8e694b71a | |||
| 83cbdf54e9 | |||
| 7744f3212d | |||
| b55049d482 | |||
| 54f981fd25 | |||
| 7d753b772a | |||
| cd8e63eb08 | |||
| 29f5780312 | |||
| 6dd6679e9a | |||
| 26c795216e | |||
| 5b40d83c0c | |||
| 22279e8c98 | |||
| 09bc143899 | |||
| d29af3f5ad | |||
| 7441874199 | |||
| 068638b20a | |||
| 5c65820935 | |||
| 748b61b2f6 | |||
| 70d359dd8d | |||
| c4d093c497 | |||
| 39ccc6bde5 | |||
| 8df4722e8b | |||
| fe3a822173 | |||
| 7d9a1eefbb | |||
| c74f5414af | |||
| 98387bc517 | |||
| a6e739601e | |||
| e3b372f3d0 | |||
| 8f8e41943a | |||
| 7af8e80303 | |||
| 9f86d4807c | |||
| 1a082b425c | |||
| 48fcec14c5 | |||
| d54a6b9d08 | |||
| 26e1be3a4f | |||
| 10cd0f3bc1 | |||
| d2ec4529cc | |||
| a1bf9980cb | |||
| 42292618bb | |||
| 07d598c857 | |||
| 757ec36790 | |||
| 7441e29889 | |||
| c48a8ddc63 | |||
| c31ba607e5 | |||
| 97eafd2fcf | |||
| b3e06b7bbd | |||
| ddc65dc558 | |||
| 8dc88a671f | |||
| 928a2661bb | |||
| 7f9278fc8f | |||
| bc99107f8e | |||
| db6cbffd60 | |||
| 55df443de3 | |||
| e28e930732 | |||
| 2ffa038703 | |||
| 5c6a987442 | |||
| 5f26a8f675 | |||
| 0f25bd4d77 | |||
| 41a6368228 | |||
| 20ec0b6fd6 | |||
| 71655a3923 | |||
| 06103e090a | |||
| f78d7b8d35 | |||
| b87a626ee7 | |||
| 5c587f8e7d | |||
| 14645156c6 | |||
| 9af897fa59 | |||
| 6b447e3364 | |||
| 162e2aa3e8 | |||
| 68fa068d8b | |||
| d481df1702 | |||
| 2f6ce319ba | |||
| 8093696ec8 | |||
| 53d1657954 | |||
| 87eae8f9c1 | |||
| 1b5655d1aa | |||
| 01ec5954bb | |||
| 0d853abbc3 | |||
| fada6f30ff | |||
| c10bbc8f8a | |||
| 492d828ca3 | |||
| 343a0700b6 | |||
| c582038d23 | |||
| 4c70b26e1d | |||
| 56b120ae6f | |||
| 3ef03aea6e | |||
| 9897dcfa04 | |||
| 01b7ffd8d3 | |||
| 0ed1b40384 | |||
| 0a1b6e156a | |||
| f09ad65b7a | |||
| 92b30574c7 | |||
| f5eb897143 | |||
| 8ed74a3aed | |||
| 7158e9210f | |||
| 9444f8805a | |||
| 2095fde1f4 | |||
| 922c8a49d5 | |||
| 7acf00fc4d | |||
| 86b416cb47 | |||
| 09ed1d8731 | |||
| 022f0cb891 | |||
| 8e4a3d8d4a | |||
| 97f60c2aa5 | |||
| 7fb3d0a77d | |||
| 82d2d1eff6 | |||
| 1ed5e88c7c | |||
| a1f473b8a3 | |||
| 0ed968a17b | |||
| 1a3e7389fa | |||
| 8199d0022d | |||
| 8eb03de70b | |||
| 1a43c797c3 | |||
| 668ff3da60 | |||
| a3d8b01582 | |||
| 380afede5e | |||
| bf85022852 | |||
| 76f3b5cd0d | |||
| 818c86a758 | |||
| a718da84af | |||
| c7b7860fd6 | |||
| 31da31ec45 | |||
| 2fd5aa0787 | |||
| d47e45ae64 | |||
| 1fea3621f5 | |||
| 6855e3711a | |||
| 26f2040905 | |||
| a52b141017 | |||
| 5d988b1cb8 | |||
| 4fc18d865b | |||
| 262a6e4b84 | |||
| e450738fd7 | |||
| 83ec459ca5 | |||
| 4de853d788 | |||
| ad6cbac1f8 | |||
| 2fcd451339 | |||
| 762547c1f5 | |||
| 25cc185aee | |||
| 0fc6a1d6f3 | |||
| 76991aecae | |||
| f7c03a7122 | |||
| dc0fa2dff7 | |||
| 99043f1c52 | |||
| 73a89f15e6 | |||
| b4a3b13ee0 | |||
| 3d30491875 | |||
| dda64246c5 | |||
| a0d1d19687 | |||
| 66c81b2a91 | |||
| c945b52671 | |||
| 146d71319e | |||
| d6d2136df6 | |||
| 9c9cc898a4 | |||
| be07a3b18d | |||
| 9f312687b1 | |||
| eadb83779e | |||
| e244e8279b | |||
| 47fe5ea7a5 | |||
| 05724afff0 | |||
| 5578fb365a | |||
| 30a3b0dc4e | |||
| 51c5cb3bdb | |||
| 0849ae6161 | |||
| 81ee76ce21 | |||
| dc76af271e | |||
| 5f868f7610 | |||
| cf31963487 | |||
| f1b923ae7f | |||
| 0484142dd5 | |||
| 806c7ce8b8 | |||
| 424742714d | |||
| 87b5247726 | |||
| e225e7b2a2 | |||
| 1877e3c1ae | |||
| 3ea304cb45 | |||
| d49b02938a | |||
| 8db12c649f | |||
| 9c16569b69 | |||
| c2813bc9b3 | |||
| 5111caa738 | |||
| 2f302772e3 | |||
| 0deb721477 | |||
| 178f8e137e | |||
| 0769cb0756 | |||
| 95485e2558 | |||
| ab144b1350 | |||
| 4c6fd5e470 | |||
| 05e045267a | |||
| f5a9261856 | |||
| 764642fbf1 | |||
| 9170934142 | |||
| a0877d3ba4 | |||
| d236c96001 | |||
| 5f76fc4ad5 | |||
| db4e11225b | |||
| 28987afc7d | |||
| eff6288a42 | |||
| af344b5014 | |||
| e97a22516c | |||
| d99c2f23a9 | |||
| 49b0220cc1 | |||
| 8f87c713f3 | |||
| eb2ad30e64 | |||
| 1ebf77f1aa | |||
| 32e517b5ec | |||
| fe243328a0 | |||
| 070314632d | |||
| b9c4a621dc | |||
| 5f9fb1597b | |||
| 62edb14057 | |||
| 2b1c121be9 | |||
| 51efac175a | |||
| 7e737b5877 | |||
| 2beb85437a | |||
| cfdd00e264 | |||
| 034ea5c0bd | |||
| 8621fac655 | |||
| 8a5b68926c | |||
| 22885f7fdd | |||
| e3e51b8367 | |||
| 019224ba4c | |||
| 833346a1a8 | |||
| c501af7d45 | |||
| aa1b8801ce | |||
| b48081c8e2 | |||
| a366d1b52c | |||
| 5cb28ea01a | |||
| 30f1f2df49 | |||
| c416aabc44 | |||
| 17d150a45f | |||
| 6211de488b | |||
| 5fd192356f | |||
| 929448f1ca | |||
| 8733b3cb61 | |||
| c5fa399627 | |||
| 4ce9f94318 | |||
| 281c0167b1 | |||
| 96d4ad7ef7 | |||
| 6ce7c48b2d | |||
| c3bdb2c14d | |||
| 898b423feb | |||
| 7264942e8d | |||
| 3f23cfecf3 | |||
| 23e386b526 | |||
| f0193a9307 | |||
| bbddf942a2 | |||
| f7d3a429a5 | |||
| 89bba86349 | |||
| 0a2076df37 | |||
| 7da0bc5c93 | |||
| 2c7bea7e69 | |||
| cc4bde613b | |||
| a3e7e80ffb | |||
| 3d2174b4e8 | |||
| 436bc160e3 | |||
| 693821eb53 | |||
| 495bb536f1 | |||
| a81ee9d711 | |||
| 13f88ed1ed | |||
| 9c92bd8a2d | |||
| 9815bfd407 | |||
| 42256b6283 | |||
| 4d4b874ee0 | |||
| e741fd3d1c | |||
| 23db6fae45 | |||
| 0cac17c395 | |||
| 9bea4833ca | |||
| d70d24cb7a | |||
| ab129128b3 | |||
| 8c292c2217 | |||
| 0b504afdca | |||
| fa76207199 | |||
| a6d3222ffc | |||
| e7b8c1fc11 | |||
| 226ecfa11e | |||
| 92a34a2292 | |||
| 19b6b2caca | |||
| 448f814aae | |||
| 2537f4e58c | |||
| d0059616aa | |||
| 8c8199abbd | |||
| 64825c8e84 | |||
| 62cd370099 | |||
| 9b528e38fc | |||
| c45450ed87 | |||
| cc53a55c96 | |||
| 9573216bfd | |||
| 2839e110fe | |||
| ba9ce2ad88 | |||
| eb4d7a5477 | |||
| 42d21b989a | |||
| 23cf3ad81b | |||
| cce324dbfb | |||
| 9e1dcd02dd | |||
| bfbe68ff88 | |||
| e07234573c | |||
| 5b2f53b33a | |||
| 14e7468ca7 | |||
| 7df06465a8 | |||
| cb2eb054eb | |||
| 3ef2cc50fe | |||
| d12d454c70 | |||
| 9a17bcd25e | |||
| 73ebe069f6 | |||
| 2755e373fd | |||
| 9e43910cc8 | |||
| 1646ace09b | |||
| c6c6570800 | |||
| 21576ec28f | |||
| a5b60a5d3b | |||
| abcb71d469 | |||
| 4fdf6333f2 | |||
| c18aba668b | |||
| 0a8333e1e2 | |||
| 3d19db5049 | |||
| 62e7767925 | |||
| 070c89e75e | |||
| cf0d897dfa | |||
| 9fc1c6bd65 | |||
| 342e616963 | |||
| a4c6f5c561 | |||
| 811d32c5be | |||
| 135074c040 | |||
| af55099d83 | |||
| 2d9f32fc2f | |||
| d361711043 | |||
| 426c0e0792 | |||
| ae451e5911 | |||
| 31bcb48704 | |||
| 25703173fb | |||
| eab2080115 | |||
| 5f99227e6c | |||
| 4a547632ac | |||
| 8cd9bae8ea | |||
| ddadefa9a6 | |||
| 7276688114 | |||
| 66450d4d02 | |||
| 2d0bda98b1 | |||
| 89943c26eb | |||
| 0ac25c7405 | |||
| b54c955847 | |||
| 857ec4fceb | |||
| 83ff1a0ec5 | |||
| ef85be3808 | |||
| 25b80d98ce | |||
| 1871e1ffe9 | |||
| 4440daa0a4 | |||
| 6e018447b2 | |||
| 5c4949bf5b | |||
| 90cb176847 | |||
| bdf8278b7f | |||
| da1f2fd426 | |||
| 4b1cbbc86b | |||
| 0957e4d55b | |||
| 6509c2136f | |||
| 52877f9b2c | |||
| 6176d27861 | |||
| 37a160148d | |||
| ee1501034b | |||
| 92e62ae21b | |||
| 7a5d6aa254 | |||
| 42a4abb176 | |||
| 440324c078 | |||
| 7e9e92a179 | |||
| ad62d49f3d | |||
| a562808d99 | |||
| 7f6a00a8f7 | |||
| f04db1b076 | |||
| 236b4a6227 | |||
| 93be36fb52 | |||
| 412f99f6a1 | |||
| a00f32e12f | |||
| 155436e103 | |||
| c43c7035a7 | |||
| a68656e1d5 | |||
| 65a7419e30 | |||
| d334b0c87b | |||
| 4826cd422e | |||
| 0f8a0bddba | |||
| 155faf8f8b | |||
| b8e8b0d989 | |||
| 8f8eec47a9 | |||
| c0767d1041 | |||
| 4bb470d291 | |||
| 7f4f78e750 | |||
| 6640a61437 | |||
| 0e7e46d0bb | |||
| 367f45a9b3 | |||
| 1d4e56cbd9 | |||
| 4e07525d10 | |||
| f5d6ad46c4 | |||
| cc8804103b | |||
| f7f24085cd | |||
| 097cf223ec | |||
| 8c3381f41b | |||
| 05a553a8fb | |||
| e71e1e04f4 | |||
| cc614c3ecf | |||
| 49feadbeb9 | |||
| 66d1bf5e47 | |||
| 7d39b690ec | |||
| 48c79615fe | |||
| 55dac4ca23 | |||
| a861002926 | |||
| 462f134278 | |||
| 1a42ca3cb1 | |||
| f5574ed238 | |||
| 3f00653bb2 | |||
| 505f69fb27 | |||
| 85ff0c5741 | |||
| b91b95bccd | |||
| 984be00635 | |||
| 01fd85aec0 | |||
| 6aa60f1bc3 | |||
| 55bad508da | |||
| 99ec962ca3 | |||
| d4b094937a | |||
| 19e36c1a35 | |||
| ce15caaa45 | |||
| 315e1bd1e7 | |||
| ff8d274a38 | |||
| ab2c9cddae | |||
| 16dc380c53 | |||
| 4b5170e8b7 | |||
| c7912ec5a6 | |||
| 090f0099c0 | |||
| ed7a1d93ba | |||
| cbf850a987 | |||
| 877cbcdd6b | |||
| 44e10c9212 | |||
| a2742e95ec | |||
| 9105818e3a | |||
| f06a374569 | |||
| 1c38931430 | |||
| fa92ab9ba8 | |||
| 4b56acc480 | |||
| f3cb0587f5 | |||
| 3e756c774f | |||
| e8fe926dbb | |||
| b2a168bd06 | |||
| 4628821451 | |||
| ab108c0437 | |||
| 5d9fe7b1f3 | |||
| 1b3bf2d301 | |||
| 017d7883d3 | |||
| 00439eac6e | |||
| d5b31de87e | |||
| f9a6b56c81 | |||
| 123239031f | |||
| 7f65dc9a92 | |||
| 25c345f665 | |||
| 2c2058e07b | |||
| f628de0c15 | |||
| 998d97da45 | |||
| 7a6f12082b | |||
|
|
9bb80002c8 | ||
| 2cf3b5185d | |||
| 9214b650ae | |||
| e6027c710b | |||
| 7a40f423d4 | |||
| 9966aa4ffa | |||
| 7c90e7bee2 | |||
| be3a699471 | |||
| a68f5ed5da | |||
| 3a4d546c10 | |||
| 386893e751 | |||
| e8cd94cc98 | |||
| bbf383a59f | |||
| eb41cf2557 | |||
| 7d71cd87fe | |||
| 886affc442 | |||
| 236c25028c | |||
| ca0996089d | |||
| 326bbe4eb1 | |||
| bd2de68a13 | |||
| 241485ada6 | |||
| 93925e7edb | |||
| 8be03b6213 | |||
| f8be9708f2 | |||
| 43f1d3a460 | |||
| 95ab9b7b07 | |||
| c4dec5820f | |||
| cf8020a374 | |||
| 8b2b00309b | |||
| 43c386dd0f | |||
| 94e68bf101 | |||
| c6fcbd4e88 | |||
| 95ec10c4cd | |||
| 8cde5f5b85 | |||
| 92daedbcfe | |||
| 59af83f001 | |||
| 68ca5feaec | |||
| d379066f8d | |||
| 50f45a25f6 | |||
| 4f1b44f859 | |||
| 63cb075ebe | |||
| 3bc89980fb | |||
| a30f10f463 | |||
| a3f387f59d | |||
| 0496b94742 | |||
| eeea0bde1d | |||
| 19a63eac0c | |||
| ff42b73982 | |||
| ac9207b0c6 | |||
| 7dadc5938a | |||
| 88fb907a24 | |||
| a349d97184 | |||
| 2eee80609f | |||
| fcb747f2c9 | |||
| 826194b88f | |||
| 303d179c1a | |||
| b309b6f244 | |||
| ee0ef6b69d | |||
| 121fcd2639 | |||
| 5cecb3364e | |||
| 1e2909808a | |||
| b8658d0fed | |||
| ea586f0019 | |||
| 4219a55576 | |||
| 2d6197c181 | |||
| 049d8dc461 | |||
| 8f7afa25fc | |||
| 7c0c8cf62a | |||
| e0c9e3817f | |||
| 95894e0965 | |||
| 0fd426db38 | |||
| 7f38305cda | |||
| 9eb03938ba | |||
| 38b16543da | |||
| 3a6e036b1d | |||
| c28baccca8 | |||
| 2352fdfaab | |||
| fd93d95ef0 | |||
| 1ad508d029 | |||
| 80e2953742 | |||
| 8f2214eb37 | |||
| 105434392b | |||
| d77c0ec323 | |||
| ebc9c2da81 | |||
| b706079a96 | |||
| 1a3fb88ff0 | |||
| fe73ec564d | |||
| 38becb2347 | |||
| 9cc237dfcd | |||
| 59a0a18068 | |||
| 3cdcbd70c3 | |||
| 36f48cb3ef | |||
| 6e40ceba46 | |||
| 9ed9312f52 | |||
| 3bf88a3db2 | |||
| cd835868a4 | |||
| 3adbefa88a | |||
| 6192b3aff5 | |||
| b504a42afc | |||
| 60532fda2e | |||
| 4604622231 | |||
| f4e43a2f84 | |||
| c5c3887d97 | |||
| 8ce3697a6e | |||
| bbe37b34d9 | |||
| ae8c208c59 | |||
| 3811a9d7cd | |||
| 3eed4a9224 | |||
| 68b713a69a | |||
| af1be38c68 | |||
| 3780eaf1f2 | |||
| 1f23472908 | |||
| 5e71e0a98a | |||
| 5e665079f3 | |||
| b67d86ef4b | |||
| cf83815785 | |||
| 255a06a789 | |||
| 3153e06601 | |||
| 7e4c9dcd99 | |||
| 8e92de0c4e | |||
| eb58ac434c | |||
| 5aed68117b | |||
| b6c3a855a4 | |||
| cd4b7cd2e6 | |||
| cb1e060ebb | |||
| ccc9ef0644 | |||
| 03b1d2bd59 | |||
| 565ef8f0cc | |||
| ae52efe220 | |||
| 09576d37b4 | |||
| 3b556e385d | |||
| d24677fc8e | |||
| bc9c9bf125 | |||
| 953db1c18e | |||
| bb6408e1bb | |||
| f5ee80a075 | |||
| e2a1ef97cf | |||
| f7aa151993 | |||
| c8461e648d | |||
| 78f57a52e8 | |||
| 645bbb9e1f | |||
| 1c5b8f78e8 | |||
| b06be61868 | |||
| 22635fd1db | |||
| 502f3c276f | |||
| a29e7d3701 | |||
| 90a6de998c | |||
| 309834e218 | |||
| 36548b07b3 | |||
| a647db524a | |||
| 96392d7cab | |||
| 3c73cf7286 | |||
| 5128d56863 | |||
| ec366ca548 | |||
| eaaf033cd5 | |||
| 899eefb2b1 | |||
| 35c152c073 | |||
| 4db61b7221 | |||
| 56faad93d6 | |||
| b02021eeab | |||
| 0f8d4c52be | |||
| f6b23b2697 | |||
| 9c162c8c40 | |||
| 9ee9d2dc06 | |||
| f88873226d | |||
| e6ef101e11 | |||
| ace82b83f0 | |||
| c3b5ebd7bc | |||
| f52001bffa | |||
| 8289f0ec93 | |||
| 4c85b5da81 | |||
| 7bddb74ba7 | |||
| b088c69c2b | |||
| ffc66cfaa1 | |||
| 50705d8a20 | |||
| eb85e1f034 | |||
| c104fc8c43 | |||
| 12aaeebb69 | |||
| b8accd5199 | |||
| 36e718ae36 | |||
| fc67cb263f | |||
| d6bec900fe | |||
| db967ff6e3 | |||
| 9d6d07b2e1 | |||
| 1444a3064e | |||
| 0a2e334aee | |||
| 15d21d3ab5 | |||
| a4f565087c | |||
| 6a11883c7c | |||
| 1202892973 | |||
| d3e1cc28bc | |||
| 151246c614 | |||
| 5049ba6907 | |||
| f8b593bec4 | |||
| 682e48bb2b | |||
| c4ddcb8e92 | |||
| d992b45cdd | |||
| f89637d6e8 | |||
| a493701b6e | |||
| 77b6a4b2fc | |||
| 9d595b2565 | |||
| 812b64b18d | |||
| a6d4d64192 | |||
| 0f52520ee3 | |||
| 8a996f5083 | |||
| b4e0d93c28 | |||
| f54217e713 | |||
| ebb1399951 | |||
| f9d33713ab | |||
| 4af3a1e647 | |||
| af44da007b | |||
| 1d5a2ceed0 | |||
| 4f9d558cf4 | |||
| 8bdd6064ab | |||
| 76b43e0b65 | |||
| 3b80e2101c | |||
| 42653be822 | |||
| 717ce4756a | |||
| 5ac0c18619 | |||
| 79dd86e13f | |||
| 05b6f98a82 | |||
| 098ce63b26 | |||
| 254f6312b4 | |||
| 5dc4447ff3 | |||
| d77978d0c9 | |||
| c4df067894 | |||
| c210efa9a2 | |||
| 3dbf0baeb2 | |||
| 5903af189c | |||
| 507eab7847 | |||
| 0f5b16febc | |||
| 1b5342da13 | |||
| 9d2776f6ce | |||
| 716a6d735c | |||
| 5362b526e7 | |||
| 0586c40667 | |||
| 9e48c4e0dc | |||
| 569a853b3a | |||
| 74a3f434a4 | |||
| a6af9583df | |||
| 326900b3a7 | |||
| c4dfb0a886 | |||
| a5efdebe15 | |||
| cb84ce69be | |||
| 7e5354d5ad | |||
| 521d765b35 | |||
| 7fbaaf189b | |||
| 6a9182c820 | |||
| 90f7afa720 | |||
| 90c893ae66 | |||
| 8d55a7ee70 | |||
| f6e32ece58 | |||
| 162ad41852 | |||
| 8b89083a51 | |||
| 68c5b015e0 | |||
| 61e360ae9e | |||
| 50663c7700 | |||
| 4da1291a50 | |||
| 94df75a9bf | |||
| 5ea3184c5e | |||
| 099bb0dfd5 | |||
| e318c89788 | |||
| 1174604b05 | |||
| 364f37aa5a | |||
| bbb71840c1 | |||
| c2923e01e6 | |||
| 4131ae0adb | |||
| f16e0abf03 | |||
| 07adc2628c | |||
| a682b818d3 | |||
| b2a8c2dcde | |||
| 2314a8f6c2 | |||
| f2033e0408 | |||
| 38d4a641f1 | |||
| 8ca3561c1a | |||
| bf7158a6e8 | |||
| 6a92d586a4 | |||
| 2a93942be1 | |||
| e81e6f4ff1 | |||
| 5e4cf9723b | |||
| a6fb93b231 | |||
| a3022f8332 | |||
| af0b27d762 | |||
| d2a8d537f6 | |||
| 52d65dabba | |||
| cbd499b88f | |||
| d59aa0179a | |||
| bf61f4eb4f | |||
| 97352ac44d | |||
| eb0687da36 | |||
| ceea23aaaf | |||
| 802a5a8a1c | |||
| 2d24db2b08 | |||
| bfb1edac54 | |||
| b12ac35b65 | |||
| 8b881eba5b | |||
| b2317325e2 | |||
| a8e845cb8b | |||
| 14bd70a67c | |||
| 82cfb22c03 | |||
| 50cd192fd8 | |||
| 62a0a9b1bd | |||
| 88b9f087a1 | |||
| 55b5ad56c8 | |||
| 00d5145aa0 | |||
| 6161522a04 | |||
| abaabc4cc0 | |||
| 2686884335 | |||
| f41c8d4c6f | |||
| a9496bdbd2 | |||
| 5e634580c2 | |||
| 37b4590851 | |||
| 81e565fdec | |||
| b912c85da7 | |||
| 7ef63fa72d | |||
| 627c3e9ffa | |||
| 876b3f4a7d | |||
| f323562bbd | |||
| f98711ec66 | |||
| 8db97cf776 | |||
| f38452a52a | |||
| 03d392803f | |||
| 8b40cf2659 | |||
| 86cf1847f4 | |||
| 45d7ed8b73 | |||
| 0b7b196159 | |||
| 33ad700d61 | |||
| 7f8552981b | |||
| 5cc9d2512b | |||
| 6ab789e36d | |||
| f8109af6ce | |||
| 1bfc6ac3af | |||
| 548817116a | |||
| b2f712e6b6 | |||
| 93739ddaff | |||
| 1373305638 | |||
| 70a54d0787 | |||
| 40a164b1b0 | |||
| bc966d56b0 | |||
| 61e7953827 | |||
| 192e1a9dbc | |||
| 2fe3c98c53 | |||
| 5f3cca665d | |||
| 88d5b049ff | |||
| 4614cb31fb | |||
| 44d76bc4a1 | |||
| 353350476d | |||
| 76d63a2fe8 | |||
| cce75a5895 | |||
| 2409adec5e | |||
| f75a5247b5 | |||
| 8cfa1310d1 | |||
| 086b96cc39 | |||
| 908aa7e1da | |||
| b6218e6b07 | |||
| 3d868855ca | |||
| 7e7213f67b | |||
| f5afc7d31c | |||
| 72737afb61 | |||
| b39e81512e | |||
| 62fad98a12 | |||
| 98c4aa7358 | |||
| 1a3ee1d4de | |||
| be2facb1f1 | |||
| 97b4731ca6 | |||
| 83326bcaed | |||
| 09eda63698 | |||
| d0aaff2135 | |||
| 7bd0bd0989 | |||
| 94bd98ab65 | |||
| 25fa4c853b | |||
| 4b4581ff2e | |||
| e1ea01e59e | |||
| da4d5c2494 | |||
| 3713992eb3 | |||
| e1c8337464 | |||
| 6c81ab18c8 | |||
| f0085588b9 | |||
| 8fdb330a6c | |||
| fb7a94f8ae | |||
| e71e3822e0 | |||
| e289fb9145 | |||
| bf2a8c4010 | |||
| 5cc34775f3 | |||
| 7f75afbdba | |||
| 1390ec0c15 | |||
| 4e84600e7e | |||
| c0ea49872c | |||
| 0685e4cabe | |||
| 875a590978 | |||
| 98d8aeb011 | |||
| 2f9905210a | |||
| 41d56a304a | |||
| 55da1da7f3 | |||
| a65d315cda | |||
| 16e6c57a3f | |||
| 638a2df7c6 | |||
| 9b53282444 | |||
| 89d02b353b | |||
| c968cca4de | |||
| e163b0d99b | |||
| 4426a5abb6 | |||
| 8c8e527249 | |||
| f50c1865d5 | |||
| f5257dc7ab | |||
| 14315e0035 | |||
| e2fe62b379 | |||
| 1f9bea1264 | |||
| 08f1a4d3cb | |||
| be8a0ac9c3 | |||
| a383f11d2a | |||
| 91618edeec | |||
| b64f6da230 | |||
| ba4b26b175 | |||
| 525c919b3a | |||
| d7f6de08e9 | |||
| 0d20ab7aa8 | |||
| 231d59da7f | |||
| 4fef277751 | |||
| 7032e64dcb | |||
| 15481c11c0 | |||
| 5930f771e5 | |||
| 2290c90089 | |||
| eb28ba0f78 | |||
| 7df203efe8 | |||
| 766b1dd779 | |||
| e992a8ea3f | |||
| e3863de129 | |||
| bfed6bdcf4 | |||
| f4834218ce | |||
| e3e001ac5b | |||
| afc1985114 | |||
| f0c0fa15ac | |||
| 3bb17aa74a | |||
| 3887d3afd3 | |||
| ccf1ac8e77 | |||
| df84150f14 | |||
| fd4f3c89cf | |||
| 46fa14692c | |||
| 2d26b672bf | |||
| f908dd5acd | |||
| f50135b5c6 | |||
| 2be8fc95b7 | |||
| 736d4b40e0 | |||
| 7fa0a4c79a | |||
| 8881aeb2ca | |||
| 8fa1c29c59 | |||
| 318ef00817 | |||
| 3fcdf69f56 | |||
| e2785fff55 | |||
| e5adc46d44 | |||
| 6052fcbe7e | |||
| 268e7e9b23 | |||
| 53f93fe01b | |||
| 202cb09e2b | |||
| c29df047d2 | |||
| 8dc8a3d39b | |||
| 34a4c17e9b | |||
| ccb61bd1d9 | |||
| be89574d27 | |||
| e8a12c08d8 | |||
| 16a5812db0 | |||
| 366eeab65d | |||
| ce185f92e3 | |||
| 276dccf5fd | |||
| 4fc6c80352 | |||
| 016afe19f8 | |||
| 7295ad401c | |||
| 1eed0fbda0 | |||
| da449b9852 | |||
|
|
9a499aced7 | ||
| c3f2c4f522 | |||
| a356f71745 | |||
| 0a76509365 | |||
| 9083833444 | |||
| ed9dc11c4b | |||
| 1c2d483a46 | |||
| 1f073938d7 | |||
| e12133fff0 | |||
| 61d95f53d6 | |||
| ebd9d7c16f | |||
| 455a7192d3 | |||
| 4c8ec8ffa3 | |||
| 2beca515ca | |||
| e1c3544f09 | |||
| 242fc36fd0 | |||
| 4754df89b7 | |||
| e050040bae | |||
| 30deb10c27 | |||
| f2791efa4f | |||
| acc9748aa2 | |||
| b36fe277c0 | |||
| 0b07e80ecb | |||
| b448019f93 | |||
| a108daebd0 | |||
| 2c950b5a0a | |||
| 0ded373257 | |||
| 4ad6ffce26 | |||
| 265f8092e5 | |||
| 6735056551 | |||
| a70aae6404 | |||
| f7c2027d17 | |||
| 8f9c4f4ed9 | |||
| cd4fa9df4d | |||
| b776dea93e | |||
| 2d655e9822 | |||
| f1aef07115 | |||
| ceac54f2a8 | |||
| 8cd2d73dd1 | |||
| 4c8a85091e | |||
| 1d8e306a5b | |||
| ff76148774 | |||
| 263616cf66 | |||
| 5d8563cf5e | |||
| 3a8e7bb486 | |||
| dac924d260 | |||
| 2fec9bae57 | |||
| a3a0e7f1a9 | |||
| 57e4922aa4 | |||
| 5a86e951c9 | |||
| 07a2292b98 | |||
| 498ebf5b5e | |||
| 0c0a53fb80 | |||
| f13d08283f | |||
| 6776b72adf | |||
| fc0111f9af | |||
| 58ecb0871a | |||
| 5ab36dc181 | |||
| 9eb4e7eb59 | |||
| b73d178751 | |||
| aeb5997303 | |||
| b6be8f1f51 | |||
| 6e4ec0f188 | |||
| d84a9d95e3 | |||
| e85ead856e | |||
| d640f69b64 | |||
| 3a855c6905 | |||
| e5bc9f79bc | |||
| e4a9a645a1 | |||
| 7be7fc0d06 | |||
| 639c21ee64 | |||
| 83463f08fd | |||
| d62c41a4c0 | |||
| 5bc32a7b39 | |||
| b87f9f2f0f | |||
| ecb8f48fc7 | |||
| 453e861eb1 | |||
| 9d9ba90f65 | |||
| c0ec43dc15 | |||
| 8bf0f53a1f | |||
| b9935804d8 | |||
| e3cd173cae | |||
| 0b171536bd | |||
| 4df5459abb | |||
| 99c360c739 | |||
| 238f3a123f | |||
| 7635f192bc | |||
| 4be4c95126 | |||
| c7174e1aa0 | |||
| 038f113176 | |||
| e640b7dc00 | |||
| 69ee0e8a79 | |||
| 44f9bf1d9d | |||
| 528d049505 | |||
| d38fff270d | |||
| f47e6d77df | |||
| bcdb9f7100 | |||
| 79c3511ced | |||
| 77163b4017 | |||
| 52512ff961 | |||
| 8e37d624ff | |||
| 2b845fa110 | |||
| 09c730c852 | |||
| 9ea0b5ca1e | |||
| 3f7c12c4cb | |||
| 52212a4234 | |||
| aad83a6e45 | |||
| b15249a7cc | |||
| 971c0b6bb1 | |||
| c8259d3fae | |||
| c1c1591ffd | |||
| 1ceae80007 | |||
| 711c240058 | |||
| ed906caf54 | |||
| fa316c0948 | |||
| 64da73b835 | |||
| 51d27b362c | |||
| 11bf6134ec | |||
| e6fd3d1594 | |||
| 6c440b46d0 | |||
| 6f5049ff54 | |||
| 785da91996 | |||
| a59be21d5c | |||
| dcd8d31c0b | |||
| bbff9cd347 | |||
| c5433c7b44 | |||
| 52e3ae85ef | |||
| 6ee8d34a08 | |||
| fc845bf79a | |||
| aa3ea16a1b | |||
| 5d72ad53fb | |||
| d5a16b3baa | |||
| 4300c11cb1 | |||
| 611bf9a530 | |||
| f665a077cb | |||
| 62c2411818 | |||
| 1aeff8903c | |||
| 7a0fe4f363 | |||
| 6ebe68c8fc | |||
| 075a340056 | |||
| d764da736d | |||
| b9ee75209a | |||
| 389ffcbadb | |||
| 37ec61eab2 | |||
| a901150981 | |||
| d7e623d816 | |||
| 45e7dd2c6c | |||
| 25ca66a86b | |||
| a78cbd6583 | |||
| 09283bba61 | |||
| e738070b24 | |||
| 0c67e0d798 | |||
| 9e7f379923 | |||
| 93426fbae5 | |||
| f1b9101b13 | |||
| 33d3b02763 | |||
| 2a169afa62 | |||
| a2fc7b47c1 | |||
| c717460cea | |||
| a8f57858d8 | |||
| 3ab0e79386 | |||
| 236b78c33b | |||
| 18138fd178 | |||
| fa34dcb44e | |||
| f8a7e22755 | |||
| 5e7a05b949 | |||
| 676d1fd8c1 | |||
| 9a569b9af1 | |||
| bfda22756e | |||
| 237d692cd1 | |||
| 31b57b24f5 | |||
| ff8cc52e41 | |||
| f6d8bab742 | |||
| 1bd0a301dd | |||
| d7ac3f27e0 | |||
| adf18c04a9 | |||
| 150023c203 | |||
| 21bf17da38 | |||
| 54c3d037a0 | |||
| cc7c59f4fa | |||
| 491c5fa696 | |||
| cb1c08a52d | |||
| 7c414a48de | |||
| 0d03d8d956 | |||
| ee974eb8d1 | |||
| 5e17847c10 | |||
| 753ee2e4e3 | |||
| 2c73095fd6 | |||
| c31875dc95 | |||
| 39ac32de74 | |||
| 3a6f76212d | |||
| 89c5d6195a | |||
| a6c0f93af0 | |||
| f52cdfe12d | |||
| fe91357505 | |||
| e4c578f20a | |||
| d9734e17fb | |||
| 4cc3f94635 | |||
| 8ff4dd5b3c | |||
| 423b6acfde | |||
| ccf2ec0804 | |||
| 002f0bda6f | |||
| 753aee7fc5 | |||
| c96b8b5c64 | |||
| 821e088b8e | |||
| 3ea5965a99 | |||
| 5ce2821634 | |||
| 5d4b6ee4fc | |||
| 7399e63d70 | |||
| fc27945b4e | |||
| 2b98a8ca57 | |||
| d50103ca24 | |||
| 52a3aaec81 | |||
| 48d9f3af80 | |||
| 7575ca93ad | |||
| dcf7f0daa9 | |||
| ffe3f45168 | |||
| bd17bdabf9 | |||
| 118c993e31 | |||
| 33707afaaf | |||
| 5fc79cb304 | |||
| b595872bb3 | |||
| e50e55444c | |||
| 0f68d7e8f9 | |||
| f161ba7728 | |||
| fb2479c6fe | |||
| f8f75587c3 | |||
| 3cbf6b5144 | |||
| 48cf579779 | |||
| 5c5edd2106 | |||
| 4a4b2f7206 | |||
| e84cdd1a54 | |||
| 410eaab039 | |||
| 8b8dd4758f | |||
| 16dfa61d3d | |||
| cd0dcdb06b | |||
| 0bc76ebcfb | |||
| b86383444b | |||
| e788902689 | |||
| 2d0d90ba7e | |||
| c56cba7257 | |||
| 63623d0dc3 | |||
| 1a409eab82 | |||
| 135242d577 | |||
| aec96c5193 | |||
| a68eef6627 | |||
| 0ed1ee7bb0 | |||
| ccdde704c7 | |||
| f2803833a6 | |||
| 884df448f0 | |||
| a1cba28258 | |||
| eddb6db49e | |||
| 67267c20a3 | |||
| 547da816ad | |||
| ecf57118ba | |||
| 3681255837 | |||
| f97595108f | |||
| 7bf6c0aa4b | |||
| 9fb24cad21 | |||
| b036b9f480 | |||
| 2d677619f3 | |||
| 576e6edecc | |||
| 0819ee5593 | |||
| 7ca45462cf | |||
| 0e8399ae71 | |||
| cf42f5455d | |||
| 50536e5867 | |||
| e3c584c560 | |||
| c48e67db97 | |||
| fd8c6f50f2 | |||
| e09e6074c8 | |||
| c470e9603f | |||
| faf0882b3a | |||
| e96209ad14 | |||
| 1912047142 | |||
| 8011416ceb | |||
| 2d3f527e24 | |||
| aed221fa34 | |||
| 425d46b0ef | |||
| b3d43ad682 | |||
| 65af6a8437 | |||
| ac07f2e7df | |||
| 4d1c88b43b | |||
| 465720ccdd | |||
| 21fe8ed322 | |||
| 01d440de88 | |||
| aba0ce3a6d | |||
| 906217822f | |||
| 9e81d94e5d | |||
| 092f3b1026 | |||
| 6739cac57b | |||
| 2d69ab84ce | |||
| af3a8d4dbc | |||
| 0792585612 | |||
| ee798802e6 | |||
| 3f44bf0577 | |||
| eaedae0565 | |||
| 9c068d07c9 | |||
| 8abe88b2d3 | |||
| ece70df8fe | |||
| ecc375cf63 | |||
| d89a5b2e4b | |||
| d041586baf | |||
| 49472d32a1 | |||
| aa83b5c270 | |||
| 24bd37cd38 | |||
| a4e24baeb5 | |||
| f0512fdce3 | |||
| 101b6c9b74 | |||
| 9db3f91c28 | |||
| 94de4c07da | |||
| 67eedfddc4 | |||
| 829ec15b5b | |||
| e8bc314cfb | |||
| 85328a6e96 | |||
| 3af743ed1b | |||
| b3b67e7abf | |||
| f2d4464209 | |||
| 3fa52b6f32 | |||
| 01ad3e8a8a | |||
| fc4bbe2568 | |||
| d1a407c6b8 | |||
| a210ca3e17 | |||
| 276f4a5aa4 | |||
| 56b5e117f1 | |||
| 00c5630072 | |||
| f3a4594386 | |||
| ed335e5010 | |||
| cdd5dbb5ea | |||
| 0e51ca5bce | |||
| 0f24587641 | |||
| 5b1f74e263 | |||
| 0a2171ae91 | |||
| 09573a7cfc | |||
| 686c4f2698 | |||
| 9273950afc | |||
| add6fe3994 | |||
| 581efc0235 | |||
| b1d9b4810f | |||
| a868059124 | |||
| 2ceb788c2e | |||
| 3ca93dfc54 | |||
| e8315b207d | |||
| 3090536fc7 | |||
| c5034b43ab | |||
| 6b4b7939b0 | |||
| 99be7c765a | |||
| a018275ebf | |||
| fb9777247a | |||
| 1e8239c7e2 | |||
| 81b127648b | |||
| 4c5e3f2f28 | |||
| 9fb7d3ff42 | |||
| ac3093b5dc | |||
| 975d29fa31 | |||
| 94adb5f348 | |||
| fba8cc9acd | |||
| 0fb75fa95f | |||
| 840c4ac3a9 | |||
| 16613c86a7 | |||
| 0c43591378 | |||
| 9ea6ac8d24 | |||
| 394210c99b | |||
| 0a7c8c70b0 | |||
| 50cfffdb19 | |||
| 262f2ceef5 | |||
| 5377ca3d57 | |||
| 2fc48951c8 | |||
| b5308c583c | |||
| ffc4690cf5 | |||
| aace3488c5 | |||
| 9782ca679d | |||
| 258500d3f7 | |||
| 20a3a2d33d | |||
| 09b6d24303 | |||
| 244569004b | |||
| 773928cf47 | |||
| 0b60b46a40 | |||
| 4a4797e49d | |||
| a26a507d31 | |||
| 151578461e | |||
| c219e1c5e6 | |||
| 701190a853 | |||
| 4a5d224e26 | |||
| c948ed897f | |||
| 9f83c4003a | |||
| 60ad89af8d | |||
| f59c3ac6e4 | |||
| 25aae80175 | |||
| 8a784023df | |||
| d105b3086e | |||
| e68734af4d | |||
| 80aca5c42e | |||
| 91cc351b9f | |||
| 3727eff0a1 | |||
| 98e8f2c77f | |||
| d9cc0ef9d3 | |||
| 20e5e555f1 | |||
| 156a6a6cb6 | |||
| 2c57c4598c | |||
| 130678682c | |||
| ca706b0281 | |||
| 9ff2b454fb | |||
| 5362042060 | |||
| 59c05047e6 | |||
| dabc32defa | |||
| d0ba4497b8 | |||
| cbdbb2cb4f | |||
| 8090db41fd | |||
| e4b8bf49c6 | |||
| f91e4f7f47 | |||
| 2185ab4d96 | |||
| 8b55326dbd | |||
| 29de3846b7 | |||
| 781f6703f2 | |||
| 7901b11a6d | |||
| 136351e574 | |||
| 004fe34221 | |||
| dc15afe84c | |||
| 298b4baeae | |||
| efa72f8d96 | |||
| d5d8cca96e | |||
| 34676028f9 | |||
| 6639a57225 | |||
| e084da09e7 | |||
| 8afc6b5c10 | |||
| 28b558e0eb | |||
| 18d55d8ef9 | |||
| ded62cb3f1 | |||
| da00ab06c2 | |||
| 4021aeef49 | |||
| 3cf5653f0d | |||
| 779e44f63a | |||
| 17f8d7bb98 | |||
| 47e0d157a2 | |||
| bcfaf764a4 | |||
| cd38fe180c | |||
| 51b54d0dc6 | |||
| a452163d96 | |||
| 1457492697 | |||
| c7ce387900 | |||
| 7131dbd052 | |||
| 1a2c8df31e | |||
| d2d280c2e3 | |||
| 7480c912b5 | |||
| 307fb2c8a3 | |||
| 85dcab4226 | |||
| da7bb49726 | |||
| 17c5b9b811 | |||
| 458ca8b40c | |||
| 9bf906a371 | |||
| b1e7ce7277 | |||
| 0fb461e3df | |||
| fdb9083e95 | |||
| ab645f0fe9 | |||
| 290ce48514 | |||
| b6c35b9f76 | |||
| 5c90e911b0 | |||
| b63181ae6b | |||
| bc72822fe4 | |||
| 29d6e2157c | |||
| 6b851b5033 | |||
| cad2a32394 | |||
| b251ba9709 | |||
| 812fb1ff32 | |||
| 0e299769bb | |||
| 956fed6616 | |||
| ef982e5d22 | |||
| fe589090d7 | |||
| 6100570511 | |||
| c25370304e | |||
| 203d561a5d | |||
| 987367d1ca | |||
| f7523e073f | |||
| f42fd8a333 | |||
| bf39b6c79e | |||
| 33dbbb5178 | |||
| db79948886 | |||
| cf09b40b4a | |||
| fbc5aedf35 | |||
| 31c0f1566b | |||
| 16786404e1 | |||
| 050d68c0d1 | |||
| 9f807e8e1d | |||
| 851c2d0239 | |||
| f9ab417fdf | |||
| 6702e0714f | |||
| fa16558cda | |||
| 5328e0be5d | |||
| 1bd02406d4 | |||
| a4c34fb326 | |||
| 80a70b758d | |||
| 0a333efddb | |||
| a4cf1a2957 | |||
| 59e5709f28 | |||
| 1195eb23b1 | |||
| 69f00977ae | |||
| fc8b8b8a9a | |||
| 07a3160ed5 | |||
| 1496fbfa53 | |||
| 780593c0b6 | |||
| db891f43ce | |||
| 3357d9a86b | |||
| 43a7ca4b5e | |||
| c764a356ce | |||
| 4a881b9eaf | |||
| 76d70ea861 | |||
| 959a04e1cc | |||
| bf8fbcc9e3 | |||
| f9fe46154a | |||
| c97921b2ea | |||
| 95967f2f45 | |||
| 552c05599f | |||
| 837d110796 | |||
| fcc7e84300 | |||
| 9080bc85f2 | |||
| 512f1a8f4d | |||
| 4faa6b9af4 | |||
| 019ee02912 |
3
addons/havari_arabic_fonts/__init__.py
Normal file
3
addons/havari_arabic_fonts/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
||||
# Pyarmor 9.2.3 (basic), 009742, subscription_packages, 2026-03-02T02:54:00.548137
|
||||
from .pyarmor_runtime_009742 import __pyarmor__
|
||||
__pyarmor__(__name__, __file__, b'PY009742\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00_\x04\x00\x00\x12\t\x05\x00\xe2\xf5bdff\x8b\xfd@x\xee\xd0\xcf\x91\x97E\x00\x00\x00\x00\x00\x00\x00\x007\t{\xa7Q\xfb#\x11\x9f\x7f\xd1\x7f\\\x9d\x84\xbd\xa4\x1bS\xed\xc1S\x12E\xce\xd4 \x0c\xbf\xf0P\xca\xdf\x88O<\xb3\x19\x16)\xaba\xce\xdc\xed\xc8\x9e\xf8\xd6\xb4T\xdb^\x02\xe9\x13\xd9\x05p\x86\xccr0#\x04\xb9\xc8 \'\xe9V\xe7\x03\xda\xec\xf2ol\x99\xb37pc\xc8\xaeip\xb8\xb0U\x03\x02\xb6+H\xda\xff\xb3j\xcf\xd6\x1e\xf7VU\x19\x90\xd9\x07e\xa9\xcc\xd6\x15T`\x88\x90B\xd3/\x10\xe4\xe6b\xa0\x19\x0c\x14\xf9\x1b\xd9]\xd6=\xb9\xc9U\xe1\xe4\xd6b-\x9f\xd7\x12\x13\xdd\xc6\xda\xa4\xd9\xa9\x8f3\x02\xda\xcd\xf0E*Z\xfd\xe2\xba\xd6T\x0eQ\xfd\'XM\xc2#i \xb8O!4\xab\xfd\xacS\xda^\x08\xcf\xb1\x9c\xa4\xcb\x00\x06\x89\xafI\xcd>F\x8e\x91.\xeb\x94+E\x89<w\x15\x86]p\x86rS;\xdc:\xf9\xdainE\x80"\x9fA3\xca\xfa\x96\xdev`\x06C\t\xf8\xa5.\x98\x04%\xd5\x8d\xc59\x892\x0c\xc9a\xbfqa\xc4\xac\x80\xe0\xab\xa6\xf9fHd\xa0\xbd\xfe?)\x0eQ\xca\xeeol\xa2\xf8\xd5\xb11\x95_\xda[]\x19\x82\xb4\xe0Iv\xb2\x95\xdcx\xb2\x11\x94\x9bL\x7f\xce\x9e\xb5O\xd4n\xc5?\xfaRJ\x06\xa5\xf5\x95\xe7\x85\xb3gg0\x80\x8b\x8b\x93\xbb\xdb\xed]\xcdc:\xeb\xaa,#?\xd0n\x86.\xd2\x17\x0b\x89\x89vGB\xf9\xdb\xe4\xe44\xa2\xc7&\xdf\xc0f\x140|s\xfe\x95\x1aT\x83\xb9\xe9\x8f\xbd\x94G\x07\xb0\xb3X[\x9d\xb1\x80\xb8\xbd\xa7\x8dGiH\xf9\x92\xaa\xed\xa1\x12\x06Y\xb1\xa4\x83\x07\x8c\xe8E\x87^\xaca[\xf0\xf8\xc4I\xeb\x1dN8mW\xb0\x011\n/X\x8e9\xd8\x8c\x11\\\x15"\xb9%-\xb7\x84\xcd\xa6\x1d\xc1\xc3]\x1b\xaf\xa9\xba\xab\xfd\x99\xf1`\xf3-\x07\x8f\x07,\x89\x9b\x11\x8e\r\xfc\xa8\x8bG3\xd9\xfaF\xf5-6\xfa\xdd(\xcf\xc4J\x0f\x9e6m\xb2\'\x9e]8u\xaf+o~\xdeS`M\xf5\xd4\\\x98\x88\x02\x9d\x87U\xa1\xc3q\xab\r\xd5\x81h\xc1v*\x18\xaf\xdb\xc8v\x83\x19G6\x08\x1fA\x7f\xccK\x0b\xd0\x89G\xc7\xe3\xfb\xa9\x93\xb6\xc1D\xb2\xc9\x9d6\n|\xbd\x00\x0e\xec\xe2\xcf\x7f\x86\xdd\xd2\x82\x99\xa1\x00<~\xe1_\x1c8k\xcf\xef\xa3d\xdd\xef-IK\x10\x17\xc0\xc9C?\x02x\x8ey 2u\xda\x8eDAh\xa2Ah\x9a\xfc\xfb\\w"_\t\x12\xae\xfcZG\x01\xcc\xe1\x1c\xab\x98k?\x8e8\xe3\x94+\x1b\n\xf9D\xec\xdd\xf0\x12\xeb\x0b\xe4=}\x88\x97\x8c\xf3\xa7\xc8\x18\x99\xd2>\t\xf9e\xea\xa1FxD+c\xe4V\x14\xe74\xd2\x8e\xf9\',\xe1\xfck,\x14:0\xba?q\x10\xdc\xee;Y\xa7\x1e\x14\x93h\xc5xg]F\x06J\xae\xfa\xa5c\x91n\t\x0c#\x1f+>\xa9\xd8\x03kB\xe6\xb3\x8cyc\xdc!\x92\xfa\x1da\xf1K\x85t$\xd2\xf6\xb2\x8b\x0bH_\xacSq\xbe\xb4\xb3yVq\xe3\xbb\x8c.)\\\xf2\xc6\xb2\x1d>y\xbf\xea-b\xe6l\r\x9cPnTu`\x13!\x14\x8bj\x94N\xf4\x94\x16\x19\x8bih\xca.G\x19Ys\x01\xb1\x15\xce\xfbk\xd0\xe6\xd6\xa8n\x8eK+\x9f\x85\xc7\x02\xc4"T\xd7\x98s\x08tw:\xfa\x08\xcd\xc9F\xa1Hr\x03\xf6u\x8f\xcdE\xdbdb\xe6\xfd\x8a[VI1I\x8e\x9f\xf7\xc3\x1a5\xeb\xa0\xa5a0\xb1\xf5je\x0e\xf3\xebe\xf0\xb0\x83b{S/\xebO\xf3\xd2p\xb5<\xe1\xbb\xd5\xf4\xcds\xbdwO \xc9\xbfA\xa1\xfbT`\xf4<\x10\x02\xb1-\x88\xe9H\xcd\x19d\xbdEP\x17\xde\x1a\xe4/\xd0\xb7\xbf\xf1m\x12U\xb7zD\x03\xbf\xd5\xf1\x80/\xa1\x1d\xa0\n,\xdb>vk\x1e\xd3\xb3\xe9\xe8b\x01\xf9U\xad\xad4\xbd%\xeb}\x83\xb5\x1e\xdfo\x0e~6\xa9\xbcE\xab\xc9\xd9\x93@5\xe5T\x05\x82\x03\xcf\xa4@\xa0\xe9\xbc\xc0\x9b\x04\xf3\x90K\xe9]6\x96\xa4\x8c\xff9m35\x03\x16\xdc\x91} c\x89r\xed0\xea\xc6\x1f\x06#\xbf\x8e\xd9\xb8\x9b9l\x1a8\xb8\xb5+\x1a\xdd@x3\xb0*\xe8\xc0F[bG\x9d\x86\xd0n\x0b.\x06\x8a\xd3-U\xdd>\xb7\xc23D\n\\\x7fY\xc1\x80\xbe7\xd4\x85\xf9\xdf\xf5\xa3\xd7\xeb\x92\xdd:\xbc\xf7e %BK4\x95\x9c\t\xe5\x01N\xfa\x7f\x16\x82"_\xb0\x0c$\xf2f1h\xd6\xb4\xd8@\x0f\x8e\xa8')
|
||||
58
addons/havari_arabic_fonts/__manifest__.py
Normal file
58
addons/havari_arabic_fonts/__manifest__.py
Normal file
@@ -0,0 +1,58 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
{
|
||||
'name': 'Odoo Arabic Fonts',
|
||||
'version': '16.0.2.0.0',
|
||||
'summary': 'إدارة موحدة للخطوط العربية - 6 خطوط',
|
||||
'description': '''
|
||||
Odoo Arabic Fonts - إضافة لتحسين الخطوط العربية في أودوو
|
||||
========================================================
|
||||
|
||||
المميزات:
|
||||
---------
|
||||
* 6 خطوط عربية احترافية:
|
||||
- دبي (Dubai) - عصري
|
||||
- الجزيرة (Al Jazeera) - إخباري
|
||||
- القاهرة (Cairo) - احترافي
|
||||
- تجوال (Tajawal) - أنيق
|
||||
- أميري (Amiri) - نسخي تقليدي
|
||||
- المراعي (Almarai) - سعودي احترافي
|
||||
* إعدادات مرنة لأحجام الخطوط
|
||||
* ثلاثة أنماط جاهزة (مدمج - متوازن - مريح)
|
||||
* دعم خطوط الطباعة والتقارير
|
||||
* تحسين واجهة المستخدم للغة العربية
|
||||
* توحيد إدارة الخطوط للباك إند والتقارير
|
||||
''',
|
||||
'category': 'Tools',
|
||||
'author': 'Mostafa Elhavari',
|
||||
'website': 'https://havari.me',
|
||||
'maintainer': 'Mostafa Elhavari <m@havari.me>',
|
||||
'support': 'm@havari.me',
|
||||
'license': 'LGPL-3',
|
||||
# Developer Contact: +90 543 774 3103 (WhatsApp)
|
||||
'depends': ['base', 'web', 'havari_license_client'],
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
'views/assets.xml',
|
||||
'views/res_config_settings_views.xml',
|
||||
'views/base_document_layout_views.xml',
|
||||
'report/report_templates.xml',
|
||||
],
|
||||
'assets': {
|
||||
'web.assets_backend': [
|
||||
'havari_arabic_fonts/static/src/scss/fonts.scss',
|
||||
'havari_arabic_fonts/static/src/scss/variables.scss',
|
||||
'havari_arabic_fonts/static/src/scss/backend.scss',
|
||||
'havari_arabic_fonts/static/src/scss/presets/balanced.scss',
|
||||
'havari_arabic_fonts/static/src/js/font_settings.js',
|
||||
'havari_arabic_fonts/static/src/js/font_preview_simple.js',
|
||||
],
|
||||
'web.report_assets_common': [
|
||||
'havari_arabic_fonts/static/src/scss/fonts.scss',
|
||||
'havari_arabic_fonts/static/src/scss/report.scss',
|
||||
],
|
||||
},
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'application': True,
|
||||
'post_init_hook': '_register_license',
|
||||
}
|
||||
3
addons/havari_arabic_fonts/models/__init__.py
Normal file
3
addons/havari_arabic_fonts/models/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
||||
# Pyarmor 9.2.3 (basic), 009742, subscription_packages, 2026-03-02T02:54:00.569512
|
||||
from ..pyarmor_runtime_009742 import __pyarmor__
|
||||
__pyarmor__(__name__, __file__, b'PY009742\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xee\x01\x00\x00\x12\t\x05\x00\x10;\xe8\x1eTQ\xc6\xb2\xaf!\xa74\xdf\xcfb\xed\x00\x00\x00\x00\x00\x00\x00\x00\xe7Z+\xff}\xef\xcc\x08\x82\\h\xeei\xc2\x08C\xba<\x94\x0fW\xd4\xc3\xf7\xf2,\x17E\xe7\xee\x89\x9fW\xc3H\xba\xb7\x98\xe5\xef~I\xb1H\xf0\xd6s\xeb\x1e!I\xcd\xd1{\x16\x14\xeb\xf7@XW\xe9p\x1eXu\xed\xe7\xbb\x1d\xa9\xb5B\x1c\xf2\xa0\x19\xc1s9\xf4\xce\x119\xd3\x0c\xb4\x13P\x85z\xd9\x8b\xdc\xf1\x8c\xa4\x83U{\xad\xf8a@H\xdb}!|z\x80^\x8dy\'A\xf1\xaf\xf8\x81\x08\x03\xf6\xa4\x9c\xb8h\xbb\x17\x8c\xf9\xe7\xc0\xc1\x9cuCJX~\x10\xcam1F~kb\x12\xb5\xedf\x80\xd8s\xc8C\x13o\xbbx\xecG\xcc\xc8\x035\xf6\xd9\xd9\xd7\x80\x8ad\x87y\x86k\xef\xe0\xbc\xde\x08\xbe!\xaeV\x7f\xd4\xa3\xcf\x1fi(\r\x92\xc0\x9bW\xfc%\\;50\x85\xc7\xd6D\xa4\x96&\xec\x88\xbb\xefu4O\xb4w;\xaav\xe6\xc61\x13>q\x8c,Lu\xefu\xdf\xd9\xd9\x11bZ\xb6f\xf5\x0c\xc3\xbc\xf4\x9dE\x1cI\xd2&\xfb\xd9\x8d\x03\x05!a\xb1\xbe\x10A\x8e\xb5\x81\x0e\xe6\xe2\r)\xd5\xf3\x12\x99\x07\xb0\x8f\xcb=:\x9f\xec\xa0B\x19\xe2\x1fJ\\yq\xb5\xfa\r\xd3\xe1\'W\xfaI\x16Ij\xaa*\xd2\x9c\xeb\xf4\x81\xedJ\x80\t+\x89\xa8\xb5\x9e-\xbe\xbf\xde)\xf2W\xeb\xd7\xf4UF\xfe\x1d\x7fX\xb9[^\x14\x8a;\xf1\xacsr\xe0\xd5\x92dy\xf8T\xd9s\xad2Z\'\xa9h\xb5\xb6\x81\xeb] \xfe\x88\x8d\xc5\x99\xcd\xb5C\xdc;l\xe5\xf8x?\xa6A\xc85\xa4\xa1\xe3\xc3n\x12\x14Q1\n\xc1|\xf7\x87VS5\xb9\x00S\xd1\xe6a\xc0\xd9+\xca1\x92(\x1d\x93\x7fdD\x0c\x80\x93W\xe3\xec\x94\xcaI\xda\x19}\x7fVT\xf2\xa5\xd5\x96\xd6\x1e#\x03b\xa2\xc1\x85"\x86\xd6_\x02\xca[\x16\xcf\x1c\x92tN\xf4Dd\x8ej4s\xe5\xd0\x856h<\x1a\x83\xfc\x85\xb3^\x99\xa3\x92P\x96\x9bQ\x8d\x9f\\$')
|
||||
@@ -0,0 +1,3 @@
|
||||
# Pyarmor 9.2.3 (basic), 009742, subscription_packages, 2026-03-02T02:54:00.562657
|
||||
from ..pyarmor_runtime_009742 import __pyarmor__
|
||||
__pyarmor__(__name__, __file__, b'PY009742\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xbd\x03\x00\x00\x12\t\x05\x00NR}\xb1\xe1\xf4Q\xf5\xa18\xbf%\xd8>\xabq\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x1d5J_\'\xd8-\x14\x12M5&X[\xa0\r(\x9c2\nD\x0f\x12\x03\x17\xcb,2\xcdHl\xfcj\xba\xb5\x8dE\x13\xaepw\x1bN\x8b\xd2\x8dW6s\xe5\xd5\xa2\x11fs\xdfx\x8c\'\x83B\xb8\x93cQ\xdaQ\x05[\xafl\x81]I\xd9^t\xe7\xb8\xfb^\x04Z\xf6\xd5\xbdo\x8f\xdfuI\xf6k\xe6\x1fJ\xde\xbc\xd7\xdf\xf1{a\xcbI\x91\xfd\xfd\x904\xb6\x85:nQ\xde\x13\xd3o\xbaqi\xc4^0Q\xc2J\x1e\x0fo\x83(d\xba--\x97A\x1b\x14q\xc6\x05\xa4\x06\xda}\x12\x00\xa7q\xf3\x7f\x07\xf3\xba\x8dM\xbekd-\x1d\xf1\xa7\xd5\x03-T\xc8\x1b"\x0f\x10$\xfb\x08\x98\xa7\x10\xbeLy\xa915\x07\x1c\xd5\x91OSU\x80\xc1\xba\xcd\x00\x8a\xe9 \xcc;\xfa\x9bIQ<\xca{\n\xf2\xa2J\x0f\xd4\xa5\x8e\xbbV\xf5\xa2H\x9eeL?\x0c\xfa\xa4Sj\x00\xffF!\x0f\x90\xb5T\xe3\x17\x02\x057\x13\x00\xe2\x95\xff\xaf=\x10\xa9\x17\xad%u\xcb\x7f8\x88(\xedk\xfe\x12\xf4C\x9cR_\xa7\xb4\xe2N\x0cNCD\xcb>P\xc4Fv\x03\'\xd3\x14@\x893\x94\x1f\xc8\xf4U\x99e\xcb\x9a\xae((\xebR\x08;E\xbd\x91u\xd8!m\xeb\x8f2\xb0\xda\xad\xe9\x83[Z\x944Hc\x87\xf8\x9csK#[\'m\xd4m\xac\x88\x9c\xea\xfbmu\x83`\x01\x81\xdf\xc9m\xa7\xec\xf1\x87r\xfbj\xcd_\xed\xa2\x08\xf4\xcd\x06\xb9\x08\xd5B\x89\xa6g\xf8Rz\xe4\x1d\xab?cw\x11\xea\xadl6\x92\x0e*\xb6\xdc4\xd0U\xd6X\xbf&R}\x08_\x13\xb9\xa3:[lH^\x83\xa9\x01J\xab\x8aB:F2\xd9\xcd\xf7\x82\xec\x82\xd0\xdbx[\x95\x99\xa9\xfb=\x0c\r\x90k\xd6\x07\xd5v\xd0\x97\xed\xe5Z\x1dJ\xc6\xa8z?\x08J?\x15\x98\x80\xd8 \x8dq\\\xb8\'\xfa\xe6e(\x99\x13b\x95\xee\xf9\xfbc\x05\xf1\xba\x8dD\xd6\xbf\xad\x1a\xd8X\xdf/\xae\xf8v\x1b7\x8c\x1d\xd8\xf5\x92$db/\x03wx\x98)\xdee\xb5\r\x19cf\xe0lM\x89+xl{\x81O\xe1\'\xa4\x8d\xab\x1c,k\x89\xe7\x16\xa2\x1b\x00\xb42\x950\xe4+e\x16\x9c\xaa%\xa2\x0bj{D\x0cm\x10\x8fq\xd2\xa9\xe6ax\xff^!&F\x1b\xc1Y\xba\xbcB\xc2\xe3qm\xf4+\xe8m\xf26l\x01\xd73\x91\x10&\xf4\xab\x0e\x99>\x1c\x88\xcdG_F\xacA]~b\x02F\xd1\xea[\x87\x84E\x1c\xdb\x18\xb47b6\x8ehv\x022d\x02\xf6b\xc4\xd8vU\xa6^\x1d\xb7\xff\xd1\x87\xd3R\x8b\xa9\xabvx\x81\xe6\xb8:%2{]p\xc0y*\x90\xfd\xf5)\x1b\xfdE\x1d\xfd\xd2~\rRC,\xb2\xe7%\x1d\x83\'\xe5\xbf\x83\x82\x11\xf3\xb6z\x80u\xe5\x12\\\x07\xa1\x91\x11\xd1\x1dj\xd2[x\x91\x01\xc4\xb67\xff\x99\xc6\n^7\\\xf4\xee\x05\xe1~R\x8d_1\xb0\xd2\xe9\x04g\x05\x85\x90\xd9\x1d\x7f\xd5]\xd1\x7f\x8fJ\xb3P\x00H\xf8\xdb\x10\xf6\xa3\xe0\xa2\x13a\xdf\xe39\\\x15\x97\xfa\xbd`U\xb7\x88\x87\xef\x00\xc1\x84\xb3\x87\nH#\xc8\xbf\xd1\x10\xa1\xca\xe4\xddm@\xd5\xb4D\x98GRN\xb9\xf1x=&D\xd1vY\xf1F{\xf1\xe7\xf4j+\x19Aj\xb1\xc5\xcdZ]:\xdd\xeb\\h\x87\xa9\xcey0\xc1\x18\x03\x82\xbd\r[\x04(o\xdd\xf0\xf2\x98\xaf\x11\x8et\xc7*\xbb\xf3;s\x86\r\xa9-,%\xc1\x7f.B;\xe1B\x80\xf5\xfai$S\xefe\x9c\xefU\xd7\x9a\xe2\xdd.\x10\xd8\x88\x18`\xb2\xf2)\xfd\xeb\x08^\x87S\x8c\xa23\x1eM\xf8/m]h\x8aP\xe5\x88\x94A\x12V\xf7S\xc8\x13q2+\xda!n6\xf0\xb3x\xdb\xc5\x90;\x16\xd9\x93\xbc\xf5\xe9.!\x8f\x96\xae@')
|
||||
3
addons/havari_arabic_fonts/models/ir_qweb.py
Normal file
3
addons/havari_arabic_fonts/models/ir_qweb.py
Normal file
File diff suppressed because one or more lines are too long
3
addons/havari_arabic_fonts/models/res_company.py
Normal file
3
addons/havari_arabic_fonts/models/res_company.py
Normal file
@@ -0,0 +1,3 @@
|
||||
# Pyarmor 9.2.3 (basic), 009742, subscription_packages, 2026-03-02T02:54:00.576354
|
||||
from ..pyarmor_runtime_009742 import __pyarmor__
|
||||
__pyarmor__(__name__, __file__, b'PY009742\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x0c\x03\x00\x00\x12\t\x05\x00\xd0\xdb\xb0v\xde\x07j}[\xe6\xb3\xd4\x9d\x0c\xad4\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x8f\xde#\x94\xc5\xce<\xb7\x0c50\xcax\xefC\xe1[\xb6.<~\xb8M\xd3\x0b{e\x96\x9e\x87\xc1{H\x01Vo\xd6\x8f\xdd\xe6\xd8\xe4\xe3\x9e?X\xa2\xe9\xa3$Q\xfa\xab\xdeg\\d1%\xb8j\xb5C\xc0^\x8f\xddV\xe9a\xa8K\x19\xe3+\x94[\x8e\xbd\xe7\xb7\xa2\xc3\xf6\xab\x01f7\x18\xaau\x91\xd2\xb4&\x95\x1c:\x19i^\xf9Z\xe6!\x8e6\t\x01\x0e\xa7\x9a\x1a:\x7fqqOj\x06\xad)g\x11\xbc\x00\xa3\xc4O\x06\x82\x089\x96`\x1e\x00\xcfh\xe5S\x91\x83\xf1+\xe1\xacmOk\xdd0\xc5n\x1b\x92\xca\xc4\xfb\xd5Z\x00d\x0f\x0fj\x81\xff6\xcf\xf7\xcf\xa8i\xb1\xebg\xa3\xf0\xd2|\xc6\x83\xda\x94moW\x96NK\x86%\xcf_\n$|\x057=3\x8bK\xf0cS \xf8%k\xcd\xb5\xb8\xf5\x97\xa3\xa3\x15\x008\x87\x99%\x10af`\xe7\xad\xcb\x08\x01\x7f\xcca\xd7\x14mh\xa4\x03\xfd\xa2\xfbM`\x95\x97\x89\x9d\x8fY\x87\xd5h`\x07\x18\xc9\xe3\x0e\xfe\xdf\xeb\xf4s\xeb\xcc\x02@\xc5I$qU)2U\xd7]\x8ef*N\x9dR\xd5^d+\x93\xba\xff\x91C\x1f\x8bX\xd9y\xb0\xbd\xb2\xfc\x00SN\xa8cM\xe7\x05M\xc6\xa6\x996k\x9c\xb0`\x10#Af!\xdb`o\xf1\xec\x12\xb8\x10-\xf7\xf6\x14R\xdb\x84\x85\xdb\xbb\x03\xab\xdb\x98\xef\xcd\xc1c\xf7\xcd\xe3_\x17\xe2\x83\xca\xc3`n2\\\xc0w\xd1\x8a!|L\xc8U\xd7\x9d\x11\xac\xa0\xc7\xc6\xe5\x17\xff\x9bw6\xad\xb9n\x84&\xf9\xdc4x\x02eWa\xb1\xb3\x13\xae7\nj\xd8J\x86\'\x99s\x91\x0f\xde8!\xd1\xa7\n%@\x19\xf5[=\no\x03sBT?=\xd6\x0c\xb6+\x9c\xe6\x0f6\x9e\xe3 \xd8\x12D\xe8\xe6\ry\x08\xb0\xe8<E\x80\xf1OQ\xd4H\x1f\x08\x0f\xa1\xe0\x9e\x91\x04=\xca\xeb\xbc42P#\xfb\x0b\xdfi\x85\x08g\xe1Z\x8dZJ\xe3f\x96\xcd\xbf\x88[q\x8c\xa3A\xd4N\xe18\xd4\'\xec\x03\xea\x92\xba\x9089%\xdf\x0b\x9b\x07\xb3\xa9\x17\xe0\'U\x13i\x7fm\xd6\rV\xff\xcbR\xdf\xe0\xdaYpu\xd0\xd8\x05h%%\x07\x84"\xe81\xf6\xc0\xee\x08ETD\x99g\xaeZ\xe7\x99\xba\xb4\x84\xe0\x8f\x83\xf8\x8d\xc8\x83\xb6\xdf\xf6\x84\xfc\x00\t8\xc7\xff\x90\xe9Sk\xf7\xd1\xe4\xaf\xfd\xe5\xb4O\xa3\x08\xbd\xcc\x16H\xddl\xab\xa2TB(@\xe4\x8e\xe7\x9f\'D\x19A}\xa5\x95<\xfd\x1d\xdbu\xda5I\xcb\xa7u\xc6\xde\xa5\xe8\x16a\x13\xa40Td*_\xf7\x00 \x8e\xa4\x0b\xd0\x1f\x13\xa0\x0c\x7f!\x18x\xb8!\xd8H\xda\xeej\xdf$\xc2\xfd.xi\xec\x12\x08\xa6\xbfkk]\n\xdf\xa7\xda\x19O\x18\x02\xd0\xcf\x02\xe8\xb6\x0b\x97\xa8\x8a\xd8\xbb\xf2\xc7H\xb4\xfdv8\x87\xc0;\xc4\xd42"(\x93&+s\xa4O\x9b\x89\xe9\x9cQ\x136b\x11\xe0P^9?!\xb9\x9b\xee\x08\xa3\x88\xd5\xa2\xb6c\xdd\xb7\xc76\xcd\xe3\xffW\x9a\xb2h\x92\xfb\xb5\x8fVO\xf9G0@\xe3\xdc\xefio\xa8')
|
||||
3
addons/havari_arabic_fonts/models/res_config_settings.py
Normal file
3
addons/havari_arabic_fonts/models/res_config_settings.py
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1,2 @@
|
||||
# Pyarmor 9.2.3 (basic), 009742, 2026-03-02T02:54:00.531077
|
||||
from .pyarmor_runtime import __pyarmor__
|
||||
Binary file not shown.
311
addons/havari_arabic_fonts/report/report_templates.xml
Normal file
311
addons/havari_arabic_fonts/report/report_templates.xml
Normal file
@@ -0,0 +1,311 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<!--
|
||||
Font Fourth Arabic - Report Templates
|
||||
قوالب التقارير والطباعة مع دعم RTL
|
||||
18 خط عربي محلي - لا يتطلب اتصال بالإنترنت
|
||||
|
||||
Note: Header/Footer functionality moved to havari_odoo_printx module
|
||||
-->
|
||||
|
||||
<!-- وراثة تخطيط التقارير الأساسي -->
|
||||
<template id="report_layout_custom_fonts" inherit_id="web.report_layout">
|
||||
<xpath expr="//head" position="inside">
|
||||
<style>
|
||||
/* ======================================
|
||||
تحميل جميع الخطوط العربية للتقارير
|
||||
====================================== */
|
||||
|
||||
/* خط دبي */
|
||||
@font-face {
|
||||
font-family: 'Dubai';
|
||||
src: url('/havari_arabic_fonts/static/fonts/dubai/Dubai-Light.ttf') format('truetype');
|
||||
font-weight: 300;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Dubai';
|
||||
src: url('/havari_arabic_fonts/static/fonts/dubai/Dubai-Regular.ttf') format('truetype');
|
||||
font-weight: 400;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Dubai';
|
||||
src: url('/havari_arabic_fonts/static/fonts/dubai/Dubai-Medium.ttf') format('truetype');
|
||||
font-weight: 500;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Dubai';
|
||||
src: url('/havari_arabic_fonts/static/fonts/dubai/Dubai-Bold.ttf') format('truetype');
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
/* خط الجزيرة */
|
||||
@font-face {
|
||||
font-family: 'Al Jazeera';
|
||||
src: url('/havari_arabic_fonts/static/fonts/aljazeera/AlJazeera-Light.ttf') format('truetype');
|
||||
font-weight: 300;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Al Jazeera';
|
||||
src: url('/havari_arabic_fonts/static/fonts/aljazeera/AlJazeera-Regular.ttf') format('truetype');
|
||||
font-weight: 400;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Al Jazeera';
|
||||
src: url('/havari_arabic_fonts/static/fonts/aljazeera/AlJazeera-Medium.ttf') format('truetype');
|
||||
font-weight: 500;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Al Jazeera';
|
||||
src: url('/havari_arabic_fonts/static/fonts/aljazeera/AlJazeera-Bold.ttf') format('truetype');
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
/* خط القاهرة */
|
||||
@font-face {
|
||||
font-family: 'Cairo';
|
||||
src: url('/havari_arabic_fonts/static/fonts/cairo/Cairo-Light.ttf') format('truetype');
|
||||
font-weight: 300;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Cairo';
|
||||
src: url('/havari_arabic_fonts/static/fonts/cairo/Cairo-Regular.ttf') format('truetype');
|
||||
font-weight: 400;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Cairo';
|
||||
src: url('/havari_arabic_fonts/static/fonts/cairo/Cairo-Medium.ttf') format('truetype');
|
||||
font-weight: 500;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Cairo';
|
||||
src: url('/havari_arabic_fonts/static/fonts/cairo/Cairo-Bold.ttf') format('truetype');
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
/* خط تجوال */
|
||||
@font-face {
|
||||
font-family: 'Tajawal';
|
||||
src: url('/havari_arabic_fonts/static/fonts/tajawal/Tajawal-Light.ttf') format('truetype');
|
||||
font-weight: 300;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Tajawal';
|
||||
src: url('/havari_arabic_fonts/static/fonts/tajawal/Tajawal-Regular.ttf') format('truetype');
|
||||
font-weight: 400;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Tajawal';
|
||||
src: url('/havari_arabic_fonts/static/fonts/tajawal/Tajawal-Medium.ttf') format('truetype');
|
||||
font-weight: 500;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Tajawal';
|
||||
src: url('/havari_arabic_fonts/static/fonts/tajawal/Tajawal-Bold.ttf') format('truetype');
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
/* خط أميري */
|
||||
@font-face {
|
||||
font-family: 'Amiri';
|
||||
src: url('/havari_arabic_fonts/static/fonts/amiri/Amiri-Regular.ttf') format('truetype');
|
||||
font-weight: 400;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Amiri';
|
||||
src: url('/havari_arabic_fonts/static/fonts/amiri/Amiri-Bold.ttf') format('truetype');
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
/* خط المراعي */
|
||||
@font-face {
|
||||
font-family: 'Almarai';
|
||||
src: url('/havari_arabic_fonts/static/fonts/almarai/Almarai-Light.ttf') format('truetype');
|
||||
font-weight: 300;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Almarai';
|
||||
src: url('/havari_arabic_fonts/static/fonts/almarai/Almarai-Regular.ttf') format('truetype');
|
||||
font-weight: 400;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Almarai';
|
||||
src: url('/havari_arabic_fonts/static/fonts/almarai/Almarai-Bold.ttf') format('truetype');
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
/* ====================================== */
|
||||
/* الخطوط الجديدة - 12 خط إضافي */
|
||||
/* ====================================== */
|
||||
|
||||
/* خط IBM Plex Sans Arabic */
|
||||
@font-face {
|
||||
font-family: 'IBM Plex Sans Arabic';
|
||||
src: url('/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Light.ttf') format('truetype');
|
||||
font-weight: 300;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'IBM Plex Sans Arabic';
|
||||
src: url('/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Regular.ttf') format('truetype');
|
||||
font-weight: 400;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'IBM Plex Sans Arabic';
|
||||
src: url('/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Medium.ttf') format('truetype');
|
||||
font-weight: 500;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'IBM Plex Sans Arabic';
|
||||
src: url('/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Bold.ttf') format('truetype');
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
/* خط Noto Sans Arabic */
|
||||
@font-face {
|
||||
font-family: 'Noto Sans Arabic';
|
||||
src: url('/havari_arabic_fonts/static/fonts/noto-sans-arabic/NotoSansArabic-Light.ttf') format('truetype');
|
||||
font-weight: 300;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Noto Sans Arabic';
|
||||
src: url('/havari_arabic_fonts/static/fonts/noto-sans-arabic/NotoSansArabic-Regular.ttf') format('truetype');
|
||||
font-weight: 400;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Noto Sans Arabic';
|
||||
src: url('/havari_arabic_fonts/static/fonts/noto-sans-arabic/NotoSansArabic-Medium.ttf') format('truetype');
|
||||
font-weight: 500;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Noto Sans Arabic';
|
||||
src: url('/havari_arabic_fonts/static/fonts/noto-sans-arabic/NotoSansArabic-Bold.ttf') format('truetype');
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
/* خط Noto Naskh Arabic */
|
||||
@font-face {
|
||||
font-family: 'Noto Naskh Arabic';
|
||||
src: url('/havari_arabic_fonts/static/fonts/noto-naskh-arabic/NotoNaskhArabic-Regular.ttf') format('truetype');
|
||||
font-weight: 400;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Noto Naskh Arabic';
|
||||
src: url('/havari_arabic_fonts/static/fonts/noto-naskh-arabic/NotoNaskhArabic-Bold.ttf') format('truetype');
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
/* خط Noto Kufi Arabic */
|
||||
@font-face {
|
||||
font-family: 'Noto Kufi Arabic';
|
||||
src: url('/havari_arabic_fonts/static/fonts/noto-kufi-arabic/NotoKufiArabic-Regular.ttf') format('truetype');
|
||||
font-weight: 400;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Noto Kufi Arabic';
|
||||
src: url('/havari_arabic_fonts/static/fonts/noto-kufi-arabic/NotoKufiArabic-Bold.ttf') format('truetype');
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
/* خط Readex Pro */
|
||||
@font-face {
|
||||
font-family: 'Readex Pro';
|
||||
src: url('/havari_arabic_fonts/static/fonts/readex-pro/ReadexPro-Regular.ttf') format('truetype');
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
/* خط Scheherazade */
|
||||
@font-face {
|
||||
font-family: 'Scheherazade';
|
||||
src: url('/havari_arabic_fonts/static/fonts/scheherazade/Scheherazade-Regular.ttf') format('truetype');
|
||||
font-weight: 400;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Scheherazade';
|
||||
src: url('/havari_arabic_fonts/static/fonts/scheherazade/Scheherazade-Bold.ttf') format('truetype');
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
/* خط Reem Kufi */
|
||||
@font-face {
|
||||
font-family: 'Reem Kufi';
|
||||
src: url('/havari_arabic_fonts/static/fonts/reem-kufi/ReemKufi-Regular.ttf') format('truetype');
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
/* خط El Messiri */
|
||||
@font-face {
|
||||
font-family: 'El Messiri';
|
||||
src: url('/havari_arabic_fonts/static/fonts/el-messiri/ElMessiri-Regular.ttf') format('truetype');
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
/* خط Markazi Text */
|
||||
@font-face {
|
||||
font-family: 'Markazi Text';
|
||||
src: url('/havari_arabic_fonts/static/fonts/markazi-text/MarkaziText-Regular.ttf') format('truetype');
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
/* خط Mada */
|
||||
@font-face {
|
||||
font-family: 'Mada';
|
||||
src: url('/havari_arabic_fonts/static/fonts/mada/Mada-Regular.ttf') format('truetype');
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
/* خط Changa */
|
||||
@font-face {
|
||||
font-family: 'Changa';
|
||||
src: url('/havari_arabic_fonts/static/fonts/changa/Changa-Regular.ttf') format('truetype');
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
/* خط Aref Ruqaa */
|
||||
@font-face {
|
||||
font-family: 'Aref Ruqaa';
|
||||
src: url('/havari_arabic_fonts/static/fonts/aref-ruqaa/ArefRuqaa-Regular.ttf') format('truetype');
|
||||
font-weight: 400;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Aref Ruqaa';
|
||||
src: url('/havari_arabic_fonts/static/fonts/aref-ruqaa/ArefRuqaa-Bold.ttf') format('truetype');
|
||||
font-weight: 700;
|
||||
}
|
||||
</style>
|
||||
</xpath>
|
||||
</template>
|
||||
|
||||
<!-- تنسيقات RTL المحسنة للتقارير - تعمل فقط عندما يكون الاتجاه RTL -->
|
||||
<template id="report_rtl_styles" inherit_id="web.report_layout">
|
||||
<xpath expr="//head" position="inside">
|
||||
<style>
|
||||
/* === تنسيقات RTL للغات العربية والعبرية === */
|
||||
/* تعمل فقط عندما يحدد Odoo dir="rtl" تلقائيًا */
|
||||
body[dir="rtl"] .page {
|
||||
direction: rtl;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/* تنسيقات جداول RTL */
|
||||
body[dir="rtl"] table,
|
||||
body[dir="rtl"] thead,
|
||||
body[dir="rtl"] tbody,
|
||||
body[dir="rtl"] tr {
|
||||
direction: rtl;
|
||||
}
|
||||
|
||||
body[dir="rtl"] th,
|
||||
body[dir="rtl"] td {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/* استثناء الأرقام والعملات - دائما LTR */
|
||||
.o_price_total,
|
||||
.text-end,
|
||||
.amount-col {
|
||||
direction: ltr;
|
||||
}
|
||||
</style>
|
||||
</xpath>
|
||||
</template>
|
||||
|
||||
</odoo>
|
||||
1
addons/havari_arabic_fonts/security/ir.model.access.csv
Normal file
1
addons/havari_arabic_fonts/security/ir.model.access.csv
Normal file
@@ -0,0 +1 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
|
BIN
addons/havari_arabic_fonts/static/.DS_Store
vendored
Normal file
BIN
addons/havari_arabic_fonts/static/.DS_Store
vendored
Normal file
Binary file not shown.
BIN
addons/havari_arabic_fonts/static/description/.DS_Store
vendored
Normal file
BIN
addons/havari_arabic_fonts/static/description/.DS_Store
vendored
Normal file
Binary file not shown.
BIN
addons/havari_arabic_fonts/static/description/icon.png
Normal file
BIN
addons/havari_arabic_fonts/static/description/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 53 KiB |
55
addons/havari_arabic_fonts/static/description/icon.svg
Normal file
55
addons/havari_arabic_fonts/static/description/icon.svg
Normal file
@@ -0,0 +1,55 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" width="256" height="256">
|
||||
<defs>
|
||||
<linearGradient id="bgGrad3" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#1a1a2e"/>
|
||||
<stop offset="50%" style="stop-color:#16213e"/>
|
||||
<stop offset="100%" style="stop-color:#0f3460"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="goldGrad" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#f7d794"/>
|
||||
<stop offset="50%" style="stop-color:#f5cd79"/>
|
||||
<stop offset="100%" style="stop-color:#e1a83b"/>
|
||||
</linearGradient>
|
||||
<filter id="glow" x="-50%" y="-50%" width="200%" height="200%">
|
||||
<feGaussianBlur stdDeviation="3" result="coloredBlur"/>
|
||||
<feMerge>
|
||||
<feMergeNode in="coloredBlur"/>
|
||||
<feMergeNode in="SourceGraphic"/>
|
||||
</feMerge>
|
||||
</filter>
|
||||
</defs>
|
||||
|
||||
<!-- Background rounded square - dark elegant -->
|
||||
<rect x="8" y="8" width="240" height="240" rx="48" ry="48" fill="url(#bgGrad3)"/>
|
||||
|
||||
<!-- Decorative Islamic geometric pattern border -->
|
||||
<rect x="24" y="24" width="208" height="208" rx="36" ry="36" fill="none" stroke="url(#goldGrad)" stroke-width="2" opacity="0.4"/>
|
||||
|
||||
<!-- Arabic letter "ع" (Ain) - represents Arabic beautifully -->
|
||||
<g filter="url(#glow)">
|
||||
<path d="M165 85
|
||||
Q175 85 180 95
|
||||
Q185 110 175 125
|
||||
Q165 140 145 145
|
||||
L120 150
|
||||
Q95 155 85 175
|
||||
Q80 190 90 200
|
||||
Q100 210 120 205
|
||||
L140 198"
|
||||
fill="none" stroke="url(#goldGrad)" stroke-width="14" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</g>
|
||||
|
||||
<!-- Stylized Latin "F" for Fonts -->
|
||||
<g transform="translate(55, 70)" opacity="0.9">
|
||||
<path d="M30 0 L30 90 M30 0 L70 0 M30 40 L60 40"
|
||||
fill="none" stroke="white" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</g>
|
||||
|
||||
<!-- Three dots decoration (Arabic style) -->
|
||||
<circle cx="188" cy="70" r="6" fill="url(#goldGrad)"/>
|
||||
<circle cx="205" cy="85" r="5" fill="url(#goldGrad)" opacity="0.7"/>
|
||||
<circle cx="198" cy="55" r="4" fill="url(#goldGrad)" opacity="0.5"/>
|
||||
|
||||
<!-- Bottom decorative line -->
|
||||
<line x1="60" y1="225" x2="196" y2="225" stroke="url(#goldGrad)" stroke-width="3" stroke-linecap="round" opacity="0.6"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.3 KiB |
215
addons/havari_arabic_fonts/static/description/index.html
Normal file
215
addons/havari_arabic_fonts/static/description/index.html
Normal file
@@ -0,0 +1,215 @@
|
||||
<!DOCTYPE html>
|
||||
<html dir="rtl" lang="ar">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Font Fourth Arabic</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Segoe UI', Tahoma, sans-serif;
|
||||
direction: rtl;
|
||||
text-align: right;
|
||||
max-width: 900px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
background: #f5f5f5;
|
||||
}
|
||||
.header {
|
||||
background: linear-gradient(135deg, #714B67, #875A7B);
|
||||
color: white;
|
||||
padding: 40px;
|
||||
border-radius: 10px;
|
||||
text-align: center;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
.header h1 {
|
||||
margin: 0 0 10px 0;
|
||||
font-size: 2.5em;
|
||||
}
|
||||
.header p {
|
||||
margin: 0;
|
||||
opacity: 0.9;
|
||||
font-size: 1.2em;
|
||||
}
|
||||
.section {
|
||||
background: white;
|
||||
padding: 30px;
|
||||
border-radius: 10px;
|
||||
margin-bottom: 20px;
|
||||
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
|
||||
}
|
||||
.section h2 {
|
||||
color: #714B67;
|
||||
border-bottom: 2px solid #714B67;
|
||||
padding-bottom: 10px;
|
||||
margin-top: 0;
|
||||
}
|
||||
.features {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
||||
gap: 20px;
|
||||
}
|
||||
.feature {
|
||||
background: #f9f9f9;
|
||||
padding: 20px;
|
||||
border-radius: 8px;
|
||||
border-right: 4px solid #714B67;
|
||||
}
|
||||
.feature h3 {
|
||||
margin: 0 0 10px 0;
|
||||
color: #333;
|
||||
}
|
||||
.feature p {
|
||||
margin: 0;
|
||||
color: #666;
|
||||
}
|
||||
.font-preview {
|
||||
background: #f0f0f0;
|
||||
padding: 30px;
|
||||
border-radius: 8px;
|
||||
margin: 20px 0;
|
||||
}
|
||||
.font-preview h3 {
|
||||
font-size: 24px;
|
||||
margin: 10px 0;
|
||||
}
|
||||
.font-preview p {
|
||||
font-size: 16px;
|
||||
color: #555;
|
||||
}
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin: 20px 0;
|
||||
}
|
||||
th, td {
|
||||
padding: 12px;
|
||||
text-align: right;
|
||||
border-bottom: 1px solid #ddd;
|
||||
}
|
||||
th {
|
||||
background: #714B67;
|
||||
color: white;
|
||||
}
|
||||
tr:hover {
|
||||
background: #f5f5f5;
|
||||
}
|
||||
.badge {
|
||||
display: inline-block;
|
||||
padding: 5px 10px;
|
||||
background: #28a745;
|
||||
color: white;
|
||||
border-radius: 4px;
|
||||
font-size: 12px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<h1>Font Fourth Arabic</h1>
|
||||
<p>تحسين الخطوط العربية في أودوو</p>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<h2>نظرة عامة</h2>
|
||||
<p>
|
||||
إضافة Font Fourth Arabic توفر تحسيناً شاملاً للخطوط العربية في نظام أودوو،
|
||||
مع دعم كامل لخط دبي وخط الجزيرة، وإمكانية التحكم الكامل في الأحجام والأوزان.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<h2>المميزات</h2>
|
||||
<div class="features">
|
||||
<div class="feature">
|
||||
<h3>خطوط احترافية</h3>
|
||||
<p>دعم خط دبي وخط الجزيرة بجميع الأوزان</p>
|
||||
</div>
|
||||
<div class="feature">
|
||||
<h3>تحكم كامل</h3>
|
||||
<p>إعدادات مرنة لأحجام وأوزان الخطوط</p>
|
||||
</div>
|
||||
<div class="feature">
|
||||
<h3>ثلاثة أنماط</h3>
|
||||
<p>أنماط جاهزة: مدمج، متوازن، مريح</p>
|
||||
</div>
|
||||
<div class="feature">
|
||||
<h3>دعم التقارير</h3>
|
||||
<p>خطوط محسنة للطباعة والتقارير</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<h2>الخطوط المدعومة</h2>
|
||||
<table>
|
||||
<tr>
|
||||
<th>الخط</th>
|
||||
<th>الوصف</th>
|
||||
<th>الاستخدام المقترح</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>دبي</strong></td>
|
||||
<td>خط عصري وأنيق من حكومة دبي</td>
|
||||
<td>النصوص والقوائم</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>الجزيرة</strong></td>
|
||||
<td>خط احترافي وواضح</td>
|
||||
<td>العناوين والأقسام</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<h2>الإعدادات</h2>
|
||||
<p>يمكنك الوصول للإعدادات من:</p>
|
||||
<p><strong>الإعدادات ← الخطوط العربية</strong></p>
|
||||
<table>
|
||||
<tr>
|
||||
<th>الإعداد</th>
|
||||
<th>الوصف</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>النمط العام</td>
|
||||
<td>مدمج / متوازن / مريح</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>خط العناوين</td>
|
||||
<td>اختيار الخط للعناوين</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>خط النصوص</td>
|
||||
<td>اختيار الخط للنصوص</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>الأوزان</td>
|
||||
<td>من خفيف إلى عريض</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>حجم الخط</td>
|
||||
<td>من 12px إلى 15px</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<h2>التثبيت</h2>
|
||||
<ol>
|
||||
<li>انسخ المجلد إلى مسار الإضافات</li>
|
||||
<li>قم بتحديث قائمة التطبيقات</li>
|
||||
<li>ثبت إضافة "Fourth Arabic Fonts"</li>
|
||||
<li>أضف ملفات الخطوط (دبي والجزيرة) إلى مجلد static/fonts</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<h2>الدعم</h2>
|
||||
<p>للدعم والاستفسارات، تواصل معنا عبر:</p>
|
||||
<p><strong>Fourth</strong></p>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
BIN
addons/havari_arabic_fonts/static/fonts/.DS_Store
vendored
Normal file
BIN
addons/havari_arabic_fonts/static/fonts/.DS_Store
vendored
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
addons/havari_arabic_fonts/static/fonts/almarai/Almarai-Bold.ttf
Normal file
BIN
addons/havari_arabic_fonts/static/fonts/almarai/Almarai-Bold.ttf
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
addons/havari_arabic_fonts/static/fonts/amiri/Amiri-Bold.ttf
Normal file
BIN
addons/havari_arabic_fonts/static/fonts/amiri/Amiri-Bold.ttf
Normal file
Binary file not shown.
BIN
addons/havari_arabic_fonts/static/fonts/amiri/Amiri-Regular.ttf
Normal file
BIN
addons/havari_arabic_fonts/static/fonts/amiri/Amiri-Regular.ttf
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
BIN
addons/havari_arabic_fonts/static/fonts/cairo/Cairo-Bold.ttf
Normal file
BIN
addons/havari_arabic_fonts/static/fonts/cairo/Cairo-Bold.ttf
Normal file
Binary file not shown.
BIN
addons/havari_arabic_fonts/static/fonts/cairo/Cairo-Light.ttf
Normal file
BIN
addons/havari_arabic_fonts/static/fonts/cairo/Cairo-Light.ttf
Normal file
Binary file not shown.
BIN
addons/havari_arabic_fonts/static/fonts/cairo/Cairo-Medium.ttf
Normal file
BIN
addons/havari_arabic_fonts/static/fonts/cairo/Cairo-Medium.ttf
Normal file
Binary file not shown.
BIN
addons/havari_arabic_fonts/static/fonts/cairo/Cairo-Regular.ttf
Normal file
BIN
addons/havari_arabic_fonts/static/fonts/cairo/Cairo-Regular.ttf
Normal file
Binary file not shown.
2151
addons/havari_arabic_fonts/static/fonts/changa/Changa-Regular.ttf
Normal file
2151
addons/havari_arabic_fonts/static/fonts/changa/Changa-Regular.ttf
Normal file
File diff suppressed because one or more lines are too long
BIN
addons/havari_arabic_fonts/static/fonts/dubai/Dubai-Bold.ttf
Normal file
BIN
addons/havari_arabic_fonts/static/fonts/dubai/Dubai-Bold.ttf
Normal file
Binary file not shown.
BIN
addons/havari_arabic_fonts/static/fonts/dubai/Dubai-Light.ttf
Normal file
BIN
addons/havari_arabic_fonts/static/fonts/dubai/Dubai-Light.ttf
Normal file
Binary file not shown.
BIN
addons/havari_arabic_fonts/static/fonts/dubai/Dubai-Medium.ttf
Normal file
BIN
addons/havari_arabic_fonts/static/fonts/dubai/Dubai-Medium.ttf
Normal file
Binary file not shown.
BIN
addons/havari_arabic_fonts/static/fonts/dubai/Dubai-Regular.ttf
Normal file
BIN
addons/havari_arabic_fonts/static/fonts/dubai/Dubai-Regular.ttf
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
2151
addons/havari_arabic_fonts/static/fonts/mada/Mada-Regular.ttf
Normal file
2151
addons/havari_arabic_fonts/static/fonts/mada/Mada-Regular.ttf
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
BIN
addons/havari_arabic_fonts/static/fonts/tajawal/Tajawal-Bold.ttf
Normal file
BIN
addons/havari_arabic_fonts/static/fonts/tajawal/Tajawal-Bold.ttf
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
196
addons/havari_arabic_fonts/static/src/js/font_preview.js
Normal file
196
addons/havari_arabic_fonts/static/src/js/font_preview.js
Normal file
@@ -0,0 +1,196 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { Component, useState, onWillStart, onMounted, xml } from "@odoo/owl";
|
||||
import { registry } from "@web/core/registry";
|
||||
import { standardFieldProps } from "@web/views/fields/standard_field_props";
|
||||
|
||||
/**
|
||||
* Font Preview Widget
|
||||
* معاينة مباشرة للخطوط العربية
|
||||
*/
|
||||
export class FontPreviewWidget extends Component {
|
||||
static template = xml`
|
||||
<div class="font_preview_container" style="margin-top: 20px; padding: 20px; border: 1px solid #dee2e6; border-radius: 8px; background: #f8f9fa;">
|
||||
<h4 style="margin-bottom: 15px; color: #495057;">
|
||||
<i class="fa fa-eye me-2"/>
|
||||
معاينة الخطوط
|
||||
</h4>
|
||||
|
||||
<!-- معاينة العنوان -->
|
||||
<div class="preview_section" style="margin-bottom: 20px; padding: 15px; background: white; border-radius: 6px; box-shadow: 0 1px 3px rgba(0,0,0,0.1);">
|
||||
<small style="color: #6c757d; display: block; margin-bottom: 8px;">خط العناوين:</small>
|
||||
<h2 t-att-style="headingStyle" class="preview_heading mb-0">
|
||||
بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
<!-- معاينة النص -->
|
||||
<div class="preview_section" style="margin-bottom: 20px; padding: 15px; background: white; border-radius: 6px; box-shadow: 0 1px 3px rgba(0,0,0,0.1);">
|
||||
<small style="color: #6c757d; display: block; margin-bottom: 8px;">خط النصوص:</small>
|
||||
<p t-att-style="bodyStyle" class="preview_body mb-0">
|
||||
هذا نص تجريبي لمعاينة الخط المختار. يمكنك تغيير الخط من القائمة أعلاه ومشاهدة التغيير فوراً.
|
||||
<br/>
|
||||
الأرقام: ٠١٢٣٤٥٦٧٨٩ - 0123456789
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- معاينة مثال فاتورة -->
|
||||
<div class="preview_section" style="padding: 15px; background: white; border-radius: 6px; box-shadow: 0 1px 3px rgba(0,0,0,0.1);">
|
||||
<small style="color: #6c757d; display: block; margin-bottom: 8px;">مثال - فاتورة:</small>
|
||||
<div t-att-style="'direction: rtl; text-align: right; ' + bodyStyle">
|
||||
<div style="display: flex; justify-content: space-between; border-bottom: 2px solid #dee2e6; padding-bottom: 10px; margin-bottom: 10px;">
|
||||
<span t-att-style="headingStyle + '; font-size: 1.2em;'">فاتورة مبيعات</span>
|
||||
<span>رقم: INV/2024/0001</span>
|
||||
</div>
|
||||
<table style="width: 100%; font-size: 0.9em;">
|
||||
<thead>
|
||||
<tr style="background: #f1f3f4;">
|
||||
<th style="padding: 8px; text-align: right;">المنتج</th>
|
||||
<th style="padding: 8px; text-align: center;">الكمية</th>
|
||||
<th style="padding: 8px; text-align: left;">السعر</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="padding: 8px;">منتج تجريبي</td>
|
||||
<td style="padding: 8px; text-align: center;">5</td>
|
||||
<td style="padding: 8px; text-align: left;">500.00 ر.س</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr style="font-weight: bold; border-top: 2px solid #dee2e6;">
|
||||
<td colspan="2" style="padding: 8px;">الإجمالي</td>
|
||||
<td style="padding: 8px; text-align: left;">2,500.00 ر.س</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
static props = {
|
||||
...standardFieldProps,
|
||||
};
|
||||
|
||||
setup() {
|
||||
this.state = useState({
|
||||
headingFont: 'Cairo',
|
||||
bodyFont: 'Tajawal',
|
||||
headingWeight: '700',
|
||||
bodyWeight: '400',
|
||||
fontSize: '14',
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
this.setupFieldListeners();
|
||||
});
|
||||
}
|
||||
|
||||
get fontMap() {
|
||||
return {
|
||||
'cairo': 'Cairo',
|
||||
'tajawal': 'Tajawal',
|
||||
'noto-sans-arabic': 'Noto Sans Arabic',
|
||||
'readex-pro': 'Readex Pro',
|
||||
'ibmplexsansarabic': 'IBM Plex Sans Arabic',
|
||||
'mada': 'Mada',
|
||||
'changa': 'Changa',
|
||||
'amiri': 'Amiri',
|
||||
'noto-naskh-arabic': 'Noto Naskh Arabic',
|
||||
'scheherazade': 'Scheherazade',
|
||||
'markazi-text': 'Markazi Text',
|
||||
'noto-kufi-arabic': 'Noto Kufi Arabic',
|
||||
'reem-kufi': 'Reem Kufi',
|
||||
'aref-ruqaa': 'Aref Ruqaa',
|
||||
'almarai': 'Almarai',
|
||||
'dubai': 'Dubai',
|
||||
'aljazeera': 'Al Jazeera',
|
||||
'el-messiri': 'El Messiri',
|
||||
};
|
||||
}
|
||||
|
||||
get headingStyle() {
|
||||
const fontName = this.fontMap[this.state.headingFont] || 'Cairo';
|
||||
return `font-family: '${fontName}', sans-serif; font-weight: ${this.state.headingWeight}; font-size: 1.5em;`;
|
||||
}
|
||||
|
||||
get bodyStyle() {
|
||||
const fontName = this.fontMap[this.state.bodyFont] || 'Tajawal';
|
||||
return `font-family: '${fontName}', sans-serif; font-weight: ${this.state.bodyWeight}; font-size: ${this.state.fontSize}px; line-height: 1.8;`;
|
||||
}
|
||||
|
||||
setupFieldListeners() {
|
||||
// Listen to font_heading field changes
|
||||
const headingField = document.querySelector('[name="font_heading"] select, [name="font_heading"] input');
|
||||
if (headingField) {
|
||||
headingField.addEventListener('change', (e) => {
|
||||
this.state.headingFont = e.target.value;
|
||||
});
|
||||
// Set initial value
|
||||
this.state.headingFont = headingField.value || 'cairo';
|
||||
}
|
||||
|
||||
// Listen to font_body field changes
|
||||
const bodyField = document.querySelector('[name="font_body"] select, [name="font_body"] input');
|
||||
if (bodyField) {
|
||||
bodyField.addEventListener('change', (e) => {
|
||||
this.state.bodyFont = e.target.value;
|
||||
});
|
||||
this.state.bodyFont = bodyField.value || 'tajawal';
|
||||
}
|
||||
|
||||
// Listen to font_heading_weight field changes
|
||||
const headingWeightField = document.querySelector('[name="font_heading_weight"] select');
|
||||
if (headingWeightField) {
|
||||
headingWeightField.addEventListener('change', (e) => {
|
||||
this.state.headingWeight = e.target.value;
|
||||
});
|
||||
this.state.headingWeight = headingWeightField.value || '700';
|
||||
}
|
||||
|
||||
// Listen to font_body_weight field changes
|
||||
const bodyWeightField = document.querySelector('[name="font_body_weight"] select');
|
||||
if (bodyWeightField) {
|
||||
bodyWeightField.addEventListener('change', (e) => {
|
||||
this.state.bodyWeight = e.target.value;
|
||||
});
|
||||
this.state.bodyWeight = bodyWeightField.value || '400';
|
||||
}
|
||||
|
||||
// Listen to font_size_base field changes
|
||||
const fontSizeField = document.querySelector('[name="font_size_base"] select');
|
||||
if (fontSizeField) {
|
||||
fontSizeField.addEventListener('change', (e) => {
|
||||
this.state.fontSize = e.target.value;
|
||||
});
|
||||
this.state.fontSize = fontSizeField.value || '14';
|
||||
}
|
||||
|
||||
// Use MutationObserver for dynamic field updates
|
||||
this.observeFieldChanges();
|
||||
}
|
||||
|
||||
observeFieldChanges() {
|
||||
const container = document.querySelector('.app_settings_block[data-key="havari_arabic_fonts"]');
|
||||
if (!container) return;
|
||||
|
||||
const observer = new MutationObserver((mutations) => {
|
||||
// Re-setup listeners when DOM changes
|
||||
setTimeout(() => this.setupFieldListeners(), 100);
|
||||
});
|
||||
|
||||
observer.observe(container, {
|
||||
childList: true,
|
||||
subtree: true,
|
||||
attributes: true,
|
||||
attributeFilter: ['value']
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Register the component
|
||||
registry.category("fields").add("font_preview", {
|
||||
component: FontPreviewWidget,
|
||||
supportedTypes: ["char"],
|
||||
});
|
||||
306
addons/havari_arabic_fonts/static/src/js/font_preview_simple.js
Normal file
306
addons/havari_arabic_fonts/static/src/js/font_preview_simple.js
Normal file
@@ -0,0 +1,306 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
/**
|
||||
* Font Preview for Odoo 16 Settings Page
|
||||
* معاينة مباشرة للخطوط في صفحة الإعدادات
|
||||
*
|
||||
* Odoo 16 Selection fields store values as JSON strings
|
||||
* e.g., "cairo" (with quotes) or false
|
||||
*/
|
||||
|
||||
const FONT_MAP = {
|
||||
// Sans Serif - Modern
|
||||
'cairo': 'Cairo',
|
||||
'tajawal': 'Tajawal',
|
||||
'noto-sans-arabic': 'Noto Sans Arabic',
|
||||
'readex-pro': 'Readex Pro',
|
||||
'ibmplexsansarabic': 'IBM Plex Sans Arabic',
|
||||
'mada': 'Mada',
|
||||
'changa': 'Changa',
|
||||
// Serif - Traditional
|
||||
'amiri': 'Amiri',
|
||||
'noto-naskh-arabic': 'Noto Naskh Arabic',
|
||||
'scheherazade': 'Scheherazade',
|
||||
'markazi-text': 'Markazi Text',
|
||||
// Kufi - Headings
|
||||
'noto-kufi-arabic': 'Noto Kufi Arabic',
|
||||
'reem-kufi': 'Reem Kufi',
|
||||
'aref-ruqaa': 'Aref Ruqaa',
|
||||
// Others
|
||||
'almarai': 'Almarai',
|
||||
'dubai': 'Dubai',
|
||||
'aljazeera': 'Al Jazeera',
|
||||
'el-messiri': 'El Messiri',
|
||||
};
|
||||
|
||||
function getFontFamily(fontKey) {
|
||||
if (!fontKey || fontKey === 'false') return 'Cairo';
|
||||
const cleanKey = String(fontKey).replace(/['"]/g, '').toLowerCase().trim();
|
||||
return FONT_MAP[cleanKey] || 'Cairo';
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse a JSON value from select element
|
||||
* Odoo stores values like: "cairo" (string with quotes) or false
|
||||
*/
|
||||
function parseSelectValue(rawValue) {
|
||||
if (!rawValue || rawValue === '' || rawValue === 'false') {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
const parsed = JSON.parse(rawValue);
|
||||
return parsed === false ? null : parsed;
|
||||
} catch (e) {
|
||||
return rawValue;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get field value by finding the select within the settings block
|
||||
* The field name is in a parent div's data attributes or nearby label
|
||||
*/
|
||||
function getFieldValue(settingsBlock, fieldName) {
|
||||
if (!settingsBlock) return null;
|
||||
|
||||
// Method 1: Find by field widget name attribute
|
||||
const fieldWidget = settingsBlock.querySelector(`[name="${fieldName}"]`);
|
||||
if (fieldWidget) {
|
||||
// If it's a select directly
|
||||
if (fieldWidget.tagName === 'SELECT') {
|
||||
return parseSelectValue(fieldWidget.value);
|
||||
}
|
||||
// If it contains a select
|
||||
const select = fieldWidget.querySelector('select');
|
||||
if (select) {
|
||||
return parseSelectValue(select.value);
|
||||
}
|
||||
// Check for radio buttons
|
||||
const checkedRadio = fieldWidget.querySelector('input[type="radio"]:checked');
|
||||
if (checkedRadio) {
|
||||
return parseSelectValue(checkedRadio.value);
|
||||
}
|
||||
}
|
||||
|
||||
// Method 2: Find by looking for label with matching for attribute
|
||||
const label = settingsBlock.querySelector(`label[for="${fieldName}"]`);
|
||||
if (label) {
|
||||
const container = label.closest('.o_setting_right_pane') || label.closest('.o_setting_box');
|
||||
if (container) {
|
||||
const select = container.querySelector('select');
|
||||
if (select) {
|
||||
return parseSelectValue(select.value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Method 3: Search all selects and find by ID
|
||||
const selectById = settingsBlock.querySelector(`select[id="${fieldName}"]`);
|
||||
if (selectById) {
|
||||
return parseSelectValue(selectById.value);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the preview section with current font values
|
||||
*/
|
||||
function updateFontPreview() {
|
||||
const settingsBlock = document.querySelector('.app_settings_block[data-key="havari_arabic_fonts"]');
|
||||
if (!settingsBlock) return;
|
||||
|
||||
const previewHeading = document.getElementById('font_preview_heading');
|
||||
const previewBody = document.getElementById('font_preview_body');
|
||||
const previewInvoice = document.getElementById('font_preview_invoice');
|
||||
const headingNameBadge = document.getElementById('font_heading_name');
|
||||
const bodyNameBadge = document.getElementById('font_body_name');
|
||||
const reportHeadingNameBadge = document.getElementById('report_font_heading_name');
|
||||
const reportBodyNameBadge = document.getElementById('report_font_body_name');
|
||||
|
||||
if (!previewHeading && !previewBody && !previewInvoice) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Get current field values - Backend fonts
|
||||
const headingFont = getFieldValue(settingsBlock, 'font_heading') || 'cairo';
|
||||
const bodyFont = getFieldValue(settingsBlock, 'font_body') || 'tajawal';
|
||||
const headingWeight = getFieldValue(settingsBlock, 'font_heading_weight') || '700';
|
||||
const bodyWeight = getFieldValue(settingsBlock, 'font_body_weight') || '400';
|
||||
const fontSize = getFieldValue(settingsBlock, 'font_size_base') || '13';
|
||||
|
||||
// Get current field values - Report fonts
|
||||
const reportHeadingFont = getFieldValue(settingsBlock, 'report_font_heading') || 'cairo';
|
||||
const reportBodyFont = getFieldValue(settingsBlock, 'report_font_body') || 'tajawal';
|
||||
const reportHeadingWeight = getFieldValue(settingsBlock, 'report_font_heading_weight') || '700';
|
||||
const reportBodyWeight = getFieldValue(settingsBlock, 'report_font_body_weight') || '400';
|
||||
const reportFontSize = getFieldValue(settingsBlock, 'report_font_size') || '10';
|
||||
|
||||
// Get font family names
|
||||
const headingFontFamily = getFontFamily(headingFont);
|
||||
const bodyFontFamily = getFontFamily(bodyFont);
|
||||
const reportHeadingFontFamily = getFontFamily(reportHeadingFont);
|
||||
const reportBodyFontFamily = getFontFamily(reportBodyFont);
|
||||
|
||||
// Apply to heading preview (all heading elements)
|
||||
if (previewHeading) {
|
||||
previewHeading.style.fontFamily = `'${headingFontFamily}', 'Cairo', sans-serif`;
|
||||
previewHeading.style.fontWeight = headingWeight;
|
||||
}
|
||||
const previewHeading2 = document.getElementById('font_preview_heading_2');
|
||||
const previewHeading3 = document.getElementById('font_preview_heading_3');
|
||||
if (previewHeading2) {
|
||||
previewHeading2.style.fontFamily = `'${headingFontFamily}', 'Cairo', sans-serif`;
|
||||
previewHeading2.style.fontWeight = headingWeight;
|
||||
}
|
||||
if (previewHeading3) {
|
||||
previewHeading3.style.fontFamily = `'${headingFontFamily}', 'Cairo', sans-serif`;
|
||||
previewHeading3.style.fontWeight = Math.max(400, parseInt(headingWeight) - 100);
|
||||
}
|
||||
|
||||
// Apply to body preview
|
||||
if (previewBody) {
|
||||
previewBody.style.fontFamily = `'${bodyFontFamily}', 'Tajawal', sans-serif`;
|
||||
previewBody.style.fontWeight = bodyWeight;
|
||||
previewBody.style.fontSize = `${fontSize}px`;
|
||||
}
|
||||
|
||||
// Apply to invoice preview - uses REPORT fonts
|
||||
if (previewInvoice) {
|
||||
// Apply report body font to the invoice body text
|
||||
previewInvoice.style.fontFamily = `'${reportBodyFontFamily}', 'Tajawal', sans-serif`;
|
||||
previewInvoice.style.fontWeight = reportBodyWeight;
|
||||
previewInvoice.style.fontSize = `${reportFontSize}px`;
|
||||
|
||||
// Apply report heading font to invoice title
|
||||
const invoiceTitle = previewInvoice.querySelector('.invoice_title');
|
||||
if (invoiceTitle) {
|
||||
invoiceTitle.style.fontFamily = `'${reportHeadingFontFamily}', 'Cairo', sans-serif`;
|
||||
invoiceTitle.style.fontWeight = reportHeadingWeight;
|
||||
}
|
||||
|
||||
// Apply to table headers (th elements)
|
||||
const tableHeaders = previewInvoice.querySelectorAll('th');
|
||||
tableHeaders.forEach(th => {
|
||||
th.style.fontFamily = `'${reportHeadingFontFamily}', 'Cairo', sans-serif`;
|
||||
th.style.fontWeight = Math.max(400, parseInt(reportHeadingWeight) - 100);
|
||||
});
|
||||
|
||||
// Apply to table body cells (td elements)
|
||||
const tableCells = previewInvoice.querySelectorAll('td');
|
||||
tableCells.forEach(td => {
|
||||
td.style.fontFamily = `'${reportBodyFontFamily}', 'Tajawal', sans-serif`;
|
||||
td.style.fontWeight = reportBodyWeight;
|
||||
});
|
||||
|
||||
// Apply to footer (total row)
|
||||
const footerCells = previewInvoice.querySelectorAll('tfoot td');
|
||||
footerCells.forEach(td => {
|
||||
td.style.fontFamily = `'${reportHeadingFontFamily}', 'Cairo', sans-serif`;
|
||||
td.style.fontWeight = reportHeadingWeight;
|
||||
});
|
||||
}
|
||||
|
||||
// Update badge displays - Backend fonts
|
||||
if (headingNameBadge) {
|
||||
headingNameBadge.textContent = headingFontFamily;
|
||||
}
|
||||
if (bodyNameBadge) {
|
||||
bodyNameBadge.textContent = bodyFontFamily;
|
||||
}
|
||||
|
||||
// Update badge displays - Report fonts
|
||||
if (reportHeadingNameBadge) {
|
||||
reportHeadingNameBadge.textContent = reportHeadingFontFamily;
|
||||
}
|
||||
if (reportBodyNameBadge) {
|
||||
reportBodyNameBadge.textContent = reportBodyFontFamily;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize font preview with event listeners
|
||||
*/
|
||||
function initFontPreview() {
|
||||
const settingsBlock = document.querySelector('.app_settings_block[data-key="havari_arabic_fonts"]');
|
||||
if (!settingsBlock) return;
|
||||
|
||||
// Skip if already initialized
|
||||
if (settingsBlock.dataset.fontPreviewInit === 'true') return;
|
||||
settingsBlock.dataset.fontPreviewInit = 'true';
|
||||
|
||||
// Use event delegation - listen for ALL changes within the block
|
||||
settingsBlock.addEventListener('change', (event) => {
|
||||
const target = event.target;
|
||||
if (target.tagName === 'SELECT' || target.tagName === 'INPUT') {
|
||||
// Small delay to ensure Odoo has processed the change
|
||||
requestAnimationFrame(() => {
|
||||
updateFontPreview();
|
||||
});
|
||||
}
|
||||
}, true);
|
||||
|
||||
// Also listen for input events (for immediate feedback)
|
||||
settingsBlock.addEventListener('input', (event) => {
|
||||
const target = event.target;
|
||||
if (target.tagName === 'SELECT') {
|
||||
requestAnimationFrame(() => {
|
||||
updateFontPreview();
|
||||
});
|
||||
}
|
||||
}, true);
|
||||
|
||||
// MutationObserver to handle Odoo re-rendering fields
|
||||
const observer = new MutationObserver(() => {
|
||||
requestAnimationFrame(() => {
|
||||
updateFontPreview();
|
||||
});
|
||||
});
|
||||
|
||||
observer.observe(settingsBlock, {
|
||||
childList: true,
|
||||
subtree: true,
|
||||
attributes: true,
|
||||
attributeFilter: ['value', 'checked', 'selected']
|
||||
});
|
||||
|
||||
// Initial update after a short delay to ensure fields are rendered
|
||||
setTimeout(updateFontPreview, 500);
|
||||
}
|
||||
|
||||
/**
|
||||
* Watch for the settings page to appear
|
||||
*/
|
||||
function watchForSettingsPage() {
|
||||
// Try to initialize immediately
|
||||
initFontPreview();
|
||||
|
||||
// Watch for DOM changes
|
||||
const bodyObserver = new MutationObserver(() => {
|
||||
const settingsBlock = document.querySelector('.app_settings_block[data-key="havari_arabic_fonts"]');
|
||||
if (settingsBlock && settingsBlock.dataset.fontPreviewInit !== 'true') {
|
||||
setTimeout(initFontPreview, 300);
|
||||
}
|
||||
});
|
||||
|
||||
if (document.body) {
|
||||
bodyObserver.observe(document.body, {
|
||||
childList: true,
|
||||
subtree: true
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Start watching when DOM is ready
|
||||
if (document.readyState === 'loading') {
|
||||
document.addEventListener('DOMContentLoaded', watchForSettingsPage);
|
||||
} else {
|
||||
setTimeout(watchForSettingsPage, 100);
|
||||
}
|
||||
|
||||
// Also reinitialize on navigation clicks
|
||||
document.addEventListener('click', () => {
|
||||
setTimeout(initFontPreview, 500);
|
||||
}, true);
|
||||
|
||||
// Export for debugging
|
||||
export { updateFontPreview, initFontPreview, FONT_MAP, getFontFamily };
|
||||
115
addons/havari_arabic_fonts/static/src/js/font_settings.js
Normal file
115
addons/havari_arabic_fonts/static/src/js/font_settings.js
Normal file
@@ -0,0 +1,115 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { registry } from "@web/core/registry";
|
||||
import { useService } from "@web/core/utils/hooks";
|
||||
import { Component, onWillStart } from "@odoo/owl";
|
||||
|
||||
/**
|
||||
* Font Settings Manager
|
||||
* يقوم بتحميل وتطبيق إعدادات الخطوط
|
||||
*/
|
||||
export class FontSettingsManager {
|
||||
constructor(env, rpc) {
|
||||
this.env = env;
|
||||
this.rpc = rpc;
|
||||
}
|
||||
|
||||
async loadSettings() {
|
||||
try {
|
||||
const settings = await this.rpc("/web/dataset/call_kw/ir.config_parameter/get_param", {
|
||||
model: "ir.config_parameter",
|
||||
method: "get_param",
|
||||
args: [],
|
||||
kwargs: {},
|
||||
});
|
||||
return settings;
|
||||
} catch (error) {
|
||||
console.warn("FontFourthArabic: Could not load settings", error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
applyPreset(preset) {
|
||||
const root = document.documentElement;
|
||||
|
||||
switch (preset) {
|
||||
case 'compact':
|
||||
root.style.setProperty('--ff-size-base', '12px');
|
||||
document.body.classList.add('ff-preset-compact');
|
||||
document.body.classList.remove('ff-preset-balanced', 'ff-preset-comfort');
|
||||
break;
|
||||
case 'comfort':
|
||||
root.style.setProperty('--ff-size-base', '14px');
|
||||
document.body.classList.add('ff-preset-comfort');
|
||||
document.body.classList.remove('ff-preset-balanced', 'ff-preset-compact');
|
||||
break;
|
||||
case 'balanced':
|
||||
default:
|
||||
root.style.setProperty('--ff-size-base', '13px');
|
||||
document.body.classList.add('ff-preset-balanced');
|
||||
document.body.classList.remove('ff-preset-compact', 'ff-preset-comfort');
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
applyFont(type, fontName) {
|
||||
const root = document.documentElement;
|
||||
const fontFamily = this.getFontFamily(fontName);
|
||||
|
||||
if (type === 'heading') {
|
||||
root.style.setProperty('--ff-heading', fontFamily);
|
||||
} else if (type === 'body') {
|
||||
root.style.setProperty('--ff-body', fontFamily);
|
||||
}
|
||||
}
|
||||
|
||||
applyFontWeight(type, weight) {
|
||||
const root = document.documentElement;
|
||||
|
||||
if (type === 'heading') {
|
||||
root.style.setProperty('--ff-weight-bold', weight);
|
||||
} else if (type === 'body') {
|
||||
root.style.setProperty('--ff-weight-regular', weight);
|
||||
}
|
||||
}
|
||||
|
||||
applyFontSize(size) {
|
||||
const root = document.documentElement;
|
||||
root.style.setProperty('--ff-size-base', size + 'px');
|
||||
}
|
||||
|
||||
getFontFamily(fontName) {
|
||||
const fonts = {
|
||||
'dubai': "'Dubai', 'Cairo', sans-serif",
|
||||
'cairo': "'Cairo', 'Tajawal', sans-serif",
|
||||
'tajawal': "'Tajawal', 'Cairo', sans-serif",
|
||||
'aljazeera': "'Al Jazeera', 'Cairo', sans-serif",
|
||||
'almarai': "'Almarai', 'Tajawal', sans-serif",
|
||||
'amiri': "'Amiri', serif",
|
||||
};
|
||||
return fonts[fontName] || fonts['cairo'];
|
||||
}
|
||||
}
|
||||
|
||||
// تسجيل الخدمة
|
||||
export const fontSettingsService = {
|
||||
dependencies: ["rpc"],
|
||||
|
||||
start(env, { rpc }) {
|
||||
return new FontSettingsManager(env, rpc);
|
||||
},
|
||||
};
|
||||
|
||||
registry.category("services").add("font_settings", fontSettingsService);
|
||||
|
||||
// تطبيق الإعدادات عند تحميل الصفحة
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// تطبيق الخطوط فوراً بالإعدادات الافتراضية
|
||||
const root = document.documentElement;
|
||||
root.style.setProperty('--ff-heading', "'Cairo', 'Tajawal', sans-serif");
|
||||
root.style.setProperty('--ff-body', "'Tajawal', 'Cairo', sans-serif");
|
||||
root.style.setProperty('--ff-size-base', '13px');
|
||||
|
||||
// إضافة class للنمط الافتراضي
|
||||
document.body.classList.add('ff-preset-balanced');
|
||||
});
|
||||
298
addons/havari_arabic_fonts/static/src/scss/backend.scss
Normal file
298
addons/havari_arabic_fonts/static/src/scss/backend.scss
Normal file
@@ -0,0 +1,298 @@
|
||||
/**
|
||||
* Font Fourth Arabic - Backend Styles
|
||||
* تنسيقات واجهة الباك إند
|
||||
*/
|
||||
|
||||
// =====================================
|
||||
// حماية خطوط الأيقونات - مهم جداً
|
||||
// Preserve icon font families
|
||||
// =====================================
|
||||
|
||||
// Odoo UI icons (odoo_ui_icons with underscores!)
|
||||
.oi {
|
||||
font-family: 'odoo_ui_icons' !important;
|
||||
}
|
||||
|
||||
// FontAwesome icons
|
||||
.fa, .fas, .far, .fab, .fal, .fad {
|
||||
font-family: 'FontAwesome' !important;
|
||||
}
|
||||
|
||||
// Bootstrap icons
|
||||
.bi {
|
||||
font-family: 'bootstrap-icons' !important;
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// التنسيقات الأساسية
|
||||
// =====================================
|
||||
|
||||
// الجسم العام - بدون !important لتجنب التعارض مع الأيقونات
|
||||
body {
|
||||
font-family: var(--ff-body);
|
||||
font-size: var(--ff-size-md);
|
||||
font-weight: var(--ff-weight-regular);
|
||||
line-height: var(--ff-line-height-normal);
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// عناوين الصفحات
|
||||
// =====================================
|
||||
|
||||
.o_control_panel {
|
||||
.breadcrumb-item {
|
||||
font-family: var(--ff-heading);
|
||||
font-size: var(--ff-size-xl);
|
||||
font-weight: var(--ff-weight-bold);
|
||||
}
|
||||
|
||||
.o_cp_searchview {
|
||||
font-family: var(--ff-body);
|
||||
font-size: var(--ff-size-md);
|
||||
}
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// القائمة الجانبية
|
||||
// =====================================
|
||||
|
||||
.o_main_navbar {
|
||||
font-family: var(--ff-body);
|
||||
font-size: var(--ff-size-md);
|
||||
font-weight: var(--ff-weight-medium);
|
||||
|
||||
.o_menu_brand {
|
||||
font-family: var(--ff-heading);
|
||||
font-weight: var(--ff-weight-bold);
|
||||
}
|
||||
}
|
||||
|
||||
.o_web_client .o_action_manager .o_kanban_view .o_kanban_record,
|
||||
.o_web_client .o_action_manager .o_list_view,
|
||||
.o_web_client .o_action_manager .o_form_view {
|
||||
font-family: var(--ff-body);
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// النماذج (Forms)
|
||||
// =====================================
|
||||
|
||||
.o_form_view {
|
||||
// عناوين الحقول
|
||||
.o_form_label,
|
||||
label.o_form_label {
|
||||
font-family: var(--ff-body);
|
||||
font-size: var(--ff-size-sm);
|
||||
font-weight: var(--ff-weight-medium);
|
||||
}
|
||||
|
||||
// قيم الحقول
|
||||
.o_field_widget {
|
||||
font-family: var(--ff-body);
|
||||
font-size: var(--ff-size-md);
|
||||
font-weight: var(--ff-weight-regular);
|
||||
|
||||
input, textarea, select {
|
||||
font-family: var(--ff-body);
|
||||
font-size: var(--ff-size-md);
|
||||
}
|
||||
}
|
||||
|
||||
// عناوين الأقسام
|
||||
.o_inner_group .o_group_name,
|
||||
.o_group .o_group_name {
|
||||
font-family: var(--ff-heading);
|
||||
font-size: var(--ff-size-lg);
|
||||
font-weight: var(--ff-weight-semibold);
|
||||
}
|
||||
|
||||
// التبويبات
|
||||
.o_notebook {
|
||||
.nav-link {
|
||||
font-family: var(--ff-body);
|
||||
font-size: var(--ff-size-md);
|
||||
font-weight: var(--ff-weight-medium);
|
||||
}
|
||||
|
||||
.nav-link.active {
|
||||
font-weight: var(--ff-weight-semibold);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// الجداول (Lists)
|
||||
// =====================================
|
||||
|
||||
.o_list_view {
|
||||
// رأس الجدول
|
||||
thead th {
|
||||
font-family: var(--ff-body);
|
||||
font-size: var(--ff-size-sm);
|
||||
font-weight: var(--ff-weight-semibold);
|
||||
}
|
||||
|
||||
// محتوى الجدول
|
||||
tbody td {
|
||||
font-family: var(--ff-body);
|
||||
font-size: var(--ff-size-sm);
|
||||
font-weight: var(--ff-weight-regular);
|
||||
}
|
||||
|
||||
// الإجمالي
|
||||
tfoot td {
|
||||
font-family: var(--ff-body);
|
||||
font-weight: var(--ff-weight-bold);
|
||||
}
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// البطاقات (Kanban)
|
||||
// =====================================
|
||||
|
||||
.o_kanban_view {
|
||||
.o_kanban_record {
|
||||
font-family: var(--ff-body);
|
||||
|
||||
.o_kanban_record_title {
|
||||
font-family: var(--ff-heading);
|
||||
font-weight: var(--ff-weight-semibold);
|
||||
}
|
||||
|
||||
.o_kanban_record_subtitle {
|
||||
font-size: var(--ff-size-sm);
|
||||
}
|
||||
}
|
||||
|
||||
.o_kanban_header {
|
||||
font-family: var(--ff-heading);
|
||||
font-weight: var(--ff-weight-bold);
|
||||
}
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// الأزرار
|
||||
// =====================================
|
||||
|
||||
.btn {
|
||||
font-family: var(--ff-body);
|
||||
font-weight: var(--ff-weight-semibold);
|
||||
}
|
||||
|
||||
.o_form_view .o_form_statusbar .o_statusbar_buttons .btn {
|
||||
font-family: var(--ff-body);
|
||||
font-weight: var(--ff-weight-medium);
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// الحوارات (Dialogs)
|
||||
// =====================================
|
||||
|
||||
.modal {
|
||||
.modal-title {
|
||||
font-family: var(--ff-heading);
|
||||
font-weight: var(--ff-weight-bold);
|
||||
}
|
||||
|
||||
.modal-body {
|
||||
font-family: var(--ff-body);
|
||||
}
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// الشريط الجانبي للتطبيقات
|
||||
// =====================================
|
||||
|
||||
.o_apps {
|
||||
.o_app {
|
||||
font-family: var(--ff-body);
|
||||
font-weight: var(--ff-weight-medium);
|
||||
}
|
||||
|
||||
.o_app .o_caption {
|
||||
font-size: var(--ff-size-sm);
|
||||
}
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// شات/مناقشات
|
||||
// =====================================
|
||||
|
||||
.o_Chatter {
|
||||
font-family: var(--ff-body);
|
||||
|
||||
.o_Message_prettyBody {
|
||||
font-size: var(--ff-size-md);
|
||||
}
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// القوائم المنسدلة
|
||||
// =====================================
|
||||
|
||||
.dropdown-menu {
|
||||
font-family: var(--ff-body);
|
||||
font-size: var(--ff-size-md);
|
||||
|
||||
.dropdown-item {
|
||||
font-weight: var(--ff-weight-regular);
|
||||
}
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// شجرة الإعدادات
|
||||
// =====================================
|
||||
|
||||
.o_base_settings {
|
||||
.o_setting_container {
|
||||
font-family: var(--ff-body);
|
||||
}
|
||||
|
||||
.o_settings_container .o_setting_left_pane {
|
||||
font-family: var(--ff-heading);
|
||||
}
|
||||
|
||||
.o_form_label {
|
||||
font-weight: var(--ff-weight-medium);
|
||||
}
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// البحث والفلاتر
|
||||
// =====================================
|
||||
|
||||
.o_searchview {
|
||||
font-family: var(--ff-body);
|
||||
|
||||
.o_searchview_facet {
|
||||
font-size: var(--ff-size-sm);
|
||||
}
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// الرسائل والتنبيهات
|
||||
// =====================================
|
||||
|
||||
.o_notification {
|
||||
font-family: var(--ff-body);
|
||||
|
||||
.o_notification_title {
|
||||
font-family: var(--ff-heading);
|
||||
font-weight: var(--ff-weight-semibold);
|
||||
}
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// دعم RTL للعربية
|
||||
// =====================================
|
||||
|
||||
html[dir="rtl"],
|
||||
.o_rtl {
|
||||
body {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.o_form_view .o_form_label {
|
||||
text-align: right;
|
||||
}
|
||||
}
|
||||
434
addons/havari_arabic_fonts/static/src/scss/fonts.scss
Normal file
434
addons/havari_arabic_fonts/static/src/scss/fonts.scss
Normal file
@@ -0,0 +1,434 @@
|
||||
/**
|
||||
* Font Fourth Arabic - All Font Faces
|
||||
* تعريف جميع الخطوط العربية
|
||||
* الخطوط تُحمّل من CDN أولاً مع fallback للملفات المحلية
|
||||
* 6 خطوط: Dubai, Al Jazeera, Cairo, Tajawal, Amiri, Almarai
|
||||
*/
|
||||
|
||||
// =====================================
|
||||
// خط دبي (Dubai Font) - من CDN
|
||||
// =====================================
|
||||
@font-face {
|
||||
font-family: 'Dubai';
|
||||
src: url('https://fonts.cdnfonts.com/s/16118/Dubai-Light.woff') format('woff'),
|
||||
url('/havari_arabic_fonts/static/fonts/dubai/Dubai-Light.ttf') format('truetype');
|
||||
font-weight: 300;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Dubai';
|
||||
src: url('https://fonts.cdnfonts.com/s/16118/Dubai-Regular.woff') format('woff'),
|
||||
url('/havari_arabic_fonts/static/fonts/dubai/Dubai-Regular.ttf') format('truetype');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Dubai';
|
||||
src: url('https://fonts.cdnfonts.com/s/16118/Dubai-Medium.woff') format('woff'),
|
||||
url('/havari_arabic_fonts/static/fonts/dubai/Dubai-Medium.ttf') format('truetype');
|
||||
font-weight: 500;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Dubai';
|
||||
src: url('https://fonts.cdnfonts.com/s/16118/Dubai-Bold.woff') format('woff'),
|
||||
url('/havari_arabic_fonts/static/fonts/dubai/Dubai-Bold.ttf') format('truetype');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// خط الجزيرة (Al Jazeera Font) - محلي فقط
|
||||
// =====================================
|
||||
@font-face {
|
||||
font-family: 'Al Jazeera';
|
||||
src: url('/havari_arabic_fonts/static/fonts/aljazeera/AlJazeera-Light.ttf') format('truetype');
|
||||
font-weight: 300;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Al Jazeera';
|
||||
src: url('/havari_arabic_fonts/static/fonts/aljazeera/AlJazeera-Regular.ttf') format('truetype');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Al Jazeera';
|
||||
src: url('/havari_arabic_fonts/static/fonts/aljazeera/AlJazeera-Medium.ttf') format('truetype');
|
||||
font-weight: 500;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Al Jazeera';
|
||||
src: url('/havari_arabic_fonts/static/fonts/aljazeera/AlJazeera-Bold.ttf') format('truetype');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// خط القاهرة (Cairo Font) - من CDN
|
||||
// =====================================
|
||||
@font-face {
|
||||
font-family: 'Cairo';
|
||||
src: url('https://fonts.cdnfonts.com/s/8893/Cairo.woff') format('woff'),
|
||||
url('/havari_arabic_fonts/static/fonts/cairo/Cairo-Regular.ttf') format('truetype');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Cairo';
|
||||
src: url('/havari_arabic_fonts/static/fonts/cairo/Cairo-Light.ttf') format('truetype');
|
||||
font-weight: 300;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Cairo';
|
||||
src: url('/havari_arabic_fonts/static/fonts/cairo/Cairo-Medium.ttf') format('truetype');
|
||||
font-weight: 500;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Cairo';
|
||||
src: url('/havari_arabic_fonts/static/fonts/cairo/Cairo-Bold.ttf') format('truetype');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// خط تجوال (Tajawal Font) - من CDN
|
||||
// =====================================
|
||||
@font-face {
|
||||
font-family: 'Tajawal';
|
||||
src: url('https://fonts.cdnfonts.com/s/15774/Tajawal-Light.woff') format('woff'),
|
||||
url('/havari_arabic_fonts/static/fonts/tajawal/Tajawal-Light.ttf') format('truetype');
|
||||
font-weight: 300;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Tajawal';
|
||||
src: url('https://fonts.cdnfonts.com/s/15774/Tajawal-Regular.woff') format('woff'),
|
||||
url('/havari_arabic_fonts/static/fonts/tajawal/Tajawal-Regular.ttf') format('truetype');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Tajawal';
|
||||
src: url('https://fonts.cdnfonts.com/s/15774/Tajawal-Medium.woff') format('woff'),
|
||||
url('/havari_arabic_fonts/static/fonts/tajawal/Tajawal-Medium.ttf') format('truetype');
|
||||
font-weight: 500;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Tajawal';
|
||||
src: url('https://fonts.cdnfonts.com/s/15774/Tajawal-Bold.woff') format('woff'),
|
||||
url('/havari_arabic_fonts/static/fonts/tajawal/Tajawal-Bold.ttf') format('truetype');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// خط أميري (Amiri Font - نسخي تقليدي) - من CDN
|
||||
// =====================================
|
||||
@font-face {
|
||||
font-family: 'Amiri';
|
||||
src: url('https://fonts.cdnfonts.com/s/14885/Amiri-Regular.woff') format('woff'),
|
||||
url('/havari_arabic_fonts/static/fonts/amiri/Amiri-Regular.ttf') format('truetype');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Amiri';
|
||||
src: url('https://fonts.cdnfonts.com/s/14885/Amiri-Bold.woff') format('woff'),
|
||||
url('/havari_arabic_fonts/static/fonts/amiri/Amiri-Bold.ttf') format('truetype');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// خط المراعي (Almarai Font - سعودي احترافي) - من CDN
|
||||
// =====================================
|
||||
@font-face {
|
||||
font-family: 'Almarai';
|
||||
src: url('https://fonts.cdnfonts.com/s/29851/Almarai-Light.woff') format('woff'),
|
||||
url('/havari_arabic_fonts/static/fonts/almarai/Almarai-Light.ttf') format('truetype');
|
||||
font-weight: 300;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Almarai';
|
||||
src: url('https://fonts.cdnfonts.com/s/29851/Almarai-Regular.woff') format('woff'),
|
||||
url('/havari_arabic_fonts/static/fonts/almarai/Almarai-Regular.ttf') format('truetype');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Almarai';
|
||||
src: url('https://fonts.cdnfonts.com/s/29851/Almarai-Bold.woff') format('woff'),
|
||||
url('/havari_arabic_fonts/static/fonts/almarai/Almarai-Bold.ttf') format('truetype');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// خط نوتو سانس عربي (Noto Sans Arabic) - من Google Fonts
|
||||
// =====================================
|
||||
@font-face {
|
||||
font-family: 'Noto Sans Arabic';
|
||||
src: url('https://fonts.gstatic.com/s/notosansarabic/v33/nwpCtLGrOAZMl5nJ_wfgRg3DrWFZWsnVBJ_sS6tlqHHFlg43tY3IxQ.woff2') format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Noto Sans Arabic';
|
||||
src: url('https://fonts.gstatic.com/s/notosansarabic/v33/nwpCtLGrOAZMl5nJ_wfgRg3DrWFZWsnVBJ_sS6tlqHHFlg43tY3IxQ.woff2') format('woff2');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// خط ريدكس برو (Readex Pro) - من Google Fonts
|
||||
// =====================================
|
||||
@font-face {
|
||||
font-family: 'Readex Pro';
|
||||
src: url('https://fonts.gstatic.com/s/readexpro/v27/SLXYc1bJ7HE5YDoGPuzj_dh8uc7wUy8ZQQyX2Lwybkv8hA.woff2') format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Readex Pro';
|
||||
src: url('https://fonts.gstatic.com/s/readexpro/v27/SLXYc1bJ7HE5YDoGPuzj_dh8uc7wUy8ZQQyX2Lwybkv8hA.woff2') format('woff2');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// خط مادا (Mada) - من Google Fonts
|
||||
// =====================================
|
||||
@font-face {
|
||||
font-family: 'Mada';
|
||||
src: url('https://fonts.gstatic.com/s/mada/v21/7Auwp_0qnzeSTTDMKirW.woff2') format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Mada';
|
||||
src: url('https://fonts.gstatic.com/s/mada/v21/7Auwp_0qnzeSTTDMKirW.woff2') format('woff2');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// خط IBM Plex Sans Arabic - من Google Fonts
|
||||
// =====================================
|
||||
@font-face {
|
||||
font-family: 'IBM Plex Sans Arabic';
|
||||
src: url('https://fonts.gstatic.com/s/ibmplexsansarabic/v14/Qw3CZRtWPQCuHme67tEYUIx3Kh0PHR9N6bs_1vKbfA.woff2') format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'IBM Plex Sans Arabic';
|
||||
src: url('https://fonts.gstatic.com/s/ibmplexsansarabic/v14/Qw3NZRtWPQCuHme67tEYUIx3Kh0PHR9N6YOG-dCWVsNJKg.woff2') format('woff2');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// خط شانغا (Changa) - من Google Fonts
|
||||
// =====================================
|
||||
@font-face {
|
||||
font-family: 'Changa';
|
||||
src: url('https://fonts.gstatic.com/s/changa/v29/2-cm9JNi2YuVOUcUZJa5Wu4.woff2') format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Changa';
|
||||
src: url('https://fonts.gstatic.com/s/changa/v29/2-cm9JNi2YuVOUcUZJa5Wu4.woff2') format('woff2');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// خط نوتو نسخ عربي (Noto Naskh Arabic) - من Google Fonts
|
||||
// =====================================
|
||||
@font-face {
|
||||
font-family: 'Noto Naskh Arabic';
|
||||
src: url('https://fonts.gstatic.com/s/notonaskharabic/v43/RrQKbpV-9Dd1b1OAGA6M9PkyDuVBeO2EF1qELw.woff2') format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Noto Naskh Arabic';
|
||||
src: url('https://fonts.gstatic.com/s/notonaskharabic/v43/RrQKbpV-9Dd1b1OAGA6M9PkyDuVBeO2EF1qELw.woff2') format('woff2');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// خط شهرزاد (Scheherazade New) - من Google Fonts
|
||||
// =====================================
|
||||
@font-face {
|
||||
font-family: 'Scheherazade';
|
||||
src: url('https://fonts.gstatic.com/s/scheherazadenew/v20/4UaZrFhTvxVnHDvUkUiHg8jprP4DCwZsPF4o.woff2') format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Scheherazade';
|
||||
src: url('https://fonts.gstatic.com/s/scheherazadenew/v20/4UaerFhTvxVnHDvUkUiHg8jprP4DM79DHlMC_oKm.woff2') format('woff2');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// خط مركزي (Markazi Text) - من Google Fonts
|
||||
// =====================================
|
||||
@font-face {
|
||||
font-family: 'Markazi Text';
|
||||
src: url('https://fonts.gstatic.com/s/markazitext/v28/syk0-ydym6AtQaiEtX7yhqblo3-SJ1A.woff2') format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Markazi Text';
|
||||
src: url('https://fonts.gstatic.com/s/markazitext/v28/syk0-ydym6AtQaiEtX7yhqblo3-SJ1A.woff2') format('woff2');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// خط نوتو كوفي عربي (Noto Kufi Arabic) - من Google Fonts
|
||||
// =====================================
|
||||
@font-face {
|
||||
font-family: 'Noto Kufi Arabic';
|
||||
src: url('https://fonts.gstatic.com/s/notokufiarabic/v27/CSRk4ydQnPyaDxEXLFF6LZVLKrodnOEPEWKo.woff2') format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Noto Kufi Arabic';
|
||||
src: url('https://fonts.gstatic.com/s/notokufiarabic/v27/CSRk4ydQnPyaDxEXLFF6LZVLKrodnOEPEWKo.woff2') format('woff2');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// خط ريم كوفي (Reem Kufi) - من Google Fonts
|
||||
// =====================================
|
||||
@font-face {
|
||||
font-family: 'Reem Kufi';
|
||||
src: url('https://fonts.gstatic.com/s/reemkufi/v28/2sDcZGJLip7W2J7v7wQDam--C70.woff2') format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Reem Kufi';
|
||||
src: url('https://fonts.gstatic.com/s/reemkufi/v28/2sDcZGJLip7W2J7v7wQDam--C70.woff2') format('woff2');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// خط عارف رقعة (Aref Ruqaa) - من Google Fonts
|
||||
// =====================================
|
||||
@font-face {
|
||||
font-family: 'Aref Ruqaa';
|
||||
src: url('https://fonts.gstatic.com/s/arefruqaa/v26/WwkbxPW1E165rajQKDulEIUiUto4.woff2') format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Aref Ruqaa';
|
||||
src: url('https://fonts.gstatic.com/s/arefruqaa/v26/WwkYxPW1E165rajQKDulKDwNcNcS3t_6.woff2') format('woff2');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// خط المسيري (El Messiri) - من Google Fonts
|
||||
// =====================================
|
||||
@font-face {
|
||||
font-family: 'El Messiri';
|
||||
src: url('https://fonts.gstatic.com/s/elmessiri/v25/K2F0fZBRmr9vQ1pHEey6Ao-KBSLy.woff2') format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'El Messiri';
|
||||
src: url('https://fonts.gstatic.com/s/elmessiri/v25/K2F0fZBRmr9vQ1pHEey6Ao-KBSLy.woff2') format('woff2');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
/**
|
||||
* Font Fourth Arabic - Balanced Preset
|
||||
* النمط المتوازن (الافتراضي)
|
||||
*/
|
||||
|
||||
// يتم تطبيقه بشكل افتراضي
|
||||
body {
|
||||
--ff-size-base: 13px;
|
||||
--ff-line-height-normal: 1.5;
|
||||
}
|
||||
200
addons/havari_arabic_fonts/static/src/scss/report.scss
Normal file
200
addons/havari_arabic_fonts/static/src/scss/report.scss
Normal file
@@ -0,0 +1,200 @@
|
||||
/**
|
||||
* Font Fourth Arabic - Report Styles
|
||||
* تنسيقات التقارير والطباعة
|
||||
*/
|
||||
|
||||
// =====================================
|
||||
// حماية خطوط الأيقونات
|
||||
// =====================================
|
||||
|
||||
.oi {
|
||||
font-family: 'odoo_ui_icons' !important;
|
||||
}
|
||||
|
||||
.fa, .fas, .far, .fab, .fal, .fad {
|
||||
font-family: 'FontAwesome' !important;
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// الإعدادات الأساسية للتقارير
|
||||
// =====================================
|
||||
|
||||
.o_report_layout,
|
||||
.report-layout {
|
||||
font-family: 'Dubai', 'Al Jazeera', sans-serif;
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// رأس التقرير (Header)
|
||||
// =====================================
|
||||
|
||||
.header {
|
||||
font-family: 'Dubai', sans-serif;
|
||||
|
||||
.company-name,
|
||||
h1, h2 {
|
||||
font-family: 'Al Jazeera', sans-serif;
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// عنوان التقرير
|
||||
// =====================================
|
||||
|
||||
.page {
|
||||
font-family: 'Dubai', sans-serif;
|
||||
font-size: 10px;
|
||||
line-height: 1.4;
|
||||
|
||||
h1 {
|
||||
font-family: 'Al Jazeera', sans-serif;
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-family: 'Al Jazeera', sans-serif;
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-family: 'Dubai', sans-serif;
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
h4, h5, h6 {
|
||||
font-family: 'Dubai', sans-serif;
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// جداول التقرير
|
||||
// =====================================
|
||||
|
||||
.page table {
|
||||
font-family: 'Dubai', sans-serif;
|
||||
font-size: 9px;
|
||||
|
||||
thead {
|
||||
th {
|
||||
font-weight: 600;
|
||||
font-size: 9px;
|
||||
}
|
||||
}
|
||||
|
||||
tbody {
|
||||
td {
|
||||
font-weight: 400;
|
||||
}
|
||||
}
|
||||
|
||||
tfoot {
|
||||
td {
|
||||
font-weight: 700;
|
||||
font-size: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// الفوتر (Footer)
|
||||
// =====================================
|
||||
|
||||
.footer {
|
||||
font-family: 'Dubai', sans-serif;
|
||||
font-size: 8px;
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// معلومات الشركة
|
||||
// =====================================
|
||||
|
||||
.company_address {
|
||||
font-family: 'Dubai', sans-serif;
|
||||
font-size: 9px;
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// إجماليات الفواتير
|
||||
// =====================================
|
||||
|
||||
#total {
|
||||
font-family: 'Dubai', sans-serif;
|
||||
|
||||
td:last-child {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
tr.o_total {
|
||||
td {
|
||||
font-size: 11px;
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// معلومات إضافية
|
||||
// =====================================
|
||||
|
||||
.o_report_layout_boxed,
|
||||
.o_report_layout_bold,
|
||||
.o_report_layout_striped {
|
||||
font-family: 'Dubai', sans-serif;
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// تنسيقات RTL للتقارير
|
||||
// =====================================
|
||||
|
||||
.o_rtl,
|
||||
[dir="rtl"] {
|
||||
.page {
|
||||
text-align: right;
|
||||
direction: rtl;
|
||||
}
|
||||
|
||||
table {
|
||||
direction: rtl;
|
||||
|
||||
th, td {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
th:last-child,
|
||||
td:last-child {
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// طباعة
|
||||
// =====================================
|
||||
|
||||
@media print {
|
||||
body {
|
||||
font-family: 'Dubai', sans-serif;
|
||||
}
|
||||
|
||||
.page {
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
h1, h2 {
|
||||
font-family: 'Al Jazeera', sans-serif;
|
||||
}
|
||||
|
||||
// حماية خطوط الأيقونات في الطباعة
|
||||
.oi {
|
||||
font-family: 'odoo_ui_icons' !important;
|
||||
}
|
||||
.fa, .fas, .far, .fab {
|
||||
font-family: 'FontAwesome' !important;
|
||||
}
|
||||
}
|
||||
65
addons/havari_arabic_fonts/static/src/scss/variables.scss
Normal file
65
addons/havari_arabic_fonts/static/src/scss/variables.scss
Normal file
@@ -0,0 +1,65 @@
|
||||
/**
|
||||
* Font Fourth Arabic - CSS Variables
|
||||
* متغيرات CSS للتحكم في الخطوط
|
||||
*/
|
||||
|
||||
:root {
|
||||
// =====================================
|
||||
// تعريف الخطوط
|
||||
// =====================================
|
||||
--ff-heading: 'Al Jazeera', 'Dubai', 'Segoe UI', Tahoma, sans-serif;
|
||||
--ff-body: 'Dubai', 'Al Jazeera', 'Segoe UI', Tahoma, sans-serif;
|
||||
|
||||
// =====================================
|
||||
// أحجام الخطوط
|
||||
// =====================================
|
||||
--ff-size-base: 13px;
|
||||
--ff-size-xs: calc(var(--ff-size-base) - 3px); // 10px
|
||||
--ff-size-sm: calc(var(--ff-size-base) - 1px); // 12px
|
||||
--ff-size-md: var(--ff-size-base); // 13px
|
||||
--ff-size-lg: calc(var(--ff-size-base) + 2px); // 15px
|
||||
--ff-size-xl: calc(var(--ff-size-base) + 5px); // 18px
|
||||
--ff-size-xxl: calc(var(--ff-size-base) + 8px); // 21px
|
||||
|
||||
// =====================================
|
||||
// أوزان الخطوط
|
||||
// =====================================
|
||||
--ff-weight-light: 300;
|
||||
--ff-weight-regular: 400;
|
||||
--ff-weight-medium: 500;
|
||||
--ff-weight-semibold: 600;
|
||||
--ff-weight-bold: 700;
|
||||
|
||||
// =====================================
|
||||
// ارتفاع الأسطر
|
||||
// =====================================
|
||||
--ff-line-height-tight: 1.2;
|
||||
--ff-line-height-normal: 1.5;
|
||||
--ff-line-height-relaxed: 1.75;
|
||||
|
||||
// =====================================
|
||||
// المسافات بين الحروف
|
||||
// =====================================
|
||||
--ff-letter-spacing-tight: -0.02em;
|
||||
--ff-letter-spacing-normal: 0;
|
||||
--ff-letter-spacing-wide: 0.02em;
|
||||
}
|
||||
|
||||
// =====================================
|
||||
// أنماط جاهزة (Presets)
|
||||
// =====================================
|
||||
|
||||
// النمط المدمج
|
||||
.ff-preset-compact {
|
||||
--ff-size-base: 12px;
|
||||
}
|
||||
|
||||
// النمط المتوازن (الافتراضي)
|
||||
.ff-preset-balanced {
|
||||
--ff-size-base: 13px;
|
||||
}
|
||||
|
||||
// النمط المريح
|
||||
.ff-preset-comfort {
|
||||
--ff-size-base: 14px;
|
||||
}
|
||||
7
addons/havari_arabic_fonts/views/assets.xml
Normal file
7
addons/havari_arabic_fonts/views/assets.xml
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<!--
|
||||
Font Fourth Arabic - Assets Bundle
|
||||
الأصول يتم تحميلها من __manifest__.py
|
||||
-->
|
||||
</odoo>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<!--
|
||||
Font Fourth Arabic - Fonts only module
|
||||
Header/footer functionality moved to havari_odoo_printx module
|
||||
This file is kept empty to avoid manifest errors
|
||||
-->
|
||||
</odoo>
|
||||
245
addons/havari_arabic_fonts/views/res_config_settings_views.xml
Normal file
245
addons/havari_arabic_fonts/views/res_config_settings_views.xml
Normal file
@@ -0,0 +1,245 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="res_config_settings_view_form_font_arabic" model="ir.ui.view">
|
||||
<field name="name">res.config.settings.view.form.inherit.havari_arabic_fonts</field>
|
||||
<field name="model">res.config.settings</field>
|
||||
<field name="priority">50</field>
|
||||
<field name="inherit_id" ref="base.res_config_settings_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[hasclass('settings')]" position="inside">
|
||||
<div class="app_settings_block" data-string="الخطوط العربية" string="الخطوط العربية" data-key="havari_arabic_fonts">
|
||||
<h2>الخطوط العربية - إعدادات الواجهة</h2>
|
||||
|
||||
<div class="row mt16 o_settings_container" id="font_backend_settings">
|
||||
<div class="col-12 col-lg-6 o_setting_box">
|
||||
<div class="o_setting_left_pane"/>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="font_preset" string="النمط العام"/>
|
||||
<div class="text-muted">اختر نمط عرض الخطوط</div>
|
||||
<div class="content-group">
|
||||
<field name="font_preset" widget="radio"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-lg-6 o_setting_box">
|
||||
<div class="o_setting_left_pane"/>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="font_size_base" string="حجم الخط الأساسي"/>
|
||||
<div class="text-muted">حجم الخط الأساسي للواجهة</div>
|
||||
<div class="content-group">
|
||||
<field name="font_size_base"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2>خطوط العناوين</h2>
|
||||
<div class="row mt16 o_settings_container" id="font_heading_settings">
|
||||
<div class="col-12 col-lg-6 o_setting_box">
|
||||
<div class="o_setting_left_pane"/>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="font_heading" string="خط العناوين"/>
|
||||
<div class="text-muted">الخط المستخدم في العناوين</div>
|
||||
<div class="content-group">
|
||||
<field name="font_heading"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-lg-6 o_setting_box">
|
||||
<div class="o_setting_left_pane"/>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="font_heading_weight" string="وزن خط العناوين"/>
|
||||
<div class="text-muted">درجة سماكة خط العناوين</div>
|
||||
<div class="content-group">
|
||||
<field name="font_heading_weight"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2>خطوط النصوص</h2>
|
||||
<div class="row mt16 o_settings_container" id="font_body_settings">
|
||||
<div class="col-12 col-lg-6 o_setting_box">
|
||||
<div class="o_setting_left_pane"/>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="font_body" string="خط النصوص"/>
|
||||
<div class="text-muted">الخط المستخدم في النصوص</div>
|
||||
<div class="content-group">
|
||||
<field name="font_body"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-lg-6 o_setting_box">
|
||||
<div class="o_setting_left_pane"/>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="font_body_weight" string="وزن خط النصوص"/>
|
||||
<div class="text-muted">درجة سماكة خط النصوص</div>
|
||||
<div class="content-group">
|
||||
<field name="font_body_weight"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2>خطوط التقارير والطباعة</h2>
|
||||
<div class="row mt16 o_settings_container" id="font_report_settings">
|
||||
<div class="col-12 col-lg-6 o_setting_box">
|
||||
<div class="o_setting_left_pane"/>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="report_font_heading" string="خط عناوين التقارير"/>
|
||||
<div class="text-muted">الخط المستخدم في عناوين التقارير</div>
|
||||
<div class="content-group">
|
||||
<field name="report_font_heading"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-lg-6 o_setting_box">
|
||||
<div class="o_setting_left_pane"/>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="report_font_heading_weight" string="وزن خط عناوين التقارير"/>
|
||||
<div class="text-muted">درجة سماكة خط عناوين التقارير</div>
|
||||
<div class="content-group">
|
||||
<field name="report_font_heading_weight"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-lg-6 o_setting_box">
|
||||
<div class="o_setting_left_pane"/>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="report_font_body" string="خط نصوص التقارير"/>
|
||||
<div class="text-muted">الخط المستخدم في نصوص التقارير</div>
|
||||
<div class="content-group">
|
||||
<field name="report_font_body"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-lg-6 o_setting_box">
|
||||
<div class="o_setting_left_pane"/>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="report_font_body_weight" string="وزن خط نصوص التقارير"/>
|
||||
<div class="text-muted">درجة سماكة خط نصوص التقارير</div>
|
||||
<div class="content-group">
|
||||
<field name="report_font_body_weight"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-lg-6 o_setting_box">
|
||||
<div class="o_setting_left_pane"/>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="report_font_size" string="حجم خط التقارير"/>
|
||||
<div class="text-muted">حجم الخط في التقارير</div>
|
||||
<div class="content-group">
|
||||
<field name="report_font_size"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- قسم المعاينة المباشرة -->
|
||||
<h2>
|
||||
<i class="fa fa-eye me-2"/>
|
||||
معاينة الخطوط
|
||||
</h2>
|
||||
<div class="row mt16 o_settings_container" id="font_preview_section">
|
||||
<div class="col-12">
|
||||
<div style="padding: 20px; border: 1px solid #dee2e6; border-radius: 8px; background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);">
|
||||
|
||||
<!-- معاينة العنوان -->
|
||||
<div style="margin-bottom: 20px; padding: 15px; background: white; border-radius: 6px; box-shadow: 0 2px 4px rgba(0,0,0,0.05);">
|
||||
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px;">
|
||||
<small style="color: #6c757d;">
|
||||
<i class="fa fa-heading me-1"/>
|
||||
خط العناوين:
|
||||
</small>
|
||||
<span id="font_heading_name" class="badge bg-primary">Cairo</span>
|
||||
</div>
|
||||
<h1 id="font_preview_heading" style="font-family: 'Cairo', sans-serif; font-weight: 700; font-size: 2.2em; margin: 0 0 15px 0; color: #212529; direction: rtl; text-align: right;">
|
||||
بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ
|
||||
</h1>
|
||||
<h2 id="font_preview_heading_2" style="font-family: 'Cairo', sans-serif; font-weight: 700; font-size: 1.6em; margin: 0 0 10px 0; color: #343a40; direction: rtl; text-align: right;">
|
||||
الحمد لله رب العالمين
|
||||
</h2>
|
||||
<h3 id="font_preview_heading_3" style="font-family: 'Cairo', sans-serif; font-weight: 600; font-size: 1.3em; margin: 0; color: #495057; direction: rtl; text-align: right;">
|
||||
إدارة الخطوط العربية في أودوو - Odoo Arabic Fonts
|
||||
</h3>
|
||||
</div>
|
||||
|
||||
<!-- معاينة النص -->
|
||||
<div style="margin-bottom: 20px; padding: 15px; background: white; border-radius: 6px; box-shadow: 0 2px 4px rgba(0,0,0,0.05);">
|
||||
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px;">
|
||||
<small style="color: #6c757d;">
|
||||
<i class="fa fa-align-right me-1"/>
|
||||
خط النصوص:
|
||||
</small>
|
||||
<span id="font_body_name" class="badge bg-secondary">Tajawal</span>
|
||||
</div>
|
||||
<p id="font_preview_body" style="font-family: 'Tajawal', sans-serif; font-weight: 400; font-size: 14px; line-height: 1.8; margin: 0; color: #495057; direction: rtl; text-align: right;">
|
||||
هذا نص تجريبي لمعاينة الخط المختار. يمكنك تغيير الخط من القائمة أعلاه ومشاهدة التغيير فوراً.
|
||||
<br/>
|
||||
<span style="color: #868e96;">الأرقام العربية: ٠١٢٣٤٥٦٧٨٩ | الأرقام الإنجليزية: 0123456789</span>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- معاينة مثال فاتورة - تستخدم خطوط التقارير -->
|
||||
<div style="padding: 15px; background: white; border-radius: 6px; box-shadow: 0 2px 4px rgba(0,0,0,0.05);">
|
||||
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px;">
|
||||
<small style="color: #6c757d;">
|
||||
<i class="fa fa-file-text-o me-1"/>
|
||||
معاينة خطوط التقارير (فاتورة):
|
||||
</small>
|
||||
<div>
|
||||
<span id="report_font_heading_name" class="badge bg-info me-1">Cairo</span>
|
||||
<span id="report_font_body_name" class="badge bg-success">Tajawal</span>
|
||||
</div>
|
||||
</div>
|
||||
<div id="font_preview_invoice" style="direction: rtl; text-align: right; font-family: 'Tajawal', sans-serif; font-size: 13px; border: 1px solid #e9ecef; border-radius: 4px; padding: 15px;">
|
||||
<div style="display: flex; justify-content: space-between; border-bottom: 2px solid #007bff; padding-bottom: 10px; margin-bottom: 15px;">
|
||||
<span class="invoice_title" style="font-family: 'Cairo', sans-serif; font-weight: 700; font-size: 1.3em; color: #007bff;">فاتورة مبيعات</span>
|
||||
<span style="color: #6c757d;">رقم: INV/2024/0001</span>
|
||||
</div>
|
||||
<table style="width: 100%; border-collapse: collapse;">
|
||||
<thead>
|
||||
<tr style="background: #f8f9fa;">
|
||||
<th style="padding: 10px; text-align: right; border-bottom: 1px solid #dee2e6;">المنتج</th>
|
||||
<th style="padding: 10px; text-align: center; border-bottom: 1px solid #dee2e6;">الكمية</th>
|
||||
<th style="padding: 10px; text-align: left; border-bottom: 1px solid #dee2e6;">السعر</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="padding: 10px; border-bottom: 1px solid #f1f3f4;">خدمة استضافة سنوية</td>
|
||||
<td style="padding: 10px; text-align: center; border-bottom: 1px solid #f1f3f4;">1</td>
|
||||
<td style="padding: 10px; text-align: left; border-bottom: 1px solid #f1f3f4;">1,200.00 ر.س</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 10px; border-bottom: 1px solid #f1f3f4;">دعم فني شهري</td>
|
||||
<td style="padding: 10px; text-align: center; border-bottom: 1px solid #f1f3f4;">12</td>
|
||||
<td style="padding: 10px; text-align: left; border-bottom: 1px solid #f1f3f4;">600.00 ر.س</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr style="font-weight: bold; background: #f8f9fa;">
|
||||
<td colspan="2" style="padding: 10px; border-top: 2px solid #dee2e6;">الإجمالي</td>
|
||||
<td style="padding: 10px; text-align: left; border-top: 2px solid #dee2e6; color: #28a745;">1,800.00 ر.س</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
3
addons/havari_license_client/__init__.py
Normal file
3
addons/havari_license_client/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
||||
# Pyarmor 9.2.3 (basic), 009742, subscription_packages, 2026-03-02T02:53:41.853123
|
||||
from .pyarmor_runtime_009742 import __pyarmor__
|
||||
__pyarmor__(__name__, __file__, b'PY009742\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xad\x01\x00\x00\x12\t\x05\x00\xe1\xf72\x8c\xc6\xe7\xf4"\x82_\xf2\x91\xb6\x88\x94\x87\x00\x00\x00\x00\x00\x00\x00\x00\x91\x94\x13\x9c\x9d8r\xbc\xf64\x1a\x97^q\x92\xc7\xc0\xd4B=9\xc4\xf6hI\x90\x7f\n\x08\x1b\xd1\xb6\'.\n$\xf7 b\xde\xb5\xb0\xf5h\x00U\x11\xcfp\xca\xdaN\xd7\xa13z\xbe\xb0\x0f7\xaf\x8bn\xeb\xf0\xf8\x9f#>i\x08\x8ei\xd7\xd6\xe6\xd8\xb8\xe9\x81\xa5\x8b-\x1dt\xd8JJ\xec!\xce\xe8&\xdc\x9a\x11P\x84\xcf\x0f\xe5\x8dn >$,\x05\xb6b\x07l\x82\x1fIL\xa5\xdbh\x16\x0f\xe3]\xeb6\xca\xd9\xf1\x92\xa8\xfb- \x98\xd3\x80#\x92W\x1cNeN\x82>5\xa4\x17\x01\x8b\xfeL\xd8\x90\x9c\r\xe21C\x13\x08$\x87\xa9l\x1f\xb4\x0f\xe0\xda[\xf8\x9b.P\x97\xeb\xd8\xdb\xa4u\x92\x03\x82\xe0\xf4 7\xc0\xe8\xfbE7\x132\xa8\x91\xa5\x84\xbf2\xbb)7\x105j\x0b\\X\xb7\x9c\xd5\xd6\x81\xb1\x9fP\xb1fz0\xd0\x1ft\xce\xb6\x90_\xf5%\xf9\xc7\xadU\xcf\xb5\xe6ha<\x81\xee\xef\xa9\xa1\xeb\xa1L\x11\xf0[\xcb\xf8\xffW\xb3\xfbAY\x14\xcc\x03x\x0br`Y\xa6WM\x1e\xfdq\xc1W{8@0\x04|\x1e\x08\x88\x1e\xdf7F\x82\x01\x1fNn\xa6\x0c\x8c\xe5\xcf\xb6\xbf\xc1$g\xb73kX\x85\xa7\xa1\xc9M\xc2t\xcb\x14E\x08\'=\xeb=\xe4\x0b\x91\xe0\x01\xd1P\x10\xa5\x95\xf9y\xa9\x0f1\x17\xa6z|\x8a~}\x16\x1b\x13\xf1~\xd6\xc8b\xbf\xbe\xf50\xf1\xbf>b\x8e\x9d\xe2\xaf\xedW5\x0e\x02\x13\xd0\x15\xd9\x06\xbet\xa5i\x9e#\xad\x05HQO\xa5Z8%\xc0\x1a?\xb0@>G\x81O\xf4&\x9f\x1d\x1e\xa4f\xff\xe3m\x1a\xcf\xa3\xfe\ng8\x02~\xc7\xe9\xff\x04\x93\xd2,a2\x8f\xe8')
|
||||
27
addons/havari_license_client/__manifest__.py
Normal file
27
addons/havari_license_client/__manifest__.py
Normal file
@@ -0,0 +1,27 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
{
|
||||
'name': 'License Client',
|
||||
'version': '16.0.1.0.0',
|
||||
'summary': 'License Management',
|
||||
'category': 'Tools',
|
||||
'author': 'Mostafa Elhavari',
|
||||
'website': 'https://havari.me',
|
||||
'maintainer': 'Mostafa Elhavari <m@havari.me>',
|
||||
'support': 'm@havari.me',
|
||||
'license': 'LGPL-3',
|
||||
# Developer Contact: +90 543 774 3103 (WhatsApp)
|
||||
'depends': ['base', 'web', 'bus'],
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
'views/license_product_views.xml',
|
||||
'views/res_config_settings_views.xml',
|
||||
],
|
||||
'assets': {
|
||||
'web.assets_backend': [
|
||||
'havari_license_client/static/src/js/license_bus.js',
|
||||
],
|
||||
},
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'application': False,
|
||||
}
|
||||
3
addons/havari_license_client/controllers/__init__.py
Normal file
3
addons/havari_license_client/controllers/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
||||
# Pyarmor 9.2.3 (basic), 009742, subscription_packages, 2026-03-02T02:53:42.098901
|
||||
from ..pyarmor_runtime_009742 import __pyarmor__
|
||||
__pyarmor__(__name__, __file__, b'PY009742\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00~\x01\x00\x00\x12\t\x05\x00^\xcc\xa9\xbb\xeb/UmM\x0b\x11<\xebv\x01v\x00\x00\x00\x00\x00\x00\x00\x00\xbf\xa3|\xcdel\x8d\xda&N\xce}j\xfe.\xe2*\xfb\xc0\xbb\x16t\x12\x87\x80\xc2\xff\r\x89\x1e\x826\x85L\xd9\x9a}L\xd4\xf6\xba4\xd7\xa0\x96\xdb\x9d\x12\xac\x05\xa6f\x11H\x99m\xed\xfd\xbah\x08\xee\x9e\x83\xf0\x8e\r\xa9\x98\x901T\xb7Y\xf8\xffi-\x85\x87\t\x16\x01L\xdb\xc1\x9e:\xbc\n\xc4\xdbu\xcf7k\xa1T*29*"Y\xafS\xeaF\x06\xaf;t\xb0\xf93p\x13g\xcd\xfe!X\x97\xa3(D\xf5\x06\xad\xd4G\xa7t\x02\x9f\xfb\xb9\xd0\xb5(\xb6Y,+\x80wki9<\xaeV\x97\xd0a\x9c\xc4\xa1\xe9k\x08\x1b\x18\xfb\xd7\x95\xea\xda\x8eZ\xd6_\xc4k\xd7X\xe3\xd2\x06\x82\xe0zg\x0b\x97\x11\xbak\xfa:\xf0@\x18K\\w\xf5\xc0+sX>w\x83Z\xe8R\xf0d\x12\n,s\xd6\xa0\xf5\xfc\xb5\x9b\x96\xe0\x8f\xbf\x19\xc6\n\x7f\x05S\x17\x81x\xc6\'\x04^\xe6T\xbfu\x8cMlv\x9f\xb1D\x8e\x86\xf9\xd4\xc0,\x92,\xcee$\x9b\xb9\xa4\xe5!\x17\x85\x80,\x15o#u\xed+\xc1/\x1c\x83\x1dv\x9d\xb9`\xed\xcf\xc42OB!\x95P\x82`h\xc5-t\t^\xe3dzC\xb1U\xc4\x9f\xc6M\x1c0z\xe5\xc43\xe2K$\x12]\x06\xf5\xf0&\xab$1t\xda\x07^\xd8\xc8\xe7\x8c}\x82\x86\x94\xf3\xa5\x08\xc6\x06\xe4\xb6Z%Ha\x03\x10\xa1\x85\xb1\x11\xae\xd1ZW\x87\x82\xc2\x8c\xe4\xca\xef\x1c\x0f\xe5\xa4\xc6\x8d\xcf\xe2\x93GSn)\x7fd')
|
||||
3
addons/havari_license_client/controllers/webhook.py
Normal file
3
addons/havari_license_client/controllers/webhook.py
Normal file
File diff suppressed because one or more lines are too long
3
addons/havari_license_client/lib/__init__.py
Normal file
3
addons/havari_license_client/lib/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
||||
# Pyarmor 9.2.3 (basic), 009742, subscription_packages, 2026-03-02T02:53:42.053885
|
||||
from ..pyarmor_runtime_009742 import __pyarmor__
|
||||
__pyarmor__(__name__, __file__, b'PY009742\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xb1\x01\x00\x00\x12\t\x05\x00\xc4\xdf\xe9\x92\x064\x0e5\xb9\xd1\xe0e\x03l\xddt\x00\x00\x00\x00\x00\x00\x00\x00\xe7\x82\xc6\xda\x91(\xeeN\x01+\xdf;\x00\x99J"\xf3D\x9aeNF\x03\xeaoJ\xaa\xec$PP\xbf@\xf1\xd4\xb38\x17\xd5\xdb\x88z5\xd3\x1e\xe7\xdb\xb6\xde\xe7\x03nK\x91\xd6Y\x07y\xbcO\xf6y\xd7H\x15\xe4\x8b\x03NpA\xe8\xdchs\x13\xb4\xbak\x02\x8eNJ\'\xc1W/JAx\x14\xc4m\xad\x061\xd0E\xab\xe6M\x98\xcc\x9d\x15\xe7\x13\x1f\x16T\x02\'\x9d\xd9\xfe\x18<\x86=A;4\xb8#\x1bf\'\xfd\xea\xc6\x8b\xde\x17\xde\x96\tE\xef\xca\xb1\xb2F\x83\x97\xfam@\x9e\x98\x17\xbe5\xfb9"\xc4\xbd\xe8\xfb\x8d\xc9\xbd+\xef\x8b\xc7\xa7\x11dm#\x88\xb9\xe6\x7f\xc3\xea\xc2\x87\x02SWU\x87\x03zh\xd3\xd9\xe3\xfd\xfa\x8e\xa5\xae\xb3~\x92\x8f\x95\xe6\xcc\x9c\xb8\x85\x10\xc3\x93\xe7\x836\x84=\xac\xa1\x18\xa2=\xae\x81\xe4\xaf\xba\xe7ZV\xeblE.\xaa\x82\x94n\xd3\xd0\xf9\xcey\xf8\x9f\x98\xaf\xbd\xc5l>\xd7A\x93%?<;\xd8\x07g`\xec<_\xa1\x9f\x8c\x0b` \xf7\x1c\xb0\xf3\x06\xdb`q\x87\x0e_\xc8\x18\x01\x00f$8\xfc\x854i)^k\x82k\'\xdf?Z\xd3\x14\\\xc7\xff,\x8b\xbe;\xaa\x0ek\n\xa0\xf4Y!9\x1f\xe9R\x7f\x84\xbf\xc0@2S\x9e\xe1\x91\xc9g\\\xd9,\xfd\xd6\xf3m92=\x7f\xe6L\xb8\xb9\xffy\xb4\x9c\x8ba\xf2;Q\x8eV\x95\x15\x9c3\x1dX\xa5\x94d\x0f~\r\xa4\xdc\xa2\x08\xf0a\x13M\xa7\xf6{\x1d\x9e\xcb\x13\x85\xf65u\xcbaM\xef5M\xef\xc00+\x8f\xca\x81\xef\xa9\x8a\xbfc\x0f\xe8Uk\x18su0\xb2\xb48N>v\nG\xc4\xcb\x97\xbf^\x00O\xec/$\x1a')
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user