summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/locale/django.pot610
-rw-r--r--ishtar_common/migrations/0063_auto__add_field_ishtaruser_advanced_shortcut_menu.py464
-rw-r--r--ishtar_common/models.py9
-rw-r--r--ishtar_common/static/js/ishtar.js91
-rw-r--r--ishtar_common/static/media/style.css44
-rw-r--r--ishtar_common/templates/base.html10
-rw-r--r--ishtar_common/templates/ishtar/blocks/advanced_shortcut_menu.html38
-rw-r--r--ishtar_common/templates/ishtar/blocks/shortcut_menu.html5
-rw-r--r--ishtar_common/urls.py8
-rw-r--r--ishtar_common/views.py107
10 files changed, 1080 insertions, 306 deletions
diff --git a/ishtar_common/locale/django.pot b/ishtar_common/locale/django.pot
index 9ec7eb939..8a0b6b389 100644
--- a/ishtar_common/locale/django.pot
+++ b/ishtar_common/locale/django.pot
@@ -155,12 +155,12 @@ msgstr ""
msgid "Add a new item"
msgstr ""
-#: forms.py:245 models.py:1278
+#: forms.py:245 models.py:1307
msgid "Template"
msgstr ""
#: forms_common.py:41 forms_common.py:59 forms_common.py:182
-#: forms_common.py:406 models.py:1344 models.py:2658
+#: forms_common.py:406 models.py:1373 models.py:2722
#: templates/blocks/JQueryAdvancedTown.html:19
#: templates/ishtar/sheet_organization.html:13
msgid "Town"
@@ -176,8 +176,8 @@ msgid ""
"french town Saint-Denis in the Seine-Saint-Denis department.</p>"
msgstr ""
-#: forms_common.py:68 forms_common.py:855 ishtar_menu.py:47 models.py:1512
-#: models.py:2326 models.py:2480 models.py:2538
+#: forms_common.py:68 forms_common.py:855 ishtar_menu.py:47 models.py:1543
+#: models.py:2361 models.py:2530 models.py:2592
#: templates/ishtar/sheet_person.html:4
msgid "Person"
msgstr ""
@@ -189,63 +189,63 @@ msgid ""
msgstr ""
#: forms_common.py:170 forms_common.py:327 forms_common.py:451
-#: ishtar_menu.py:75 models.py:1513 models.py:2231
+#: ishtar_menu.py:75 models.py:1544 models.py:2262
#: templates/ishtar/sheet_organization.html:4
msgid "Organization"
msgstr ""
#: forms_common.py:173 forms_common.py:210 forms_common.py:322
-#: forms_common.py:376 forms_common.py:446 models.py:945 models.py:1277
-#: models.py:1558 models.py:1776 models.py:2225 models.py:2312 models.py:2644
+#: forms_common.py:376 forms_common.py:446 models.py:974 models.py:1306
+#: models.py:1589 models.py:1807 models.py:2256 models.py:2347 models.py:2708
#: templates/ishtar/sheet_organization.html:8
#: templates/ishtar/sheet_organization.html:21
msgid "Name"
msgstr ""
-#: forms_common.py:174 models.py:1499 models.py:1907
+#: forms_common.py:174 models.py:1528 models.py:1938
msgid "Organization type"
msgstr ""
-#: forms_common.py:176 forms_common.py:400 models.py:1339
+#: forms_common.py:176 forms_common.py:400 models.py:1368
#: templates/ishtar/sheet_organization.html:10
msgid "Address"
msgstr ""
-#: forms_common.py:178 forms_common.py:403 models.py:1340
+#: forms_common.py:178 forms_common.py:403 models.py:1369
#: templates/ishtar/sheet_organization.html:11
msgid "Address complement"
msgstr ""
-#: forms_common.py:180 forms_common.py:404 models.py:1342
+#: forms_common.py:180 forms_common.py:404 models.py:1371
#: templates/ishtar/sheet_organization.html:12
msgid "Postal code"
msgstr ""
-#: forms_common.py:183 forms_common.py:407 models.py:1345
+#: forms_common.py:183 forms_common.py:407 models.py:1374
msgid "Country"
msgstr ""
#: forms_common.py:185 forms_common.py:324 forms_common.py:380
-#: forms_common.py:448 forms_common.py:572 models.py:1372
+#: forms_common.py:448 forms_common.py:572 models.py:1401
msgid "Email"
msgstr ""
-#: forms_common.py:186 forms_common.py:383 models.py:1357
+#: forms_common.py:186 forms_common.py:383 models.py:1386
#: templates/ishtar/sheet_organization.html:14
#: templates/ishtar/sheet_person.html:19
#: templates/ishtar/wizard/wizard_person.html:17
msgid "Phone"
msgstr ""
-#: forms_common.py:187 forms_common.py:392 models.py:1369
+#: forms_common.py:187 forms_common.py:392 models.py:1398
#: templates/ishtar/sheet_organization.html:15
#: templates/ishtar/sheet_person.html:37
#: templates/ishtar/wizard/wizard_person.html:35
msgid "Mobile phone"
msgstr ""
-#: forms_common.py:211 forms_common.py:325 forms_common.py:449 models.py:1935
-#: models.py:2227 models.py:2579 templates/sheet_ope.html:85
+#: forms_common.py:211 forms_common.py:325 forms_common.py:449 models.py:1966
+#: models.py:2258 models.py:2643 templates/sheet_ope.html:85
#: templates/sheet_ope.html.py:105 templates/sheet_ope.html:126
#: templates/ishtar/import_list.html:13
#: templates/ishtar/sheet_organization.html:23
@@ -253,7 +253,7 @@ msgstr ""
msgid "Type"
msgstr ""
-#: forms_common.py:220 views.py:137
+#: forms_common.py:220 views.py:139
msgid "Organization search"
msgstr ""
@@ -269,12 +269,12 @@ msgstr ""
msgid "Organization to merge"
msgstr ""
-#: forms_common.py:323 forms_common.py:374 forms_common.py:447 models.py:2310
+#: forms_common.py:323 forms_common.py:374 forms_common.py:447 models.py:2345
#: templates/ishtar/sheet_organization.html:22
msgid "Surname"
msgstr ""
-#: forms_common.py:339 forms_common.py:434 views.py:102
+#: forms_common.py:339 forms_common.py:434 views.py:104
msgid "Person search"
msgstr ""
@@ -287,25 +287,25 @@ msgstr ""
msgid "Identity"
msgstr ""
-#: forms_common.py:371 forms_common.py:773 forms_common.py:822 models.py:1908
-#: models.py:2304 models.py:2306 models.py:2576 templates/sheet_ope.html:104
+#: forms_common.py:371 forms_common.py:773 forms_common.py:822 models.py:1939
+#: models.py:2339 models.py:2341 models.py:2640 templates/sheet_ope.html:104
#: templates/ishtar/blocks/window_tables/documents.html:7
msgid "Title"
msgstr ""
-#: forms_common.py:372 models.py:2308
+#: forms_common.py:372 models.py:2343
msgid "Salutation"
msgstr ""
-#: forms_common.py:378 models.py:2314
+#: forms_common.py:378 models.py:2349
msgid "Raw name"
msgstr ""
-#: forms_common.py:381 models.py:1358
+#: forms_common.py:381 models.py:1387
msgid "Phone description"
msgstr ""
-#: forms_common.py:384 models.py:1360 models.py:1362
+#: forms_common.py:384 models.py:1389 models.py:1391
msgid "Phone description 2"
msgstr ""
@@ -313,11 +313,11 @@ msgstr ""
msgid "Phone 2"
msgstr ""
-#: forms_common.py:388 models.py:1366
+#: forms_common.py:388 models.py:1395
msgid "Phone description 3"
msgstr ""
-#: forms_common.py:390 models.py:1364
+#: forms_common.py:390 models.py:1393
msgid "Phone 3"
msgstr ""
@@ -325,23 +325,23 @@ msgstr ""
msgid "Current organization"
msgstr ""
-#: forms_common.py:409 models.py:1347
+#: forms_common.py:409 models.py:1376
msgid "Other address: address"
msgstr ""
-#: forms_common.py:412 models.py:1350
+#: forms_common.py:412 models.py:1379
msgid "Other address: address complement"
msgstr ""
-#: forms_common.py:414 models.py:1351
+#: forms_common.py:414 models.py:1380
msgid "Other address: postal code"
msgstr ""
-#: forms_common.py:416 models.py:1353
+#: forms_common.py:416 models.py:1382
msgid "Other address: town"
msgstr ""
-#: forms_common.py:418 models.py:1355
+#: forms_common.py:418 models.py:1384
msgid "Other address: country"
msgstr ""
@@ -357,7 +357,7 @@ msgstr ""
msgid "Account search"
msgstr ""
-#: forms_common.py:510 forms_common.py:550 forms_common.py:554 models.py:2279
+#: forms_common.py:510 forms_common.py:550 forms_common.py:554 models.py:2310
msgid "Person type"
msgstr ""
@@ -389,7 +389,7 @@ msgstr ""
msgid "Send the new password by email?"
msgstr ""
-#: forms_common.py:628 forms_common.py:641 models.py:2659
+#: forms_common.py:628 forms_common.py:641 models.py:2723
msgid "Towns"
msgstr ""
@@ -405,7 +405,7 @@ msgstr ""
msgid "Documentation informations"
msgstr ""
-#: forms_common.py:775 forms_common.py:823 models.py:1909 models.py:2559
+#: forms_common.py:775 forms_common.py:823 models.py:1940 models.py:2617
msgid "Source type"
msgstr ""
@@ -417,37 +417,37 @@ msgstr ""
msgid "Internal reference"
msgstr ""
-#: forms_common.py:783 models.py:2590
+#: forms_common.py:783 models.py:2654
msgid "Numerical ressource (web address)"
msgstr ""
-#: forms_common.py:784 models.py:2592
+#: forms_common.py:784 models.py:2656
msgid "Receipt date"
msgstr ""
-#: forms_common.py:786 models.py:2062 models.py:2594
+#: forms_common.py:786 models.py:2093 models.py:2658
msgid "Creation date"
msgstr ""
-#: forms_common.py:789 models.py:2597
+#: forms_common.py:789 models.py:2661
msgid "Receipt date in documentation"
msgstr ""
-#: forms_common.py:791 forms_common.py:827 models.py:289 models.py:548
-#: models.py:1803 models.py:2318 models.py:2604
+#: forms_common.py:791 forms_common.py:827 models.py:317 models.py:577
+#: models.py:1834 models.py:2353 models.py:2668
msgid "Comment"
msgstr ""
-#: forms_common.py:793 forms_common.py:826 models.py:947 models.py:1562
-#: models.py:1735 models.py:1777 models.py:2603 templates/sheet_ope.html:128
+#: forms_common.py:793 forms_common.py:826 models.py:976 models.py:1593
+#: models.py:1766 models.py:1808 models.py:2667 templates/sheet_ope.html:128
msgid "Description"
msgstr ""
-#: forms_common.py:796 models.py:2605
+#: forms_common.py:796 models.py:2669
msgid "Additional information"
msgstr ""
-#: forms_common.py:798 forms_common.py:830 models.py:2607
+#: forms_common.py:798 forms_common.py:830 models.py:2671
msgid "Has a duplicate"
msgstr ""
@@ -462,7 +462,7 @@ msgid ""
"p>"
msgstr ""
-#: forms_common.py:819 forms_common.py:848 forms_common.py:882 models.py:2543
+#: forms_common.py:819 forms_common.py:848 forms_common.py:882 models.py:2597
#: templates/ishtar/wizard/wizard_person_deletion.html:124
msgid "Author"
msgstr ""
@@ -475,7 +475,7 @@ msgstr ""
msgid "Would you like to delete this documentation?"
msgstr ""
-#: forms_common.py:856 models.py:1910 models.py:2533 models.py:2540
+#: forms_common.py:856 models.py:1941 models.py:2585 models.py:2594
msgid "Author type"
msgstr ""
@@ -487,7 +487,7 @@ msgstr ""
msgid "There are identical authors."
msgstr ""
-#: forms_common.py:893 models.py:2544 models.py:2586
+#: forms_common.py:893 models.py:2598 models.py:2650
#: templates/sheet_ope.html:106
#: templates/ishtar/blocks/window_tables/documents.html:9
msgid "Authors"
@@ -505,7 +505,7 @@ msgstr ""
msgid "Deletion"
msgstr ""
-#: ishtar_menu.py:39 models.py:1073 views.py:1377
+#: ishtar_menu.py:39 models.py:1102 views.py:1450
msgid "Global variables"
msgstr ""
@@ -533,20 +533,20 @@ msgstr ""
msgid "Manual merge"
msgstr ""
-#: ishtar_menu.py:70 ishtar_menu.py:101 models.py:2099 widgets.py:110
+#: ishtar_menu.py:70 ishtar_menu.py:101 models.py:2130 widgets.py:110
#: templates/ishtar/form_delete.html:11
msgid "Delete"
msgstr ""
-#: ishtar_menu.py:109 models.py:2073
+#: ishtar_menu.py:109 models.py:2104
msgid "Imports"
msgstr ""
-#: ishtar_menu.py:112 views.py:1385
+#: ishtar_menu.py:112 views.py:1458
msgid "New import"
msgstr ""
-#: ishtar_menu.py:116 views.py:1399
+#: ishtar_menu.py:116 views.py:1472
msgid "Current imports"
msgstr ""
@@ -566,200 +566,200 @@ msgstr ""
msgid "This item already exists."
msgstr ""
-#: models.py:285 models.py:547 models.py:1312 models.py:1324
+#: models.py:313 models.py:576 models.py:1341 models.py:1353
msgid "Label"
msgstr ""
-#: models.py:287
+#: models.py:315
msgid "Textual ID"
msgstr ""
-#: models.py:290 models.py:550 models.py:1281
+#: models.py:318 models.py:579 models.py:1310
msgid "Available"
msgstr ""
-#: models.py:569 models.py:1849
+#: models.py:598 models.py:1880
msgid "Key"
msgstr ""
-#: models.py:575
+#: models.py:604
msgid "Specific key to an import"
msgstr ""
-#: models.py:666
+#: models.py:695
msgid "Last editor"
msgstr ""
-#: models.py:669
+#: models.py:698
msgid "Creator"
msgstr ""
-#: models.py:809 models.py:2670
+#: models.py:838 models.py:2734
msgid "Order"
msgstr ""
-#: models.py:810
+#: models.py:839
msgid "Symmetrical"
msgstr ""
-#: models.py:811
+#: models.py:840
msgid "Tiny label"
msgstr ""
-#: models.py:825
+#: models.py:854
msgid "Cannot have symmetrical and an inverse_relation"
msgstr ""
-#: models.py:939
+#: models.py:968
msgid "Euro"
msgstr ""
-#: models.py:940
+#: models.py:969
msgid "US dollar"
msgstr ""
-#: models.py:946 models.py:1560
+#: models.py:975 models.py:1591
msgid "Slug"
msgstr ""
-#: models.py:948
+#: models.py:977
msgid "Files module"
msgstr ""
-#: models.py:949
+#: models.py:978
msgid "Context records module"
msgstr ""
-#: models.py:951
+#: models.py:980
msgid "Finds module"
msgstr ""
-#: models.py:952
+#: models.py:981
msgid "Need context records module"
msgstr ""
-#: models.py:954
+#: models.py:983
msgid "Warehouses module"
msgstr ""
-#: models.py:955
+#: models.py:984
msgid "Need finds module"
msgstr ""
-#: models.py:957
+#: models.py:986
msgid "Home page"
msgstr ""
-#: models.py:958
+#: models.py:987
#, python-brace-format
msgid ""
"Homepage of Ishtar - if not defined a default homepage will appear. Use the "
"markdown syntax. {random_image} can be used to display a random image."
msgstr ""
-#: models.py:962
+#: models.py:991
msgid "File external id"
msgstr ""
-#: models.py:964
+#: models.py:993
msgid ""
"Formula to manage file external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:969
+#: models.py:998
msgid "Parcel external id"
msgstr ""
-#: models.py:972
+#: models.py:1001
msgid ""
"Formula to manage parcel external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:977
+#: models.py:1006
msgid "Context record external id"
msgstr ""
-#: models.py:979
+#: models.py:1008
msgid ""
"Formula to manage context record external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:984
+#: models.py:1013
msgid "Base find external id"
msgstr ""
-#: models.py:986
+#: models.py:1015
msgid ""
"Formula to manage base find external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:991
+#: models.py:1020
msgid "Find external id"
msgstr ""
-#: models.py:993
+#: models.py:1022
msgid ""
"Formula to manage find external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:998
+#: models.py:1027
msgid "Raw name for person"
msgstr ""
-#: models.py:1000
+#: models.py:1029
msgid ""
"Formula to manage person raw_name. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1004
+#: models.py:1033
msgid "Current active"
msgstr ""
-#: models.py:1005
+#: models.py:1034
msgid "Currency"
msgstr ""
-#: models.py:1009
+#: models.py:1038
msgid "Ishtar site profile"
msgstr ""
-#: models.py:1010
+#: models.py:1039
msgid "Ishtar site profiles"
msgstr ""
-#: models.py:1066
+#: models.py:1095
msgid "Variable name"
msgstr ""
-#: models.py:1067
+#: models.py:1096
msgid "Description of the variable"
msgstr ""
-#: models.py:1069 models.py:1850
+#: models.py:1098 models.py:1881
msgid "Value"
msgstr ""
-#: models.py:1072
+#: models.py:1101
msgid "Global variable"
msgstr ""
-#: models.py:1182 models.py:1212
+#: models.py:1211 models.py:1241
msgid "Total"
msgstr ""
-#: models.py:1189 models.py:1313 models.py:1325
+#: models.py:1218 models.py:1342 models.py:1354
#: templates/ishtar/sheet_person.html:22
#: templates/ishtar/dashboards/dashboard_main_detail.html:141
#: templates/ishtar/dashboards/dashboard_main_detail_users.html:26
@@ -767,686 +767,690 @@ msgstr ""
msgid "Number"
msgstr ""
-#: models.py:1276
+#: models.py:1305
msgid "Administrative Act"
msgstr ""
-#: models.py:1280
+#: models.py:1309
msgid "Associated object"
msgstr ""
-#: models.py:1284
+#: models.py:1313
msgid "Document template"
msgstr ""
-#: models.py:1285
+#: models.py:1314
msgid "Document templates"
msgstr ""
-#: models.py:1316 models.py:1326 models.py:2057
+#: models.py:1345 models.py:1355 models.py:2088
msgid "State"
msgstr ""
-#: models.py:1330 templates/blocks/JQueryAdvancedTown.html:12
+#: models.py:1359 templates/blocks/JQueryAdvancedTown.html:12
msgid "Department"
msgstr ""
-#: models.py:1331
+#: models.py:1360
msgid "Departments"
msgstr ""
-#: models.py:1368
+#: models.py:1397
msgid "Raw phone"
msgstr ""
-#: models.py:1374
+#: models.py:1403
msgid "Alternative address is prefered"
msgstr ""
-#: models.py:1413
+#: models.py:1442
msgid "Tel: "
msgstr ""
-#: models.py:1417
+#: models.py:1446
msgid "Mobile: "
msgstr ""
-#: models.py:1421
+#: models.py:1450
msgid "Email: "
msgstr ""
-#: models.py:1426
+#: models.py:1455
msgid "Merge key"
msgstr ""
-#: models.py:1500
+#: models.py:1529
msgid "Organization types"
msgstr ""
-#: models.py:1514 views.py:211
+#: models.py:1545 views.py:234
msgid "Operation"
msgstr ""
-#: models.py:1516
+#: models.py:1547
msgid "Archaeological site"
msgstr ""
-#: models.py:1517
+#: models.py:1548
msgid "Parcels"
msgstr ""
-#: models.py:1519
+#: models.py:1550
msgid "Operation source"
msgstr ""
-#: models.py:1522 views.py:1192 views.py:1243
+#: models.py:1553 views.py:1265 views.py:1316
msgid "Archaeological files"
msgstr ""
-#: models.py:1524 views.py:1195 views.py:1251
+#: models.py:1555 views.py:1268 views.py:1324
msgid "Context records"
msgstr ""
-#: models.py:1526
+#: models.py:1557
msgid "Context record relations"
msgstr ""
-#: models.py:1528 views.py:1197 views.py:1254
+#: models.py:1559 views.py:1270 views.py:1327
msgid "Finds"
msgstr ""
-#: models.py:1564 templates/ishtar/dashboards/dashboard_main.html:25
+#: models.py:1595 templates/ishtar/dashboards/dashboard_main.html:25
msgid "Users"
msgstr ""
-#: models.py:1566
+#: models.py:1597
msgid "Associated model"
msgstr ""
-#: models.py:1569
+#: models.py:1600
msgid "Is template"
msgstr ""
-#: models.py:1570
+#: models.py:1601
msgid "Unicity keys (separator \";\")"
msgstr ""
-#: models.py:1574
+#: models.py:1605
msgid "Importer - Type"
msgstr ""
-#: models.py:1575
+#: models.py:1606
msgid "Importer - Types"
msgstr ""
-#: models.py:1665
+#: models.py:1696
msgid "Importer - Default"
msgstr ""
-#: models.py:1666
+#: models.py:1697
msgid "Importer - Defaults"
msgstr ""
-#: models.py:1701
+#: models.py:1732
msgid "Importer - Default value"
msgstr ""
-#: models.py:1702
+#: models.py:1733
msgid "Importer - Default values"
msgstr ""
-#: models.py:1734
+#: models.py:1765
msgid "Column number"
msgstr ""
-#: models.py:1737
+#: models.py:1768
msgid "Required"
msgstr ""
-#: models.py:1740
+#: models.py:1771
msgid "Importer - Column"
msgstr ""
-#: models.py:1741
+#: models.py:1772
msgid "Importer - Columns"
msgstr ""
-#: models.py:1761
+#: models.py:1792
msgid "Field name"
msgstr ""
-#: models.py:1763 models.py:1797
+#: models.py:1794 models.py:1828
msgid "Force creation of new items"
msgstr ""
-#: models.py:1765 models.py:1799
+#: models.py:1796 models.py:1830
msgid "Concatenate with existing"
msgstr ""
-#: models.py:1767 models.py:1801
+#: models.py:1798 models.py:1832
msgid "Concatenate character"
msgstr ""
-#: models.py:1771
+#: models.py:1802
msgid "Importer - Duplicate field"
msgstr ""
-#: models.py:1772
+#: models.py:1803
msgid "Importer - Duplicate fields"
msgstr ""
-#: models.py:1779
+#: models.py:1810
msgid "Regular expression"
msgstr ""
-#: models.py:1782
+#: models.py:1813
msgid "Importer - Regular expression"
msgstr ""
-#: models.py:1783
+#: models.py:1814
msgid "Importer - Regular expressions"
msgstr ""
-#: models.py:1806
+#: models.py:1837
msgid "Importer - Target"
msgstr ""
-#: models.py:1807
+#: models.py:1838
msgid "Importer - Targets"
msgstr ""
-#: models.py:1831 views.py:476
+#: models.py:1862 views.py:518
msgid "True"
msgstr ""
-#: models.py:1832 views.py:478
+#: models.py:1863 views.py:520
msgid "False"
msgstr ""
-#: models.py:1851
+#: models.py:1882
msgid "Is set"
msgstr ""
-#: models.py:1858
+#: models.py:1889
msgid "Importer - Target key"
msgstr ""
-#: models.py:1859
+#: models.py:1890
msgid "Importer - Targets keys"
msgstr ""
-#: models.py:1911 models.py:2571 models.py:2582
+#: models.py:1942 models.py:2633 models.py:2646
msgid "Format"
msgstr ""
-#: models.py:1912 models.py:2674
+#: models.py:1943 models.py:2738
msgid "Operation type"
msgstr ""
-#: models.py:1913
+#: models.py:1944
msgid "Period"
msgstr ""
-#: models.py:1914
+#: models.py:1945
msgid "Report state"
msgstr ""
-#: models.py:1915
+#: models.py:1946
msgid "Unit"
msgstr ""
-#: models.py:1916
+#: models.py:1947
msgid "Material"
msgstr ""
-#: models.py:1918
+#: models.py:1949
msgid "Conservatory state"
msgstr ""
-#: models.py:1919
+#: models.py:1950
msgid "Preservation type"
msgstr ""
-#: models.py:1920
+#: models.py:1951
msgid "Object type"
msgstr ""
-#: models.py:1922
+#: models.py:1953
msgid "Identification type"
msgstr ""
-#: models.py:1924
+#: models.py:1955
msgid "Context record relation type"
msgstr ""
-#: models.py:1925 models.py:2565
+#: models.py:1956 models.py:2625
msgid "Support type"
msgstr ""
-#: models.py:1931
+#: models.py:1962
msgid "Integer"
msgstr ""
-#: models.py:1932
+#: models.py:1963
msgid "Float"
msgstr ""
-#: models.py:1933
+#: models.py:1964
msgid "String"
msgstr ""
-#: models.py:1934 templates/sheet_ope.html:86
+#: models.py:1965 templates/sheet_ope.html:86
msgid "Date"
msgstr ""
-#: models.py:1936 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
+#: models.py:1967 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
#: templates/ishtar/dashboards/dashboard_main_detail.html:126
msgid "Year"
msgstr ""
-#: models.py:1937
+#: models.py:1968
msgid "String to boolean"
msgstr ""
-#: models.py:1938
+#: models.py:1969
msgctxt "filesystem"
msgid "File"
msgstr ""
-#: models.py:1939
+#: models.py:1970
msgid "Unknow type"
msgstr ""
-#: models.py:1955
+#: models.py:1986
msgid "4 digit year. e.g.: \"2015\""
msgstr ""
-#: models.py:1956
+#: models.py:1987
msgid "4 digit year/month/day. e.g.: \"2015/02/04\""
msgstr ""
-#: models.py:1957
+#: models.py:1988
msgid "Day/month/4 digit year. e.g.: \"04/02/2015\""
msgstr ""
-#: models.py:1967
+#: models.py:1998
msgid "Options"
msgstr ""
-#: models.py:1969
+#: models.py:2000
msgid "Split character(s)"
msgstr ""
-#: models.py:1973
+#: models.py:2004
msgid "Importer - Formater type"
msgstr ""
-#: models.py:1974
+#: models.py:2005
msgid "Importer - Formater types"
msgstr ""
-#: models.py:2021 templates/ishtar/dashboards/dashboard_main_detail.html:63
+#: models.py:2052 templates/ishtar/dashboards/dashboard_main_detail.html:63
msgid "Created"
msgstr ""
-#: models.py:2022
+#: models.py:2053
msgid "Analyse in progress"
msgstr ""
-#: models.py:2023
+#: models.py:2054
msgid "Analysed"
msgstr ""
-#: models.py:2024
+#: models.py:2055
msgid "Import pending"
msgstr ""
-#: models.py:2025
+#: models.py:2056
msgid "Import in progress"
msgstr ""
-#: models.py:2026
+#: models.py:2057
msgid "Finished with errors"
msgstr ""
-#: models.py:2027
+#: models.py:2058
msgid "Finished"
msgstr ""
-#: models.py:2028
+#: models.py:2059
msgid "Archived"
msgstr ""
-#: models.py:2040
+#: models.py:2071
msgid "Imported file"
msgstr ""
-#: models.py:2043
+#: models.py:2074
msgid "Associated images (zip file)"
msgstr ""
-#: models.py:2045
+#: models.py:2076
msgid "Encoding"
msgstr ""
-#: models.py:2047
+#: models.py:2078
msgid "Skip lines"
msgstr ""
-#: models.py:2048 templates/ishtar/import_list.html:47
+#: models.py:2079 templates/ishtar/import_list.html:47
msgid "Error file"
msgstr ""
-#: models.py:2051
+#: models.py:2082
msgid "Result file"
msgstr ""
-#: models.py:2054 templates/ishtar/import_list.html:53
+#: models.py:2085 templates/ishtar/import_list.html:53
msgid "Match file"
msgstr ""
-#: models.py:2060
+#: models.py:2091
msgid "Conservative import"
msgstr ""
-#: models.py:2065
+#: models.py:2096
msgid "End date"
msgstr ""
-#: models.py:2067
+#: models.py:2098
msgid "Remaining seconds"
msgstr ""
-#: models.py:2072
+#: models.py:2103
msgid "Import"
msgstr ""
-#: models.py:2089
+#: models.py:2120
msgid "Analyse"
msgstr ""
-#: models.py:2091 models.py:2094
+#: models.py:2122 models.py:2125
msgid "Re-analyse"
msgstr ""
-#: models.py:2092
+#: models.py:2123
msgid "Launch import"
msgstr ""
-#: models.py:2095
+#: models.py:2126
msgid "Re-import"
msgstr ""
-#: models.py:2096
+#: models.py:2127
msgid "Archive"
msgstr ""
-#: models.py:2098
+#: models.py:2129
msgid "Unarchive"
msgstr ""
-#: models.py:2232
+#: models.py:2263
msgid "Organizations"
msgstr ""
-#: models.py:2234
+#: models.py:2265
msgid "Can view all Organizations"
msgstr ""
-#: models.py:2235
+#: models.py:2266
msgid "Can view own Organization"
msgstr ""
-#: models.py:2236
+#: models.py:2267
msgid "Can add own Organization"
msgstr ""
-#: models.py:2238
+#: models.py:2269
msgid "Can change own Organization"
msgstr ""
-#: models.py:2240
+#: models.py:2271
msgid "Can delete own Organization"
msgstr ""
-#: models.py:2275
+#: models.py:2306
msgid "Groups"
msgstr ""
-#: models.py:2280
+#: models.py:2311
msgid "Person types"
msgstr ""
-#: models.py:2286
+#: models.py:2319
msgid "Title type"
msgstr ""
-#: models.py:2287
+#: models.py:2320
msgid "Title types"
msgstr ""
-#: models.py:2294
+#: models.py:2329
msgid "Mr"
msgstr ""
-#: models.py:2295
+#: models.py:2330
msgid "Miss"
msgstr ""
-#: models.py:2296
+#: models.py:2331
msgid "Mr and Mrs"
msgstr ""
-#: models.py:2297
+#: models.py:2332
msgid "Mrs"
msgstr ""
-#: models.py:2298
+#: models.py:2333
msgid "Doctor"
msgstr ""
-#: models.py:2316
+#: models.py:2351
msgid "Contact type"
msgstr ""
-#: models.py:2319 models.py:2368
+#: models.py:2354 models.py:2418
msgid "Types"
msgstr ""
-#: models.py:2322
+#: models.py:2357
msgid "Is attached to"
msgstr ""
-#: models.py:2327
+#: models.py:2362
msgid "Persons"
msgstr ""
-#: models.py:2329
+#: models.py:2364
msgid "Can view all Persons"
msgstr ""
-#: models.py:2330
+#: models.py:2365
msgid "Can view own Person"
msgstr ""
-#: models.py:2331
+#: models.py:2366
msgid "Can add own Person"
msgstr ""
-#: models.py:2332
+#: models.py:2367
msgid "Can change own Person"
msgstr ""
-#: models.py:2333
+#: models.py:2368
msgid "Can delete own Person"
msgstr ""
-#: models.py:2484
+#: models.py:2533
+msgid "Advanced shortcut menu"
+msgstr ""
+
+#: models.py:2536
msgid "Ishtar user"
msgstr ""
-#: models.py:2485
+#: models.py:2537
msgid "Ishtar users"
msgstr ""
-#: models.py:2528
+#: models.py:2580
msgid "To modify the password use the form in Auth > User"
msgstr ""
-#: models.py:2534
+#: models.py:2586
msgid "Author types"
msgstr ""
-#: models.py:2560
+#: models.py:2618
msgid "Source types"
msgstr ""
-#: models.py:2566
+#: models.py:2626
msgid "Support types"
msgstr ""
-#: models.py:2572
+#: models.py:2634
msgid "Formats"
msgstr ""
-#: models.py:2577
+#: models.py:2641
msgid "External ID"
msgstr ""
-#: models.py:2580
+#: models.py:2644
msgid "Support"
msgstr ""
-#: models.py:2584
+#: models.py:2648
msgid "Scale"
msgstr ""
-#: models.py:2598
+#: models.py:2662
msgid "Item number"
msgstr ""
-#: models.py:2599
+#: models.py:2663
msgid "Ref."
msgstr ""
-#: models.py:2602
+#: models.py:2666
msgid "Internal ref."
msgstr ""
-#: models.py:2645
+#: models.py:2709
msgid "Surface (m2)"
msgstr ""
-#: models.py:2646 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
+#: models.py:2710 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
msgid "Localisation"
msgstr ""
-#: models.py:2671
+#: models.py:2735
msgid "Is preventive"
msgstr ""
-#: models.py:2675
+#: models.py:2739
msgid "Operation types"
msgstr ""
-#: models.py:2704
+#: models.py:2768
msgid "Preventive"
msgstr ""
-#: models.py:2705
+#: models.py:2769
msgid "Research"
msgstr ""
-#: utils.py:56
+#: utils.py:64
msgid " (...)"
msgstr ""
-#: utils.py:89
+#: utils.py:97
msgid "Load another random image?"
msgstr ""
-#: views.py:109
+#: views.py:111
msgid "New person"
msgstr ""
-#: views.py:117
+#: views.py:119
msgid "Person modification"
msgstr ""
-#: views.py:132
+#: views.py:134
msgid "Person deletion"
msgstr ""
-#: views.py:143
+#: views.py:145
msgid "New organization"
msgstr ""
-#: views.py:150
+#: views.py:152
msgid "Organization modification"
msgstr ""
-#: views.py:166
+#: views.py:168
msgid "Organization deletion"
msgstr ""
-#: views.py:173
+#: views.py:175
msgid "Account management"
msgstr ""
-#: views.py:179
+#: views.py:181
msgid "Account deletion"
msgstr ""
-#: views.py:210
+#: views.py:233
msgid "Archaeological file"
msgstr ""
-#: views.py:213
+#: views.py:236
msgid "Context record"
msgstr ""
-#: views.py:215
+#: views.py:238
msgid "Find"
msgstr ""
-#: views.py:1105 views.py:1174
+#: views.py:1178 views.py:1247
msgid "Operation not permitted."
msgstr ""
-#: views.py:1107
+#: views.py:1180
#, python-format
msgid "New %s"
msgstr ""
-#: views.py:1193 views.py:1247
+#: views.py:1266 views.py:1320
msgid "Operations"
msgstr ""
-#: views.py:1446 templates/ishtar/import_list.html:43
+#: views.py:1519 templates/ishtar/import_list.html:43
msgid "Link unmatched items"
msgstr ""
-#: views.py:1461
+#: views.py:1534
msgid "Delete import"
msgstr ""
-#: views.py:1500
+#: views.py:1573
msgid "Merge persons"
msgstr ""
-#: views.py:1524
+#: views.py:1597
msgid "Select the main person"
msgstr ""
-#: views.py:1533
+#: views.py:1606
msgid "Merge organization"
msgstr ""
-#: views.py:1543
+#: views.py:1616
msgid "Select the main organization"
msgstr ""
-#: views.py:1583 views.py:1599
+#: views.py:1656 views.py:1672
msgid "Corporation manager"
msgstr ""
@@ -1514,28 +1518,36 @@ msgid "The %(app_name)s team"
msgstr ""
#: templates/base.html:41
-msgid "Logged in"
+msgid "Searches in the shortcut menu deals with all items."
msgstr ""
#: templates/base.html:42
+msgid "Searches in the shortcut menu deals with only your items."
+msgstr ""
+
+#: templates/base.html:49
+msgid "Logged in"
+msgstr ""
+
+#: templates/base.html:50
msgid "Log out"
msgstr ""
-#: templates/base.html:43
+#: templates/base.html:51
msgid "Change password"
msgstr ""
-#: templates/base.html:45 templates/registration/activate.html:10
+#: templates/base.html:53 templates/registration/activate.html:10
#: templates/registration/login.html:8 templates/registration/login.html:10
#: templates/registration/password_reset_complete.html:8
msgid "Log in"
msgstr ""
-#: templates/base.html:51
+#: templates/base.html:59
msgid "Lang"
msgstr ""
-#: templates/base.html:51 templates/base.html.py:75 templates/welcome.html:8
+#: templates/base.html:59 templates/base.html.py:83 templates/welcome.html:8
#: templates/welcome.html.py:9 templates/welcome.html:10
#: templates/welcome.html.py:11 templates/ishtar/manage_basket.html:4
#: templates/ishtar/blocks/window_field.html:1
@@ -1545,23 +1557,23 @@ msgstr ""
msgid ":"
msgstr ""
-#: templates/base.html:73
+#: templates/base.html:81
msgid "Current items"
msgstr ""
-#: templates/base.html:107
+#: templates/base.html:115
msgid "Processing..."
msgstr ""
-#: templates/base.html:108
+#: templates/base.html:116
msgid "This can be long."
msgstr ""
-#: templates/base.html:109
+#: templates/base.html:117
msgid "Time to take a coffee?"
msgstr ""
-#: templates/base.html:110
+#: templates/base.html:118
msgid "Time to take another coffee?"
msgstr ""
@@ -1833,7 +1845,7 @@ msgstr ""
msgid "where the magic happens."
msgstr ""
-#: templates/window.html:38 templates/blocks/JQueryJqGrid.html:25
+#: templates/window.html:40 templates/blocks/JQueryJqGrid.html:25
#: templates/ishtar/manage_basket.html:9
msgid "Add"
msgstr ""
@@ -2112,14 +2124,50 @@ msgstr ""
msgid "Documents associated to finds"
msgstr ""
-#: templates/ishtar/blocks/shortcut_menu.html:6
+#: templates/ishtar/blocks/advanced_shortcut_menu.html:7
+#: templates/ishtar/blocks/shortcut_menu.html:7
+msgid ""
+"Simple menu limited to your own items. Be careful only the last 100 items "
+"are displayed."
+msgstr ""
+
+#: templates/ishtar/blocks/advanced_shortcut_menu.html:7
+#: templates/ishtar/blocks/shortcut_menu.html:7
+msgid "simple"
+msgstr ""
+
+#: templates/ishtar/blocks/advanced_shortcut_menu.html:8
+#: templates/ishtar/blocks/shortcut_menu.html:8
+msgid "Advanced menu."
+msgstr ""
+
+#: templates/ishtar/blocks/advanced_shortcut_menu.html:8
+#: templates/ishtar/blocks/shortcut_menu.html:8
+msgid "advanced"
+msgstr ""
+
+#: templates/ishtar/blocks/advanced_shortcut_menu.html:11
+#: templates/ishtar/blocks/shortcut_menu.html:10
msgid ""
"Pin an item in order to constrain default searches with this item. By "
"default only your items are displayed. New created and modified items are "
"auto-pin."
msgstr ""
-#: templates/ishtar/blocks/shortcut_menu.html:18
+#: templates/ishtar/blocks/advanced_shortcut_menu.html:13
+msgid "Search within my items"
+msgstr ""
+
+#: templates/ishtar/blocks/advanced_shortcut_menu.html:14
+msgid "Search within all items"
+msgstr ""
+
+#: templates/ishtar/blocks/advanced_shortcut_menu.html:17
+msgid "Refresh menu"
+msgstr ""
+
+#: templates/ishtar/blocks/advanced_shortcut_menu.html:28
+#: templates/ishtar/blocks/shortcut_menu.html:22
msgid "Unpin"
msgstr ""
diff --git a/ishtar_common/migrations/0063_auto__add_field_ishtaruser_advanced_shortcut_menu.py b/ishtar_common/migrations/0063_auto__add_field_ishtaruser_advanced_shortcut_menu.py
new file mode 100644
index 000000000..19a076913
--- /dev/null
+++ b/ishtar_common/migrations/0063_auto__add_field_ishtaruser_advanced_shortcut_menu.py
@@ -0,0 +1,464 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Adding field 'IshtarUser.advanced_shortcut_menu'
+ db.add_column('ishtar_common_ishtaruser', 'advanced_shortcut_menu',
+ self.gf('django.db.models.fields.BooleanField')(default=False),
+ keep_default=False)
+
+
+ def backwards(self, orm):
+ # Deleting field 'IshtarUser.advanced_shortcut_menu'
+ db.delete_column('ishtar_common_ishtaruser', 'advanced_shortcut_menu')
+
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'ishtar_common.arrondissement': {
+ 'Meta': {'object_name': 'Arrondissement'},
+ 'department': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Department']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '30'})
+ },
+ 'ishtar_common.author': {
+ 'Meta': {'object_name': 'Author'},
+ 'author_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.AuthorType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'person': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'author'", 'to': "orm['ishtar_common.Person']"})
+ },
+ 'ishtar_common.authortype': {
+ 'Meta': {'object_name': 'AuthorType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.canton': {
+ 'Meta': {'object_name': 'Canton'},
+ 'arrondissement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Arrondissement']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '30'})
+ },
+ 'ishtar_common.department': {
+ 'Meta': {'ordering': "['number']", 'object_name': 'Department'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
+ 'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3'}),
+ 'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.State']", 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.documenttemplate': {
+ 'Meta': {'ordering': "['associated_object_name', 'name']", 'object_name': 'DocumentTemplate'},
+ 'associated_object_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'template': ('django.db.models.fields.files.FileField', [], {'max_length': '100'})
+ },
+ 'ishtar_common.format': {
+ 'Meta': {'object_name': 'Format'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.formatertype': {
+ 'Meta': {'ordering': "('formater_type', 'options')", 'unique_together': "(('formater_type', 'options', 'many_split'),)", 'object_name': 'FormaterType'},
+ 'formater_type': ('django.db.models.fields.CharField', [], {'max_length': '20'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'many_split': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'options': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.globalvar': {
+ 'Meta': {'ordering': "['slug']", 'object_name': 'GlobalVar'},
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
+ 'value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.historicalorganization': {
+ 'Meta': {'ordering': "('-history_date', '-history_id')", 'object_name': 'HistoricalOrganization'},
+ 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_is_prefered': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'alt_country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'alt_postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'alt_town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}),
+ 'archived': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+ 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'history_creator_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'history_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'history_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'history_modifier_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'history_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'history_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
+ 'id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'blank': 'True'}),
+ 'merge_key': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
+ 'organization_type_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone2': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone3': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc2': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc3': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'raw_phone': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.historicalperson': {
+ 'Meta': {'ordering': "('-history_date', '-history_id')", 'object_name': 'HistoricalPerson'},
+ 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_is_prefered': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'alt_country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'alt_postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'alt_town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}),
+ 'archived': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+ 'attached_to_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'contact_type': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'history_creator_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'history_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'history_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'history_modifier_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'history_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'history_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
+ 'id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'blank': 'True'}),
+ 'merge_key': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'old_title': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone2': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone3': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc2': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc3': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'raw_name': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'raw_phone': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'salutation': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'surname': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'title_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.import': {
+ 'Meta': {'object_name': 'Import'},
+ 'conservative_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
+ 'encoding': ('django.db.models.fields.CharField', [], {'default': "'utf-8'", 'max_length': '15'}),
+ 'end_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'error_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'imported_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+ 'imported_images': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.ImporterType']"}),
+ 'match_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'result_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'seconds_remaining': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'skip_lines': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'state': ('django.db.models.fields.CharField', [], {'default': "'C'", 'max_length': '2'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.IshtarUser']"})
+ },
+ 'ishtar_common.importercolumn': {
+ 'Meta': {'ordering': "('importer_type', 'col_number')", 'unique_together': "(('importer_type', 'col_number'),)", 'object_name': 'ImporterColumn'},
+ 'col_number': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'columns'", 'to': "orm['ishtar_common.ImporterType']"}),
+ 'regexp_pre_filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Regexp']", 'null': 'True', 'blank': 'True'}),
+ 'required': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'ishtar_common.importerdefault': {
+ 'Meta': {'object_name': 'ImporterDefault'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'defaults'", 'to': "orm['ishtar_common.ImporterType']"}),
+ 'target': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ },
+ 'ishtar_common.importerdefaultvalues': {
+ 'Meta': {'object_name': 'ImporterDefaultValues'},
+ 'default_target': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'default_values'", 'to': "orm['ishtar_common.ImporterDefault']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'target': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
+ 'value': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ },
+ 'ishtar_common.importerduplicatefield': {
+ 'Meta': {'object_name': 'ImporterDuplicateField'},
+ 'column': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'duplicate_fields'", 'to': "orm['ishtar_common.ImporterColumn']"}),
+ 'concat': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'concat_str': ('django.db.models.fields.CharField', [], {'max_length': '5', 'null': 'True', 'blank': 'True'}),
+ 'field_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'force_new': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'ishtar_common.importertype': {
+ 'Meta': {'object_name': 'ImporterType'},
+ 'associated_models': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
+ 'description': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_template': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '100', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
+ 'unicity_keys': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}),
+ 'users': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['ishtar_common.IshtarUser']", 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.importtarget': {
+ 'Meta': {'object_name': 'ImportTarget'},
+ 'column': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'targets'", 'to': "orm['ishtar_common.ImporterColumn']"}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'concat': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'concat_str': ('django.db.models.fields.CharField', [], {'max_length': '5', 'null': 'True', 'blank': 'True'}),
+ 'force_new': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'formater_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.FormaterType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'regexp_filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Regexp']", 'null': 'True', 'blank': 'True'}),
+ 'target': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ },
+ 'ishtar_common.ishtarsiteprofile': {
+ 'Meta': {'ordering': "['label']", 'object_name': 'IshtarSiteProfile'},
+ 'active': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'base_find_external_id': ('django.db.models.fields.TextField', [], {'default': "'{context_record__external_id}-{label}'"}),
+ 'context_record': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'context_record_external_id': ('django.db.models.fields.TextField', [], {'default': "'{parcel__external_id}-{label}'"}),
+ 'currency': ('django.db.models.fields.CharField', [], {'default': "u'\\u20ac'", 'max_length': "'5'"}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'file_external_id': ('django.db.models.fields.TextField', [], {'default': "'{year}-{numeric_reference}'"}),
+ 'files': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'find': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'find_external_id': ('django.db.models.fields.TextField', [], {'default': "'{get_first_base_find__context_record__external_id}-{label}'"}),
+ 'homepage': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.TextField', [], {}),
+ 'parcel_external_id': ('django.db.models.fields.TextField', [], {'default': "'{associated_file__external_id}{operation__code_patriarche}-{town__numero_insee}-{section}{parcel_number}'"}),
+ 'person_raw_name': ('django.db.models.fields.TextField', [], {'default': "'{name|upper} {surname}'"}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
+ 'warehouse': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'ishtar_common.ishtaruser': {
+ 'Meta': {'object_name': 'IshtarUser', '_ormbases': ['auth.User']},
+ 'advanced_shortcut_menu': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'person': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'ishtaruser'", 'unique': 'True', 'to': "orm['ishtar_common.Person']"}),
+ 'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'primary_key': 'True'})
+ },
+ 'ishtar_common.itemkey': {
+ 'Meta': {'object_name': 'ItemKey'},
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Import']", 'null': 'True', 'blank': 'True'}),
+ 'key': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {})
+ },
+ 'ishtar_common.operationtype': {
+ 'Meta': {'ordering': "['-preventive', 'order', 'label']", 'object_name': 'OperationType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'preventive': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.organization': {
+ 'Meta': {'object_name': 'Organization'},
+ 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_is_prefered': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'alt_country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'alt_postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'alt_town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}),
+ 'archived': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+ 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
+ 'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_ishtar_common_organization'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'merge_candidate': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_candidate_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Organization']"}),
+ 'merge_exclusion': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_exclusion_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Organization']"}),
+ 'merge_key': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
+ 'organization_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.OrganizationType']"}),
+ 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone2': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone3': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc2': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc3': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'raw_phone': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.organizationtype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'OrganizationType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.person': {
+ 'Meta': {'object_name': 'Person'},
+ 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_is_prefered': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'alt_country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'alt_postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'alt_town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}),
+ 'archived': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+ 'attached_to': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'members'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'contact_type': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
+ 'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_ishtar_common_person'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'merge_candidate': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_candidate_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Person']"}),
+ 'merge_exclusion': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_exclusion_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Person']"}),
+ 'merge_key': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'old_title': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'person_types': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['ishtar_common.PersonType']", 'symmetrical': 'False'}),
+ 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone2': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone3': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc2': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc3': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'raw_name': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'raw_phone': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'salutation': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'surname': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.TitleType']", 'null': 'True', 'blank': 'True'}),
+ 'town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.persontype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'PersonType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.regexp': {
+ 'Meta': {'object_name': 'Regexp'},
+ 'description': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'regexp': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ },
+ 'ishtar_common.sourcetype': {
+ 'Meta': {'object_name': 'SourceType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.state': {
+ 'Meta': {'ordering': "['number']", 'object_name': 'State'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
+ 'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3'})
+ },
+ 'ishtar_common.supporttype': {
+ 'Meta': {'object_name': 'SupportType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.targetkey': {
+ 'Meta': {'unique_together': "(('target', 'key', 'associated_user', 'associated_import'),)", 'object_name': 'TargetKey'},
+ 'associated_import': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Import']", 'null': 'True', 'blank': 'True'}),
+ 'associated_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.IshtarUser']", 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_set': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'key': ('django.db.models.fields.TextField', [], {}),
+ 'target': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'keys'", 'to': "orm['ishtar_common.ImportTarget']"}),
+ 'value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.titletype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'TitleType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.town': {
+ 'Meta': {'ordering': "['numero_insee']", 'object_name': 'Town'},
+ 'canton': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Canton']", 'null': 'True', 'blank': 'True'}),
+ 'center': ('django.contrib.gis.db.models.fields.PointField', [], {'srid': '27572', 'null': 'True', 'blank': 'True'}),
+ 'departement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Department']", 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_ishtar_common_town'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'numero_insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '6'}),
+ 'surface': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ }
+ }
+
+ complete_apps = ['ishtar_common'] \ No newline at end of file
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index 95d995a91..ba3d51172 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -235,7 +235,7 @@ class OwnPerms:
return cls.objects.filter(query).count()
@classmethod
- def get_owns(cls, user, replace_query={}):
+ def get_owns(cls, user, replace_query={}, limit=None):
"""
Get Own items
"""
@@ -252,7 +252,10 @@ class OwnPerms:
q = cls.objects.filter(query)
if replace_query:
q = cls.objects.filter(**replace_query)
- items += list(q.order_by(*cls._meta.ordering).all())
+ if limit:
+ items += list(q.order_by('-pk')[:limit])
+ else:
+ items += list(q.order_by(*cls._meta.ordering).all())
return items
@@ -2526,6 +2529,8 @@ class IshtarUser(User):
'person__attached_to')
person = models.ForeignKey(Person, verbose_name=_(u"Person"), unique=True,
related_name='ishtaruser')
+ advanced_shortcut_menu = models.BooleanField(
+ _(u"Advanced shortcut menu"), default=False)
class Meta:
verbose_name = _(u"Ishtar user")
diff --git a/ishtar_common/static/js/ishtar.js b/ishtar_common/static/js/ishtar.js
index fecefe0a9..6017aed64 100644
--- a/ishtar_common/static/js/ishtar.js
+++ b/ishtar_common/static/js/ishtar.js
@@ -23,8 +23,6 @@ beforeSend: function(xhr, settings) {
}
}});
-var shortcut_url = '';
-
function manage_async_link(event){
event.preventDefault();
var url = $(this).attr('href');
@@ -38,10 +36,36 @@ function manage_async_link(event){
function get_next_table_id(){}
function get_previous_table_id(){}
+var shortcut_url = '';
+var advanced_menu = false;
+var activate_all_search_url = '/activate-all-search/';
+var activate_own_search_url = '/activate-own-search/';
+var activate_advanced_url = '/activate-advanced-menu/';
+var activate_simple_url = '/activate-simple-menu/';
+
+
function init_shortcut_menu(html){
$("#progress").hide();
$("#context_menu").html(html);
$(".chosen-select").chosen();
+ if (advanced_menu) {
+ init_advanced_shortcut_fields();
+ } else {
+ init_shortcut_fields();
+ }
+ $("#short-menu-advanced").click(function(){
+ $.get(url_path + activate_advanced_url,
+ load_shortcut_menu
+ );
+ });
+ $("#short-menu-simple").click(function(){
+ $.get(url_path + activate_simple_url,
+ load_shortcut_menu
+ );
+ });
+}
+
+function init_shortcut_fields(){
$("#current_file").change(function(){
$.post('/' + url_path + 'update-current-item/',
{item:'file', value:$("#current_file").val()},
@@ -68,6 +92,41 @@ function init_shortcut_menu(html){
});
}
+function init_advanced_shortcut_fields(){
+ $('#id_file-shortcut').change(function(){
+ $("#id_select_file-shortcut").attr(
+ 'title', $('#id_select_file-shortcut').val());
+ $.post('/' + url_path + 'update-current-item/',
+ {item: "file", value:$("#id_file-shortcut").val()},
+ load_shortcut_menu
+ );
+ });
+ $('#id_operation-shortcut').change(function(){
+ $("#id_select_operation-shortcut").attr(
+ 'title', $('#id_select_operation-shortcut').val());
+ $.post('/' + url_path + 'update-current-item/',
+ {item: "operation", value:$("#id_operation-shortcut").val()},
+ load_shortcut_menu
+ );
+ });
+ $('#id_contextrecord-shortcut').change(function(){
+ $("#id_select_contextrecord-shortcut").attr(
+ 'title', $('#id_select_contextrecord-shortcut').val());
+ $.post('/' + url_path + 'update-current-item/',
+ {item: "contextrecord", value:$("#id_contextrecord-shortcut").val()},
+ load_shortcut_menu
+ );
+ });
+ $('#id_find-shortcut').change(function(){
+ $("#id_select_find-shortcut").attr(
+ 'title', $('#id_select_find-shortcut').val());
+ $.post('/' + url_path + 'update-current-item/',
+ {item: "find", value:$("#id_find-shortcut").val()},
+ load_shortcut_menu
+ );
+ });
+}
+
function display_info(msg){
$('#message .information .content').html(msg);
$('#message').fadeIn('slow');
@@ -191,7 +250,12 @@ function load_window(url, speed, on_success){
}
function load_current_window(url, model_name){
- var id = $("#current_" + model_name).val();
+ var id;
+ if (advanced_menu){
+ id = $("#id_" + model_name + "-shortcut").val();
+ } else {
+ id = $("#current_" + model_name).val();
+ }
if (!id) return;
url = url.split('/');
url[url.length - 1] = id;
@@ -267,3 +331,24 @@ function show_hide_flex(id){
$(id).hide();
}
}
+
+var activate_all_search_msg = "Searches in the shortcut menu deals with all items.";
+var activate_own_search_msg = "Searches in the shortcut menu deals with only your items.";
+
+function activate_all_search(){
+ $('.activate_all_search').removeClass('disabled');
+ $('.activate_own_search').addClass('disabled');
+ $.get(activate_all_search_url, function(data) {
+ display_info(activate_all_search_msg);
+ });
+ return false;
+}
+
+function activate_own_search(){
+ $('.activate_own_search').removeClass('disabled');
+ $('.activate_all_search').addClass('disabled');
+ $.get(activate_own_search_url, function(data) {
+ display_info(activate_own_search_msg);
+ });
+ return false;
+}
diff --git a/ishtar_common/static/media/style.css b/ishtar_common/static/media/style.css
index aab5063e4..8aac9e2a2 100644
--- a/ishtar_common/static/media/style.css
+++ b/ishtar_common/static/media/style.css
@@ -29,6 +29,16 @@ a, a.remove {
color:#D14;
}
+span.disabled,
+a.disabled {
+ color:#ccc;
+}
+
+span.disabled:hover,
+a.disabled:hover {
+ color:#DB5C7C;
+}
+
.badge,
a.add-button,
#reset_wizards,
@@ -56,6 +66,10 @@ a.add-button,
font-family: 'FontAwesome', Arial, Helvetica, sans-serif;
}
+#context_menu .chosen-select{
+ width: 400px;
+}
+
#context_menu option.basket{
color:#000;
}
@@ -229,6 +243,7 @@ button, input[type=submit], button.submit{
-webkit-border-radius:4px;
}
+button.btn-selected,
button:hover, input[type=submit]:hover{
cursor:pointer;
color:#922;
@@ -409,6 +424,16 @@ div#language_form_div label{
display:inline;
}*/
+.btn-group .btn{
+ padding: 0;
+ margin: 0;
+}
+
+.short-menu-buttons{
+ position: absolute;
+ margin-top: -20px;
+}
+
div#context_menu{
height:110px;
margin-right:10px;
@@ -418,6 +443,7 @@ div#context_menu{
}
div#context_menu fieldset{
+ margin-top: 8px;
background-color:#f1f2f6;
border:0 solid #CCC;
-moz-border-radius: 0;
@@ -425,13 +451,25 @@ div#context_menu fieldset{
border-radius: 0;
}
+div#action_current_items{
+ display: inline-block;
+ vertical-align: top;
+ width: 70px;
+}
+
+div#action_current_items p{
+ padding: 0;
+ margin: 0;
+ text-align: center;
+}
+
div#context_menu table{
display: inline;
vertical-align: top;
}
div#context_menu .icon{
- padding: 0.6em 0.5em;
+ padding: 0.2em 0.3em;
}
div#context_menu ul{
@@ -792,7 +830,9 @@ table.confirm tr.spacer td:last-child{
/* jquery widget customizations */
.ui-autocomplete{
- font-size:0.7em
+ font-size:0.7em;
+ z-index:10000 !important;
+ width:350px;
}
.ui-autocomplete-loading {
diff --git a/ishtar_common/templates/base.html b/ishtar_common/templates/base.html
index 695edd758..7101ed7de 100644
--- a/ishtar_common/templates/base.html
+++ b/ishtar_common/templates/base.html
@@ -32,6 +32,14 @@
{% endblock %}
<script type='text/javascript'>
var shortcut_url = '{% url "shortcut-menu" %}';
+ var get_file_url = '{% url "get-file-shortcut" %}';
+ var get_operation_url = '{% url "get-operation-shortcut" %}';
+ var get_contextrecord_url = '{% url "get-contextrecord-shortcut" %}';
+ var get_find_url = '{% url "get-find-shortcut" %}';
+ var activate_all_search_url = '{% url "activate-all-search" %}';
+ var activate_own_search_url = '{% url "activate-own-search" %}';
+ var activate_all_search_msg = "{% trans 'Searches in the shortcut menu deals with all items.' %}";
+ var activate_own_search_msg = "{% trans 'Searches in the shortcut menu deals with only your items.' %}";
</script>
</head>
<body{% if current_theme%} id='{{current_theme}}'{%endif%}>
@@ -50,7 +58,7 @@
{% csrf_token %}
<label for='language_selector'>{% trans "Lang" %}{% trans ":"%} </label>
<select name="language" id='language_selector'>
- <option value="">-------</option>
+ <option value="">----------</option>
{% for lang in LANGUAGES %}
<option value="{{ lang.0 }}"{% ifequal LANGUAGE_CODE lang.0 %} selected='selected'{% endifequal %}>{{ lang.1 }}</option>
{% endfor %}
diff --git a/ishtar_common/templates/ishtar/blocks/advanced_shortcut_menu.html b/ishtar_common/templates/ishtar/blocks/advanced_shortcut_menu.html
new file mode 100644
index 000000000..581381e82
--- /dev/null
+++ b/ishtar_common/templates/ishtar/blocks/advanced_shortcut_menu.html
@@ -0,0 +1,38 @@
+{% load i18n %}
+{% load url from future%}
+{% if menu %}
+<form method="post" action="{% url 'update-current-item' %}">
+<fieldset>
+<div class="short-menu-buttons btn-group" role="group">
+ <button type="button" class="btn" id='short-menu-simple' title="{% trans 'Simple menu limited to your own items. Be careful only the last 100 items are displayed.' %}">{% trans "simple" %}</button>
+ <button type="button" class="btn btn-selected" id='short-menu-advanced' title="{% trans 'Advanced menu.' %}">{% trans "advanced" %}</button>
+</div>
+<div id='action_current_items'>
+<p><i class="icon fa fa-thumb-tack fa-2x" aria-hidden="true" title="{% trans 'Pin an item in order to constrain default searches with this item. By default only your items are displayed. New created and modified items are auto-pin.' %}"></i></p>
+<p>
+<a href='' onclick='return activate_own_search();' class='activate_own_search{% if SHORTCUT_SEARCH == 'all' %} disabled{% endif %}'><i class="icon fa fa-user" aria-hidden="true" title="{% trans 'Search within my items' %}"></i></a>
+<a href='' class='activate_all_search{% if SHORTCUT_SEARCH == 'own' %} disabled{% endif %}' onclick='return activate_all_search();'><i class="icon fa fa-users" aria-hidden="true" title="{% trans 'Search within all items' %}"></i></a>
+</p>
+<p>
+<a href='' onclick='return load_shortcut_menu();' class='disabled'><i class="icon fa fa-2x fa-refresh" aria-hidden="true" title="{% trans 'Refresh menu' %}"></i></a>
+</p>
+</div>
+<table id='current_items'>
+{% for lbl, model_name, current, widget in menu %}
+<tr>
+ <td><label for="current_{{model_name}}">{{lbl}}</label></td>
+ <td>
+ {{widget|safe}}
+ </td>{% with 'show-'|add:model_name as model_url%}
+ <td><a href='#' onclick='load_current_window("{% url model_url current %}", "{{model_name}}");' class='display_details'><i class="fa fa-info-circle" aria-hidden="true"></i></a></td>
+ <td><span class='disabled pin-action' onclick='$.get("{% url 'unpin' model_name %}", function(){load_shortcut_menu();});' title="{% trans 'Unpin' %}">
+ <i class="fa fa-times"></i>
+ </span></td>
+ {% endwith %}
+</tr>
+{% endfor %}
+</table>
+</fieldset>
+</form>
+<script type='text/javascript'>var advanced_menu = true;</script>
+{% endif %}
diff --git a/ishtar_common/templates/ishtar/blocks/shortcut_menu.html b/ishtar_common/templates/ishtar/blocks/shortcut_menu.html
index c1100ae01..5a0463c30 100644
--- a/ishtar_common/templates/ishtar/blocks/shortcut_menu.html
+++ b/ishtar_common/templates/ishtar/blocks/shortcut_menu.html
@@ -3,6 +3,10 @@
{% if current_menu %}
<form method="post" action="{% url 'update-current-item' %}">
<fieldset>
+<div class="short-menu-buttons btn-group" role="group">
+ <button type="button" class="btn btn-selected" id='short-menu-simple' title="{% trans 'Simple menu limited to your own items. Be careful only the last 100 items are displayed.' %}">{% trans "simple" %}</button>
+ <button type="button" class="btn" id='short-menu-advanced' title="{% trans 'Advanced menu.' %}">{% trans "advanced" %}</button>
+</div>
<i class="icon fa fa-thumb-tack fa-2x" aria-hidden="true" title="{% trans 'Pin an item in order to constrain default searches with this item. By default only your items are displayed. New created and modified items are auto-pin.' %}"></i>
<table id='current_items'>
{% for lbl, model_name, main_cls, items in current_menu %}
@@ -24,4 +28,5 @@
</table>
</fieldset>
</form>
+<script type='text/javascript'>var advanced_menu = false;</script>
{% endif %}
diff --git a/ishtar_common/urls.py b/ishtar_common/urls.py
index 27078dd9e..22a09a052 100644
--- a/ishtar_common/urls.py
+++ b/ishtar_common/urls.py
@@ -192,6 +192,14 @@ urlpatterns += patterns(
views.OrgaManualMergeItems.as_view(),
name='orga_manual_merge_items'),
url(r'reset/$', 'reset_wizards', name='reset_wizards'),
+ url(r'activate-all-search/$', 'activate_all_search',
+ name='activate-all-search'),
+ url(r'activate-own-search/$', 'activate_own_search',
+ name='activate-own-search'),
+ url(r'activate-advanced-menu/$', 'activate_advanced_shortcut_menu',
+ name='activate-advanced-menu'),
+ url(r'activate-simple-menu/$', 'activate_simple_shortcut_menu',
+ name='activate-simple-menu'),
url(r'(?P<action_slug>' + actions + r')/$', 'action', name='action'),
)
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index 5f3e80c77..3406cf7af 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -55,6 +55,7 @@ from xhtml2odt import xhtml2odt
from menus import menu
from archaeological_files.models import File
+from archaeological_operations.models import Operation
from archaeological_context_records.models import ContextRecord
from archaeological_finds.models import Find
@@ -62,6 +63,7 @@ from archaeological_operations.forms import DashboardForm as DashboardFormOpe
from archaeological_files.forms import DashboardForm as DashboardFormFile
from ishtar_common.forms import FinalForm, FinalDeleteForm
+from ishtar_common.widgets import JQueryAutoComplete
from ishtar_common.utils import get_random_item_image_link, shortify
from ishtar_common import forms_common as forms
from ishtar_common import wizards
@@ -198,12 +200,33 @@ def get_autocomplete_generic(model, extra={'available': True}):
return func
-def shortcut_menu(request):
- from archaeological_operations.models import Operation
- from archaeological_files.models import File
- from archaeological_context_records.models import ContextRecord
- from archaeological_finds.models import Find
+def activate_all_search(request):
+ request.session['SHORTCUT_SEARCH'] = 'all'
+ return HttpResponse('OK', mimetype='text/plain')
+
+
+def activate_own_search(request):
+ request.session['SHORTCUT_SEARCH'] = 'own'
+ return HttpResponse('OK', mimetype='text/plain')
+
+
+def activate_advanced_shortcut_menu(request):
+ if not hasattr(request.user, 'ishtaruser'):
+ return HttpResponse('KO', mimetype='text/plain')
+ request.user.ishtaruser.advanced_shortcut_menu = True
+ request.user.ishtaruser.save()
+ return HttpResponse('OK', mimetype='text/plain')
+
+
+def activate_simple_shortcut_menu(request):
+ if not hasattr(request.user, 'ishtaruser'):
+ return HttpResponse('KO', mimetype='text/plain')
+ request.user.ishtaruser.advanced_shortcut_menu = False
+ request.user.ishtaruser.save()
+ return HttpResponse('OK', mimetype='text/plain')
+
+def shortcut_menu(request):
profile = get_current_profile()
CURRENT_ITEMS = []
if profile.files:
@@ -213,6 +236,27 @@ def shortcut_menu(request):
CURRENT_ITEMS.append((_(u"Context record"), ContextRecord))
if profile.find:
CURRENT_ITEMS.append((_(u"Find"), Find))
+ if hasattr(request.user, 'ishtaruser') and \
+ request.user.ishtaruser.advanced_shortcut_menu:
+ dct = {'current_menu': [], 'menu': [],
+ 'SHORTCUT_SEARCH': request.session['SHORTCUT_SEARCH']
+ if 'SHORTCUT_SEARCH' in request.session else 'own'}
+
+ for lbl, model in CURRENT_ITEMS:
+ model_name = model.SLUG
+ current = model_name in request.session \
+ and request.session[model_name]
+
+ dct['menu'].append((
+ lbl, model_name, current or 0,
+ JQueryAutoComplete(
+ reverse('get-' + model.SLUG + '-shortcut'),
+ model).render(
+ model.SLUG + '-shortcut', value=current,
+ attrs={'id': 'current_' + model.SLUG})))
+ return render_to_response(
+ 'ishtar/blocks/advanced_shortcut_menu.html',
+ dct, context_instance=RequestContext(request))
dct = {'current_menu': []}
current_selected_item = None
for lbl, model in CURRENT_ITEMS:
@@ -222,7 +266,8 @@ def shortcut_menu(request):
current = model_name in request.session and request.session[model_name]
items = []
for item in model.get_owns(request.user,
- menu_filtr=current_selected_item):
+ menu_filtr=current_selected_item,
+ limit=100):
pk = unicode(item.pk)
if item.IS_BASKET:
pk = "basket-" + pk
@@ -249,10 +294,6 @@ def shortcut_menu(request):
def get_current_items(request):
- from archaeological_files.models import File
- from archaeological_operations.models import Operation
- from archaeological_context_records.models import ContextRecord
- from archaeological_finds.models import Find
currents = {}
for key, model in (('file', File),
('operation', Operation),
@@ -290,6 +331,7 @@ def update_current_item(request, item_type=None, pk=None):
request.session[item_type] = request.POST['value']
else:
request.session[item_type] = str(pk)
+ request.session['SHORTCUT_SEARCH'] = 'all'
currents = get_current_items(request)
# reinit when descending item are not relevant
@@ -516,6 +558,9 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
break # max right reach
if force_own:
own = True
+ if full == 'shortcut' and 'SHORTCUT_SEARCH' in request.session and \
+ request.session['SHORTCUT_SEARCH'] == 'own':
+ own = True
EMPTY = ''
if 'type' in dct:
data_type = dct.pop('type')
@@ -544,6 +589,8 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
request_items = request.method == 'POST' and request.POST \
or request.GET
dct = base_request.copy()
+ if full == 'shortcut':
+ dct['cached_label__icontains'] = request.GET.get('term', None)
and_reqs, or_reqs = [], []
try:
old = 'old' in request_items and int(request_items['old'])
@@ -577,7 +624,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
q = Q(**{req_key: val})
reqs = reqs | q
and_reqs.append(reqs)
- if 'submited' not in request_items:
+ if 'submited' not in request_items and full != 'shortcut':
# default search
# an item is selected in the default menu
if default_name in request.session and \
@@ -706,6 +753,22 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
for and_req in and_reqs:
query = query & and_req
+ # manage hierarchic in shortcut menu
+ if full == 'shortcut':
+ ASSOCIATED_ITEMS = {
+ Operation: (File, 'associated_file__pk'),
+ ContextRecord: (Operation, 'operation__pk'),
+ Find: (ContextRecord, 'base_finds__context_record__pk'),
+ }
+ if model in ASSOCIATED_ITEMS:
+ upper_model, upper_key = ASSOCIATED_ITEMS[model]
+ model_name = upper_model.SLUG
+ current = model_name in request.session \
+ and request.session[model_name]
+ if current:
+ dct = {upper_key: current}
+ query = query & Q(**dct)
+
items = model.objects.filter(query).distinct()
# print(items.query)
q = request_items.get('sidx')
@@ -731,6 +794,8 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
for idx, col in enumerate(table_cols):
if col in model.CONTEXTUAL_TABLE_COLS[contxt]:
table_cols[idx] = model.CONTEXTUAL_TABLE_COLS[contxt][col]
+ if full == 'shortcut':
+ table_cols = ['cached_label']
# manage sort tables
manual_sort_key = None
@@ -773,6 +838,9 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
pass
start = (page_nb - 1) * row_nb
end = page_nb * row_nb
+ if full == 'shortcut':
+ start = 0
+ end = 20
items_nb = items.count()
if manual_sort_key:
items = items.all()
@@ -887,13 +955,18 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
if hasattr(model, 'COL_LINK') and k in model.COL_LINK:
value = link_ext_template.format(value, value)
res[k] = value
+ if full == 'shortcut':
+ res['value'] = res.pop('cached_label')
rows.append(res)
- data = json.dumps({
- "records": items_nb,
- "rows": rows,
- "page": page_nb,
- "total": (items_nb / row_nb + 1) if row_nb else items_nb,
- })
+ if full == 'shortcut':
+ data = json.dumps(rows)
+ else:
+ data = json.dumps({
+ "records": items_nb,
+ "rows": rows,
+ "page": page_nb,
+ "total": (items_nb / row_nb + 1) if row_nb else items_nb,
+ })
return HttpResponse(data, mimetype='text/plain')
elif data_type == "csv":
response = HttpResponse(mimetype='text/csv')