Merge branch 'pu/2013.10-invoices' into 2014.09
authorPhilipp Schüle <p.schuele@metaways.de>
Tue, 18 Nov 2014 13:30:41 +0000 (14:30 +0100)
committerPhilipp Schüle <p.schuele@metaways.de>
Tue, 18 Nov 2014 13:30:41 +0000 (14:30 +0100)
Conflicts:
tests/tine20/HumanResources/JsonTests.php
tests/tine20/Phone/JsonTest.php
tests/tine20/Sales/AllTests.php
tests/tine20/Sales/JsonTest.php
tests/tine20/Timetracker/JsonTest.php
tests/tine20/Tinebase/Relation/RelationTest.php
tine20/Addressbook/Convert/Contact/Json.php
tine20/Crm/translations/de.po
tine20/Crm/translations/template.pot
tine20/Sales/Acl/Rights.php
tine20/Sales/Config.php
tine20/Sales/Controller/Contract.php
tine20/Sales/Controller/Division.php
tine20/Sales/Controller/NumberableAbstract.php
tine20/Sales/Frontend/Json.php
tine20/Sales/Model/Contract.php
tine20/Sales/Model/CostCenter.php
tine20/Sales/Model/Product.php
tine20/Sales/Model/ProductFilter.php
tine20/Sales/Sales.jsb2
tine20/Sales/Setup/Initialize.php
tine20/Sales/Setup/setup.xml
tine20/Sales/css/Sales.css
tine20/Sales/js/ContractEditDialog.js
tine20/Sales/js/ContractGridPanel.js
tine20/Sales/js/CostCenterEditDialog.js
tine20/Sales/js/ProductEditDialog.js
tine20/Sales/js/Sales.js
tine20/Sales/translations/template.pot
tine20/Timetracker/translations/de.po
tine20/Timetracker/translations/template.pot
tine20/Tinebase/Controller/Record/Abstract.php
tine20/Tinebase/Convert/Json.php
tine20/Tinebase/Frontend/Json.php
tine20/Tinebase/Frontend/Json/Abstract.php
tine20/Tinebase/Model/Filter/Month.php
tine20/Tinebase/js/ux/grid/GroupingGridPlugin.js
tine20/Tinebase/translations/de.po
tine20/Tinebase/translations/template.pot
tine20/composer.json
tine20/composer.lock

Change-Id: I3499881c8723172e54da2dd780af5c5bae68c585

26 files changed:
1  2 
tests/tine20/HumanResources/JsonTests.php
tests/tine20/HumanResources/TestCase.php
tests/tine20/Sales/AllTests.php
tests/tine20/Sales/JsonTest.php
tests/tine20/Timetracker/JsonTest.php
tests/tine20/Tinebase/Relation/RelationTest.php
tine20/Crm/translations/de.po
tine20/Crm/translations/template.pot
tine20/Sales/Acl/Rights.php
tine20/Sales/Controller/NumberableAbstract.php
tine20/Sales/Frontend/Json.php
tine20/Sales/Setup/Initialize.php
tine20/Sales/Setup/Update/Release8.php
tine20/Sales/js/ContractEditDialog.js
tine20/Sales/js/CostCenterEditDialog.js
tine20/Sales/js/Sales.js
tine20/Sales/translations/de.po
tine20/Sales/translations/template.pot
tine20/Timetracker/Frontend/Json.php
tine20/Timetracker/Setup/setup.xml
tine20/Timetracker/translations/de.po
tine20/Timetracker/translations/template.pot
tine20/Tinebase/Backend/Sql/Command/Mysql.php
tine20/Tinebase/js/ux/grid/GroupingGridPlugin.js
tine20/Tinebase/translations/de.po
tine20/Tinebase/translations/template.pot

@@@ -32,7 -32,12 +32,13 @@@ class Sales_AllTest
          $suite->addTestSuite('Sales_Backend_CostCenterTest');
          $suite->addTestSuite('Sales_ControllerTest');
          $suite->addTestSuite('Sales_JsonTest');
 +        $suite->addTestSuite('Sales_CustomFieldTest');
+         $suite->addTestSuite('Sales_InvoiceControllerTests');
+         $suite->addTestSuite('Sales_InvoiceJsonTests');
+         $suite->addTestSuite('Sales_InvoiceExportTests');
+         $suite->addTestSuite('Sales_OrderConfirmationControllerTests');
+         $suite->addTestSuite('Sales_OfferControllerTests');
+         
          return $suite;
      }
  }
Simple merge
@@@ -19,6 -19,7 +19,7 @@@ require_once dirname(dirname(__FILE__)
  class Timetracker_JsonTest extends Timetracker_AbstractTest
  {
      protected $_testUser = NULL;
 -
++    
      /**
       * Sets up the fixture.
       * This method is called before a test is executed.
@@@ -553,62 -597,9 +553,70 @@@ msgstr "Lead %s wurde geändert
  msgid "Lead %s has been created"
  msgstr "Lead %s wurde angelegt"
  
 +#: Preference.php:37
 +msgid "All leads"
 +msgstr "Alle Leads"
 +
 +#: Preference.php:81
 +msgid "Default Lead List"
 +msgstr "Standard-Leadliste"
 +
 +#: Preference.php:82
 +msgid "The default list for new leads"
 +msgstr "Die Standard-Leadliste, in der neue Leads angelegt werden."
 +
 +#: Preference.php:86
 +msgid "Get Notification Emails"
 +msgstr "Benachrichtigungsemails empfangen"
 +
 +#: Preference.php:87
 +msgid "The level of actions you want to be notified about."
 +msgstr "Der Grad an Aktionen über die Sie benachrichtigt werden wollen."
 +
 +#: Preference.php:91
 +msgid "Send Notifications Emails for own actions"
 +msgstr "Sende Benachrichtigungen über eigene Änderungen"
 +
 +#: Preference.php:92
 +msgid "Get notifications emails for actions you did yourself"
 +msgstr "Empfangen von Benachrichtigungen über Änderungen die selbst getätigt wurden"
 +
 +#: Preference.php:95
 +msgid "Default Favorite"
 +msgstr "Standard Favorit"
 +
 +#: Preference.php:96
 +msgid "The default favorite which is loaded on crm startup"
 +msgstr "Der Standard Favorit der beim öffnen des Crm geladen wird"
 +
 +#: Setup/Initialize.php:36 Setup/Update/Release3.php:37
 +msgid "All leads I have read grants for"
 +msgstr "Alle Leads für die ich Lese-Rechte habe"
 +
 +#: Setup/Initialize.php:43
 +msgid "Last modified by me"
 +msgstr "Zuletzt von mir bearbeitet"
 +
 +#: Setup/Initialize.php:44
 +msgid "All leads that I have last modified"
 +msgstr "Alle Leads, die ich zuletzt bearbeitet habe"
 +
 +#: Setup/Initialize.php:53
 +msgid "My leads"
 +msgstr "Meine Leads"
 +
 +#: Setup/Initialize.php:54
 +msgid "All leads that I am responsible for"
 +msgstr "Alle Leads, für die ich verantwortlich bin"
 +
 +#: Setup/Initialize.php:67
 +msgid "Leads with overdue tasks"
 +msgstr "Leads mit überfälligen Aufgaben"
++
+ #: js/LeadGridPanel.js:144 js/LeadEditDialog.js:393
+ msgid "Resubmission Date"
+ msgstr "Wiedervorlagedatum"
+ msgid "Organizer"
+ msgstr "Organisator"
++
@@@ -13,341 -13,391 +13,406 @@@ msgstr "
  "X-Poedit-SourceCharset: utf-8\n"
  "Plural-Forms: nplurals=2; plural=n != 1;\n"
  
- #: Export/Pdf.php:75
- msgid "Lead Data"
- msgstr ""
- #: Export/Pdf.php:78 js/AdminPanel.js:157 js/LeadGridPanel.js:145
- #: js/LeadStateFilterModel.js:32 js/LeadEditDialog.js:343
- msgid "Leadstate"
- msgstr ""
- #: Export/Pdf.php:81 js/AdminPanel.js:171 js/LeadEditDialog.js:362
- #: js/LeadGridDetailsPanel.js:454
- msgid "Leadtype"
 -#: Preference.php:37
 -msgid "All leads"
--msgstr ""
--
- #: Export/Pdf.php:84 js/AdminPanel.js:164 js/LeadEditDialog.js:369
- #: js/LeadGridDetailsPanel.js:459
- msgid "Leadsource"
 -#: Preference.php:81
 -msgid "Default Lead List"
--msgstr ""
--
- #: Export/Pdf.php:87 js/LeadGridPanel.js:147 js/Model.js:111
- #: Controller/Lead.php:200
- msgid "Turnover"
 -#: Preference.php:82
 -msgid "The default list for new leads"
--msgstr ""
--
- #: Export/Pdf.php:90 js/LeadGridPanel.js:146 js/Model.js:110
- #: js/LeadEditDialog.js:222 Controller/Lead.php:201
- msgid "Probability"
 -#: Preference.php:86
 -msgid "Get Notification Emails"
--msgstr ""
--
- #: Export/Pdf.php:93 js/LeadEditDialog.js:406 js/LeadGridDetailsPanel.js:444
- #: Controller/Lead.php:197
- msgid "Start"
 -#: Preference.php:87
 -msgid "The level of actions you want to be notified about."
--msgstr ""
--
- #: Export/Pdf.php:96 js/LeadEditDialog.js:229 Controller/Lead.php:199
- msgid "End"
 -#: Preference.php:91
 -msgid "Send Notifications Emails for own actions"
--msgstr ""
--
- #: Export/Pdf.php:99
- msgid "End Scheduled"
 -#: Preference.php:92
 -msgid "Get notifications emails for actions you did yourself"
++#: Model/Lead.php:122 js/LeadGridPanel.js:142 js/Contact.js:171
++#: js/Contact.js:355 js/Contact.js:392
++msgid "Responsible"
  msgstr ""
  
- #: Export/Pdf.php:184
- msgid "Contacts"
 -#: Preference.php:95
 -msgid "Default Favorite"
++#: Model/Lead.php:123 Controller.php:162 js/LeadGridPanel.js:144
++#: js/Contact.js:161 js/Contact.js:356 js/Contact.js:396
++#: js/LeadGridDetailsPanel.js:45 Controller/Lead.php:193
++msgid "Customer"
  msgstr ""
  
- #: Export/Pdf.php:211 js/Contact.js:231
- msgid "Address"
 -#: Preference.php:96
 -msgid "The default favorite which is loaded on crm startup"
++#: Model/Lead.php:129
++msgid "Task"
  msgstr ""
  
- #: Export/Pdf.php:218 Controller.php:177
- msgid "Telephone"
 -#: Setup/Update/Release3.php:37 Setup/Initialize.php:36
++#: Setup/Initialize.php:36 Setup/Update/Release3.php:37
+ msgid "All leads I have read grants for"
  msgstr ""
  
- #: Export/Pdf.php:219 Controller.php:176
- msgid "Email"
+ #: Setup/Initialize.php:43
+ msgid "Last modified by me"
  msgstr ""
  
- #: Export/Pdf.php:232 js/Task.js:82 js/LeadEditDialog.js:245
- msgid "Tasks"
+ #: Setup/Initialize.php:44
+ msgid "All leads that I have last modified"
  msgstr ""
  
- #: Export/Pdf.php:252 js/Task.js:224
- msgid "Due Date"
+ #: Setup/Initialize.php:53
+ msgid "My leads"
  msgstr ""
  
- #: Export/Pdf.php:259 js/Task.js:237
- msgid "Priority"
+ #: Setup/Initialize.php:54
+ msgid "All leads that I am responsible for"
  msgstr ""
  
- #: Export/Pdf.php:274 js/Product.js:85 js/LeadEditDialog.js:256
- msgid "Products"
+ #: Setup/Initialize.php:67
+ msgid "Leads with overdue tasks"
  msgstr ""
  
- #: Export/Pdf.php:315
- msgid "low"
 -#: Model/Lead.php:122 js/LeadGridPanel.js:137 js/Contact.js:171
 -#: js/Contact.js:355 js/Contact.js:392
 -msgid "Responsible"
 -msgstr ""
 -
 -#: Model/Lead.php:123 js/LeadGridPanel.js:139 js/Contact.js:161
 -#: js/Contact.js:356 js/Contact.js:396 js/LeadGridDetailsPanel.js:45
 -#: Controller/Lead.php:193 Controller.php:162
 -msgid "Customer"
++#: Acl/Rights.php:106
++msgid "manage shared lead folders"
  msgstr ""
  
- #: Export/Pdf.php:316
- msgid "normal"
 -#: Model/Lead.php:129
 -msgid "Task"
++#: Acl/Rights.php:107
++msgid "Create new shared lead folders"
  msgstr ""
  
- #: Export/Pdf.php:317
- msgid "high"
 -#: js/Task.js:83 js/LeadEditDialog.js:245 Export/Pdf.php:232
 -msgid "Tasks"
++#: Acl/Rights.php:110
++msgid "manage shared leads favorites"
  msgstr ""
  
- #: Export/Pdf.php:318
- msgid "urgent"
 -#: js/Task.js:109
 -msgid "No Tasks to display"
++#: Acl/Rights.php:111
++msgid "Create or update shared leads favorites"
  msgstr ""
  
 -#: js/Task.js:168
 -msgid "Summary"
 +#: Controller.php:117
 +#, python-format
 +msgid "%s's personal leads"
  msgstr ""
  
- #: Controller.php:162 Model/Lead.php:123 js/LeadGridPanel.js:144
- #: js/LeadGridDetailsPanel.js:45 js/Contact.js:161 js/Contact.js:356
- #: js/Contact.js:396 Controller/Lead.php:193
- msgid "Customer"
- msgstr ""
- #: Controller.php:163 js/LeadGridPanel.js:143 js/LeadGridDetailsPanel.js:45
- #: js/Contact.js:181 js/Contact.js:357 js/Contact.js:400
 -#: js/Task.js:172
 -msgid "Add a task..."
++#: Controller.php:163 js/LeadGridPanel.js:143 js/Contact.js:181
++#: js/Contact.js:357 js/Contact.js:400 js/LeadGridDetailsPanel.js:45
 +msgid "Partner"
  msgstr ""
  
 -#: js/Task.js:176 Export/Pdf.php:252
 -msgid "Due Date"
 +#: Controller.php:164
 +msgid "Reseller"
  msgstr ""
  
 -#: js/Task.js:189 Export/Pdf.php:259
 -msgid "Priority"
 +#: Controller.php:167
 +msgid "open"
  msgstr ""
  
 -#: js/Task.js:205
 -msgid "Percent"
 +#: Controller.php:168
 +msgid "contacted"
  msgstr ""
  
 -#: js/Task.js:218 js/LeadGridDetailsPanel.js:439
 -msgid "Status"
 +#: Controller.php:169
 +msgid "waiting for feedback"
  msgstr ""
  
 -#: js/LeadGridPanel.js:134
 -msgid "Lead id"
 +#: Controller.php:170
 +msgid "quote sent"
  msgstr ""
  
 -#: js/LeadGridPanel.js:135
 -msgid "Tags"
 +#: Controller.php:171
 +msgid "accepted"
  msgstr ""
  
 -#: js/LeadGridPanel.js:136 js/Model.js:108
 -msgid "Lead name"
 +#: Controller.php:172
 +msgid "lost"
  msgstr ""
  
 -#: js/LeadGridPanel.js:138 js/Contact.js:181 js/Contact.js:357
 -#: js/Contact.js:400 js/LeadGridDetailsPanel.js:45 Controller.php:163
 -msgid "Partner"
 +#: Controller.php:175
 +msgid "Market"
  msgstr ""
  
 -#: js/LeadGridPanel.js:140 js/LeadEditDialog.js:343 js/AdminPanel.js:157
 -#: js/LeadStateFilterModel.js:32 Export/Pdf.php:78
 -msgid "Leadstate"
++#: Controller.php:176 Export/Pdf.php:219
++msgid "Email"
+ msgstr ""
 -#: js/LeadGridPanel.js:141 js/LeadEditDialog.js:222 js/Model.js:110
 -#: Controller/Lead.php:201 Export/Pdf.php:90
 -msgid "Probability"
++#: Controller.php:177 Export/Pdf.php:218
++msgid "Telephone"
+ msgstr ""
 -#: js/LeadGridPanel.js:142 js/Model.js:111 Controller/Lead.php:200
 -#: Export/Pdf.php:87
 -msgid "Turnover"
 +#: Controller.php:178
 +msgid "Website"
  msgstr ""
  
- #: Acl/Rights.php:106
- msgid "manage shared lead folders"
 -#: js/LeadGridPanel.js:143
 -msgid "Probable Turnover"
++#: Export/Pdf.php:75
++msgid "Lead Data"
  msgstr ""
  
- #: Acl/Rights.php:107
- msgid "Create new shared lead folders"
 -#: js/LeadGridPanel.js:144 js/LeadEditDialog.js:393
 -msgid "Resubmission Date"
++#: Export/Pdf.php:78 js/AdminPanel.js:157 js/LeadEditDialog.js:343
++#: js/LeadGridPanel.js:145 js/LeadStateFilterModel.js:32
++msgid "Leadstate"
  msgstr ""
  
- #: Acl/Rights.php:110
- msgid "manage shared leads favorites"
 -#: js/LeadGridPanel.js:186
 -msgid "Export Lead"
++#: Export/Pdf.php:81 js/AdminPanel.js:171 js/LeadEditDialog.js:362
++#: js/LeadGridDetailsPanel.js:454
++msgid "Leadtype"
  msgstr ""
  
- #: Acl/Rights.php:111
- msgid "Create or update shared leads favorites"
 -#: js/LeadGridPanel.js:195
 -msgid "Export as PDF"
++#: Export/Pdf.php:84 js/AdminPanel.js:164 js/LeadEditDialog.js:369
++#: js/LeadGridPanel.js:146 js/LeadGridDetailsPanel.js:459
++#: js/LeadSourceFilterModel.js:28
++msgid "Leadsource"
  msgstr ""
  
- #: Model/Lead.php:122 js/LeadGridPanel.js:142 js/Contact.js:171
- #: js/Contact.js:355 js/Contact.js:392
- msgid "Responsible"
 -#: js/LeadGridPanel.js:202
 -msgid "Export as CSV"
++#: Export/Pdf.php:87 js/LeadGridPanel.js:148 js/Model.js:112
++#: Controller/Lead.php:200
++msgid "Turnover"
  msgstr ""
  
- #: Model/Lead.php:129
- msgid "Task"
 -#: js/LeadGridPanel.js:209
 -msgid "Export as ODS"
++#: Export/Pdf.php:90 js/LeadEditDialog.js:222 js/LeadGridPanel.js:147
++#: js/Model.js:110 Controller/Lead.php:201
++msgid "Probability"
  msgstr ""
  
- #: js/Task.js:105
- msgid "No Tasks to display"
 -#: js/LeadGridPanel.js:216
 -msgid "Export as XLS"
++#: Export/Pdf.php:93 js/LeadEditDialog.js:408 js/LeadGridDetailsPanel.js:444
++#: Controller/Lead.php:197
++msgid "Start"
  msgstr ""
  
- #: js/Task.js:216
- msgid "Summary"
 -#: js/LeadEditDialog.js:229 Controller/Lead.php:199 Export/Pdf.php:96
++#: Export/Pdf.php:96 js/LeadEditDialog.js:229 Controller/Lead.php:199
+ msgid "End"
  msgstr ""
  
- #: js/Task.js:220
- msgid "Add a task..."
 -#: js/LeadEditDialog.js:246
 -msgid ""
 -"You do not have the run right for the Tasks application or it is not "
 -"activated."
 -msgstr ""
 -
 -#: js/LeadEditDialog.js:256 js/Product.js:85 Export/Pdf.php:274
 -msgid "Products"
 -msgstr ""
 -
 -#: js/LeadEditDialog.js:257
 -msgid ""
 -"You do not have the run right for the Sales application or it is not "
 -"activated."
 -msgstr ""
 -
 -#: js/LeadEditDialog.js:274 js/AddToLeadPanel.js:73 js/Model.js:52
 -msgid "Lead"
 -msgid_plural "Leads"
 -msgstr[0] ""
 -msgstr[1] ""
 -
 -#: js/LeadEditDialog.js:301
 -msgid "Enter short name"
++#: Export/Pdf.php:99
++msgid "End Scheduled"
  msgstr ""
  
- #: js/Task.js:253
- msgid "Percent"
 -#: js/LeadEditDialog.js:362 js/AdminPanel.js:171
 -#: js/LeadGridDetailsPanel.js:454 Export/Pdf.php:81
 -msgid "Leadtype"
++#: Export/Pdf.php:184
++msgid "Contacts"
  msgstr ""
  
- #: js/Task.js:266 js/LeadGridDetailsPanel.js:439
- msgid "Status"
 -#: js/LeadEditDialog.js:369 js/AdminPanel.js:164
 -#: js/LeadGridDetailsPanel.js:459 Export/Pdf.php:84
 -msgid "Leadsource"
++#: Export/Pdf.php:211 js/Contact.js:231
++msgid "Address"
  msgstr ""
  
- #: js/Task.js:282
- msgid "Organizer"
 -#: js/LeadEditDialog.js:385
 -msgid "Expected turnover"
++#: Export/Pdf.php:232 js/LeadEditDialog.js:245 js/Task.js:82
++msgid "Tasks"
+ msgstr ""
 -#: js/LeadEditDialog.js:406 js/LeadGridDetailsPanel.js:444
 -#: Controller/Lead.php:197 Export/Pdf.php:93
 -msgid "Start"
++#: Export/Pdf.php:252 js/Task.js:224
++msgid "Due Date"
+ msgstr ""
 -#: js/LeadEditDialog.js:412 js/LeadGridDetailsPanel.js:449
 -msgid "Estimated end"
++#: Export/Pdf.php:259 js/Task.js:237
++msgid "Priority"
+ msgstr ""
 -#: js/LeadEditDialog.js:444 js/Product.js:139
 -msgid "Description"
++#: Export/Pdf.php:274 js/LeadEditDialog.js:256 js/Product.js:85
++msgid "Products"
+ msgstr ""
 -#: js/LeadEditDialog.js:458
 -msgid "Enter description"
++#: Export/Pdf.php:315
++msgid "low"
+ msgstr ""
 -#: js/Crm.js:24
 -msgid "New Lead"
++#: Export/Pdf.php:316
++msgid "normal"
+ msgstr ""
 -#: js/Product.js:134
 -msgid "Product"
++#: Export/Pdf.php:317
++msgid "high"
+ msgstr ""
 -#: js/Product.js:146
 -msgid "Price"
++#: Export/Pdf.php:318
++msgid "urgent"
  msgstr ""
  
 -#: js/Product.js:158
 -msgid "Quantity"
 +#: js/AdminPanel.js:122 js/LeadGridDetailsPanel.js:194
 +#: js/LeadGridDetailsPanel.js:227
 +msgid "Leadstates"
  msgstr ""
  
 -#: js/Product.js:185 js/LinkGridPanel.js:56
 -#, python-brace-format
 -msgid "Unlink {0}"
 +#: js/AdminPanel.js:126 js/LeadGridDetailsPanel.js:216
 +msgid "Leadtypes"
  msgstr ""
  
 -#: js/Product.js:186 js/LinkGridPanel.js:57
 -#, python-brace-format
 -msgid "Unlink selected {0}"
 +#: js/AdminPanel.js:130 js/LeadGridDetailsPanel.js:205
 +msgid "Leadsources"
  msgstr ""
  
 -#: js/Product.js:216
 -msgid "Search for Products to add ..."
 +#: js/AdminPanel.js:138
 +msgid "Defaults"
  msgstr ""
  
- #: js/LeadState.js:32
- msgid "Lead State"
- msgid_plural "Lead States"
+ #: js/LeadType.js:29
+ msgid "Lead Type"
+ msgid_plural "Lead Types"
  msgstr[0] ""
  msgstr[1] ""
  
- #: js/LeadState.js:166
- msgid "Add a Leadstate..."
+ #: js/LeadType.js:134
+ msgid "Add a Leadtype..."
  msgstr ""
  
- #: js/LeadGridContactFilter.js:47
- msgid "Contact"
 -#: js/LeadSource.js:29
 -msgid "Lead Source"
 -msgid_plural "Lead Sources"
++#: js/LeadEditDialog.js:246
++msgid ""
++"You do not have the run right for the Tasks application or it is not "
++"activated."
 +msgstr ""
 +
- #: js/LeadGridContactFilter.js:54
- msgid "CRM Role"
++#: js/LeadEditDialog.js:257
++msgid ""
++"You do not have the run right for the Sales application or it is not "
++"activated."
 +msgstr ""
 +
- #: js/LeadType.js:29
- msgid "Lead Type"
- msgid_plural "Lead Types"
++#: js/LeadEditDialog.js:274 js/AddToLeadPanel.js:73 js/Model.js:52
++msgid "Lead"
++msgid_plural "Leads"
  msgstr[0] ""
  msgstr[1] ""
  
- #: js/LeadType.js:134
- msgid "Add a Leadtype..."
 -#: js/LeadSource.js:136
 -msgid "Add a Leadsource..."
++#: js/LeadEditDialog.js:301
++msgid "Enter short name"
  msgstr ""
  
- #: js/LinkGridPanel.js:34
- #, python-brace-format
- msgid "Add new {0}"
 -#: js/AdminPanel.js:122 js/LeadGridDetailsPanel.js:194
 -#: js/LeadGridDetailsPanel.js:227
 -msgid "Leadstates"
++#: js/LeadEditDialog.js:386
++msgid "Expected turnover"
  msgstr ""
  
- #: js/LinkGridPanel.js:56 js/Product.js:185
- #, python-brace-format
- msgid "Unlink {0}"
 -#: js/AdminPanel.js:126 js/LeadGridDetailsPanel.js:216
 -msgid "Leadtypes"
++#: js/LeadEditDialog.js:395 js/LeadGridPanel.js:152 js/Model.js:120
++msgid "Resubmission Date"
  msgstr ""
  
- #: js/LinkGridPanel.js:57 js/Product.js:186
- #, python-brace-format
- msgid "Unlink selected {0}"
 -#: js/AdminPanel.js:130 js/LeadGridDetailsPanel.js:205
 -msgid "Leadsources"
++#: js/LeadEditDialog.js:414 js/LeadGridPanel.js:150 js/Model.js:119
++#: js/LeadGridDetailsPanel.js:449
++msgid "Estimated end"
  msgstr ""
  
- #: js/LinkGridPanel.js:72
- #, python-brace-format
- msgid "Edit {0}"
 -#: js/AdminPanel.js:138
 -msgid "Defaults"
++#: js/LeadEditDialog.js:446 js/Product.js:139
++msgid "Description"
 +msgstr ""
 +
- #: js/LinkGridPanel.js:73
- #, python-brace-format
- msgid "Edit selected {0}"
++#: js/LeadEditDialog.js:460
++msgid "Enter description"
  msgstr ""
  
- #: js/Product.js:134
- msgid "Product"
+ #: js/AddToLeadPanel.js:31
+ msgid "Please choose the Lead to add the contacts to"
  msgstr ""
  
- #: js/Product.js:139 js/LeadEditDialog.js:444
- msgid "Description"
+ #: js/AddToLeadPanel.js:36
+ msgid "Please select the attenders' role"
  msgstr ""
  
- #: js/Product.js:146
- msgid "Price"
+ #: js/AddToLeadPanel.js:74
+ msgid "Select Lead"
  msgstr ""
  
- #: js/Product.js:158
- msgid "Quantity"
+ #: js/AddToLeadPanel.js:78 js/Contact.js:252 Controller/Lead.php:195
+ msgid "Role"
  msgstr ""
  
- #: js/Product.js:216
- msgid "Search for Products to add ..."
+ #: js/AddToLeadPanel.js:79
+ msgid "Select Role"
+ msgstr ""
+ #: js/AddToLeadPanel.js:93
+ #, python-brace-format
+ msgid "Adding {0} contacts to lead"
+ msgstr ""
 -#: js/LeadState.js:32
 -msgid "Lead State"
 -msgid_plural "Lead States"
 -msgstr[0] ""
 -msgstr[1] ""
++#: js/LeadGridContactFilter.js:47
++msgid "Contact"
++msgstr ""
 -#: js/LeadState.js:166
 -msgid "Add a Leadstate..."
++#: js/LeadGridContactFilter.js:54
++msgid "CRM Role"
 +msgstr ""
 +
 +#: js/LeadGridPanel.js:139
 +msgid "Lead id"
 +msgstr ""
 +
 +#: js/LeadGridPanel.js:140
 +msgid "Tags"
 +msgstr ""
 +
 +#: js/LeadGridPanel.js:141 js/Model.js:108
 +msgid "Lead name"
 +msgstr ""
 +
- #: js/LeadGridPanel.js:149 js/Model.js:118 js/LeadEditDialog.js:412
- #: js/LeadGridDetailsPanel.js:449
- msgid "Estimated end"
- msgstr ""
- #: js/LeadGridPanel.js:150
++#: js/LeadGridPanel.js:151
 +msgid "Probable Turnover"
 +msgstr ""
 +
- #: js/LeadGridPanel.js:151 js/Model.js:119 js/LeadEditDialog.js:393
- msgid "Resubmission Date"
- msgstr ""
- #: js/LeadGridPanel.js:194
++#: js/LeadGridPanel.js:195
 +msgid "Export Lead"
 +msgstr ""
 +
- #: js/LeadGridPanel.js:203
++#: js/LeadGridPanel.js:204
 +msgid "Export as PDF"
 +msgstr ""
 +
- #: js/LeadGridPanel.js:210
++#: js/LeadGridPanel.js:211
 +msgid "Export as CSV"
 +msgstr ""
 +
- #: js/LeadGridPanel.js:217
++#: js/LeadGridPanel.js:218
 +msgid "Export as ODS"
 +msgstr ""
 +
- #: js/LeadGridPanel.js:224
++#: js/LeadGridPanel.js:225
 +msgid "Export as XLS"
  msgstr ""
  
 -#: js/Contact.js:231 Export/Pdf.php:211
 -msgid "Address"
 -msgstr ""
 -
+ #: js/Contact.js:162
+ msgid "Change type to Customer"
+ msgstr ""
+ #: js/Contact.js:172
+ msgid "Change type to Responsible"
+ msgstr ""
+ #: js/Contact.js:182
+ msgid "Change type to Partner"
+ msgstr ""
+ #: js/Contact.js:193
+ msgid "Change contact type"
+ msgstr ""
+ #: js/Contact.js:205
+ msgid "Search for Contacts to add ..."
+ msgstr ""
+ #: js/Contact.js:222
+ msgid "Name"
+ msgstr ""
 -#: js/LeadGridDetailsPanel.js:51
 -msgid "Mobile"
+ #: js/Contact.js:242
+ msgid "Data"
+ msgstr ""
+ #: js/Contact.js:245 js/LeadGridDetailsPanel.js:48
+ msgid "Phone"
+ msgstr ""
+ #: js/Contact.js:246
+ msgid "Cellphone"
+ msgstr ""
 +#: js/LeadStateFilterModel.js:37
 +msgid "Show closed"
  msgstr ""
  
- #: js/Model.js:52 js/LeadEditDialog.js:274 js/AddToLeadPanel.js:73
- msgid "Lead"
- msgid_plural "Leads"
- msgstr[0] ""
- msgstr[1] ""
 -#: js/LeadGridDetailsPanel.js:54
 -msgid "Fax"
++#: js/Product.js:134
++msgid "Product"
+ msgstr ""
 -#: js/LeadGridDetailsPanel.js:57
 -msgid "E-Mail"
++#: js/Product.js:146
++msgid "Price"
+ msgstr ""
 -#: js/LeadGridDetailsPanel.js:60
 -msgid "Web"
++#: js/Product.js:158
++msgid "Quantity"
++msgstr ""
++
++#: js/Product.js:185 js/LinkGridPanel.js:56
++#, python-brace-format
++msgid "Unlink {0}"
++msgstr ""
++
++#: js/Product.js:186 js/LinkGridPanel.js:57
++#, python-brace-format
++msgid "Unlink selected {0}"
++msgstr ""
++
++#: js/Product.js:216
++msgid "Search for Products to add ..."
++msgstr ""
++
++#: js/Crm.js:24
++msgid "New Lead"
+ msgstr ""
  
  #: js/Model.js:56
  msgid "lead list"
@@@ -363,244 -413,192 +428,180 @@@ msgstr "
  msgid "Quick Search"
  msgstr ""
  
--#: js/Model.js:113
++#: js/Model.js:114
  msgid "Last Modified Time"
  msgstr ""
  
--#: js/Model.js:114
++#: js/Model.js:115
  msgid "Last Modified By"
  msgstr ""
  
--#: js/Model.js:115
++#: js/Model.js:116
  msgid "Creation Time"
  msgstr ""
  
--#: js/Model.js:116
++#: js/Model.js:117
  msgid "Created By"
  msgstr ""
  
- #: js/Model.js:159
 -#: js/Model.js:155
++#: js/Model.js:160
  msgid "Settings"
  msgid_plural "Settings"
  msgstr[0] ""
  msgstr[1] ""
  
- #: js/Model.js:162
 -#: js/Model.js:158
++#: js/Model.js:163
  msgid "record list"
  msgid_plural "record lists"
  msgstr[0] ""
  msgstr[1] ""
  
- #: js/LeadEditDialog.js:246
- msgid ""
- "You do not have the run right for the Tasks application or it is not "
- "activated."
- msgstr ""
- #: js/LeadEditDialog.js:257
- msgid ""
- "You do not have the run right for the Sales application or it is not "
- "activated."
- msgstr ""
- #: js/LeadEditDialog.js:301
- msgid "Enter short name"
 -#: js/LeadGridContactFilter.js:47
 -msgid "Contact"
--msgstr ""
++#: js/LeadState.js:32
++msgid "Lead State"
++msgid_plural "Lead States"
++msgstr[0] ""
++msgstr[1] ""
  
- #: js/LeadEditDialog.js:385
- msgid "Expected turnover"
 -#: js/LeadGridContactFilter.js:54
 -msgid "CRM Role"
++#: js/LeadState.js:166
++msgid "Add a Leadstate..."
  msgstr ""
  
- #: js/LeadEditDialog.js:458
- msgid "Enter description"
+ #: js/LinkGridPanel.js:34
+ #, python-brace-format
+ msgid "Add new {0}"
  msgstr ""
  
- #: js/Crm.js:24
- msgid "New Lead"
+ #: js/LinkGridPanel.js:72
+ #, python-brace-format
+ msgid "Edit {0}"
  msgstr ""
  
- #: js/LeadGridDetailsPanel.js:48 js/Contact.js:245
- msgid "Phone"
+ #: js/LinkGridPanel.js:73
+ #, python-brace-format
+ msgid "Edit selected {0}"
  msgstr ""
  
 -#: js/LeadStateFilterModel.js:37
 -msgid "Show closed"
 -msgstr ""
 -
 -#: Controller/Lead.php:194
 -msgid "State"
 -msgstr ""
 -
 -#: Controller/Lead.php:196
 -msgid "Source"
 -msgstr ""
 -
 -#: Controller/Lead.php:198
 -msgid "Scheduled end"
 -msgstr ""
 -
 -#: Controller/Lead.php:202
 -msgid "Folder"
 +#: js/LeadGridDetailsPanel.js:51
 +msgid "Mobile"
  msgstr ""
  
 -#: Controller/Lead.php:203
 -msgid "Updated by"
 +#: js/LeadGridDetailsPanel.js:54
 +msgid "Fax"
  msgstr ""
  
 -#: Controller/Lead.php:204
 -msgid "Updated Fields:"
 +#: js/LeadGridDetailsPanel.js:57
 +msgid "E-Mail"
  msgstr ""
  
 -#: Controller/Lead.php:205
 -#, python-format
 -msgid "%s changed from %s to %s."
 +#: js/LeadGridDetailsPanel.js:60
 +msgid "Web"
  msgstr ""
  
- #: js/LeadSource.js:29
- msgid "Lead Source"
- msgid_plural "Lead Sources"
- msgstr[0] ""
- msgstr[1] ""
- #: js/LeadSource.js:136
- msgid "Add a Leadsource..."
- msgstr ""
- #: js/AddToLeadPanel.js:31
- msgid "Please choose the Lead to add the contacts to"
- msgstr ""
- #: js/AddToLeadPanel.js:36
- msgid "Please select the attenders' role"
- msgstr ""
- #: js/AddToLeadPanel.js:74
- msgid "Select Lead"
- msgstr ""
- #: js/AddToLeadPanel.js:78 js/Contact.js:252 Controller/Lead.php:195
- msgid "Role"
- msgstr ""
- #: js/AddToLeadPanel.js:79
- msgid "Select Role"
- msgstr ""
- #: js/AddToLeadPanel.js:93
- #, python-brace-format
- msgid "Adding {0} contacts to lead"
- msgstr ""
- #: js/Contact.js:162
- msgid "Change type to Customer"
 -#: Controller/Lead.php:211
 -#, python-format
 -msgid "Lead %s has been changed"
++#: js/LeadGridDetailsPanel.js:439 js/Task.js:266
++msgid "Status"
  msgstr ""
  
- #: js/Contact.js:172
- msgid "Change type to Responsible"
 -#: Controller/Lead.php:213
 -#, python-format
 -msgid "Lead %s has been created"
++#: js/Task.js:105
++msgid "No Tasks to display"
  msgstr ""
  
- #: js/Contact.js:182
- msgid "Change type to Partner"
 -#: Export/Pdf.php:75
 -msgid "Lead Data"
++#: js/Task.js:216
++msgid "Summary"
  msgstr ""
  
- #: js/Contact.js:193
- msgid "Change contact type"
 -#: Export/Pdf.php:99
 -msgid "End Scheduled"
++#: js/Task.js:220
++msgid "Add a task..."
  msgstr ""
  
- #: js/Contact.js:205
- msgid "Search for Contacts to add ..."
 -#: Export/Pdf.php:184
 -msgid "Contacts"
++#: js/Task.js:253
++msgid "Percent"
  msgstr ""
  
- #: js/Contact.js:222
- msgid "Name"
 -#: Export/Pdf.php:218 Controller.php:177
 -msgid "Telephone"
++#: js/Task.js:282
++msgid "Organizer"
  msgstr ""
  
- #: js/Contact.js:242
- msgid "Data"
 -#: Export/Pdf.php:219 Controller.php:176
 -msgid "Email"
--msgstr ""
++#: js/LeadSource.js:29
++msgid "Lead Source"
++msgid_plural "Lead Sources"
++msgstr[0] ""
++msgstr[1] ""
  
- #: js/Contact.js:246
- msgid "Cellphone"
 -#: Export/Pdf.php:315
 -msgid "low"
++#: js/LeadSource.js:153
++msgid "Add a Leadsource..."
  msgstr ""
  
 -#: Export/Pdf.php:316
 -msgid "normal"
 +#: Controller/Lead.php:194
 +msgid "State"
  msgstr ""
  
 -#: Export/Pdf.php:317
 -msgid "high"
 +#: Controller/Lead.php:196
 +msgid "Source"
  msgstr ""
  
 -#: Export/Pdf.php:318
 -msgid "urgent"
 +#: Controller/Lead.php:198
 +msgid "Scheduled end"
  msgstr ""
  
 -#: Acl/Rights.php:106
 -msgid "manage shared lead folders"
 +#: Controller/Lead.php:202
 +msgid "Folder"
  msgstr ""
  
 -#: Acl/Rights.php:107
 -msgid "Create new shared lead folders"
 +#: Controller/Lead.php:203
 +msgid "Updated by"
  msgstr ""
  
 -#: Acl/Rights.php:110
 -msgid "manage shared leads favorites"
 +#: Controller/Lead.php:204
 +msgid "Updated Fields:"
  msgstr ""
  
 -#: Acl/Rights.php:111
 -msgid "Create or update shared leads favorites"
 +#: Controller/Lead.php:205
 +#, python-format
 +msgid "%s changed from %s to %s."
  msgstr ""
  
 -#: Controller.php:117
 +#: Controller/Lead.php:211
  #, python-format
 -msgid "%s's personal leads"
 +msgid "Lead %s has been changed"
  msgstr ""
  
 -#: Controller.php:164
 -msgid "Reseller"
 +#: Controller/Lead.php:213
 +#, python-format
 +msgid "Lead %s has been created"
  msgstr ""
  
 -#: Controller.php:167
 -msgid "open"
 +#: Preference.php:37
 +msgid "All leads"
  msgstr ""
  
 -#: Controller.php:168
 -msgid "contacted"
 +#: Preference.php:81
 +msgid "Default Lead List"
  msgstr ""
  
 -#: Controller.php:169
 -msgid "waiting for feedback"
 +#: Preference.php:82
 +msgid "The default list for new leads"
  msgstr ""
  
 -#: Controller.php:170
 -msgid "quote sent"
 +#: Preference.php:86
 +msgid "Get Notification Emails"
  msgstr ""
  
 -#: Controller.php:171
 -msgid "accepted"
 +#: Preference.php:87
 +msgid "The level of actions you want to be notified about."
  msgstr ""
  
 -#: Controller.php:172
 -msgid "lost"
 +#: Preference.php:91
 +msgid "Send Notifications Emails for own actions"
  msgstr ""
  
 -#: Controller.php:175
 -msgid "Market"
 +#: Preference.php:92
 +msgid "Get notifications emails for actions you did yourself"
  msgstr ""
  
 -#: Controller.php:178
 -msgid "Website"
 +#: Preference.php:95
 +msgid "Default Favorite"
  msgstr ""
  
 -msgid "Organizer"
 +#: Preference.php:96
 +msgid "The default favorite which is loaded on crm startup"
  msgstr ""
- #: Setup/Initialize.php:36 Setup/Update/Release3.php:37
- msgid "All leads I have read grants for"
- msgstr ""
- #: Setup/Initialize.php:43
- msgid "Last modified by me"
- msgstr ""
- #: Setup/Initialize.php:44
- msgid "All leads that I have last modified"
- msgstr ""
- #: Setup/Initialize.php:53
- msgid "My leads"
- msgstr ""
- #: Setup/Initialize.php:54
- msgid "All leads that I am responsible for"
- msgstr ""
- #: Setup/Initialize.php:67
- msgid "Leads with overdue tasks"
- msgstr ""
@@@ -119,6 -208,4 +208,4 @@@ class Sales_Acl_Rights extends Tinebase
          $rightDescriptions = array_merge($rightDescriptions, parent::getTranslatedRightDescriptions());
          return $rightDescriptions;
      }
-     
 -}
 +}
Simple merge
@@@ -27,12 -27,12 +27,12 @@@ class Sales_Setup_Initialize extends Se
              'model'             => 'Sales_Model_ProductFilter',
          );
          
 -        $pfe = new Tinebase_PersistentFilter_Backend_Sql();
 +        $pfe = Tinebase_PersistentFilter::getInstance();
          
 -        $pfe->create(new Tinebase_Model_PersistentFilter(
 +        $pfe->createDuringSetup(new Tinebase_Model_PersistentFilter(
              array_merge($commonValues, array(
                  'name'              => "My Products", // _('My Products')
-                 'description'       => "Products created by me", // _('Products created by myself')
+                 'description'       => "Products created by me", // _('Products created by me')
                  'filters'           => array(
                      array(
                          'field'     => 'created_by',
@@@ -123,161 -142,252 +123,444 @@@ class Sales_Setup_Update_Release8 exten
          Setup_Controller::getInstance()->createImportExportDefinitions(Tinebase_Application::getInstance()->getApplicationByName('Sales'));
      
          $this->setTableVersion('sales_numbers', 2);
-         Tinebase_Core::set(Tinebase_Core::USER, $groupMembers[0]);
 +        $this->setApplicationVersion('Sales', '8.3');
 +    }
 +    
 +    /**
 +     * adds "start_date", "end_date" to contract and removes "status", "cleared", "cleared_in"
 +     */
 +    protected function _updateContractsFields()
 +    {
 +        $adminGroup   = Tinebase_Group::getInstance()->getDefaultAdminGroup();
 +        $groupMembers = Tinebase_Group::getInstance()->getGroupMembers($adminGroup->getId());
 +        
-         // cleared, cleared_in, status gets deleted, if the update is not called on cli
-         $controller = Sales_Controller_Contract::getInstance();
 +        
-         $table = new Zend_Db_Table(SQL_TABLE_PREFIX . 'sales_contracts', new Zend_Db_Table_Definition(array(
-             'id' => array('name' => 'id'),
-             'status' => array('name' => 'status'),
-             'cleared' => array('name' => 'cleared'),
-             'cleared_in' => array('name' => 'cleared_in'),
-             'description' => array('name' => 'description'),
-             'last_modified_time' => array('name' => 'last_modified_time')
-         )));
-         
-         $count = 50;
-         $offset = 0;
-         $more = true;
-         $updateDescription = $statusConfig = $clearedConfig = $setEndDate = array();
-         
-         $appId = Tinebase_Application::getInstance()->getApplicationByName('Tinebase')->getId();
-         $pref = Tinebase_Core::getPreference('Tinebase');
-         Tinebase_Core::setupUserLocale($pref->locale);
-         $t = Tinebase_Translation::getTranslation('Sales', Tinebase_Core::getLocale());
-         
-         $config = Sales_Config::getInstance()->get('contractStatus');
-         foreach($config['records'] as $cfg) {
-             $statusConfig[$cfg['id']] = $cfg['value'];
-         }
-         
-         $config = Sales_Config::getInstance()->get('contractCleared');
-         
-         foreach($config['records'] as $cfg) {
-             $clearedConfig[$cfg['id']] = $cfg['value'];
-         }
-         
-         while($more) {
-             $results = $table->fetchAll(NULL, NULL, $count, $offset)->toArray();
-             foreach ($results as $row) {
-         
-                 if ($row['status'] == 'CLOSED') {
-                     $setEndDate[$row['id']] = $row['last_modified_time'];
-                 }
-         
-         
-                 $desc = $row['description'];
-                 $desc .= PHP_EOL . '---' . PHP_EOL . PHP_EOL;
-                 $contents = FALSE;
-         
-                 if (! empty($row['status'])) {
-                     $desc .= $t->_('Status') . ': ';
-                     $desc .= (isset($statusConfig[$row['status']]) ? $t->_($statusConfig[$row['status']]) : $row['status']);
-                     $desc .= PHP_EOL;
-                     $contents = TRUE;
-                 }
-                 if (! empty($row['cleared'])) {
-                     $desc .= $t->_('Cleared') . ': ';
-                     $desc .= (isset($clearedConfig[$row['cleared']]) ? $t->_($clearedConfig[$row['cleared']]) : $row['cleared']);
-                     $desc .= PHP_EOL;
-                     $contents = TRUE;
-                 }
-                 if (! empty($row['cleared_in'])) {
-                     $desc .= $t->_('Cleared In') . ': ';
-                     $desc .= $row['cleared_in'];
-                     $desc .= PHP_EOL;
-                     $contents = TRUE;
++        if (count($groupMembers) > 0) {
++            Tinebase_Core::set(Tinebase_Core::USER, $groupMembers[0]);
 +        
-         
-                 if ($contents) {
-                     $updateDescription[$row['id']] = $desc . PHP_EOL;
++            // cleared, cleared_in, status gets deleted, if the update is not called on cli
++            $controller = Sales_Controller_Contract::getInstance();
++            
++            $table = new Zend_Db_Table(SQL_TABLE_PREFIX . 'sales_contracts', new Zend_Db_Table_Definition(array(
++                'id' => array('name' => 'id'),
++                'status' => array('name' => 'status'),
++                'cleared' => array('name' => 'cleared'),
++                'cleared_in' => array('name' => 'cleared_in'),
++                'description' => array('name' => 'description'),
++                'last_modified_time' => array('name' => 'last_modified_time')
++            )));
++            
++            $count = 50;
++            $offset = 0;
++            $more = true;
++            $updateDescription = $statusConfig = $clearedConfig = $setEndDate = array();
++            
++            $appId = Tinebase_Application::getInstance()->getApplicationByName('Tinebase')->getId();
++            $pref = Tinebase_Core::getPreference('Tinebase');
++            Tinebase_Core::setupUserLocale($pref->locale);
++            $t = Tinebase_Translation::getTranslation('Sales', Tinebase_Core::getLocale());
++            
++            $config = Sales_Config::getInstance()->get('contractStatus');
++            foreach($config['records'] as $cfg) {
++                $statusConfig[$cfg['id']] = $cfg['value'];
++            }
++            
++            $config = Sales_Config::getInstance()->get('contractCleared');
++            
++            foreach($config['records'] as $cfg) {
++                $clearedConfig[$cfg['id']] = $cfg['value'];
++            }
++            
++            while($more) {
++                $results = $table->fetchAll(NULL, NULL, $count, $offset)->toArray();
++                foreach ($results as $row) {
++            
++                    if ($row['status'] == 'CLOSED') {
++                        $setEndDate[$row['id']] = $row['last_modified_time'];
++                    }
++            
++            
++                    $desc = $row['description'];
++                    $desc .= PHP_EOL . '---' . PHP_EOL . PHP_EOL;
++                    $contents = FALSE;
++            
++                    if (! empty($row['status'])) {
++                        $desc .= $t->_('Status') . ': ';
++                        $desc .= (isset($statusConfig[$row['status']]) ? $t->_($statusConfig[$row['status']]) : $row['status']);
++                        $desc .= PHP_EOL;
++                        $contents = TRUE;
++                    }
++                    if (! empty($row['cleared'])) {
++                        $desc .= $t->_('Cleared') . ': ';
++                        $desc .= (isset($clearedConfig[$row['cleared']]) ? $t->_($clearedConfig[$row['cleared']]) : $row['cleared']);
++                        $desc .= PHP_EOL;
++                        $contents = TRUE;
++                    }
++                    if (! empty($row['cleared_in'])) {
++                        $desc .= $t->_('Cleared In') . ': ';
++                        $desc .= $row['cleared_in'];
++                        $desc .= PHP_EOL;
++                        $contents = TRUE;
++                    }
++            
++                    if ($contents) {
++                        $updateDescription[$row['id']] = $desc . PHP_EOL;
++                    }
 +                }
-             }
-         
-             if (count($updateDescription) > 50) {
-                 foreach($controller->getMultiple(array_keys($updateDescription)) as $contr) {
-                     $contr->description = $updateDescription[$contr->getId()];
-                     $controller->update($contr, FALSE);
++            
++                if (count($updateDescription) > 50) {
++                    foreach($controller->getMultiple(array_keys($updateDescription)) as $contr) {
++                        $contr->description = $updateDescription[$contr->getId()];
++                        $controller->update($contr, FALSE);
++                    }
++                    $updateDescription = array();
 +                }
-                 $updateDescription = array();
++            
++                if (count($results) < $count) {
++                    $more = FALSE;
++                } else {
++                    $offset = $offset + $count;
 +                }
-         
-             if (count($results) < $count) {
-                 $more = FALSE;
-             } else {
-                 $offset = $offset + $count;
 +            }
-         foreach($controller->getMultiple(array_keys($updateDescription)) as $contr) {
-             $contr->description = $updateDescription[$contr->getId()];
-             $controller->update($contr, FALSE);
-         }
-         
++            
++            foreach($controller->getMultiple(array_keys($updateDescription)) as $contr) {
++                $contr->description = $updateDescription[$contr->getId()];
++                $controller->update($contr, FALSE);
 +            }
 +        }
 +        
 +        // remove deprecated sales contract fields
 +        foreach (array('status', 'cleared_in', 'cleared') as $colToDrop) {
 +            try {
 +                $this->_backend->dropCol('sales_contracts', $colToDrop);
 +            } catch (Zend_Db_Statement_Exception $zdse) {
 +                Tinebase_Exception::log($zdse);
 +            }
 +        }
 +        
 +        // add new sales contract fields
 +        $fields = array('<field>
 +            <name>start_date</name>
 +            <type>datetime</type>
 +        </field>','
 +        <field>
 +            <name>end_date</name>
 +            <type>datetime</type>
 +        </field>'
 +        );
 +        
 +        foreach($fields as $field) {
 +            $declaration = new Setup_Backend_Schema_Field_Xml($field);
 +            $this->_backend->addCol('sales_contracts', $declaration);
 +        }
 +        
 +        $table = new Zend_Db_Table(SQL_TABLE_PREFIX . 'sales_contracts', new Zend_Db_Table_Definition(array(
 +            'id' => array('name' => 'id'),
 +            'last_modified_time' => array('name' => 'last_modified_time'),
 +            'end_date' => array('name' => 'end_date'),
 +            'start_date' => array('name' => 'start_date'),
 +        )));
 +        
 +        
 +        $db = $table->getAdapter();
 +        $values = array_keys($setEndDate);
 +        if (! empty($values)) {
 +            $sql = 'UPDATE ' . $db->quoteIdentifier(SQL_TABLE_PREFIX . 'sales_contracts') . ' SET ' .
 +                $db->quoteIdentifier('start_date') . ' = ' . $db->quoteIdentifier('last_modified_time') . ', '.
 +                $db->quoteIdentifier('end_date') . ' = ' . $db->quoteIdentifier('last_modified_time') .
 +                ' WHERE ' . $db->quoteIdentifier('id') . $db->quoteInto(' IN (?)', $values);
 +            
 +            $db->query($sql);
 +        }
 +        
 +        if ($this->getTableVersion('sales_contracts') == 5) {
 +            $this->setTableVersion('sales_contracts', 6);
 +        } else {
 +            $this->setTableVersion('sales_contracts', 7);
 +        }
 +    }
 +    
 +    /**
++     * update to 8.4
++     * 
++     * switch to modelconfig, create divison module
++     * remove "status", "cleared", "cleared_in", but append values to the description field
++     */
++    public function update_3()
++    {
++        if (! $this->_backend->columnExists('seq', 'sales_divisions')) {
++            $this->_addDivisionsModlog();
++        }
++        
++        if (! $this->_backend->columnExists('start_date', 'sales_contracts')) {
++            $this->_updateContractsFields();
++        }
++        
+         $this->setApplicationVersion('Sales', '8.4');
+     }
+     
+     /**
++     * update to 8.5
++     * - update 256 char fields
++     * 
++     * @see 0008070: check index lengths
++     */
++    public function update_4()
++    {
++        $columns = array("sales_contracts" => array(
++                    "title" => "true",
++                    "cleared_in" => "false"
++                    )
++                );
++        
++        $this->truncateTextColumn($columns, 255);
++        $this->setTableVersion('sales_contracts', 6);
++        $this->setApplicationVersion('Sales', '8.5');
++    }
++
++    /**
+      * creates the customer and related address table
+      */
+     protected function _createCustomerAndAddressTables()
+     {
+         // create customer table
+         $tableDefinition = '<table>
+             <name>sales_customers</name>
+             <version>1</version>
+             <declaration>
+                 <field>
+                     <name>id</name>
+                     <type>text</type>
+                     <length>40</length>
+                     <notnull>true</notnull>
+                 </field>
+                 <field>
+                     <name>number</name>
+                     <type>integer</type>
+                     <notnull>true</notnull>
+                     <default>0</default>
+                     <length>32</length>
+                 </field>
+                 <field>
+                     <name>name</name>
+                     <type>text</type>
+                     <notnull>true</notnull>
+                 </field>
+                 <field>
+                     <name>description</name>
+                     <type>text</type>
+                     <notnull>false</notnull>
+                 </field>
+                 <field>
+                     <name>cpextern_id</name>
+                     <type>text</type>
+                     <length>40</length>
+                     <notnull>false</notnull>
+                 </field>
+                 <field>
+                     <name>cpintern_id</name>
+                     <type>text</type>
+                     <length>40</length>
+                     <notnull>false</notnull>
+                 </field>
+                 <field>
+                     <name>vatid</name>
+                     <type>text</type>
+                     <notnull>false</notnull>
+                 </field>
+                 <field>
+                     <name>url</name>
+                     <type>text</type>
+                     <notnull>false</notnull>
+                 </field>
+                 <field>
+                     <name>iban</name>
+                     <type>text</type>
+                     <notnull>false</notnull>
+                 </field>
+                 <field>
+                     <name>bic</name>
+                     <type>text</type>
+                     <notnull>false</notnull>
+                 </field>
+                 <field>
+                     <name>credit_term</name>
+                     <type>integer</type>
+                     <notnull>false</notnull>
+                     <length>10</length>
+                 </field>
+                 <field>
+                     <name>currency</name>
+                     <type>text</type>
+                     <notnull>false</notnull>
+                     <length>4</length>
+                 </field>
+                 <field>
+                     <name>currency_trans_rate</name>
+                     <type>float</type>
+                     <notnull>false</notnull>
+                 </field>
+                 <field>
+                     <name>discount</name>
+                     <type>float</type>
+                     <notnull>false</notnull>
+                 </field>
+                 <field>
+                     <name>created_by</name>
+                     <type>text</type>
+                     <length>40</length>
+                 </field>
+                 <field>
+                     <name>creation_time</name>
+                     <type>datetime</type>
+                 </field>
+                 <field>
+                     <name>last_modified_by</name>
+                     <type>text</type>
+                     <length>40</length>
+                 </field>
+                 <field>
+                     <name>last_modified_time</name>
+                     <type>datetime</type>
+                 </field>
+                 <field>
+                     <name>is_deleted</name>
+                     <type>boolean</type>
+                     <default>false</default>
+                 </field>
+                 <field>
+                     <name>deleted_by</name>
+                     <type>text</type>
+                     <length>40</length>
+                 </field>
+                 <field>
+                     <name>deleted_time</name>
+                     <type>datetime</type>
+                 </field>
+                 <field>
+                     <name>seq</name>
+                     <type>integer</type>
+                     <notnull>true</notnull>
+                     <default>0</default>
+                 </field>
+                 <index>
+                     <name>id</name>
+                     <primary>true</primary>
+                     <field>
+                         <name>id</name>
+                     </field>
+                 </index>
+             </declaration>
+         </table>';
+     
+         $table = Setup_Backend_Schema_Table_Factory::factory('Xml', $tableDefinition);
+         $this->_backend->createTable($table);
+     
+         // create addresses table
+         $tableDefinition = '<table>
+             <name>sales_addresses</name>
+             <version>1</version>
+             <declaration>
+                 <field>
+                     <name>id</name>
+                     <type>text</type>
+                     <length>40</length>
+                     <notnull>true</notnull>
+                 </field>
+                 <field>
+                     <name>customer_id</name>
+                     <type>text</type>
+                     <length>40</length>
+                     <notnull>true</notnull>
+                 </field>
+                 <field>
+                     <name>type</name>
+                     <type>text</type>
+                     <notnull>true</notnull>
+                     <default>postal</default>
+                     <length>64</length>
+                 </field>
+                 <field>
+                     <name>prefix1</name>
+                     <type>text</type>
+                     <notnull>false</notnull>
+                 </field>
+                 <field>
+                     <name>prefix2</name>
+                     <type>text</type>
+                     <notnull>false</notnull>
+                 </field>
+                 <field>
+                     <name>street</name>
+                     <type>text</type>
+                     <notnull>false</notnull>
+                 </field>
+                 <field>
+                     <name>postalcode</name>
+                     <type>text</type>
+                     <notnull>false</notnull>
+                 </field>
+                 <field>
+                     <name>locality</name>
+                     <type>text</type>
+                     <notnull>false</notnull>
+                 </field>
+                 <field>
+                     <name>region</name>
+                     <type>text</type>
+                     <notnull>false</notnull>
+                 </field>
+                 <field>
+                     <name>countryname</name>
+                     <type>text</type>
+                     <notnull>false</notnull>
+                 </field>
+                 <field>
+                     <name>pobox</name>
+                     <type>text</type>
+                     <notnull>false</notnull>
+                 </field>
+                 <field>
+                     <name>custom1</name>
+                     <type>text</type>
+                     <notnull>false</notnull>
+                 </field>
+                 <index>
+                     <name>id</name>
+                     <primary>true</primary>
+                     <field>
+                         <name>id</name>
+                     </field>
+                 </index>
+             </declaration>
+         </table>';
+     
+         $table = Setup_Backend_Schema_Table_Factory::factory('Xml', $tableDefinition);
+         $this->_backend->createTable($table);
+     
+         // create one persistent filter (looks better)
+     
+         $pfe = new Tinebase_PersistentFilter_Backend_Sql();
+     
+         $pfe->create(new Tinebase_Model_PersistentFilter(
+             array(
+                 'account_id'        => NULL,
+                 'application_id'    => Tinebase_Application::getInstance()->getApplicationByName('Sales')->getId(),
+                 'model' => 'Sales_Model_CustomerFilter',
+                 'name'        => "All Customers", // _('All Customers')
+                 'description' => "All customer records", // _('All customer records')
+                 'filters'     => array(
+                     array(
+                         'field'     => 'created_by',
+                         'operator'  => 'equals',
+                         'value'     => Tinebase_Model_User::CURRENTACCOUNT
+                     )
+                 ),
+             )
+         ));
+     }
+     
+     /**
       * adds modlog to sales-divisions
       */
      protected function _addDivisionsModlog()
      }
      
      /**
-      * update to 8.4
+      * creates invoice table and keyfields, config and so on
+      */
+     protected function _createInvoiceTableAndRelated()
+     {
+         // create invoice table
+         $tableDefinition = '<table>
+             <name>sales_invoices</name>
+             <version>1</version>
+             <declaration>
+                 <field>
+                     <name>id</name>
+                     <type>text</type>
+                     <length>40</length>
+                     <notnull>true</notnull>
+                 </field>
+                 <field>
+                     <name>number</name>
+                     <type>text</type>
+                     <length>64</length>
+                     <notnull>false</notnull>
+                 </field>
+                 <field>
+                     <name>description</name>
+                     <type>text</type>
+                     <length>256</length>
+                     <notnull>true</notnull>
+                 </field>
+                 <field>
+                     <name>address_id</name>
+                     <type>text</type>
+                     <length>40</length>
+                     <notnull>true</notnull>
+                 </field>
+                 <field>
+                     <name>fixed_address</name>
+                     <type>text</type>
+                     <notnull>false</notnull>
+                 </field>
+                 <field>
+                     <name>is_auto</name>
+                     <type>boolean</type>
+                     <default>false</default>
+                 </field>
+                 <field>
+                     <name>date</name>
+                     <type>date</type>
+                 </field>
+                 <field>
+                     <name>start_date</name>
+                     <type>datetime</type>
+                 </field>
+                 <field>
+                     <name>end_date</name>
+                     <type>datetime</type>
+                 </field>
+                 <field>
+                     <name>credit_term</name>
+                     <type>integer</type>
+                     <notnull>false</notnull>
+                     <length>10</length>
+                 </field>
+                 <field>
+                     <name>costcenter_id</name>
+                     <type>text</type>
+                     <length>40</length>
+                     <notnull>true</notnull>
+                 </field>
+                 <field>
+                     <name>cleared</name>
+                     <type>text</type>
+                     <length>64</length>
+                     <default>TO_CLEAR</default>
+                 </field>
+                 <field>
+                     <name>type</name>
+                     <type>text</type>
+                 </field>
+                 <field>
+                     <name>created_by</name>
+                     <type>text</type>
+                     <length>40</length>
+                 </field>
+                 <field>
+                     <name>creation_time</name>
+                     <type>datetime</type>
+                 </field>
+                 <field>
+                     <name>last_modified_by</name>
+                     <type>text</type>
+                     <length>40</length>
+                 </field>
+                 <field>
+                     <name>last_modified_time</name>
+                     <type>datetime</type>
+                 </field>
+                 <field>
+                     <name>is_deleted</name>
+                     <type>boolean</type>
+                     <default>false</default>
+                 </field>
+                 <field>
+                     <name>deleted_by</name>
+                     <type>text</type>
+                     <length>40</length>
+                 </field>
+                 <field>
+                     <name>deleted_time</name>
+                     <type>datetime</type>
+                 </field>
+                 <field>
+                     <name>seq</name>
+                     <type>integer</type>
+                     <notnull>true</notnull>
+                     <default>0</default>
+                 </field>
+                 <index>
+                     <name>id</name>
+                     <primary>true</primary>
+                     <field>
+                         <name>id</name>
+                     </field>
+                 </index>
+             </declaration>
+         </table>';
+     
+         $table = Setup_Backend_Schema_Table_Factory::factory('Xml', $tableDefinition);
+         $this->_backend->createTable($table);
+     
+         // create keyfield config
+         $cb = new Tinebase_Backend_Sql(array(
+             'modelName' => 'Tinebase_Model_Config',
+             'tableName' => 'config',
+         ));
+         $appId = Tinebase_Application::getInstance()->getApplicationByName('Sales')->getId();
+     
+         $tc = array(
+             'name'    => Sales_Config::INVOICE_TYPE,
+             'records' => array(
+                 array('id' => 'INVOICE',  'value' => 'invoice',   'system' => TRUE),
+                 array('id' => 'REVERSAL', 'value' => 'reversal',  'system' => TRUE),
+                 array('id' => 'CREDIT',   'value' => 'credit',    'system' => TRUE)
+             ),
+         );
+     
+         $cb->create(new Tinebase_Model_Config(array(
+             'application_id'    => $appId,
+             'name'              => Sales_Config::INVOICE_TYPE,
+             'value'             => json_encode($tc),
+         )));
+     
+         // create cleared state keyfields
+         $tc = array(
+             'name'    => Sales_Config::INVOICE_CLEARED,
+             'records' => array(
+                 array('id' => 'TO_CLEAR',  'value' => 'to clear',   'system' => TRUE),
+                 array('id' => 'CLEARED', 'value' => 'cleared',  'system' => TRUE),
+             ),
+         );
+     
+         $cb->create(new Tinebase_Model_Config(array(
+             'application_id'    => $appId,
+             'name'              => Sales_Config::INVOICE_CLEARED,
+             'value'             => json_encode($tc),
+         )));
+     }
+     
+     /**
+      * adds invoice related fields to contract
+      */
+     protected function _addInvoiceFieldsToContract()
+     {
+         // add new sales contract fields
+         $fields = array('<field>
+             <name>billing_address_id</name>
+             <type>text</type>
+             <length>40</length>
+             <notnull>false</notnull>
+         </field>','
+         <field>
+             <name>last_autobill</name>
+             <type>datetime</type>
+             <notnull>false</notnull>
+             <default>null</default>
+         </field>','
+         <field>
+             <name>interval</name>
+             <type>integer</type>
+             <default>1</default>
+         </field>','
+         <field>
+             <name>billing_point</name>
+             <type>text</type>
+             <length>64</length>
+             <notnull>false</notnull>
+         </field>'
+         );
+     
+         foreach($fields as $field) {
+             $declaration = new Setup_Backend_Schema_Field_Xml($field);
+             $this->_backend->addCol('sales_contracts', $declaration);
+         }
+     
+         if ($this->getTableVersion('sales_contracts') == 5) {
+             $this->setTableVersion('sales_contracts', 6);
+         } else {
+             $this->setTableVersion('sales_contracts', 7);
+         }
+     }
+     
+     /**
+      * adds modlog to addresses to prevent data loss
+      */
+     protected function _addModlogToAddresses()
+     {
+         $fields = array('<field>
+                     <name>start_date</name>
+                     <type>datetime</type>
+                 </field>','
+                 <field>
+                     <name>end_date</name>
+                     <type>datetime</type>
+                 </field>','
+                 <field>
+                     <name>created_by</name>
+                     <type>text</type>
+                     <length>40</length>
+                 </field>','
+                 <field>
+                     <name>creation_time</name>
+                     <type>datetime</type>
+                 </field>','
+                 <field>
+                     <name>last_modified_by</name>
+                     <type>text</type>
+                     <length>40</length>
+                 </field>','
+                 <field>
+                     <name>last_modified_time</name>
+                     <type>datetime</type>
+                 </field>','
+                 <field>
+                     <name>is_deleted</name>
+                     <type>boolean</type>
+                     <default>false</default>
+                 </field>','
+                 <field>
+                     <name>deleted_by</name>
+                     <type>text</type>
+                     <length>40</length>
+                 </field>','
+                 <field>
+                     <name>deleted_time</name>
+                     <type>datetime</type>
+                 </field>','
+                 <field>
+                     <name>seq</name>
+                     <type>integer</type>
+                     <notnull>true</notnull>
+                     <default>0</default>
+                 </field>');
+     
+         foreach($fields as $field) {
+             $declaration = new Setup_Backend_Schema_Field_Xml($field);
+             $this->_backend->addCol('sales_addresses', $declaration);
+         }
+     
+         $this->setTableVersion('sales_addresses', 2);
+     }
+     
+     /**
 -     * adds "start_date", "end_date" to contract and removes "status", "cleared", "cleared_in"
 -     */
 -    protected function _updateContractsFields()
 -    {
 -        if (php_sapi_name() == 'cli') {
 -            echo 'The Users\' locale you use here will be used to translate the fields "status", "cleared", "cleared_in":';
 -        }
 -        
 -        $this->promptForUsername();
 -        
 -        $controller = Sales_Controller_Contract::getInstance();
 -        
 -        $table = new Zend_Db_Table(SQL_TABLE_PREFIX . 'sales_contracts', new Zend_Db_Table_Definition(array(
 -            'id' => array('name' => 'id'),
 -            'status' => array('name' => 'status'),
 -            'cleared' => array('name' => 'cleared'),
 -            'cleared_in' => array('name' => 'cleared_in'),
 -            'description' => array('name' => 'description'),
 -            'last_modified_time' => array('name' => 'last_modified_time')
 -        )));
 -        
 -        $count = 50;
 -        $offset = 0;
 -        $more = true;
 -        $updateDescription = $statusConfig = $clearedConfig = $setEndDate = array();
 -        
 -        $appId = Tinebase_Application::getInstance()->getApplicationByName('Tinebase')->getId();
 -        $pref = Tinebase_Core::getPreference('Tinebase');
 -        Tinebase_Core::setupUserLocale($pref->locale);
 -        $t = Tinebase_Translation::getTranslation('Sales', Tinebase_Core::getLocale());
 -        
 -        $config = Sales_Config::getInstance()->get('contractStatus');
 -        foreach($config['records'] as $cfg) {
 -            $statusConfig[$cfg['id']] = $cfg['value'];
 -        }
 -        
 -        $config = Sales_Config::getInstance()->get('contractCleared');
 -        
 -        foreach($config['records'] as $cfg) {
 -            $clearedConfig[$cfg['id']] = $cfg['value'];
 -        }
 -        
 -        while($more) {
 -            $results = $table->fetchAll(NULL, NULL, $count, $offset)->toArray();
 -            foreach ($results as $row) {
 -        
 -                if ($row['status'] == 'CLOSED') {
 -                    $setEndDate[$row['id']] = $row['last_modified_time'];
 -                }
 -        
 -        
 -                $desc = $row['description'];
 -                $desc .= PHP_EOL . '---' . PHP_EOL . PHP_EOL;
 -                $contents = FALSE;
 -        
 -                if (! empty($row['status'])) {
 -                    $desc .= $t->_('Status') . ': ';
 -                    $desc .= (isset($statusConfig[$row['status']]) ? $t->_($statusConfig[$row['status']]) : $row['status']);
 -                    $desc .= PHP_EOL;
 -                    $contents = TRUE;
 -                }
 -                if (! empty($row['cleared'])) {
 -                    $desc .= $t->_('Cleared') . ': ';
 -                    $desc .= (isset($clearedConfig[$row['cleared']]) ? $t->_($clearedConfig[$row['cleared']]) : $row['cleared']);
 -                    $desc .= PHP_EOL;
 -                    $contents = TRUE;
 -                }
 -                if (! empty($row['cleared_in'])) {
 -                    $desc .= $t->_('Cleared In') . ': ';
 -                    $desc .= $row['cleared_in'];
 -                    $desc .= PHP_EOL;
 -                    $contents = TRUE;
 -                }
 -        
 -                if ($contents) {
 -                    $updateDescription[$row['id']] = $desc . PHP_EOL;
 -                }
 -            }
 -        
 -            if (count($updateDescription) > 50) {
 -                foreach($controller->getMultiple(array_keys($updateDescription)) as $contr) {
 -                    $contr->description = $updateDescription[$contr->getId()];
 -                    $controller->update($contr, FALSE);
 -                }
 -                $updateDescription = array();
 -            }
 -        
 -            if (count($results) < $count) {
 -                $more = FALSE;
 -            } else {
 -                $offset = $offset + $count;
 -            }
 -        }
 -        
 -        foreach($controller->getMultiple(array_keys($updateDescription)) as $contr) {
 -            $contr->description = $updateDescription[$contr->getId()];
 -            $controller->update($contr, FALSE);
 -        }
 -        
 -        // remove deprecated sales contract fields
 -        foreach (array('status', 'cleared_in', 'cleared') as $colToDrop) {
 -            try {
 -                $this->_backend->dropCol('sales_contracts', $colToDrop);
 -            } catch (Zend_Db_Statement_Exception $zdse) {
 -                Tinebase_Exception::log($zdse);
 -            }
 -        }
 -        
 -        // add new sales contract fields
 -        $fields = array('<field>
 -            <name>start_date</name>
 -            <type>datetime</type>
 -        </field>','
 -        <field>
 -            <name>end_date</name>
 -            <type>datetime</type>
 -        </field>'
 -        );
 -        
 -        foreach($fields as $field) {
 -            $declaration = new Setup_Backend_Schema_Field_Xml($field);
 -            $this->_backend->addCol('sales_contracts', $declaration);
 -        }
 -        
 -        $table = new Zend_Db_Table(SQL_TABLE_PREFIX . 'sales_contracts', new Zend_Db_Table_Definition(array(
 -            'id' => array('name' => 'id'),
 -            'last_modified_time' => array('name' => 'last_modified_time'),
 -            'end_date' => array('name' => 'end_date'),
 -            'start_date' => array('name' => 'start_date'),
 -        )));
 -        
 -        
 -        $db = $table->getAdapter();
 -        $values = array_keys($setEndDate);
 -        if (! empty($values)) {
 -            $sql = 'UPDATE ' . $db->quoteIdentifier(SQL_TABLE_PREFIX . 'sales_contracts') . ' SET ' .
 -                $db->quoteIdentifier('start_date') . ' = ' . $db->quoteIdentifier('last_modified_time') . ', '.
 -                $db->quoteIdentifier('end_date') . ' = ' . $db->quoteIdentifier('last_modified_time') .
 -                ' WHERE ' . $db->quoteIdentifier('id') . $db->quoteInto(' IN (?)', $values);
 -            
 -            $db->query($sql);
 -        }
 -        
 -        if ($this->getTableVersion('sales_contracts') == 5) {
 -            $this->setTableVersion('sales_contracts', 6);
 -        } else {
 -            $this->setTableVersion('sales_contracts', 7);
 -        }
 -    }
 -    
 -    /**
 -     * update to 8.5
 -     *
 -     * switch to modelconfig, create divison module
 -     * remove "status", "cleared", "cleared_in", but append values to the description field
 -     */
 -    public function update_4()
 -    {
 -        // repeat from update_3 if setup has been run on another branch
 -        if (! $this->_backend->tableExists('sales_customers')) {
 -            $this->_createCustomerAndAddressTables();
 -        }
 -        
 -        if (! $this->_backend->columnExists('seq', 'sales_divisions')) {
 -            $this->_addDivisionsModlog();
 -        }
 -    
 -        $this->setApplicationVersion('Sales', '8.5');
 -    }
 -    
 -    /**
+      * update to 8.6
       * 
-      * switch to modelconfig, create divison module
-      * remove "status", "cleared", "cleared_in", but append values to the description field
+      * drop number index of cost center table
       */
-     public function update_3()
+     public function update_5()
+     {
+         $this->_backend->dropIndex('sales_cost_centers', 'number');
+         $this->setTableVersion('sales_cost_centers', 3);
+         $this->setApplicationVersion('Sales', '8.6');
+     }
+     
+     /**
+      * update to 8.7
+      * 
+      *  - add invoice module
+      */
+     public function update_6()
      {
+         // repeat from update_3 if setup has been run on another branch
+         if (! $this->_backend->tableExists('sales_customers')) {
+             $this->_createCustomerAndAddressTables();
+         }
+         
+         // repeat from update_4 if setup has been run on another branch
          if (! $this->_backend->columnExists('seq', 'sales_divisions')) {
              $this->_addDivisionsModlog();
          }
      }
      
      /**
-      * update to 8.5
-      * - update 256 char fields
+      * update to 8.8
       * 
-      * @see 0008070: check index lengths
+      *  - add modlog to addresses
       */
-     public function update_4()
+     public function update_7()
      {
-         $columns = array("sales_contracts" => array(
-                     "title" => "true",
-                     "cleared_in" => "false"
-                     )
-                 );
+         $this->_addModlogToAddresses();
+         $this->setApplicationVersion('Sales', '8.8');
+     }
+     
+     /**
+      * update to 8.9
+      * 
+      *  - add order confirmation module
+      */
+     public function update_8()
+     {
+         $tableDefinition = '<table>
+             <name>sales_orderconf</name>
+             <version>1</version>
+             <declaration>
+                 <field>
+                     <name>id</name>
+                     <type>text</type>
+                     <length>40</length>
+                     <notnull>true</notnull>
+                 </field>
+                 <field>
+                     <name>title</name>
+                     <type>text</type>
+                     <length>128</length>
+                     <notnull>true</notnull>
+                 </field>
+                 <field>
+                     <name>number</name>
+                     <type>text</type>
+                     <length>64</length>
+                     <notnull>true</notnull>
+                 </field>
+                 <field>
+                     <name>description</name>
+                     <type>text</type>
+                 </field>
+                 <field>
+                     <name>created_by</name>
+                     <type>text</type>
+                     <length>40</length>
+                 </field>
+                 <field>
+                     <name>creation_time</name>
+                     <type>datetime</type>
+                 </field> 
+                 <field>
+                     <name>last_modified_by</name>
+                     <type>text</type>
+                     <length>40</length>
+                 </field>
+                 <field>
+                     <name>last_modified_time</name>
+                     <type>datetime</type>
+                 </field>
+                 <field>
+                     <name>is_deleted</name>
+                     <type>boolean</type>
+                     <default>false</default>
+                 </field>
+                 <field>
+                     <name>deleted_by</name>
+                     <type>text</type>
+                     <length>40</length>
+                 </field>
+                 <field>
+                     <name>deleted_time</name>
+                     <type>datetime</type>
+                 </field>
+                 <field>
+                     <name>seq</name>
+                     <type>integer</type>
+                     <notnull>true</notnull>
+                     <default>0</default>
+                 </field>
+                 <index>
+                     <name>id</name>
+                     <primary>true</primary>
+                     <field>
+                         <name>id</name>
+                     </field>
+                 </index>
+             </declaration>
+         </table>';
          
-         $this->truncateTextColumn($columns, 255);
-         $this->setTableVersion('sales_contracts', 6);
-         $this->setApplicationVersion('Sales', '8.5');
+         $table = Setup_Backend_Schema_Table_Factory::factory('Xml', $tableDefinition);
+         $this->_backend->createTable($table);
+         
+         $this->setApplicationVersion('Sales', '8.9');
+     }
+     
+     /**
+      * update to 8.9
+      *
+      *  - add products to contracts
+      */
+     public function update_9()
+     {
+         $this->_createProductAggregateTable();
+     
+         $this->setApplicationVersion('Sales', '8.10');
+     }
+     
+     /**
+      * creates the aggregate table for contract->products
+      */
+     protected function _createProductAggregateTable()
+     {
+         $table = '<table>
+             <name>sales_product_agg</name>
+             <version>1</version>
+             <declaration>
+                 <field>
+                     <name>id</name>
+                     <type>text</type>
+                     <length>40</length>
+                     <notnull>true</notnull>
+                 </field>
+                 <field>
+                     <name>product_id</name>
+                     <type>text</type>
+                     <length>40</length>
+                     <notnull>true</notnull>
+                 </field>
+                 <field>
+                     <name>contract_id</name>
+                     <type>text</type>
+                     <length>40</length>
+                     <notnull>true</notnull>
+                 </field>
+                 <field>
+                     <name>quantity</name>
+                     <type>integer</type>
+                     <notnull>true</notnull>
+                     <default>1</default>
+                 </field>
+                 <field>
+                     <name>interval</name>
+                     <type>integer</type>
+                     <notnull>true</notnull>
+                     <default>1</default>
+                 </field>
+                 <field>
+                     <name>last_autobill</name>
+                     <type>datetime</type>
+                     <notnull>false</notnull>
+                 </field>
+                 <index>
+                     <name>id</name>
+                     <primary>true</primary>
+                     <field>
+                         <name>id</name>
+                     </field>
+                 </index>
+                 <index>
+                     <name>product_id</name>
+                     <field>
+                         <name>product_id</name>
+                     </field>
+                 </index>
+                 <index>
+                     <name>contract_id</name>
+                     <field>
+                         <name>contract_id</name>
+                     </field>
+                 </index>
+             </declaration>
+         </table>';
+     
+         $table = Setup_Backend_Schema_Table_Factory::factory('Xml', $table);
+         $this->_backend->createTable($table);
+     }
+     
+     public function update_10()
+     {
+         $declaration = '<table>
+             <name>sales_invoice_positions</name>
+             <version>1</version>
+             <declaration>
+                 <field>
+                     <name>id</name>
+                     <type>text</type>
+                     <length>40</length>
+                     <notnull>true</notnull>
+                 </field>
+                 <field>
+                     <name>invoice_id</name>
+                     <type>text</type>
+                     <length>40</length>
+                     <notnull>true</notnull>
+                 </field>
+                 <field>
+                     <name>accountable_id</name>
+                     <type>text</type>
+                     <length>40</length>
+                     <notnull>true</notnull>
+                 </field>
+                 <field>
+                     <name>model</name>
+                     <type>text</type>
+                     <length>256</length>
+                     <notnull>true</notnull>
+                 </field>
+                 <field>
+                     <name>title</name>
+                     <type>text</type>
+                     <length>256</length>
+                     <notnull>true</notnull>
+                 </field>
+                 <field>
+                     <name>month</name>
+                     <type>text</type>
+                     <length>7</length>
+                     <notnull>true</notnull>
+                 </field>
+                 <field>
+                     <name>unit</name>
+                     <type>text</type>
+                     <length>128</length>
+                     <notnull>true</notnull>
+                 </field>
+                 <field>
+                     <name>quantity</name>
+                     <type>integer</type>
+                     <notnull>true</notnull>
+                     <default>1</default>
+                 </field>
+                 <index>
+                     <name>id</name>
+                     <primary>true</primary>
+                     <field>
+                         <name>id</name>
+                     </field>
+                 </index>
+                 <index>
+                     <name>invoice_id</name>
+                     <field>
+                         <name>invoice_id</name>
+                     </field>
+                 </index>
+             </declaration>
+         </table>';
+         
+         $table = Setup_Backend_Schema_Table_Factory::factory('Xml', $declaration);
+         $this->_backend->createTable($table);
+         
+         $this->setApplicationVersion('Sales', '8.11');
+     }
+     
+     /**
+      * quantity of invoice position -> float
+      */
+     public function update_11()
+     {
+         $declaration = new Setup_Backend_Schema_Field_Xml('<field>
+             <name>quantity</name>
+             <type>float</type>
+             <notnull>true</notnull>
+             <default>1</default>
+         </field>');
+         
+         $this->_backend->alterCol('sales_invoice_positions', $declaration, 'quantity');
+         
+         $this->setTableVersion('sales_invoice_positions', 2);
+         $this->setApplicationVersion('Sales', '8.12');
+     }
+     /**
+      * import new import definition
+      */
+     public function update_12()
+     {
+         Setup_Controller::getInstance()->createImportExportDefinitions(Tinebase_Application::getInstance()->getApplicationByName('Sales'));
+         $this->setApplicationVersion('Sales', '8.13');
+     }
+     
+     /**
+      * import new import definition
+      */
+     public function update_13()
+     {
+         $fields = array('<field>
+             <name>price_net</name>
+             <type>integer</type>
+             <notnull>false</notnull>
+         </field>','
+         <field>
+             <name>price_gross</name>
+             <type>integer</type>
+             <notnull>false</notnull>
+         </field>','
+         <field>
+             <name>sales_tax</name>
+             <type>integer</type>
+             <notnull>false</notnull>
+             <length>10</length>
+         </field>');
+         
+         foreach($fields as $field) {
+             $definition = new Setup_Backend_Schema_Field_Xml($field);
+             $this->_backend->addCol('sales_invoices', $definition);
+         }
+         
+         $this->setTableVersion('sales_invoices', 2);
+         $this->setApplicationVersion('Sales', '8.14');
+     }
+     
+     /**
+      * import new import definition
+      */
+     public function update_14() {
+         $fields = array('<field>
+             <name>price_net</name>
+             <type>float</type>
+             <notnull>false</notnull>
+         </field>','
+         <field>
+             <name>price_gross</name>
+             <type>float</type>
+             <notnull>false</notnull>
+         </field>','
+         <field>
+             <name>sales_tax</name>
+             <type>float</type>
+             <notnull>false</notnull>
+         </field>');
+         
+         foreach($fields as $field) {
+             $definition = new Setup_Backend_Schema_Field_Xml($field);
+             $this->_backend->alterCol('sales_invoices', $definition);
+         }
+         
+         $this->setTableVersion('sales_invoices', 3);
+         $this->setApplicationVersion('Sales', '8.15');
+     }
+     
+     /**
+      * add accountable field to products
+      */
+     public function update_15()
+     {
+         // add accountable to product
+         $definition = new Setup_Backend_Schema_Field_Xml('<field>
+             <name>accountable</name>
+             <type>text</type>
+             <length>40</length>
+         </field>');
+         
 -        $this->_backend->addCol('sales_products', $definition);
++        try {
++            $this->_backend->addCol('sales_products', $definition);
++        } catch (Zend_Db_Statement_Exception $zdse) {
++            
++        }
+         $this->setTableVersion('sales_products', 4);
+         
+         $fields = array('<field>
+             <name>start_date</name>
+             <type>datetime</type>
+         </field>',
+         '<field>
+             <name>end_date</name>
+             <type>datetime</type>
+         </field>',
+         '<field>
+             <name>billing_point</name>
+             <type>text</type>
+             <length>64</length>
+             <notnull>false</notnull>
+         </field>');
+         
+         // add billing_point to product aggregates
+         foreach($fields as $field) {
+             $definition = new Setup_Backend_Schema_Field_Xml($field);
 -            $this->_backend->addCol('sales_product_agg', $definition);
++            try {
++                $this->_backend->addCol('sales_product_agg', $definition);
++            } catch (Zend_Db_Statement_Exception $zdse) {
++            
++            }
+         }
+         
+         $this->setTableVersion('sales_product_agg', 2);
+         
+         // update existing products, set accountable
+         $db = $this->_backend->getDb();
+         $sql = 'UPDATE ' . $db->quoteIdentifier(SQL_TABLE_PREFIX . 'sales_products') . ' SET ' . $db->quoteInto($db->quoteIdentifier('accountable') . ' = ?', 'Sales_Model_Product');
+         $db->query($sql);
+         
+         $this->_transferBillingInformation();
+         
+         // remove billing_point, last_autobill, interval from contracts
+         $this->_backend->dropCol('sales_contracts', 'billing_point');
+         $this->_backend->dropCol('sales_contracts', 'last_autobill');
+         $this->_backend->dropCol('sales_contracts', 'interval');
+         
+         $this->setTableVersion('sales_contracts', 8);
+         
+         $this->setApplicationVersion('Sales', '8.16');
+     }
+     
+     protected function _transferBillingInformation()
+     {
 -        $this->promptForUsername();
 -        Sales_Controller_Contract::getInstance()->transferBillingInformation();
++        $adminGroup   = Tinebase_Group::getInstance()->getDefaultAdminGroup();
++        $groupMembers = Tinebase_Group::getInstance()->getGroupMembers($adminGroup->getId());
++        
++        if (count($groupMembers) > 0) {
++            Tinebase_Core::set(Tinebase_Core::USER, $groupMembers[0]);
++            Sales_Controller_Contract::getInstance()->transferBillingInformation();
++        }
+     }
+     
+     /**
+      * update to 8.17
+      * 
+      * add accountable field to products (again, if not already set)
+      */
+     public function update_16()
+     {
+         if (! $this->_backend->columnExists('billing_point', 'sales_product_agg')) {
+             $this->update_15();
+         }
+         
+         $this->setApplicationVersion('Sales', '8.17');
+     }
+     
+     /**
+      * update to 8.18
+      *
+      *  - add order confirmation module
+      */
+     public function update_17()
+     {
+         $tableDefinition = '<table>
+             <name>sales_offers</name>
+             <version>1</version>
+             <declaration>
+                 <field>
+                     <name>id</name>
+                     <type>text</type>
+                     <length>40</length>
+                     <notnull>true</notnull>
+                 </field>
+                 <field>
+                     <name>title</name>
+                     <type>text</type>
+                     <length>128</length>
+                     <notnull>true</notnull>
+                 </field>
+                 <field>
+                     <name>number</name>
+                     <type>text</type>
+                     <length>64</length>
+                     <notnull>true</notnull>
+                 </field>
+                 <field>
+                     <name>description</name>
+                     <type>text</type>
+                 </field>
+                 <field>
+                     <name>created_by</name>
+                     <type>text</type>
+                     <length>40</length>
+                 </field>
+                 <field>
+                     <name>creation_time</name>
+                     <type>datetime</type>
+                 </field>
+                 <field>
+                     <name>last_modified_by</name>
+                     <type>text</type>
+                     <length>40</length>
+                 </field>
+                 <field>
+                     <name>last_modified_time</name>
+                     <type>datetime</type>
+                 </field>
+                 <field>
+                     <name>is_deleted</name>
+                     <type>boolean</type>
+                     <default>false</default>
+                 </field>
+                 <field>
+                     <name>deleted_by</name>
+                     <type>text</type>
+                     <length>40</length>
+                 </field>
+                 <field>
+                     <name>deleted_time</name>
+                     <type>datetime</type>
+                 </field>
+                 <field>
+                     <name>seq</name>
+                     <type>integer</type>
+                     <notnull>true</notnull>
+                     <default>0</default>
+                 </field>
+                 <index>
+                     <name>id</name>
+                     <primary>true</primary>
+                     <field>
+                         <name>id</name>
+                     </field>
+                 </index>
+             </declaration>
+         </table>';
+     
+         $table = Setup_Backend_Schema_Table_Factory::factory('Xml', $tableDefinition);
+         $this->_backend->createTable($table);
+     
+         // create all offers favorite
+         $commonValues = array(
+             'account_id'        => NULL,
+             'application_id'    => Tinebase_Application::getInstance()->getApplicationByName('Sales')->getId(),
+             'model'             => 'Sales_Model_OfferFilter',
+         );
+         
+         $pfe = new Tinebase_PersistentFilter_Backend_Sql();
+         
+         $pfe->create(new Tinebase_Model_PersistentFilter(
+             array_merge($commonValues, array(
+                 'name'        => "All Offers", // _('All Offers')
+                 'description' => "All offer records", // _('All offer records')
+                 'filters'     => array(
+                 ),
+             ))
+         ));
+         
+         // TODO: favorite
+         $this->setApplicationVersion('Sales', '8.18');
+     }
+     
+     /**
+      * update to 8.19
+      * 
+      *  - allow null product aggregate count
+      */
+     public function update_18()
+     {
+         $field = '<field>
+             <name>quantity</name>
+             <type>integer</type>
+             <notnull>false</notnull>
+             <default>null</default>
+         </field>';
+     
+         $declaration = new Setup_Backend_Schema_Field_Xml($field);
+         $this->_backend->alterCol('sales_product_agg', $declaration);
+     
+     
+         $this->setTableVersion('sales_product_agg', 2);
+         $this->setApplicationVersion('Sales', '8.19');
+     }
+     
+     /**
+      * update to 8.20
+      *
+      *  - create missing default persistent filters
+      */
+     public function update_19()
+     {
+         self::createDefaultFavoritesForSub20();
+         
+         $this->setApplicationVersion('Sales', '8.20');
+     }
+     
+     /**
+      * creates default favorited vor version 8.20 (gets called in initialization of this app)
+      */
+     public static function createDefaultFavoritesForSub20()
+     {
+         $commonValues = array(
+             'account_id'        => NULL,
+             'application_id'    => Tinebase_Application::getInstance()->getApplicationByName('Sales')->getId(),
+         );
+         
+         $pfe = new Tinebase_PersistentFilter_Backend_Sql();
+         
+         // Products
+         $commonValues['model'] = 'Sales_Model_ProductFilter';
+         
+         $pfe->create(new Tinebase_Model_PersistentFilter(
+             array_merge($commonValues, array(
+                 'name'        => "All Products", // _('All Products')
+                 'description' => "All product records", // _('All product records')
+                 'filters'     => array(),
+             ))
+         ));
+         
+         // Contracts
+         $commonValues['model'] = 'Sales_Model_ContractFilter';
+         
+         $pfe->create(new Tinebase_Model_PersistentFilter(
+             array_merge($commonValues, array(
+                 'name'        => "All Contracts", // _('All Contracts')
+                 'description' => "All contract records", // _('All contract records')
+                 'filters'     => array(),
+             ))
+         ));
+         
+         // Invoices
+         $commonValues['model'] = 'Sales_Model_InvoiceFilter';
+         
+         $pfe->create(new Tinebase_Model_PersistentFilter(
+             array_merge($commonValues, array(
+                 'name'        => "All Invoices", // _('All Invoices')
+                 'description' => "All invoice records", // _('All invoice records')
+                 'filters'     => array(),
+             ))
+         ));
+         
+         // CostCenters
+         $commonValues['model'] = 'Sales_Model_CostCenterFilter';
+         
+         $pfe->create(new Tinebase_Model_PersistentFilter(
+             array_merge($commonValues, array(
+                 'name'        => "All Cost Centers", // _('All Cost Centers')
+                 'description' => "All cost center records", // _('All costcenter records')
+                 'filters'     => array(),
+             ))
+         ));
+         
+         // Divisions
+         $commonValues['model'] = 'Sales_Model_DivisionFilter';
+         
+         $pfe->create(new Tinebase_Model_PersistentFilter(
+             array_merge($commonValues, array(
+                 'name'        => "All Divisions", // _('All Divisions')
+                 'description' => "All division records", // _('All division records')
+                 'filters'     => array(),
+             ))
+         ));
+         
+         // OrderConfirmations
+         $commonValues['model'] = 'Sales_Model_OrderConfirmationFilter';
+         
+         $pfe->create(new Tinebase_Model_PersistentFilter(
+             array_merge($commonValues, array(
+                 'name'        => "All Order Confirmations", // _('All Order Confirmations')
+                 'description' => "All order confirmation records", // _('All order confirmation records')
+                 'filters'     => array(),
+             ))
+         ));
+     }
+     
+     
+     /**
+      * update to 8.21
+      *
+      *  - add modlog if it does not exist
+      */
+     public function update_20()
+     {
+         if (! $this->_backend->columnExists('created_by', 'sales_product_agg')) {
+             $this->_addModlogToProductAggregates();
+         }
+         
+         $this->setApplicationVersion('Sales', '8.21');
+     }
+     
+     /**
+      * adds modlog to addresses to prevent data loss
+      */
+     protected function _addModlogToProductAggregates()
+     {
+         $fields = array('<field>
+                 <name>created_by</name>
+                 <type>text</type>
+                 <length>40</length>
+             </field>','
+             <field>
+                 <name>creation_time</name>
+                 <type>datetime</type>
+             </field>','
+             <field>
+                 <name>last_modified_by</name>
+                 <type>text</type>
+                 <length>40</length>
+             </field>','
+             <field>
+                 <name>last_modified_time</name>
+                 <type>datetime</type>
+             </field>','
+             <field>
+                 <name>is_deleted</name>
+                 <type>boolean</type>
+                 <default>false</default>
+             </field>','
+             <field>
+                 <name>deleted_by</name>
+                 <type>text</type>
+                 <length>40</length>
+             </field>','
+             <field>
+                 <name>deleted_time</name>
+                 <type>datetime</type>
+             </field>','
+             <field>
+                 <name>seq</name>
+                 <type>integer</type>
+                 <notnull>true</notnull>
+                 <default>0</default>
+             </field>');
+     
+         foreach($fields as $field) {
+             $declaration = new Setup_Backend_Schema_Field_Xml($field);
+             $this->_backend->addCol('sales_product_agg', $declaration);
+         }
+     
+         $this->setTableVersion('sales_product_agg', 3);
      }
  }
@@@ -52,6 -69,15 +69,18 @@@ Tine.Sales.ContractEditDialog = Ext.ext
      },
      
      /**
++<<<<<<< HEAD
++=======
+      * initializes the toolbar
+      */
+     initToolbar: function() {
+         var addNoteButton = new Tine.widgets.activities.ActivitiesAddButton({});
+         this.tbarItems = [addNoteButton];
+     },
+     
+     /**
++>>>>>>> pu/2013.10-invoices
       * called on multiple edit
       * @return {Boolean}
       */
@@@ -35,6 -35,21 +35,24 @@@ Tine.Sales.CostCenterEditDialog = Ext.e
      windowHeight: 450,
      
      /**
++<<<<<<< HEAD
++=======
+      * @private
+      */
+     windowNamePrefix: 'CostCenterEditWindow_',
+     appName: 'Sales',
+     tbarItems: [],
+     
+     initComponent: function() {
+         
+         this.recordClass = Tine.Sales.Model.CostCenter;
+         this.recordProxy = Tine.Sales.costcenterBackend;
+         
+         Tine.Sales.CostCenterEditDialog.superclass.initComponent.call(this);
+     },
+     /**
++>>>>>>> pu/2013.10-invoices
       * called on multiple edit
       * @return {Boolean}
       */
@@@ -29,8 -23,308 +23,308 @@@ Tine.Sales.MainScreen = Ext.extend(Tine
      activeContentType: 'Product',
      contentTypes: [
          {modelName: 'Product', requiredRight: 'manage_products', singularContainerMode: true},
-         {modelName: 'Contract', requiredRight: null, singularContainerMode: true, genericCtxActions: ['grants']},
+         {modelName: 'Contract', requiredRight: 'manage_contracts', singularContainerMode: true, genericCtxActions: ['grants']},
+         {modelName: 'Customer', requiredRight: 'manage_customers', singularContainerMode: true},
+         {modelName: 'Invoice', requiredRight: 'manage_invoices', singularContainerMode: true},
          {modelName: 'CostCenter', requiredRight: 'manage_costcenters', singularContainerMode: true},
-         {modelName: 'Division', requiredRight: null, singularContainerMode: true}
+         {modelName: 'Division', requiredRight: 'manage_divisions', singularContainerMode: true},
+         {modelName: 'Offer', requiredRight: 'manage_offers', singularContainerMode: true},
+         {modelName: 'OrderConfirmation', requiredRight: 'manage_orderconfirmations', singularContainerMode: true}
      ]
- });
+ });
+ // rendered sums registry for the invoiceposition grid panel
+ Tine.Sales.renderedSumsPerMonth = {};
+ Tine.Sales.addToClipboard = function(record, companyName) {
+     // this is called either from the edit dialog or from the grid, so we have different record types
+     var fieldPrefix = record.data.hasOwnProperty('bic') ? 'adr_' : '';
+     
+     companyName = companyName ? companyName : (record.get('name') ? record.get('name') : '');
+     var lines = companyName + "\n";
+     
+         lines += (record.get((fieldPrefix + 'prefix1')) ? record.get((fieldPrefix + 'prefix1')) + "\n" : '');
+         lines += (record.get((fieldPrefix + 'prefix2')) ? record.get((fieldPrefix + 'prefix2')) + "\n" : '');
+         lines += (record.get(fieldPrefix + 'pobox') ? record.get(fieldPrefix + 'pobox') + "\n" : (record.get(fieldPrefix + 'street') ? record.get(fieldPrefix + 'street') + "\n" : ''));
+         lines += (record.get((fieldPrefix + 'postalcode')) ? (record.get((fieldPrefix + 'postalcode')) + ' ') : '') + (record.get((fieldPrefix + 'locality')) ? record.get((fieldPrefix + 'locality')) : '');
+         
+         if (record.get('countryname')) {
+             lines += "\n" + record.get('countryname');
+         }
+     
+     var app = Tine.Tinebase.appMgr.get('Sales');
+     
+     Tine.Sales.CopyAddressDialog.openWindow({winTitle: app.i18n._('Copy address to the clipboard'), app: app, content: lines});
+ };
+ /** @param {Tine.Tinebase.data.Record} record
+  * @param {String} companyName
+  * 
+  * @return {String}
+  */
+ Tine.Sales.renderAddress = function(record, companyName) {
+     // this is called either from the edit dialog or from the grid, so we have different record types
+     var fieldPrefix = record.data.hasOwnProperty('bic') ? 'adr_' : '';
+     
+     companyName = companyName ? companyName : (record.get('name') ? record.get('name') : '');
+     var lines = companyName + "\n";
+     
+     lines += (record.get((fieldPrefix + 'prefix1')) ? record.get((fieldPrefix + 'prefix1')) + "\n" : '');
+     lines += (record.get((fieldPrefix + 'prefix2')) ? record.get((fieldPrefix + 'prefix2')) + "\n" : '');
+     lines += (record.get((fieldPrefix + 'pobox')) ? (record.get(fieldPrefix + 'pobox') + "\n") : ((record.get(fieldPrefix + 'street') ? record.get(fieldPrefix + 'street') + "\n" : '')));
+     lines += (record.get((fieldPrefix + 'postalcode')) ? (record.get((fieldPrefix + 'postalcode')) + ' ') : '') + (record.get((fieldPrefix + 'locality')) ? record.get((fieldPrefix + 'locality')) : '');
+     
+     if (record.get('countryname')) {
+         lines += "\n" + record.get('countryname');
+     }
+     
+     return lines;
+ };
+ /**
+  * opens the Copy Address Dialog and adds the rendered address
+  * 
+  * @param {Tine.Tinebase.data.Record} record
+  * @param {String} companyName
+  */
+ Tine.Sales.addToClipboard = function(record, companyName) {
+     var app = Tine.Tinebase.appMgr.get('Sales');
+     
+     Tine.Sales.CopyAddressDialog.openWindow({
+         winTitle: 'Copy address to the clipboard', 
+         app: app, 
+         content: Tine.Sales.renderAddress(record, companyName)
+     });
+ };
+ Tine.Sales.renderAddressAsLine = function(values) {
+     var ret = '';
+     var app = Tine.Tinebase.appMgr.get('Sales');
+     if (values.customer_id && values.customer_id.hasOwnProperty('name')) {
+         ret += '<b>' + Ext.util.Format.htmlEncode(values.customer_id.name) + '</b> - ';
+     }
+     
+     ret += Ext.util.Format.htmlEncode((values.postbox ? values.postbox : values.street));
+     ret += ', ';
+     ret += Ext.util.Format.htmlEncode(values.postalcode);
+     ret += ' ';
+     ret += Ext.util.Format.htmlEncode(values.locality);
+     ret += ' (';
+     ret += app.i18n._(values.type)
+     
+     if (values.type == 'billing') {
+         ret += ' - ' + Ext.util.Format.htmlEncode(values.custom1);
+     }
+     
+     ret += ')';
+     
+     return ret;
+ };
+ /**
+  * register special renderer for invoice address_id
+  */
+ Tine.widgets.grid.RendererManager.register('Sales', 'Invoice', 'address_id', Tine.Sales.renderAddressAsLine);
+ /**
+  * renders the model of the invoice position
+  * 
+  * @param {String} value
+  * @param {Object} row
+  * @param {Tine.Tinebase.data.Record} rec
+  * @return {String}
+  */
+ Tine.Sales.renderInvoicePositionModel = function(value, row, rec) {
+     if (! value) {
+         return '';
+     }
+     var split = value.split('_Model_');
+     var model = Tine[split[0]].Model[split[1]];
+     
+     return '<span class="tine-recordclass-gridicon ' + model.getMeta('appName') + model.getMeta('modelName') + '">&nbsp;</span>' + model.getRecordName() + ' (' + model.getAppName() + ')';
+ };
+ /**
+  * register special renderer for the invoice position
+  */
+ Tine.widgets.grid.RendererManager.register('Sales', 'InvoicePosition', 'model', Tine.Sales.renderInvoicePositionModel);
+ /**
+  * renders the quantity of the invoice position
+  */
+ Tine.Sales.InvoicePositionQuantityRendererRegistry = function() {
+     var renderers = {};
+     
+     return {
+         /**
+          * return renderer
+          * 
+          * @param {String} phpModelName
+          * @return {Function}
+          */
+         get: function(phpModelName, unit) {
+             var unit = unit.replace(/\s/, '');
+             if (renderers.hasOwnProperty(phpModelName+unit)) {
+                 return renderers[phpModelName+unit];
+             } else {
+                 // default function
+                 return function(value, row, rec) {
+                     return value;
+                 }
+             }
+         },
+         
+         /**
+          * register renderer
+          * 
+          * @param {String} phpModelName
+          * @param {Function} func
+          */
+         register: function(phpModelName, unit, func) {
+             var unit = unit.replace(/\s/, '');
+             renderers[phpModelName+unit] = func;
+         },
+         
+         /**
+          * check if a renderer is explicitly registered
+          * 
+          * @param {String} phpModelName
+          * @return {Boolean}
+          */
+         has: function(phpModelName, unit) {
+             var unit = unit.replace(/\s/, '');
+             return renderers.hasOwnProperty(phpModelName+unit);
+         }
+     }
+ }();
+ /**
+  * renders the unit of the invoice position
+  * 
+  * @param {String} value
+  * @param {Object} row
+  * @param {Tine.Tinebase.data.Record} rec
+  * @return {String}
+  */
+ Tine.Sales.renderInvoicePositionUnit = function(value, row, rec) {
+     
+     if (! value) {
+         return '';
+     }
+     
+     var model = rec.get('model');
+     var split = model.split('_Model_');
+     
+     var app = Tine.Tinebase.appMgr.get(split[0]);
+     
+     return app.i18n._(value);
+ };
+ /**
+  * renders the unit of the invoice position
+  * @param {} value
+  * @param {} row
+  * @param {} rec
+  * @return {}
+  */
+ Tine.Sales.renderInvoicePositionQuantity = function(value, row, rec) {
+     var model = rec.data.model;
+     if (Tine.Sales.InvoicePositionQuantityRendererRegistry.has(model, rec.data.unit)) {
+         var renderer = Tine.Sales.InvoicePositionQuantityRendererRegistry.get(model, rec.data.unit);
+         return renderer(value, row, rec);
+     } else {
+         return value;
+     }
+ };
+ /**
+  * register special renderer for the invoice position
+  */
+ Tine.widgets.grid.RendererManager.register('Sales', 'InvoicePosition', 'unit', Tine.Sales.renderInvoicePositionUnit);
+ Tine.widgets.grid.RendererManager.register('Sales', 'InvoicePosition', 'quantity', Tine.Sales.renderInvoicePositionQuantity);
+ Tine.Sales.renderBillingPoint = function(v) {
+     var app = Tine.Tinebase.appMgr.get('Sales');
+     return v ? app.i18n._hidden(v) : '';
+ }
+ Tine.widgets.grid.RendererManager.register('Sales', 'Contract', 'billing_point', Tine.Sales.renderBillingPoint);
+ Tine.Sales.renderCostCenter = function(value, row, rec) {
+     if (Ext.isObject(value)) {
+         return value.number + ' - ' + value.remark;
+     }
+     
+     return '';
+ };
+ Tine.widgets.grid.RendererManager.register('Sales', 'Invoice', 'costcenter_id', Tine.Sales.renderCostCenter);
+ /**
+  * allows all accountables to register (needed for accountable combo box)
+  */
+ Tine.Sales.AccountableRegistry = function() {
+     var accountables = {};
+     
+     return {
+         /**
+          * return all accountables as array
+          * 
+          * @return {Array}
+          */
+         getArray: function() {
+             var ar = [];
+             Ext.iterate(accountables, function(key, value) {
+                 ar.push(value);
+             });
+             
+             return ar;
+         },
+         
+         /**
+          * register accountable
+          * 
+          * @param {String} appName
+          * @param {String} modelName
+          */
+         register: function(appName, modelName) {
+             var key = appName + modelName;
+             if (! accountables.hasOwnProperty(key)) {
+                 accountables[key] = {appName: appName, modelName: modelName};
+             }
+         },
+         
+         /**
+          * check if a renderer is explicitly registered
+          * 
+          * @param {String} appName
+          * @param {String} modelName
+          * @return {Boolean}
+          */
+         has: function(appName, modelName) {
+             var key = appName + modelName;
+             return accountables.hasOwnProperty(key);
+         }
+     }
+ }();
+ Tine.Sales.AccountableRegistry.register('Sales', 'Product');
+ Tine.Sales.renderAccountable = function(values) {
+     if (Ext.isEmpty(values)) {
+         return '';
+     }
+     var split = values.split('_Model_');
+     var ret = '';
+     var app = Tine.Tinebase.appMgr.get(split[0]);
+     
+     return app.i18n._(split[0] + split[1]);
+ };
+ /**
+  * register special renderer for invoice address_id
+  */
 -Tine.widgets.grid.RendererManager.register('Sales', 'Product', 'accountable', Tine.Sales.renderAccountable);
++Tine.widgets.grid.RendererManager.register('Sales', 'Product', 'accountable', Tine.Sales.renderAccountable);
@@@ -284,3 -276,529 +276,529 @@@ msgstr "Firma
  #: Controller/Contract.php:83
  msgid "The number you have tried to set is already in use!"
  msgstr "Diese Nummer ist bereits vergeben!"
 -msgstr "Vertrag abrechnen"
+ msgid "manage cost centers"
+ msgstr "Kostenstellen verwalten"
+ msgid "add, edit and delete cost centers"
+ msgstr "Kostenstellen hinzufügen, bearbeiten und löschen"
+ msgid "Cost Center"
+ msgid_plural "Cost Centers"
+ msgstr[0] "Kostenstelle"
+ msgstr[1] "Kostenstellen"
+ msgid "Prefix"
+ msgstr "Zusatz"
+ msgid "Additional Prefix"
+ msgstr "Zusatz 2"
+ msgid "Street"
+ msgstr "Straße"
+ msgid "Postalcode"
+ msgstr "Postleitzahl"
+ msgid "Region"
+ msgstr "Region"
+ msgid "Locality"
+ msgstr "Ort"
+ msgid "Country"
+ msgstr "Land"
+ msgid "Number Debit"
+ msgstr "Debitorennummer"
+ msgid "Postbox"
+ msgstr "Postfach"
+ msgid "Address"
+ msgid_plural "Addresses"
+ msgstr[0] "Anschrift"
+ msgstr[1] "Anschriften"
+ msgid "Customer"
+ msgid_plural "Customers"
+ msgstr[0] "Kunde"
+ msgstr[1] "Kunden"
+ msgid "Billing Address"
+ msgid_plural "Billing Addresses"
+ msgstr[0] "Rechnungsanschrift"
+ msgstr[1] "Rechnungsanschriften"
+ msgid "Delivery Address"
+ msgid_plural "Delivery Addresses"
+ msgstr[0] "Lieferanschrift"
+ msgstr[1] "Lieferanschriften"
+ msgid "Web"
+ msgstr "Internet"
+ msgid "Contact Person (external)"
+ msgstr "Kontaktperson (extern)"
+ msgid "Contact Person (internal)"
+ msgstr "Kontaktperson (intern)"
+ msgid "VAT No."
+ msgstr "USt.-ID"
+ msgid "Credit Term (days)"
+ msgstr "Zahlungsziel in Tagen"
+ msgid "Currency"
+ msgstr "Währung"
+ msgid "Currency Translation Rate"
+ msgstr "Wechselkurs"
+ msgid "IBAN"
+ msgstr "IBAN"
+ msgid "BIC"
+ msgstr "BIC"
+ msgid "Discount (%)"
+ msgstr "Rabatt in Prozent"
+ msgid "Postal address"
+ msgstr "Postadresse"
+ msgid "Core Data"
+ msgstr "Stammdaten"
+ msgid "Accounting"
+ msgstr "Abrechnung"
+ msgid "Unknown Currency Code"
+ msgstr "Unbekannter Währungscode"
+ msgid "The Currency Code you tried to use is not valid. Please use a valid Currency Code as defined in ISO 4217."
+ msgstr "Der Währungscode, den Sie versucht haben, einzugeben, ist nicht gültig. Bitte verwenden Sie einen gültigen Währungscode nach ISO 4217."
+ msgid "Select customer"
+ msgstr "Kunden auswählen"
+ msgid "All Customers"
+ msgstr "Alle Kunden"
+ msgid "All customer records"
+ msgstr "Datensätze aller Kunden"
+ msgid "Clipboard"
+ msgstr "Zwischenablage"
+ msgid "Either street or postbox is required!"
+ msgstr "Bitte geben Sie entweder eine Straße oder ein Postfach an!"
+ msgid "Postal Address"
+ msgstr "Postanschrift"
+ msgid "Number duplicate"
+ msgstr "Mehrfach vergebene Nummer"
+ msgid "The number you tried to use has been taken already. Please use another one leave the field blank to take the next free number."
+ msgstr "Die Nummer die Sie für diesen Datensatz verwenden wollten, ist bereits vergeben. Bitte versuchen Sie es mit einer anderen, oder lassen das Feld leer, um die nächst freie Nummer zu verwenden."
+ msgid "Export Customers"
+ msgstr "Export"
+ msgid "Export selected customers as ODS"
+ msgstr "Exportiere markierte Kunden als ODS"
+ msgid "Export selected customer as ODS"
+ msgstr "Exportiere markierten Kunden als ODS"
+ msgid "Miscellaneous"
+ msgstr "Sonstiges"
+ msgid "Add new Billing Address"
+ msgstr "Neue Rechnungsanschrift hinzufügen"
+ msgid "Add new Delivery Address"
+ msgstr "Neue Lieferanschrift hinzufügen"
+ msgid "Billing Addresses"
+ msgstr "Rechnungsanschriften"
+ msgid "Delivery Addresses"
+ msgstr "Lieferanschriften"
+ msgid "Copy address to the clipboard"
+ msgstr "Adresse in die Zwischenablage kopieren"
+ msgid "Enter description"
+ msgstr "Bitte geben Sie eine Beschreibung an"
+ msgid "Apply postal address"
+ msgstr "Postanschrift anwenden"
+ msgid "Customer Number"
+ msgstr "Kundennummer"
+ msgid "add, edit and delete customers"
+ msgstr "Kunden hinzufügen, bearbeiten und löschen"
+ msgid "add, edit and delete invoices"
+ msgstr "Rechnungen hinzufügen, bearbeiten und löschen"
+ msgid "manage invoices"
+ msgstr "Rechungen verwalten"
+ msgid "manage customers"
+ msgstr "Kunden verwalten"
+ msgid "Credit Term"
+ msgstr "Zahlungsziel in Tagen"
+ msgid "Invoice Number"
+ msgstr "Rechnungsnummer"
+ msgid "Date"
+ msgstr "Datum"
+ msgid "Type"
+ msgstr "Typ"
+ msgid "invoice"
+ msgstr "Rechnung"
+ msgid "reversal"
+ msgstr "Storno"
+ msgid "credit"
+ msgstr "Gutschrift"
+ msgid "automatically set..."
+ msgstr "automatisch ausgefüllt..."
+ msgid "Invoice"
+ msgid_plural "Invoices"
+ msgstr[0] "Rechnung"
+ msgstr[1] "Rechnungen"
+ msgid "The selected contract doesn't have a customer assigned, yet. Add a customer to the contract with the contract edit dialog."
+ msgstr "Dem ausgewählten Vertrag ist bisher kein Kunde zugeordnet worden. Bitte verknüpfen Sie den Vertrag mit einem Kunden."
+ msgid "No customer assigned"
+ msgstr "Kein Kunde zugeordnet"
+ msgid "Edit Customer \"{0}\""
+ msgstr "Kunden \"{0}\" bearbeiten"
+ msgid "Add New Customer"
+ msgstr "Neuen Kunden hinzufügen"
+ msgid "Copy Customer"
+ msgstr "Kunden kopieren"
+ msgid "Add New Invoice"
+ msgstr "Neue Rechnung hinzufügen"
+ msgid "Copy Invoice"
+ msgstr "Rechnung kopieren"
+ msgid "Edit Invoice \"{0}\""
+ msgstr "Rechnung \"{0}\" bearbeiten"
+ msgid "cleared"
+ msgstr "abgerechnet"
+ msgid "to clear"
+ msgstr "abzurechnen"
+ msgid "The selected contract doesn't have a cost center assigned, yet. Add a cost center to the contract with the contract edit dialog."
+ msgstr "Dem ausgewählten Vertrag ist bisher keine Kostenstelle zugeordnet worden. Bitte verknüpfen Sie den Vertrag mit einer Kostenstelle."
+ msgid "No cost center assigned"
+ msgstr "Keine Kostenstelle zugeordnet"
+ msgid "Billing Interval"
+ msgstr "Mtl. Abrechnungsintervall (variabel)"
+ msgid "Billing Address Locality"
+ msgstr "Rechnungsanschrift Ort"
+ msgid "End Date"
+ msgstr "Ende"
+ msgid "Start Date"
+ msgstr "Anfang"
+ msgid "postal"
+ msgstr "Niederlassung"
+ msgid "billing"
+ msgstr "Rechnung"
+ msgid "delivery"
+ msgstr "Lieferanten"
+ msgid "Invoice is cleared already"
+ msgstr "Rechnung ist bereits abgerechnet"
+ msgid "The Invoice you tried to edit is cleared already, so no editing is possible anymore!"
+ msgstr "Die Rechnung die Sie bearbeiten wollten, ist bereits abgerechnet und kann nicht weiter bearbeitet werden!"
+ msgid "The Invoice you tried to delete is cleared already, so deleting is not possible anymore!"
+ msgstr "Die Rechnung die Sie löschen wollten, ist bereits abgerechnet und kann nicht mehr gelöscht werden!"
+ msgid "Select invoice"
+ msgstr "Rechnung auswählen"
+ msgid "Export selected invoice as ODS"
+ msgstr "Ausgewählte Rechnung als ODS exportieren"
+ msgid "Export selected invoices as ODS"
+ msgstr "Ausgewählte Rechnungen als ODS exportieren"
+ msgid "Export Invoices"
+ msgstr "Rechnungen exportieren"
+ msgid "Create Reversal Invoice"
+ msgstr "Storno-Rechnung erstellen"
+ msgid "Reversal Invoice"
+ msgstr "Storno-Rechnung"
+ msgid "Billing Point"
+ msgstr "Abrechnungszeitpunkt"
+ msgid "begin"
+ msgstr "Anfang des Intervalls"
+ msgid "end"
+ msgstr "Ende des Intervalls"
+ msgid "not yet cleared"
+ msgstr "noch nicht abgerechnet"
+ msgid "open"
+ msgstr "offen"
+ msgid "closed"
+ msgstr "geschlossen"
+ msgid "Interval Begins"
+ msgstr "Abrechnungszeitraum Beginn"
+ msgid "Interval Ends"
+ msgstr "Abrechnungszeitraum Ende"
+ msgid "without external contact person"
+ msgstr "ohne externe Kontaktperson"
+ msgid "without internal contact person"
+ msgstr "ohne interne Kontaktperson"
+ msgid "without customer"
+ msgstr "ohne Kunde"
+ msgid "Order Confirmation"
+ msgid_plural "Order Confirmations"
+ msgstr[0] "Auftragsbestätigung"
+ msgstr[1] "Auftragsbestätigungen"
+ msgid "Interval"
+ msgstr "Intervall"
+ msgid "Quantity"
+ msgstr "Anzahl"
+ msgid "Invoice Item"
+ msgstr "Rechnungsposten"
+ msgid "Costcenter"
+ msgid_plural "Costcenters"
+ msgstr[0] "Kostenstelle"
+ msgstr[1] "Kostenstellen"
+ msgid "manage divisions"
+ msgstr "Abteilungen verwalten"
+ msgid "add, edit and delete divisions"
+ msgstr "Abteilungen hinzufügen, bearbeiten und löschen"
+ msgid "manage order confirmations"
+ msgstr "Auftragsbestätigungen verwalten"
+ msgid "add, edit and delete order confirmations"
+ msgstr "Auftragsbestätigungen hinzufügen, bearbeiten und löschen"
+ msgid "add, edit and delete contracts"
+ msgstr "Verträge hinzufügen, bearbeiten und löschen"
+ msgid "manage contracts"
+ msgstr "Verträge verwalten"
+ msgid "Item"
+ msgstr "Position"
+ msgid "Items"
+ msgstr "Positionen"
+ msgid "Month"
+ msgstr "Monat"
+ msgid "Positions"
+ msgstr "Positionen"
+ msgid "Unit"
+ msgstr "Einheit"
+ msgid "Piece"
+ msgstr "Stück"
+ msgid "set number of invoices"
+ msgstr "Rechnungsnummer manuell vergeben"
+ msgid "allow to set the number of an invoice"
+ msgstr "Erlaubt, die Rechnungsnummer manuell zu vergeben"
+ msgid "Last Billed"
+ msgstr "Zuletzt abgerechnet"
+ msgid "Following Invoices Found"
+ msgstr "Nachfolgende Rechnungen gefunden"
+ msgid "There is an invoice for the same contract after this one. Please delete the following invoice(s) before deleting this one!"
+ msgstr "Es existiert bereits eine spätere Rechnung für den selben Vertrag. Bitte löschen Sie die spätere(n) Rechnung(en), bevor Sie diese Rechnung löschen!"
+ #: Exception/DeleteUsedBillingAddress.php:26
+ msgid "Address as Billing Address in Use"
+ msgstr "Adresse als Rechnungsadresse in Benutzung"
+ #: Exception/DeleteUsedBillingAddress.php:31
+ msgid ""
+ "The Address you tried to delete is used in one or more contract(s) as "
+ "Billing Address. Please assign another Billing Address to these contracts or "
+ "change this one and do not delete."
+ msgstr "Die Adresse, die Sie löschen wollten, ist bei einem oder mehreren Verträgen als Rechnungsadresse gesetzt. Bitte weisen Sie den Verträgen eine andere Rechnungsadresse zu oder verändern Sie diese, ohne sie zu löschen."
+ msgid "Invoice Position"
+ msgid_plural "Invoice Positions"
+ msgstr[0] "Rechnungsposition"
+ msgstr[1] "Rechnungspositionen"
+ #: Model/Invoice.php:146 js/InvoiceEditDialog.js:443
+ msgid "Price Net"
+ msgstr "Nettopreis"
+ #: Model/Invoice.php:152 js/InvoiceEditDialog.js:449
+ msgid "Price Gross"
+ msgstr "Bruttopreis"
+ #: Model/Invoice.php:158 js/InvoiceEditDialog.js:453
+ msgid "Sales Tax (percent)"
+ msgstr "Mehrwertsteuer in Prozent"
+ msgid "Accountable"
+ msgstr "Rechnet ab"
+ msgid "Add New Product"
+ msgstr "Neues Produkt hinzufügen"
+ msgid "SalesProduct"
+ msgstr "Produkt"
+ msgid "SalesOffer"
+ msgstr "Angebot"
+ msgid "Offer"
+ msgid_plural "Offers"
+ msgstr[0] "Angebot"
+ msgstr[1] "Angebote"
+ msgid "All offer records"
+ msgstr "Alle Angebote"
+ msgid "All Offers"
+ msgstr "Alle Angebotsdatensätze"
+ msgid "manage offers"
+ msgstr "Angebote verwalten"
+ msgid "add, edit and delete offers"
+ msgstr "Angebote hinzufügen, bearbeiten und löschen"
+ msgid "without order confirmation"
+ msgstr "ohne Auftragsbestätigung"
+ msgid "Add New Offer"
+ msgstr "Neues Angebot hinzufügen"
+ msgid "Last Autobill"
+ msgstr "Zuletzt Abgerechnet"
+ msgid "All Products"
+ msgstr "Alle Produkte"
+ msgid "All product records"
+ msgstr "Alle Produktdatensätze"
+ msgid "All Contracts"
+ msgstr "Alle Verträge"
+ msgid "All contract records"
+ msgstr "Alle Vertragsdatensätze"
+ msgid "All Invoices"
+ msgstr "Alle Rechnungen"
+ msgid "All invoice records"
+ msgstr "Alle Rechnungsdatensätze"
+ msgid "All Cost Centers"
+ msgstr "Alle Kostenstellen"
+ msgid "All cost center records"
+ msgstr "Alle Kostenstellendatensätze"
+ msgid "All Divisions"
+ msgstr "Alle Abteilungen"
+ msgid "All division records"
+ msgstr "Alle Abteilungsdatensätze"
+ msgid "All Order Confirmations"
+ msgstr "Alle Auftragsbestätigungen"
+ msgid "All order confirmation records"
+ msgstr "Alle Auftragsbestätigungsdatensätze"
+ msgid "Products created by me"
+ msgstr "Produktdatensätze, die ich angelegt habe"
+ msgid "Contracts created by me"
+ msgstr "Vertragsdatensätze, die ich angelegt habe"
+ msgid "Sales Tax"
+ msgstr "Mehrwertsteuer"
+ msgid "change number of an order confirmations"
+ msgstr "Nummer einer Auftragsbestätigung ändern"
+ msgid "Rebill Invoice"
+ msgstr "Rechnung neu erzeugen"
+ msgid "Bill Contract \"{0} - {1}\""
+ msgstr "Vertrag \"{0} - {1}\" abrechnen"
+ msgid "Select the date to generate the bill for"
+ msgstr "Bitte wählen Sie das Datum, zu dem Sie die Rechnung erzeugen möchten"
+ msgid "Rebilling Invoice..."
+ msgstr "Erzeuge Rechnung neu..."
+ msgid "Billing Contract..."
+ msgstr "Rechne Vertrag ab..."
+ msgid "Bill Contract"
++msgstr "Vertrag abrechnen"
@@@ -13,205 -13,915 +13,982 @@@ msgstr "
  "X-Poedit-SourceCharset: utf-8\n"
  "Plural-Forms: nplurals=2; plural=n != 1;\n"
  
- #: Controller.php:83 Controller.php:103
- msgid "You do not have admin rights on Sales"
 -#: Setup/Update/Release5.php:63 Setup/Initialize.php:34
 -msgid "My Products"
++#: Model/Product.php:34 Model/ProductAggregate.php:39
++#: Model/ProductAggregate.php:56 js/ProductAggregateGridPanel.js:56
++#: js/ProductAggregateGridPanel.js:224
++msgid "Product"
++msgid_plural "Products"
++msgstr[0] ""
++msgstr[1] ""
++
++#: Model/Product.php:50 Model/Customer.php:64 js/CustomerDetailsPanel.js:126
++#: js/CustomerEditDialog.js:205 js/ProductEditDialog.js:79
++msgid "Name"
  msgstr ""
  
- #: Acl/Rights.php:110
- msgid "manage products"
 -#: Setup/Update/Release5.php:64 Setup/Initialize.php:35
 -msgid "Products created by myself"
++#: Model/Product.php:55 Model/OrderConfirmation.php:72 Model/Customer.php:76
++#: Model/Contract.php:126 Model/Invoice.php:83 Model/Offer.php:84
++#: js/ContractEditDialog.js:294 js/InvoiceEditDialog.js:395
++#: js/CustomerDetailsPanel.js:157 js/CustomerEditDialog.js:398
++#: js/InvoiceDetailsPanel.js:103 js/OrderConfirmationEditDialog.js:146
++#: js/ProductEditDialog.js:100 js/OfferEditDialog.js:146
++msgid "Description"
  msgstr ""
  
- #: Acl/Rights.php:111
- msgid "add, edit and delete products"
 -#: Setup/Update/Release5.php:84 Setup/Initialize.php:51
 -msgid "My Contracts"
++#: Model/Product.php:61 js/ProductEditDialog.js:85
++msgid "Price"
  msgstr ""
  
- #: Acl/Rights.php:114
- msgid "manage cost centers"
 -#: Setup/Update/Release5.php:85 Setup/Initialize.php:52
 -msgid "Contracts created by myself"
++#: Model/Product.php:65 js/ProductEditDialog.js:92
++msgid "Manufacturer"
  msgstr ""
  
- #: Acl/Rights.php:115
- msgid "add, edit and delete cost centers"
 -#: Setup/Update/Release8.php:242 Setup/Initialize.php:68
 -msgid "All Customers"
++#: Model/Product.php:70 js/ProductEditDialog.js:96
++msgid "Category"
  msgstr ""
  
 -#: Setup/Update/Release8.php:243 Setup/Initialize.php:69
 -msgid "All customer records"
 +#: Model/Division.php:34
 +msgid "Division"
 +msgid_plural "Divisions"
 +msgstr[0] ""
 +msgstr[1] ""
 +
- #: Model/Division.php:50 Model/Contract.php:84 js/DivisionEditDialog.js:81
- #: js/ContractEditDialog.js:129
++#: Model/Division.php:50 Model/OrderConfirmation.php:67
++#: Model/InvoicePosition.php:64 Model/Contract.php:121 Model/Offer.php:79
++#: js/ContractEditDialog.js:220 js/ExceptionHandler.js:96
++#: js/OrderConfirmationEditDialog.js:105 js/DivisionEditDialog.js:81
++#: js/OfferEditDialog.js:116
 +msgid "Title"
  msgstr ""
  
- #: Model/Contract.php:44
 -#: Setup/Update/Release8.php:753
 -msgid "Status"
++#: Model/OrderConfirmation.php:33 Model/Offer.php:61
++#: js/OrderConfirmationFilterModel.js:30
++msgid "Order Confirmation"
++msgid_plural "Order Confirmations"
++msgstr[0] ""
++msgstr[1] ""
++
++#: Model/OrderConfirmation.php:49 Model/OrderConfirmation.php:81
++#: Model/Contract.php:44 Model/Invoice.php:52 Model/Invoice.php:185
++#: Model/Invoice.php:213 Model/ProductAggregate.php:68
++#: js/InvoiceEditDialog.js:399 js/ContractFilterModel.js:30
++#: js/InvoiceDetailsPanel.js:105 js/OrderConfirmationEditDialog.js:110
 +msgid "Contract"
 +msgid_plural "Contracts"
 +msgstr[0] ""
 +msgstr[1] ""
 +
- #: Model/Contract.php:65
- msgid "Cost Center"
++#: Model/OrderConfirmation.php:62 Model/CostCenter.php:50
++#: Model/Contract.php:116 Model/Offer.php:74 js/ContractEditDialog.js:213
++#: js/CostCenterGridPanel.js:56 js/ExceptionHandler.js:91
++#: js/OrderConfirmationEditDialog.js:100 js/OfferEditDialog.js:111
++#: js/CostCenterEditDialog.js:100 Config.php:110
++msgid "Number"
  msgstr ""
  
- #: Model/Contract.php:79 Model/CostCenter.php:50 js/CostCenterEditDialog.js:82
- #: js/ContractEditDialog.js:122 Config.php:55
- msgid "Number"
 -#: Setup/Update/Release8.php:759 Model/Invoice.php:130
 -#: js/InvoiceEditDialog.js:424 js/InvoiceDetailsPanel.js:131
 -msgid "Cleared"
++#: Model/CostCenter.php:34
++msgid "Costcenter"
++msgid_plural "Costcenters"
++msgstr[0] ""
++msgstr[1] ""
++
++#: Model/CostCenter.php:57 js/CostCenterGridPanel.js:62
++#: js/CostCenterEditDialog.js:107
++msgid "Remark"
  msgstr ""
  
- #: Model/Contract.php:89 Model/Product.php:55 js/ProductEditDialog.js:106
- #: js/ContractEditDialog.js:180
- msgid "Description"
 -#: Setup/Update/Release8.php:765
 -msgid "Cleared In"
++#: Model/Address.php:33 Model/Invoice.php:87 Model/Invoice.php:98
++#: js/AddressEditDialog.js:189 js/AddressEditDialog.js:199
++msgid "Address"
++msgid_plural "Addresss"
++msgstr[0] ""
++msgstr[1] ""
++
++#: Model/Address.php:52 Model/Customer.php:35 Model/Customer.php:264
++#: Model/Contract.php:66 Model/Contract.php:162 Model/Contract.php:247
++#: Model/Contract.php:268 Model/Invoice.php:64 Model/Invoice.php:197
++#: Model/Invoice.php:217 Model/Offer.php:49 Model/Offer.php:93
++#: js/ContractEditDialog.js:238 js/InvoiceEditDialog.js:416
++#: js/CustomerFilterModel.js:30 js/ContractCustomerFilterModel.js:30
++#: js/CustomerEditDialog.js:169 js/InvoiceDetailsPanel.js:104
++#: js/OfferEditDialog.js:121
++msgid "Customer"
++msgid_plural "Customers"
++msgstr[0] ""
++msgstr[1] ""
++
++#: Model/Address.php:64 Model/Customer.php:194 js/AddressEditDialog.js:147
++#: js/CustomerEditDialog.js:303
++msgid "Street"
+ msgstr ""
 -#: Setup/Initialize.php:96
 -msgid "invoice"
++#: Model/Address.php:68 Model/Customer.php:233 js/AddressEditDialog.js:150
++#: js/CustomerEditDialog.js:307
++msgid "Postbox"
+ msgstr ""
 -#: Setup/Initialize.php:97
 -msgid "reversal"
++#: Model/Address.php:72 Model/Customer.php:204 js/AddressEditDialog.js:153
++#: js/CustomerEditDialog.js:313
++msgid "Postalcode"
+ msgstr ""
 -#: Setup/Initialize.php:98
 -msgid "credit"
++#: Model/Address.php:76 Model/Customer.php:210 js/AddressEditDialog.js:156
++#: js/CustomerEditDialog.js:318
++msgid "Locality"
+ msgstr ""
 -#: Setup/Initialize.php:112
 -msgid "to clear"
++#: Model/Address.php:80 Model/Customer.php:217 js/AddressEditDialog.js:159
++#: js/CustomerEditDialog.js:322
++msgid "Region"
+ msgstr ""
 -#: Setup/Initialize.php:113
 -msgid "cleared"
++#: Model/Address.php:84 Model/Customer.php:226 js/AddressEditDialog.js:163
++#: js/CustomerEditDialog.js:327
++msgid "Country"
+ msgstr ""
 -#: Model/ProductAggregate.php:39 Model/ProductAggregate.php:56
 -#: Model/Product.php:34 js/ProductAggregateGridPanel.js:57
 -#: js/ProductAggregateGridPanel.js:207
 -msgid "Product"
 -msgid_plural "Products"
 -msgstr[0] ""
 -msgstr[1] ""
++#: Model/Address.php:89 Model/Customer.php:180 js/AddressEditDialog.js:166
++#: js/CustomerEditDialog.js:332
++msgid "Prefix"
++msgstr ""
 -#: Model/ProductAggregate.php:68 Model/OrderConfirmation.php:49
 -#: Model/OrderConfirmation.php:81 Model/Invoice.php:52 Model/Invoice.php:178
 -#: Model/Invoice.php:206 Model/Contract.php:44
 -#: js/OrderConfirmationEditDialog.js:110 js/InvoiceEditDialog.js:339
 -#: js/ContractFilterModel.js:30 js/InvoiceDetailsPanel.js:105
 -msgid "Contract"
 -msgid_plural "Contracts"
++#: Model/Address.php:93 Model/Customer.php:187 js/AddressEditDialog.js:169
++#: js/CustomerEditDialog.js:336
++msgid "Additional Prefix"
++msgstr ""
++
++#: Model/Address.php:97 js/AddressEditDialog.js:176
++msgid "Number Debit"
++msgstr ""
++
++#: Model/InvoicePosition.php:33
++msgid "Invoice Position"
++msgid_plural "Invoice Positions"
+ msgstr[0] ""
+ msgstr[1] ""
 -#: Model/ProductAggregate.php:80 Model/InvoicePosition.php:81
 -#: js/ProductAggregateGridPanel.js:157 js/ProductAggregateGridPanel.js:182
 -#: js/ProductAggregateGridPanel.js:211
 -msgid "Quantity"
++#: Model/InvoicePosition.php:49 Model/Invoice.php:136
++#: js/InvoiceEditDialog.js:390 js/InvoiceDetailsPanel.js:102
++msgid "Type"
+ msgstr ""
 -#: Model/ProductAggregate.php:86 Model/Contract.php:162
 -#: js/ContractEditDialog.js:257
 -msgid "Billing Interval"
++#: Model/InvoicePosition.php:73
++msgid "Month"
+ msgstr ""
 -#: Model/ProductAggregate.php:105 Model/Invoice.php:218 Model/Invoice.php:222
 -#: Model/Invoice.php:226 Model/Invoice.php:230 Model/Invoice.php:234
 -#: Model/Invoice.php:238 Model/Invoice.php:242
 -msgid "Invoice Item"
++#: Model/InvoicePosition.php:77
++msgid "Unit"
+ msgstr ""
 -#: Model/ProductAggregate.php:247
 -msgid "Piece"
++#: Model/InvoicePosition.php:81 Model/ProductAggregate.php:80
++#: js/ProductAggregateGridPanel.js:159 js/ProductAggregateGridPanel.js:185
++#: js/ProductAggregateGridPanel.js:228
++msgid "Quantity"
+ msgstr ""
 -#: Model/Customer.php:35 Model/Customer.php:248 Model/Address.php:52
 -#: Model/Invoice.php:64 Model/Invoice.php:190 Model/Invoice.php:210
 -#: Model/Contract.php:66 Model/Contract.php:179 Model/Contract.php:233
 -#: Model/Contract.php:254 js/ContractEditDialog.js:235
 -#: js/CustomerFilterModel.js:30 js/ContractCustomerFilterModel.js:30
 -#: js/CustomerEditDialog.js:169 js/InvoiceEditDialog.js:356
 -#: js/InvoiceDetailsPanel.js:104
 -msgid "Customer"
 -msgid_plural "Customers"
 -msgstr[0] ""
 -msgstr[1] ""
 -
 -#: Model/Customer.php:51 js/CustomerEditDialog.js:182
 -#: js/CustomerDetailsPanel.js:123
++#: Model/Customer.php:51 js/CustomerDetailsPanel.js:123
++#: js/CustomerEditDialog.js:182
+ msgid "Core Data"
+ msgstr ""
 -#: Model/Customer.php:52 js/CustomerEditDialog.js:232
 -#: js/CustomerDetailsPanel.js:141
++#: Model/Customer.php:52 js/CustomerDetailsPanel.js:141
++#: js/CustomerEditDialog.js:232
+ msgid "Accounting"
  msgstr ""
  
- #: Model/Contract.php:105 js/ContractEditDialog.js:136
 -#: Model/Customer.php:53 js/CustomerEditDialog.js:345
 -#: js/InvoiceEditDialog.js:396 js/InvoiceDetailsPanel.js:127
++#: Model/Customer.php:53 js/InvoiceEditDialog.js:456
++#: js/CustomerEditDialog.js:345 js/InvoiceDetailsPanel.js:127
+ msgid "Miscellaneous"
+ msgstr ""
 -#: Model/Customer.php:58 js/CustomerEditDialog.js:188
 -#: js/CustomerDetailsPanel.js:125
++#: Model/Customer.php:58 js/CustomerDetailsPanel.js:125
++#: js/CustomerEditDialog.js:188
+ msgid "Customer Number"
+ msgstr ""
 -#: Model/Customer.php:63 Model/Product.php:50 js/ProductEditDialog.js:87
 -#: js/CustomerEditDialog.js:205 js/CustomerDetailsPanel.js:126
 -msgid "Name"
 -msgstr ""
 -
 -#: Model/Customer.php:70 js/CustomerEditDialog.js:353
 -#: js/CustomerDetailsPanel.js:127
++#: Model/Customer.php:71 js/CustomerDetailsPanel.js:127
++#: js/CustomerEditDialog.js:353
+ msgid "Web"
+ msgstr ""
 -#: Model/Customer.php:76 Model/OrderConfirmation.php:72 Model/Product.php:55
 -#: Model/Invoice.php:82 Model/Contract.php:126 js/ContractEditDialog.js:316
 -#: js/ProductEditDialog.js:108 js/OrderConfirmationEditDialog.js:135
 -#: js/CustomerEditDialog.js:398 js/CustomerDetailsPanel.js:157
 -#: js/InvoiceEditDialog.js:335 js/InvoiceDetailsPanel.js:103
 -msgid "Description"
 -msgstr ""
 -
 -#: Model/Customer.php:82 Model/Contract.php:102 Model/Contract.php:191
 -#: js/ContractEditDialog.js:272 js/CustomerEditDialog.js:214
 -#: js/ContractContactExternalFilterModel.js:30 js/CustomerDetailsPanel.js:128
++#: Model/Customer.php:82 Model/Contract.php:102 Model/Contract.php:174
++#: js/ContractEditDialog.js:260 js/ContractContactExternalFilterModel.js:30
++#: js/CustomerDetailsPanel.js:128 js/CustomerEditDialog.js:214
+ msgid "Contact Person (external)"
+ msgstr ""
 -#: Model/Customer.php:93 Model/Contract.php:90 Model/Contract.php:203
 -#: js/ContractEditDialog.js:284 js/ContractContactInternalFilterModel.js:30
 -#: js/CustomerEditDialog.js:224 js/CustomerDetailsPanel.js:129
++#: Model/Customer.php:93 Model/Contract.php:90 Model/Contract.php:186
++#: js/ContractEditDialog.js:272 js/ContractContactInternalFilterModel.js:30
++#: js/CustomerDetailsPanel.js:129 js/CustomerEditDialog.js:224
+ msgid "Contact Person (internal)"
+ msgstr ""
 -#: Model/Customer.php:104 js/CustomerEditDialog.js:240
 -#: js/CustomerDetailsPanel.js:145
++#: Model/Customer.php:104 js/CustomerDetailsPanel.js:145
++#: js/CustomerEditDialog.js:240
+ msgid "VAT No."
+ msgstr ""
 -#: Model/Customer.php:110 js/CustomerEditDialog.js:243
++#: Model/Customer.php:109 js/CustomerEditDialog.js:243
+ msgid "Credit Term (days)"
+ msgstr ""
 -#: Model/Customer.php:116 js/CustomerEditDialog.js:254
 -#: js/CustomerDetailsPanel.js:146
++#: Model/Customer.php:115 js/CustomerDetailsPanel.js:146
++#: js/CustomerEditDialog.js:254
+ msgid "Currency"
+ msgstr ""
 -#: Model/Customer.php:121 js/CustomerEditDialog.js:259
 -#: js/CustomerDetailsPanel.js:147
++#: Model/Customer.php:120 js/CustomerDetailsPanel.js:147
++#: js/CustomerEditDialog.js:259
+ msgid "Currency Translation Rate"
+ msgstr ""
 -#: Model/Customer.php:137 js/CustomerEditDialog.js:277
++#: Model/Customer.php:134 js/CustomerEditDialog.js:277
+ msgid "Discount (%)"
+ msgstr ""
 -#: Model/Customer.php:144 js/AddressEditDialog.js:78
++#: Model/Customer.php:141 js/AddressEditDialog.js:78
+ msgid "Delivery Addresses"
+ msgstr ""
 -#: Model/Customer.php:157 js/AddressEditDialog.js:75
++#: Model/Customer.php:154 js/AddressEditDialog.js:75
+ msgid "Billing Addresses"
+ msgstr ""
 -#: Model/Customer.php:183 Model/Address.php:89 js/AddressEditDialog.js:166
 -#: js/CustomerEditDialog.js:332
 -msgid "Prefix"
++#: Model/Contract.php:78 Model/Invoice.php:121 js/InvoiceEditDialog.js:478
++#: js/InvoiceDetailsPanel.js:130
++msgid "Cost Center"
+ msgstr ""
 -#: Model/Customer.php:190 Model/Address.php:93 js/AddressEditDialog.js:169
 -#: js/CustomerEditDialog.js:336
 -msgid "Additional Prefix"
++#: Model/Contract.php:141 js/ContractEditDialog.js:240
++#: js/InvoiceEditDialog.js:431 js/AddressEditDialog.js:74
++#: js/InvoiceDetailsPanel.js:115
++msgid "Billing Address"
+ msgstr ""
 -#: Model/Customer.php:197 Model/Address.php:64 js/AddressEditDialog.js:147
 -#: js/CustomerEditDialog.js:303
 -msgid "Street"
++#: Model/Contract.php:152 Model/ProductAggregate.php:106
++#: js/ContractEditDialog.js:250 js/ProductAggregateGridPanel.js:231
 +msgid "Start Date"
  msgstr ""
  
- #: Model/Contract.php:109 js/ContractEditDialog.js:141
 -#: Model/Customer.php:207 Model/Address.php:72 js/AddressEditDialog.js:153
 -#: js/CustomerEditDialog.js:313
 -msgid "Postalcode"
++#: Model/Contract.php:156 Model/ProductAggregate.php:110
++#: js/ContractEditDialog.js:255 js/ProductAggregateGridPanel.js:232
 +msgid "End Date"
  msgstr ""
  
- #: Model/Contract.php:120
- msgid "Responsible"
 -#: Model/Customer.php:213 Model/Address.php:76 js/AddressEditDialog.js:156
 -#: js/CustomerEditDialog.js:318
 -msgid "Locality"
++#: Model/Contract.php:198 Model/Contract.php:260 js/ContractEditDialog.js:283
++msgid "Lead Cost Center"
  msgstr ""
  
- #: Model/Contract.php:121
- msgid "Customer"
 -#: Model/Customer.php:220 Model/Address.php:80 js/AddressEditDialog.js:159
 -#: js/CustomerEditDialog.js:322
 -msgid "Region"
++#: Model/Contract.php:208 js/ContractEditDialog.js:207
++msgid "Products"
  msgstr ""
  
- #: Model/Contract.php:122
- msgid "Partner"
 -#: Model/Customer.php:229 Model/Address.php:84 js/AddressEditDialog.js:163
 -#: js/CustomerEditDialog.js:327
 -msgid "Country"
++#: Model/Contract.php:246
++msgid "Responsible"
  msgstr ""
  
- #: Model/Contract.php:134 js/ContractEditDialog.js:169
- msgid "Lead Cost Center"
 -#: Model/Customer.php:236 Model/Address.php:68 js/AddressEditDialog.js:150
 -#: js/CustomerEditDialog.js:307
 -msgid "Postbox"
++#: Model/Contract.php:248
++msgid "Partner"
  msgstr ""
  
- #: Model/Contract.php:138
 -#: Model/OrderConfirmation.php:33
 -msgid "Order Confirmation"
 -msgid_plural "Order Confirmations"
++#: Model/Contract.php:264
 +msgid "Time Account"
 +msgstr ""
 +
- #: Model/Product.php:34
- msgid "Product"
- msgid_plural "Products"
++#: Model/Invoice.php:35 js/InvoiceEditDialog.js:356
++#: js/InvoiceEditDialog.js:369 js/InvoiceDetailsPanel.js:98
++msgid "Invoice"
++msgid_plural "Invoices"
  msgstr[0] ""
  msgstr[1] ""
  
- #: Model/Product.php:50 js/ProductEditDialog.js:85
- msgid "Name"
 -#: Model/OrderConfirmation.php:62 Model/CostCenter.php:50
 -#: Model/Contract.php:116 js/CostCenterGridPanel.js:56
 -#: js/ContractEditDialog.js:210 js/OrderConfirmationEditDialog.js:100
 -#: js/ExceptionHandler.js:91 js/CostCenterEditDialog.js:97 Config.php:76
 -msgid "Number"
++#: Model/Invoice.php:78 js/InvoiceEditDialog.js:377
++#: js/InvoiceDetailsPanel.js:100
++msgid "Invoice Number"
  msgstr ""
  
- #: Model/Product.php:61 js/ProductEditDialog.js:91
- msgid "Price"
 -#: Model/OrderConfirmation.php:67 Model/Division.php:50
 -#: Model/InvoicePosition.php:64 Model/Contract.php:121
 -#: js/DivisionEditDialog.js:81 js/ContractEditDialog.js:217
 -#: js/OrderConfirmationEditDialog.js:105 js/ExceptionHandler.js:96
 -msgid "Title"
++#: Model/Invoice.php:104 js/InvoiceEditDialog.js:384
++#: js/InvoiceDetailsPanel.js:101
++msgid "Date"
  msgstr ""
  
- #: Model/Product.php:65 js/ProductEditDialog.js:98
- msgid "Manufacturer"
 -#: Model/Address.php:33 Model/Invoice.php:86 Model/Invoice.php:97
 -#: js/AddressEditDialog.js:189 js/AddressEditDialog.js:199
 -msgid "Address"
 -msgid_plural "Addresss"
 -msgstr[0] ""
 -msgstr[1] ""
++#: Model/Invoice.php:108 js/InvoiceEditDialog.js:491
++msgid "Interval Begins"
 +msgstr ""
  
- #: Model/Product.php:70 js/ProductEditDialog.js:102
- msgid "Category"
 -#: Model/Address.php:97 js/AddressEditDialog.js:176
 -msgid "Number Debit"
++#: Model/Invoice.php:112 js/InvoiceEditDialog.js:496
++msgid "Interval Ends"
  msgstr ""
  
--#: Model/CostCenter.php:34
--msgid "Costcenter"
--msgid_plural "Costcenters"
 -msgstr[0] ""
 -msgstr[1] ""
++#: Model/Invoice.php:115 js/InvoiceEditDialog.js:463
++#: js/InvoiceDetailsPanel.js:129
++msgid "Credit Term"
++msgstr ""
 -#: Model/CostCenter.php:57 js/CostCenterGridPanel.js:62
 -#: js/CostCenterEditDialog.js:104
 -msgid "Remark"
++#: Model/Invoice.php:130 Setup/Update/Release8.php:192
++#: Setup/Update/Release8.php:1096 js/InvoiceEditDialog.js:484
++#: js/InvoiceDetailsPanel.js:131
++msgid "Cleared"
+ msgstr ""
 -#: Model/Division.php:34
 -msgid "Division"
 -msgid_plural "Divisions"
 -msgstr[0] ""
 -msgstr[1] ""
++#: Model/Invoice.php:146 js/InvoiceEditDialog.js:316
++msgid "Price Net"
++msgstr ""
 -#: Model/Product.php:61 js/ProductEditDialog.js:93
 -msgid "Price"
++#: Model/Invoice.php:154 js/InvoiceEditDialog.js:330
++msgid "Price Gross"
+ msgstr ""
 -#: Model/Product.php:65 js/ProductEditDialog.js:100
 -msgid "Manufacturer"
++#: Model/Invoice.php:162
++msgid "Sales Tax"
+ msgstr ""
 -#: Model/Product.php:70 js/ProductEditDialog.js:104
 -msgid "Category"
++#: Model/Invoice.php:171 js/InvoiceEditDialog.js:167
++msgid "Positions"
+ msgstr ""
 -#: Model/InvoicePosition.php:33
 -msgid "Invoice Position"
 -msgid_plural "Invoice Positions"
 -msgstr[0] ""
 -msgstr[1] ""
++#: Model/Invoice.php:221
++msgid "Reversal Invoice"
++msgstr ""
 -#: Model/InvoicePosition.php:49 Model/Invoice.php:136
 -#: js/InvoiceEditDialog.js:330 js/InvoiceDetailsPanel.js:102
 -msgid "Type"
++#: Model/Invoice.php:225 Model/Invoice.php:229 Model/Invoice.php:233
++#: Model/Invoice.php:237 Model/Invoice.php:241 Model/Invoice.php:245
++#: Model/Invoice.php:249 Model/ProductAggregate.php:120
++msgid "Invoice Item"
+ msgstr ""
 -#: Model/InvoicePosition.php:73
 -msgid "Month"
++#: Model/ProductAggregate.php:87
++msgid "Billing Interval"
+ msgstr ""
 -#: Model/InvoicePosition.php:77
 -msgid "Unit"
++#: Model/ProductAggregate.php:99 js/ProductAggregateGridPanel.js:211
++#: js/ProductAggregateGridPanel.js:230
++msgid "Billing Point"
+ msgstr ""
 -#: Model/Invoice.php:35 js/InvoiceEditDialog.js:295
 -#: js/InvoiceEditDialog.js:308 js/InvoiceDetailsPanel.js:98
 -msgid "Invoice"
 -msgid_plural "Invoices"
++#: Model/ProductAggregate.php:258
++msgid "Piece"
++msgstr ""
++
++#: Model/Offer.php:33 js/OrderConfirmationEditDialog.js:121
++msgid "Offer"
++msgid_plural "Offers"
  msgstr[0] ""
  msgstr[1] ""
  
- #: Model/CostCenter.php:57 js/CostCenterEditDialog.js:89
- msgid "Remark"
 -#: Model/Invoice.php:78 js/InvoiceEditDialog.js:316
 -#: js/InvoiceDetailsPanel.js:100
 -msgid "Invoice Number"
++#: Setup/Initialize.php:34 Setup/Update/Release5.php:63
++msgid "My Products"
+ msgstr ""
 -#: Model/Invoice.php:103 js/InvoiceEditDialog.js:323
 -#: js/InvoiceDetailsPanel.js:101
 -msgid "Date"
++#: Setup/Initialize.php:35
++msgid "Products created by me"
+ msgstr ""
 -#: Model/Invoice.php:107 js/InvoiceEditDialog.js:431
 -msgid "Interval Begins"
++#: Setup/Initialize.php:51 Setup/Update/Release5.php:84
++msgid "My Contracts"
+ msgstr ""
 -#: Model/Invoice.php:111 js/InvoiceEditDialog.js:436
 -msgid "Interval Ends"
++#: Setup/Initialize.php:52 Setup/Update/Release5.php:85
++msgid "Contracts created by myself"
+ msgstr ""
 -#: Model/Invoice.php:114 js/InvoiceEditDialog.js:403
 -#: js/InvoiceDetailsPanel.js:129
 -msgid "Credit Term"
++#: Setup/Initialize.php:68 Setup/Update/Release8.php:695
++msgid "All Customers"
+ msgstr ""
 -#: Model/Invoice.php:120 Model/Contract.php:78 js/InvoiceEditDialog.js:418
 -#: js/InvoiceDetailsPanel.js:130
 -msgid "Cost Center"
++#: Setup/Initialize.php:69 Setup/Update/Release8.php:696
++msgid "All customer records"
+ msgstr ""
 -#: Model/Invoice.php:146 js/InvoiceEditDialog.js:443
 -msgid "Price Net"
++#: Setup/Initialize.php:80 Setup/Update/Release8.php:1763
++msgid "All Offers"
+ msgstr ""
 -#: Model/Invoice.php:152 js/InvoiceEditDialog.js:449
 -msgid "Price Gross"
++#: Setup/Initialize.php:81 Setup/Update/Release8.php:1764
++msgid "All offer records"
+ msgstr ""
 -#: Model/Invoice.php:158 js/InvoiceEditDialog.js:453
 -msgid "Sales Tax"
++#: Setup/Initialize.php:105
++msgid "invoice"
+ msgstr ""
 -#: Model/Invoice.php:164 js/InvoiceEditDialog.js:161
 -msgid "Positions"
++#: Setup/Initialize.php:106
++msgid "reversal"
+ msgstr ""
 -#: Model/Invoice.php:214
 -msgid "Reversal Invoice"
++#: Setup/Initialize.php:107
++msgid "credit"
+ msgstr ""
 -#: Model/Contract.php:146 js/ContractEditDialog.js:237
 -#: js/AddressEditDialog.js:74 js/InvoiceEditDialog.js:371
 -#: js/InvoiceDetailsPanel.js:115
 -msgid "Billing Address"
++#: Setup/Initialize.php:121
++msgid "to clear"
+ msgstr ""
 -#: Model/Contract.php:156 js/ContractEditDialog.js:262
 -msgid "Billing Point"
++#: Setup/Initialize.php:122
++msgid "cleared"
+ msgstr ""
 -#: Model/Contract.php:169 js/ContractEditDialog.js:247
 -msgid "Start Date"
++#: Setup/Update/Release8.php:186 Setup/Update/Release8.php:1090
++msgid "Status"
+ msgstr ""
 -#: Model/Contract.php:173 js/ContractEditDialog.js:252
 -msgid "End Date"
++#: Setup/Update/Release8.php:198 Setup/Update/Release8.php:1102
++msgid "Cleared In"
+ msgstr ""
 -#: Model/Contract.php:213 js/ContractEditDialog.js:204
 -msgid "Products"
++#: Setup/Update/Release8.php:1825
++msgid "All Products"
+ msgstr ""
 -#: Model/Contract.php:232
 -msgid "Responsible"
++#: Setup/Update/Release8.php:1826
++msgid "All product records"
+ msgstr ""
 -#: Model/Contract.php:234
 -msgid "Partner"
++#: Setup/Update/Release8.php:1836
++msgid "All Contracts"
+ msgstr ""
 -#: Model/Contract.php:246 js/ContractEditDialog.js:295
 -msgid "Lead Cost Center"
++#: Setup/Update/Release8.php:1837
++msgid "All contract records"
+ msgstr ""
 -#: Model/Contract.php:250
 -msgid "Time Account"
++#: Setup/Update/Release8.php:1847
++msgid "All Invoices"
+ msgstr ""
 -#: js/ContractEditDialog.js:101
 -msgid "Please use a decimal number here!"
++#: Setup/Update/Release8.php:1848
++msgid "All invoice records"
+ msgstr ""
 -#: js/ContractEditDialog.js:265
 -msgid "begin"
++#: Setup/Update/Release8.php:1858
++msgid "All Cost Centers"
+ msgstr ""
 -#: js/ContractEditDialog.js:266
 -msgid "end"
++#: Setup/Update/Release8.php:1859
++msgid "All costcenter records"
+ msgstr ""
 -#: js/ContractEditDialog.js:309 js/ProductAggregateGridPanel.js:221
 -msgid "Last Billed"
++#: Setup/Update/Release8.php:1869
++msgid "All Divisions"
+ msgstr ""
 -#: js/ContractEditDialog.js:317 js/ProductEditDialog.js:109
 -msgid "Enter description..."
++#: Setup/Update/Release8.php:1870
++msgid "All division records"
+ msgstr ""
 -#: js/CustomerFilterModel.js:32 js/ContractCustomerFilterModel.js:32
 -msgid "without customer"
++#: Setup/Update/Release8.php:1880
++msgid "All Order Confirmations"
+ msgstr ""
 -#: js/ContractCostCenterFilterModel.js:32
 -msgid "without CostCenter"
++#: Setup/Update/Release8.php:1881
++msgid "All order confirmation records"
+ msgstr ""
 -#: js/AddressEditDialog.js:77
 -msgid "Delivery Address"
++#: Setup/Update/Release5.php:64
++msgid "Products created by myself"
+ msgstr ""
 -#: js/AddressEditDialog.js:84
 -#, python-brace-format
 -msgid "Edit {0} \"{1}\""
++#: Acl/Rights.php:167
++msgid "manage products"
+ msgstr ""
 -#: js/AddressEditDialog.js:87
 -msgid "Add new Billing Address"
++#: Acl/Rights.php:168
++msgid "add, edit and delete products"
+ msgstr ""
 -#: js/AddressEditDialog.js:89
 -msgid "Add new Delivery Address"
++#: Acl/Rights.php:171
++msgid "manage contracts"
+ msgstr ""
 -#: js/AddressEditDialog.js:128
 -msgid "Apply postal address"
++#: Acl/Rights.php:172
++msgid "add, edit and delete contracts"
+ msgstr ""
 -#: js/CustomerGridPanel.js:44
 -msgid "Export Customers"
++#: Acl/Rights.php:175
++msgid "manage cost centers"
  msgstr ""
  
- #: js/AdminPanel.js:61
 -#: js/CustomerGridPanel.js:54 js/CustomerGridPanel.js:56
 -msgid "Export selected customers as ODS"
++#: Acl/Rights.php:176
++msgid "add, edit and delete cost centers"
+ msgstr ""
 -#: js/CustomerGridPanel.js:55
 -msgid "Export selected customer as ODS"
++#: Acl/Rights.php:179
++msgid "manage customers"
+ msgstr ""
 -#: js/AdminPanel.js:61
 -msgid "Cancel"
++#: Acl/Rights.php:180
++msgid "add, edit and delete customers"
+ msgstr ""
 -#: js/AdminPanel.js:69
 -msgid "OK"
++#: Acl/Rights.php:183
++msgid "manage invoices"
+ msgstr ""
 -#: js/AdminPanel.js:90
 -msgid "Loading..."
++#: Acl/Rights.php:184
++msgid "add, edit and delete invoices"
+ msgstr ""
 -#: js/ContractContactInternalFilterModel.js:32
 -msgid "without internal contact person"
++#: Acl/Rights.php:187
++msgid "manage divisions"
+ msgstr ""
 -#: js/OrderConfirmationEditDialog.js:149 js/CustomerEditDialog.js:412
 -msgid "Enter description"
++#: Acl/Rights.php:188
++msgid "add, edit and delete divisions"
+ msgstr ""
 -#: js/AddressGridPanel.js:53
 -#, python-brace-format
 -msgid ""
 -"There could not be found any {0}. Please try to change your filter-criteria "
 -"or view-options."
++#: Acl/Rights.php:191
++msgid "manage order confirmations"
+ msgstr ""
 -#: js/AddressGridPanel.js:56
 -msgid "Clipboard"
++#: Acl/Rights.php:192
++msgid "add, edit and delete order confirmations"
+ msgstr ""
 -#: js/AddressGridPanel.js:61 js/CustomerEditDialog.js:126 js/Sales.js:57
 -msgid "Copy address to the clipboard"
++#: Acl/Rights.php:195
++msgid "manage offers"
+ msgstr ""
 -#: js/CustomerEditDialog.js:45
 -msgid "Either street or postbox is required!"
++#: Acl/Rights.php:196
++msgid "add, edit and delete offers"
+ msgstr ""
 -#: js/CustomerEditDialog.js:66
 -msgid "Copy Customer"
++#: Acl/Rights.php:199
++msgid "change number of an order confirmations"
+ msgstr ""
 -#: js/CustomerEditDialog.js:69
 -msgid "Add New Customer"
++#: Acl/Rights.php:200
++msgid "allow to change the number of an order confirmation on update"
+ msgstr ""
 -#: js/CustomerEditDialog.js:71
 -#, python-brace-format
 -msgid "Edit Customer \"{0}\""
++#: Acl/Rights.php:203
++msgid "set number of invoices"
+ msgstr ""
 -#: js/CustomerEditDialog.js:271 js/CustomerDetailsPanel.js:143
 -msgid "IBAN"
++#: Acl/Rights.php:204
++msgid "allow to set the number of an invoice"
+ msgstr ""
 -#: js/CustomerEditDialog.js:274 js/CustomerDetailsPanel.js:144
 -msgid "BIC"
++#: Controller.php:83 Controller.php:105
++msgid "You do not have admin rights on Sales"
+ msgstr ""
 -#: js/CustomerEditDialog.js:295
 -msgid "Postal Address"
++#: Export/Ods/Invoice.php:125
++msgid "CLEARED"
+ msgstr ""
 -#: js/ContractContactExternalFilterModel.js:32
 -msgid "without external contact person"
++#: Export/Ods/Invoice.php:128
++msgid "INVOICE"
++msgstr ""
++
++#: js/AdminPanel.js:61 js/BillingDateDialog.js:127
 +msgid "Cancel"
 +msgstr ""
 +
 +#: js/AdminPanel.js:69
 +msgid "OK"
 +msgstr ""
 +
 +#: js/AdminPanel.js:90
 +msgid "Loading..."
 +msgstr ""
 +
++#: js/ContractEditDialog.js:104
++msgid "Please use a decimal number here!"
++msgstr ""
++
++#: js/ContractEditDialog.js:295 js/ProductEditDialog.js:101
++msgid "Enter description..."
++msgstr ""
++
++#: js/CustomerGridPanel.js:44
++msgid "Export Customers"
++msgstr ""
++
++#: js/CustomerGridPanel.js:54 js/CustomerGridPanel.js:56
++msgid "Export selected customers as ODS"
+ msgstr ""
 -#: js/CustomerDetailsPanel.js:68
 -msgid "Select customer"
++#: js/CustomerGridPanel.js:55
++msgid "Export selected customer as ODS"
+ msgstr ""
 -#: js/ProductAggregateGridPanel.js:169 js/ProductAggregateGridPanel.js:194
 -#: js/ProductAggregateGridPanel.js:212
 -msgid "Interval"
++#: js/ContractContactInternalFilterModel.js:32
++msgid "without internal contact person"
+ msgstr ""
 -#: js/InvoiceEditDialog.js:130 js/InvoiceGridPanel.js:81
++#: js/InvoiceEditDialog.js:136 js/InvoiceGridPanel.js:91
+ msgid "Create Reversal Invoice"
+ msgstr ""
 -#: js/InvoiceEditDialog.js:135
++#: js/InvoiceEditDialog.js:141
+ msgid "Copy Invoice"
+ msgstr ""
 -#: js/InvoiceEditDialog.js:138
++#: js/InvoiceEditDialog.js:144
+ msgid "Add New Invoice"
+ msgstr ""
 -#: js/InvoiceEditDialog.js:140
++#: js/InvoiceEditDialog.js:146
+ #, python-brace-format
+ msgid "Edit Invoice \"{0}\""
+ msgstr ""
 -#: js/InvoiceEditDialog.js:246
++#: js/InvoiceEditDialog.js:255
+ msgid "No customer assigned"
+ msgstr ""
 -#: js/InvoiceEditDialog.js:247
++#: js/InvoiceEditDialog.js:256
+ msgid ""
+ "The selected contract doesn't have a customer assigned, yet. Add a customer "
+ "to the contract with the contract edit dialog."
+ msgstr ""
 -#: js/InvoiceEditDialog.js:258
++#: js/InvoiceEditDialog.js:267
+ msgid "No cost center assigned"
+ msgstr ""
 -#: js/InvoiceEditDialog.js:259
++#: js/InvoiceEditDialog.js:268
+ msgid ""
+ "The selected contract doesn't have a cost center assigned, yet. Add a cost "
+ "center to the contract with the contract edit dialog."
+ msgstr ""
 -#: js/InvoiceEditDialog.js:319 js/InvoiceEditDialog.js:326
++#: js/InvoiceEditDialog.js:346
++msgid "Sales Tax (percent)"
++msgstr ""
++
++#: js/InvoiceEditDialog.js:380 js/InvoiceEditDialog.js:386
+ msgid "automatically set..."
+ msgstr ""
 -#: js/ContractFilterModel.js:32
 -msgid "without contract"
 +#: js/ContractCostCenterFilterModel.js:32
 +msgid "without CostCenter"
  msgstr ""
  
- #: js/ProductEditDialog.js:107 js/ContractEditDialog.js:181
- msgid "Enter description..."
 -#: js/CopyAddressDialog.js:121
 -msgid "Ok"
++#: js/ContractContactExternalFilterModel.js:32
++msgid "without external contact person"
  msgstr ""
  
- #: js/ContractEditDialog.js:70
- msgid "Please use a decimal number here!"
 -#: js/InvoiceGridPanel.js:44
 -msgid "Export Invoices"
++#: js/ProductAggregateGridPanel.js:172 js/ProductAggregateGridPanel.js:197
++#: js/ProductAggregateGridPanel.js:229
++msgid "Interval"
+ msgstr ""
 -#: js/InvoiceGridPanel.js:54 js/InvoiceGridPanel.js:56
 -msgid "Export selected invoices as ODS"
++#: js/ProductAggregateGridPanel.js:215 js/ProductAggregateGridPanel.js:260
++msgid "begin"
+ msgstr ""
 -#: js/InvoiceGridPanel.js:55
 -msgid "Export selected invoice as ODS"
++#: js/ProductAggregateGridPanel.js:216 js/ProductAggregateGridPanel.js:258
++msgid "end"
+ msgstr ""
 -#: js/InvoiceGridPanel.js:63
 -msgid "Export as ..."
++#: js/ProductAggregateGridPanel.js:233
++msgid "Last Autobill"
+ msgstr ""
 -#: js/InvoicePositionGridPanel.js:107
 -msgid "Export Records from these Positions"
++#: js/ProductAggregateGridPanel.js:234
++msgid "Creation Time"
+ msgstr ""
 -#: js/InvoiceDetailsPanel.js:66
 -msgid "Select invoice"
++#: js/ProductAggregateGridPanel.js:235
++msgid "Created By"
+ msgstr ""
 -#: Controller/NumberableAbstract.php:59
 -msgid "The number you have tried to set is already in use!"
++#: js/ProductAggregateGridPanel.js:236
++msgid "Last Modified Time"
+ msgstr ""
 -#: Export/Ods/Invoice.php:125
 -msgid "CLEARED"
++#: js/ProductAggregateGridPanel.js:237
++msgid "Last Modified By"
+ msgstr ""
 -#: Export/Ods/Invoice.php:128
 -msgid "INVOICE"
++#: js/CustomerDetailsPanel.js:68
++msgid "Select customer"
+ msgstr ""
 -#: Acl/Rights.php:159
 -msgid "manage products"
++#: js/CustomerDetailsPanel.js:143 js/CustomerEditDialog.js:271
++msgid "IBAN"
+ msgstr ""
 -#: Acl/Rights.php:160
 -msgid "add, edit and delete products"
++#: js/CustomerDetailsPanel.js:144 js/CustomerEditDialog.js:274
++msgid "BIC"
+ msgstr ""
 -#: Acl/Rights.php:163
 -msgid "manage contracts"
++#: js/ContractGridPanel.js:51
++msgid "Bill Contract"
+ msgstr ""
 -#: Acl/Rights.php:164
 -msgid "add, edit and delete contracts"
++#: js/ContractGridPanel.js:84
++msgid "Billing Contract..."
+ msgstr ""
 -#: Acl/Rights.php:167
 -msgid "manage cost centers"
++#: js/ContractGridPanel.js:99
++#, python-brace-format
++msgid "Bill Contract \"{0} - {1}\""
+ msgstr ""
 -#: Acl/Rights.php:168
 -msgid "add, edit and delete cost centers"
++#: js/ContractGridPanel.js:100
++msgid "Select the date to generate the bill for"
+ msgstr ""
 -#: Acl/Rights.php:171
 -msgid "manage customers"
++#: js/OrderConfirmationFilterModel.js:32
++msgid "without order confirmation"
  msgstr ""
  
- #: js/ContractEditDialog.js:146
- msgid "Contract Contact"
 -#: Acl/Rights.php:172
 -msgid "add, edit and delete customers"
++#: js/InvoiceGridPanel.js:41
++msgid "Rebilling Invoice..."
  msgstr ""
  
- #: js/ContractEditDialog.js:158
- msgid "Account Manager"
 -#: Acl/Rights.php:175
 -msgid "manage invoices"
++#: js/InvoiceGridPanel.js:54
++msgid "Export Invoices"
  msgstr ""
  
- #: Controller/NumberableAbstract.php:60
 -#: Acl/Rights.php:176
 -msgid "add, edit and delete invoices"
++#: js/InvoiceGridPanel.js:64 js/InvoiceGridPanel.js:66
++msgid "Export selected invoices as ODS"
+ msgstr ""
 -#: Acl/Rights.php:179
 -msgid "manage divisions"
++#: js/InvoiceGridPanel.js:65
++msgid "Export selected invoice as ODS"
+ msgstr ""
 -#: Acl/Rights.php:180
 -msgid "add, edit and delete divisions"
++#: js/InvoiceGridPanel.js:73
++msgid "Export as ..."
+ msgstr ""
 -#: Acl/Rights.php:183
 -msgid "manage order confirmations"
++#: js/InvoiceGridPanel.js:113
++msgid "Rebill Invoice"
+ msgstr ""
 -#: Acl/Rights.php:184
 -msgid "add, edit and delete order confirmations"
++#: js/AddressEditDialog.js:77
++msgid "Delivery Address"
+ msgstr ""
 -#: Acl/Rights.php:187
 -msgid "change number of an order confirmations"
++#: js/AddressEditDialog.js:84
++#, python-brace-format
++msgid "Edit {0} \"{1}\""
+ msgstr ""
 -#: Acl/Rights.php:188
 -msgid "allow to change the number of an order confirmation on update"
++#: js/AddressEditDialog.js:87
++msgid "Add new Billing Address"
+ msgstr ""
 -#: Acl/Rights.php:191
 -msgid "set number of invoices"
++#: js/AddressEditDialog.js:89
++msgid "Add new Delivery Address"
+ msgstr ""
 -#: Acl/Rights.php:192
 -msgid "allow to set the number of an invoice"
++#: js/AddressEditDialog.js:128
++msgid "Apply postal address"
+ msgstr ""
 -#: Config.php:58
 -msgid "Contract Number Creation"
++#: js/CustomerFilterModel.js:32 js/ContractCustomerFilterModel.js:32
++msgid "without customer"
+ msgstr ""
 -#: Config.php:60
 -msgid "Should the contract number be set manually or be auto-created?"
++#: js/Sales.js:58 js/AddressGridPanel.js:61 js/CustomerEditDialog.js:126
++msgid "Copy address to the clipboard"
+ msgstr ""
 -#: Config.php:63
 -msgid "automatically"
++#: js/AddressGridPanel.js:53
++#, python-brace-format
++msgid ""
++"There could not be found any {0}. Please try to change your filter-criteria "
++"or view-options."
+ msgstr ""
 -#: Config.php:64
 -msgid "manually"
++#: js/AddressGridPanel.js:56
++msgid "Clipboard"
+ msgstr ""
 -#: Config.php:71
 -msgid "Contract Number Validation"
++#: js/ContractFilterModel.js:32
++msgid "without contract"
+ msgstr ""
 -#: Config.php:73
 -msgid "The Number can be validated as text or number."
++#: js/CopyAddressDialog.js:121 js/BillingDateDialog.js:135
++msgid "Ok"
+ msgstr ""
 -#: Config.php:77
 -msgid "Text"
++#: js/CustomerEditDialog.js:45
++msgid "Either street or postbox is required!"
+ msgstr ""
 -#: Config.php:84
 -msgid "Own Currency"
++#: js/CustomerEditDialog.js:66
++msgid "Copy Customer"
+ msgstr ""
 -#: Config.php:86
 -msgid ""
 -"The currency defined here is used as default currency in the customerd edit "
 -"dialog."
++#: js/CustomerEditDialog.js:69
++msgid "Add New Customer"
+ msgstr ""
 -#: Config.php:94
 -msgid "Invoice Type"
++#: js/CustomerEditDialog.js:71
++#, python-brace-format
++msgid "Edit Customer \"{0}\""
+ msgstr ""
 -#: Config.php:96
 -msgid "Possible Invoice Types."
++#: js/CustomerEditDialog.js:295
++msgid "Postal Address"
+ msgstr ""
 -#: Config.php:104
 -msgid "Invoice Cleared"
++#: js/CustomerEditDialog.js:412 js/OrderConfirmationEditDialog.js:160
++#: js/OfferEditDialog.js:160
++msgid "Enter description"
+ msgstr ""
 -#: Config.php:106
 -msgid "Possible Invoice Cleared States."
++#: js/InvoiceDetailsPanel.js:66
++msgid "Select invoice"
+ msgstr ""
 -#: Controller.php:83 Controller.php:105
 -msgid "You do not have admin rights on Sales"
++#: js/InvoicePositionGridPanel.js:111
++msgid "Export Records from these Positions"
+ msgstr ""
 -#: Exception/UnknownCurrencyCode.php:26
 -msgid "Unknown Currency Code"
++#: js/ProductEditDialog.js:42
++msgid "Add New Product"
+ msgstr ""
 -#: Exception/UnknownCurrencyCode.php:31
 -msgid ""
 -"The Currency Code you tried to use is not valid. Please use a valid Currency "
 -"Code as defined in ISO 4217."
++#: js/ProductEditDialog.js:166
++msgid "Accountable"
+ msgstr ""
 -#: Exception/DuplicateNumber.php:26
 -msgid "Number duplicate"
++#: js/OfferEditDialog.js:54
++msgid "Add New Offer"
+ msgstr ""
 -#: Exception/DuplicateNumber.php:31
 -msgid ""
 -"The number you tried to use has been taken already. Please use another one "
 -"leave the field blank to take the next free number."
++#: Exception/AlterOCNumberForbidden.php:26
++msgid "No Right to alter the Number"
++msgstr ""
++
++#: Exception/AlterOCNumberForbidden.php:31
++msgid "You are not allowed to alter the number afterwards!"
+ msgstr ""
+ #: Exception/InvoiceAlreadyClearedDelete.php:26
+ #: Exception/InvoiceAlreadyClearedEdit.php:26
+ msgid "Invoice is cleared already"
+ msgstr ""
+ #: Exception/InvoiceAlreadyClearedDelete.php:31
+ msgid ""
+ "The Invoice you tried to delete is cleared already, so deleting is not "
+ "possible anymore!"
+ msgstr ""
 -#: Exception/AlterOCNumberForbidden.php:26
 -msgid "No Right to alter the Number"
++#: Exception/DuplicateNumber.php:26
++msgid "Number duplicate"
+ msgstr ""
 -#: Exception/AlterOCNumberForbidden.php:31
 -msgid "You are not allowed to alter the number afterwards!"
++#: Exception/DuplicateNumber.php:31
++msgid ""
++"The number you tried to use has been taken already. Please use another one "
++"leave the field blank to take the next free number."
+ msgstr ""
+ #: Exception/InvoiceAlreadyClearedEdit.php:31
+ msgid ""
+ "The Invoice you tried to edit is cleared already, so no editing is possible "
+ "anymore!"
+ msgstr ""
 -#: Exception/DeletePreviousInvoice.php:26
 -msgid "Following Invoices Found"
 -msgstr ""
 -
 -#: Exception/DeletePreviousInvoice.php:31
 -msgid ""
 -"There is an invoice for the same contract after this one. Please delete the "
 -"following invoice(s) before deleting this one!"
 -msgstr ""
 -
+ #: Exception/DeleteUsedBillingAddress.php:26
+ msgid "Address as Billing Address in Use"
+ msgstr ""
+ #: Exception/DeleteUsedBillingAddress.php:31
+ msgid ""
+ "The Address you tried to delete is used in one or more contract(s) as "
+ "Billing Address. Please assign another Billing Address to these contracts or "
+ "change this one and do not delete."
+ msgstr ""
 -msgid "Accountable"
 -msgstr ""
 -
 -msgid "Add New Product"
 -msgstr ""
 -
 -msgid "SalesProduct"
 -msgstr ""
 -
 -msgid "All offer records"
 -msgstr ""
 -
 -msgid "All Offers"
 -msgstr ""
 -
 -msgid "manage offers"
 -msgstr ""
 -
 -msgid "add, edit and delete offers"
 -msgstr ""
 -
 -msgid "without order confirmation"
 -msgstr ""
 -
 -msgid "Add New Offer"
++#: Exception/UnknownCurrencyCode.php:26
++msgid "Unknown Currency Code"
+ msgstr ""
 -msgid "Last Autobill"
++#: Exception/UnknownCurrencyCode.php:31
++msgid ""
++"The Currency Code you tried to use is not valid. Please use a valid Currency "
++"Code as defined in ISO 4217."
+ msgstr ""
 -msgid "All Products"
++#: Exception/DeletePreviousInvoice.php:26
++msgid "Following Invoices Found"
+ msgstr ""
 -msgid "All product records"
++#: Exception/DeletePreviousInvoice.php:31
++msgid ""
++"There is an invoice for the same contract after this one. Please delete the "
++"following invoice(s) before deleting this one!"
+ msgstr ""
 -msgid "All Contracts"
++#: Controller/NumberableAbstract.php:99
 +msgid "The number you have tried to set is already in use!"
  msgstr ""
  
- #: Config.php:37
 -msgid "All contract records"
++#: Config.php:72
++msgid "Auto Invoice Contract Interval"
+ msgstr ""
 -msgid "All Invoices"
++#: Config.php:74
++msgid "Sets the biggest interval, contracts will be billed."
+ msgstr ""
 -msgid "All invoice records"
++#: Config.php:82
++msgid "Ignore Billables Before Date"
+ msgstr ""
 -msgid "All Cost Centers"
++#: Config.php:84
++msgid "Sets the date billables will be ignored before."
+ msgstr ""
 -msgid "All cost center records"
++#: Config.php:92
 +msgid "Contract Number Creation"
  msgstr ""
  
- #: Config.php:39
 -msgid "All Divisions"
++#: Config.php:94
 +msgid "Should the contract number be set manually or be auto-created?"
  msgstr ""
  
- #: Config.php:42
 -msgid "All division records"
++#: Config.php:97
 +msgid "automatically"
  msgstr ""
  
- #: Config.php:43
 -msgid "All Order Confirmations"
++#: Config.php:98
 +msgid "manually"
  msgstr ""
  
- #: Config.php:50
 -msgid "All order confirmation records"
++#: Config.php:105
 +msgid "Contract Number Validation"
  msgstr ""
  
- #: Config.php:52
 -msgid "Products created by me"
++#: Config.php:107
 +msgid "The Number can be validated as text or number."
  msgstr ""
  
- #: Config.php:56
 -msgid "Sales Tax"
++#: Config.php:111
 +msgid "Text"
  msgstr ""
  
- #: Setup/Initialize.php:34 Setup/Update/Release5.php:63
- msgid "My Products"
 -msgid "change number of an order confirmations"
++#: Config.php:118
++msgid "Own Currency"
  msgstr ""
  
- #: Setup/Initialize.php:35 Setup/Update/Release5.php:64
- msgid "Products created by myself"
- msgstr ""
- #: Setup/Initialize.php:51 Setup/Update/Release5.php:84
- msgid "My Contracts"
 -msgid "Bill Contract \"{0} - {1}\""
++#: Config.php:120
++msgid ""
++"The currency defined here is used as default currency in the customerd edit "
++"dialog."
  msgstr ""
  
- #: Setup/Initialize.php:52 Setup/Update/Release5.php:85
- msgid "Contracts created by myself"
 -msgid "Select the date to generate the bill for"
++#: Config.php:128
++msgid "Invoice Type"
  msgstr ""
  
- #: Setup/Update/Release8.php:190
- msgid "Status"
 -msgid "Rebill Invoice"
++#: Config.php:130
++msgid "Possible Invoice Types."
  msgstr ""
  
- #: Setup/Update/Release8.php:196
- msgid "Cleared"
 -msgid "Rebilling Invoice..."
++#: Config.php:138
++msgid "Invoice Cleared"
  msgstr ""
  
- #: Setup/Update/Release8.php:202
- msgid "Cleared In"
 -msgid "Billing Contract..."
++#: Config.php:140
++msgid "Possible Invoice Cleared States."
  msgstr ""
 -
 -msgid "Bill Contract"
 -msgstr ""
@@@ -141,9 -147,21 +147,21 @@@ class Timetracker_Frontend_Json extend
                  $this->_resolveTimeaccountGrants($_records);
                  break;
          }
+         
+         if (Tinebase_Core::getUser()->hasRight('Sales', 'manage_invoices')) {
+             $invoiceIds = array_unique(array_values($_records->invoice_id));
+             $invoices   = Sales_Controller_Invoice::getInstance()->getMultiple($invoiceIds);
+             
+             foreach ($_records as $record) {
+                 if ($invoices && $record->invoice_id) {
+                     $record->invoice_id = $invoices->getById($record->invoice_id);
+                 }
+             }
+         }
+         
  
          Tinebase_Tags::getInstance()->getMultipleTagsOfRecords($_records);
 -        $_records->setTimezone(Tinebase_Core::get('userTimeZone'));
 +        $_records->setTimezone(Tinebase_Core::getUserTimezone());
          $_records->convertDates = true;
          $result = $_records->toArray();
  
Simple merge
@@@ -459,3 -459,16 +459,16 @@@ msgid "timeaccount list
  msgid_plural "timeaccount lists"
  msgstr[0] "Stundenzettel-Liste"
  msgstr[1] "Stundenzettel-Listen"
 -msgstr "Zeitkonto"
+ #: js/TimeaccountEditDialog.js:41
+ msgid "Add New Timeaccount"
+ msgstr "Neues Zeitkonto hinzufügen"
+ msgid "hour"
+ msgstr "Stunde"
+ msgid "Invoice"
+ msgstr "Rechnung"
+ msgid "TimetrackerTimeaccount"
++msgstr "Zeitkonto"
@@@ -13,252 -13,234 +13,234 @@@ msgstr "
  "X-Poedit-SourceCharset: utf-8\n"
  "Plural-Forms: nplurals=2; plural=n != 1;\n"
  
- #: Acl/Rights.php:120
- msgid "Manage timeaccounts"
- msgstr ""
- #: Acl/Rights.php:121
- msgid "Add, edit and delete timeaccounts (includes all timesheet grants)"
- msgstr ""
- #: Acl/Rights.php:124 Acl/Rights.php:125
- msgid "Add timeaccounts"
- msgstr ""
- #: Acl/Rights.php:128
- msgid "Manage shared timeaccount favorites"
- msgstr ""
- #: Acl/Rights.php:129
- msgid "Create or update shared timeaccount favorites"
++#: Model/Timesheet.php:164 Model/Timeaccount.php:458
++msgid "hour"
 +msgstr ""
 +
- #: Acl/Rights.php:132
- msgid "Manage shared timesheet favorites"
- msgstr ""
- #: Acl/Rights.php:133
- msgid "Create or update shared timesheet favorites"
- msgstr ""
- #: Model/Timeaccount.php:43 Model/Timeaccount.php:47
- #: js/TimeaccountEditDialog.js:127
+ #: Model/Timeaccount.php:43 js/TimeaccountEditDialog.js:138
  msgid "Cost Center"
  msgstr ""
  
- #: js/Timetracker.js:25
- msgid "New Timesheet"
+ #: Model/Timeaccount.php:47 js/TimeaccountEditDialog.js:153
+ msgid "Responsible Person"
  msgstr ""
  
- #: js/DurationSpinner.js:69 js/DurationSpinner.js:79
- msgid "Not a valid time"
 -#: Model/Timeaccount.php:404
 -msgid "hour"
 -msgstr ""
 -
+ #: Setup/setup.xml:4
+ msgid "Timetracker"
  msgstr ""
  
- #: js/TimeaccountPickerCombo.js:46
- msgid "Show closed"
+ #: Setup/setup.xml:87 js/TimeAccountBilledFilterModel.js:47
+ #: js/TimeaccountEditDialog.js:98
+ msgid "not yet billed"
  msgstr ""
  
- #: js/TimeAccountContractFilterModel.js:30
- msgid "Contract"
+ #: Setup/setup.xml:88 js/TimeAccountBilledFilterModel.js:48
+ #: js/TimeaccountEditDialog.js:99
+ msgid "to bill"
  msgstr ""
  
- #: js/TimeAccountContractFilterModel.js:32
- msgid "without contract"
+ #: Setup/setup.xml:89 js/TimeAccountBilledFilterModel.js:49
+ #: js/TimeaccountEditDialog.js:100
+ msgid "billed"
  msgstr ""
  
- #: js/TimeaccountGridPanel.js:78 js/TimesheetGridPanel.js:76
- msgid "Tags"
+ #: Setup/Initialize.php:33
+ msgid "My Timesheets today"
  msgstr ""
  
- #: js/TimeaccountGridPanel.js:81 js/TimeaccountEditDialog.js:187
- #: js/Models.js:174
- msgid "Number"
+ #: Setup/Initialize.php:47
+ msgid "My Timesheets this week"
  msgstr ""
  
- #: js/TimeaccountGridPanel.js:86 js/TimeaccountEditDialog.js:193
- #: js/Models.js:175
- msgid "Title"
+ #: Setup/Initialize.php:61
+ msgid "My Timesheets last week"
  msgstr ""
  
- #: js/TimeaccountGridPanel.js:91 js/TimeaccountEditDialog.js:84
- #: js/Models.js:177
- msgid "Billed"
+ #: Setup/Initialize.php:75
+ msgid "My Timesheets this month"
  msgstr ""
  
- #: js/TimeaccountGridPanel.js:97 js/TimeaccountEditDialog.js:73
- msgid "Budget"
+ #: Setup/Initialize.php:89
+ msgid "My Timesheets last month"
  msgstr ""
  
- #: js/TimeaccountGridPanel.js:103 js/TimesheetGridPanel.js:91
- #: js/TimesheetGridPanel.js:385
- msgid "Cleared in"
+ #: Setup/Initialize.php:112 Setup/Update/Release5.php:81
+ msgid "Timeaccounts to bill"
  msgstr ""
  
- #: js/TimeaccountGridPanel.js:109 js/TimeaccountEditDialog.js:107
- #: js/Models.js:184
- msgid "Booking deadline"
+ #: Setup/Initialize.php:126 Setup/Update/Release5.php:95
+ msgid "Timeaccounts not yet billed"
  msgstr ""
  
- #: js/TimeaccountGridPanel.js:114 js/TimeaccountEditDialog.js:121
- #: js/Models.js:179
- msgid "Cleared at"
+ #: Setup/Initialize.php:141 Setup/Update/Release5.php:109
+ msgid "Timeaccounts already billed"
  msgstr ""
  
- #: js/TimeaccountGridPanel.js:119 js/TimeaccountEditDialog.js:76
- #: js/Models.js:178
- msgid "Status"
+ #: Acl/Rights.php:120
+ msgid "Manage timeaccounts"
  msgstr ""
  
- #: js/TimeaccountGridPanel.js:123 js/TimeAccountStatusFilterModel.js:46
- #: js/TimeaccountEditDialog.js:82
- msgid "open"
+ #: Acl/Rights.php:121
+ msgid "Add, edit and delete timeaccounts (includes all timesheet grants)"
  msgstr ""
  
- #: js/TimeaccountGridPanel.js:124 js/TimeAccountStatusFilterModel.js:46
- #: js/TimeaccountEditDialog.js:82 js/Models.js:156
- msgid "closed"
+ #: Acl/Rights.php:124 Acl/Rights.php:125
+ msgid "Add timeaccounts"
  msgstr ""
  
- #: js/TimeaccountGridPanel.js:146 js/TimeaccountEditDialog.js:295
- msgid "Export"
+ #: Acl/Rights.php:128
+ msgid "Manage shared timeaccount favorites"
  msgstr ""
  
- #: js/TimeaccountGridPanel.js:155 js/TimesheetGridPanel.js:310
- msgid "Export as ODS"
+ #: Acl/Rights.php:129
+ msgid "Create or update shared timeaccount favorites"
  msgstr ""
  
- #: js/TimeaccountGridPanel.js:162 js/TimesheetGridPanel.js:317
- msgid "Export as CSV"
+ #: Acl/Rights.php:132
+ msgid "Manage shared timesheet favorites"
  msgstr ""
  
- #: js/TimesheetGridPanel.js:78 js/TimesheetEditDialog.js:175 js/Models.js:92
- msgid "Date"
+ #: Acl/Rights.php:133
+ msgid "Create or update shared timesheet favorites"
  msgstr ""
  
- #: js/TimesheetGridPanel.js:80
- msgid "Start time"
+ #: js/TimesheetEditDialog.js:135 js/TimesheetGridPanel.js:102 js/Models.js:92
+ msgid "Account"
  msgstr ""
  
- #: js/TimesheetGridPanel.js:82
- msgid "Time Account (Number - Title)"
+ #: js/TimesheetEditDialog.js:140 js/TimesheetGridPanel.js:87
+ #: js/TimesheetGridPanel.js:385 js/Models.js:95
+ msgid "Billable"
  msgstr ""
  
- #: js/TimesheetGridPanel.js:84
- msgid "Time Account closed"
+ #: js/TimesheetEditDialog.js:146 js/TimesheetGridPanel.js:89
+ #: js/TimesheetGridPanel.js:390 js/Models.js:96
+ msgid "Cleared"
  msgstr ""
  
- #: js/TimesheetGridPanel.js:86 js/TimesheetGridPanel.js:234
- #: js/TimeaccountEditDialog.js:199 js/TimeaccountEditDialog.js:218
- #: js/TimesheetEditDialog.js:186 js/Models.js:93 js/Models.js:176
- msgid "Description"
+ #: js/TimesheetEditDialog.js:156 js/TimeaccountEditDialog.js:111
+ msgid "Cleared In"
  msgstr ""
  
- #: js/TimesheetGridPanel.js:87 js/TimesheetGridPanel.js:375
- #: js/TimesheetEditDialog.js:205 js/Models.js:94
- msgid "Billable"
+ #: js/TimesheetEditDialog.js:164 js/TimeaccountEditDialog.js:172
+ #: js/TimesheetGridPanel.js:92 js/TimeaccountGridPanel.js:108
+ msgid "Invoice"
  msgstr ""
  
- #: js/TimesheetGridPanel.js:89 js/TimesheetGridPanel.js:380
- #: js/TimesheetEditDialog.js:211 js/Models.js:95
- msgid "Cleared"
- msgstr ""
+ #: js/TimesheetEditDialog.js:183 js/Models.js:51
+ msgid "Timesheet"
+ msgid_plural "Timesheets"
+ msgstr[0] ""
+ msgstr[1] ""
  
- #: js/TimesheetGridPanel.js:92 js/TimesheetEditDialog.js:200 js/Models.js:91
- msgid "Account"
+ #: js/TimesheetEditDialog.js:200 js/TimeaccountEditDialog.js:188
+ #: js/Models.js:149
+ msgid "Time Account"
+ msgid_plural "Time Accounts"
+ msgstr[0] ""
+ msgstr[1] ""
+ #: js/TimesheetEditDialog.js:201
+ msgid "Select Time Account..."
  msgstr ""
  
- #: js/TimesheetGridPanel.js:94 js/TimesheetEditDialog.js:170
+ #: js/TimesheetEditDialog.js:215 js/TimesheetGridPanel.js:104
  msgid "Duration"
  msgstr ""
  
- #: js/TimesheetGridPanel.js:147
- msgid "timeframe"
+ #: js/TimesheetEditDialog.js:220 js/TimesheetGridPanel.js:78 js/Models.js:93
+ msgid "Date"
  msgstr ""
  
- #: js/TimesheetGridPanel.js:171
- msgid "summary"
+ #: js/TimesheetEditDialog.js:225
+ msgid "Start"
  msgstr ""
  
- #: js/TimesheetGridPanel.js:174
- msgid "Total Timesheets"
+ #: js/TimesheetEditDialog.js:226
+ msgid "not set"
  msgstr ""
  
- #: js/TimesheetGridPanel.js:175
- msgid "Billable Timesheets"
+ #: js/TimesheetEditDialog.js:231 js/TimeaccountEditDialog.js:216
+ #: js/TimeaccountEditDialog.js:235 js/TimesheetGridPanel.js:86
+ #: js/TimesheetGridPanel.js:244 js/Models.js:94 js/Models.js:181
+ msgid "Description"
  msgstr ""
  
- #: js/TimesheetGridPanel.js:176
- msgid "Total Time"
+ #: js/TimesheetEditDialog.js:232
+ msgid "Enter description..."
  msgstr ""
  
- #: js/TimesheetGridPanel.js:177
- msgid "Time of Billable Timesheets"
+ #: js/TimesheetEditDialog.js:284
+ msgid "Failed"
  msgstr ""
  
- #: js/TimesheetGridPanel.js:248
- msgid "Detail"
+ #: js/TimesheetEditDialog.js:285
+ #, python-brace-format
+ msgid "Could not save {0}."
  msgstr ""
  
- #: js/TimesheetGridPanel.js:301
- msgid "Export Timesheets"
+ #: js/TimesheetEditDialog.js:286
+ msgid "Booking deadline for this Timeaccount has been exceeded."
  msgstr ""
  
- #: js/TimesheetGridPanel.js:324
- msgid "Export as ..."
+ #: js/Timetracker.js:25
+ msgid "New Timesheet"
  msgstr ""
  
- #: js/TimesheetGridPanel.js:367
- msgid "Mass Update"
+ #: js/DurationSpinner.js:69 js/DurationSpinner.js:79
+ msgid "Not a valid time"
  msgstr ""
  
- #: js/TimesheetGridPanel.js:373
- msgid "Update field:"
+ #: js/TimeAccountBilledFilterModel.js:24
+ msgid "Time Account - Billed"
  msgstr ""
  
- #: js/TimeAccountStatusFilterModel.js:24
- msgid "Time Account - Status"
+ #: js/TimeaccountPickerCombo.js:46
+ msgid "Show closed"
  msgstr ""
  
- #: js/TimeAccountBilledFilterModel.js:24
- msgid "Time Account - Billed"
+ #: js/TimeaccountEditDialog.js:46
+ msgid "Add New Timeaccount"
  msgstr ""
  
- #: js/TimeAccountBilledFilterModel.js:47 js/TimeaccountEditDialog.js:92
- #: Setup/setup.xml:81
- msgid "not yet billed"
+ #: js/TimeaccountEditDialog.js:70
+ msgid "Unit"
  msgstr ""
  
- #: js/TimeAccountBilledFilterModel.js:48 js/TimeaccountEditDialog.js:93
- #: Setup/setup.xml:82
- msgid "to bill"
+ #: js/TimeaccountEditDialog.js:74
+ msgid "Unit Price"
  msgstr ""
  
- #: js/TimeAccountBilledFilterModel.js:49 js/TimeaccountEditDialog.js:94
- #: Setup/setup.xml:83
- msgid "billed"
+ #: js/TimeaccountEditDialog.js:79 js/TimeaccountGridPanel.js:97
+ msgid "Budget"
  msgstr ""
  
- #: js/TimeaccountEditDialog.js:40
- msgid "Add New Timeaccount"
 -#: js/TimeaccountEditDialog.js:82 js/TimeaccountGridPanel.js:122
++#: js/TimeaccountEditDialog.js:82 js/TimeaccountGridPanel.js:133
+ #: js/Models.js:183
+ msgid "Status"
  msgstr ""
  
- #: js/TimeaccountEditDialog.js:64
- msgid "Unit"
 -#: js/TimeaccountEditDialog.js:88 js/TimeaccountGridPanel.js:127
++#: js/TimeaccountEditDialog.js:88 js/TimeaccountGridPanel.js:138
+ #: js/Models.js:161 js/TimeAccountStatusFilterModel.js:46
+ msgid "closed"
  msgstr ""
  
- #: js/TimeaccountEditDialog.js:68
- msgid "Unit Price"
 -#: js/TimeaccountEditDialog.js:88 js/TimeaccountGridPanel.js:126
++#: js/TimeaccountEditDialog.js:88 js/TimeaccountGridPanel.js:137
+ #: js/TimeAccountStatusFilterModel.js:46
+ msgid "open"
  msgstr ""
  
- #: js/TimeaccountEditDialog.js:102
- msgid "not cleared yet..."
+ #: js/TimeaccountEditDialog.js:90 js/TimeaccountGridPanel.js:91
+ #: js/Models.js:182
+ msgid "Billed"
  msgstr ""
  
- #: js/TimeaccountEditDialog.js:103 js/TimesheetEditDialog.js:221
- msgid "Cleared In"
 -#: js/TimeaccountEditDialog.js:116 js/TimeaccountGridPanel.js:112
++#: js/TimeaccountEditDialog.js:116 js/TimeaccountGridPanel.js:123
+ #: js/Models.js:189
+ msgid "Booking deadline"
  msgstr ""
  
- #: js/TimeaccountEditDialog.js:115
+ #: js/TimeaccountEditDialog.js:124
  msgid "none"
  msgstr ""
  
  msgid "last week"
  msgstr ""
  
- #: js/TimeaccountEditDialog.js:142
- msgid "Responsible person"
 -#: js/TimeaccountEditDialog.js:132 js/TimeaccountGridPanel.js:117
++#: js/TimeaccountEditDialog.js:132 js/TimeaccountGridPanel.js:128
+ #: js/Models.js:184
+ msgid "Cleared at"
  msgstr ""
  
- #: js/TimeaccountEditDialog.js:153
+ #: js/TimeaccountEditDialog.js:162
  msgid "Timesheets are billable"
  msgstr ""
  
@@@ -321,7 -307,11 +307,11 @@@ msgstr "
  msgid "The grant to manage clearing of Timesheets"
  msgstr ""
  
- #: js/TimeaccountEditDialog.js:296
 -#: js/TimeaccountEditDialog.js:312 js/TimeaccountGridPanel.js:149
++#: js/TimeaccountEditDialog.js:312 js/TimeaccountGridPanel.js:160
+ msgid "Export"
+ msgstr ""
+ #: js/TimeaccountEditDialog.js:313
  msgid "The grant to export Timesheets of Timeaccount"
  msgstr ""
  
@@@ -337,47 -327,88 +327,88 @@@ msgstr "
  msgid "Permissions"
  msgstr ""
  
- #: js/TimesheetEditDialog.js:138 js/Models.js:50
- msgid "Timesheet"
- msgid_plural "Timesheets"
- msgstr[0] ""
- msgstr[1] ""
+ #: js/TimesheetGridPanel.js:76 js/TimeaccountGridPanel.js:78
+ msgid "Tags"
+ msgstr ""
  
- #: js/TimesheetEditDialog.js:156
- msgid "Select Time Account..."
+ #: js/TimesheetGridPanel.js:80
+ msgid "Start time"
  msgstr ""
  
- #: js/TimesheetEditDialog.js:180
- msgid "Start"
+ #: js/TimesheetGridPanel.js:82
+ msgid "Time Account (Number - Title)"
  msgstr ""
  
- #: js/TimesheetEditDialog.js:181
- msgid "not set"
+ #: js/TimesheetGridPanel.js:84
+ msgid "Time Account closed"
  msgstr ""
  
- #: js/TimesheetEditDialog.js:187
- msgid "Enter description..."
+ #: js/TimesheetGridPanel.js:91 js/TimesheetGridPanel.js:395
 -#: js/TimeaccountGridPanel.js:104
++#: js/TimeaccountGridPanel.js:103
+ msgid "Cleared in"
  msgstr ""
  
- #: js/TimesheetEditDialog.js:271
- msgid "Failed"
+ #: js/TimesheetGridPanel.js:157
+ msgid "timeframe"
  msgstr ""
  
- #: js/TimesheetEditDialog.js:272
- #, python-brace-format
- msgid "Could not save {0}."
+ #: js/TimesheetGridPanel.js:181
+ msgid "summary"
  msgstr ""
  
- #: js/TimesheetEditDialog.js:273
- msgid "Booking deadline for this Timeaccount has been exceeded."
+ #: js/TimesheetGridPanel.js:184
+ msgid "Total Timesheets"
  msgstr ""
  
- #: js/DurationSlider.js:94
- #, python-brace-format
- msgid "{0}"
+ #: js/TimesheetGridPanel.js:185
+ msgid "Billable Timesheets"
+ msgstr ""
+ #: js/TimesheetGridPanel.js:186
+ msgid "Total Time"
+ msgstr ""
+ #: js/TimesheetGridPanel.js:187
+ msgid "Time of Billable Timesheets"
+ msgstr ""
+ #: js/TimesheetGridPanel.js:258
+ msgid "Detail"
+ msgstr ""
+ #: js/TimesheetGridPanel.js:311
+ msgid "Export Timesheets"
+ msgstr ""
 -#: js/TimesheetGridPanel.js:320 js/TimeaccountGridPanel.js:158
++#: js/TimesheetGridPanel.js:320 js/TimeaccountGridPanel.js:169
+ msgid "Export as ODS"
+ msgstr ""
 -#: js/TimesheetGridPanel.js:327 js/TimeaccountGridPanel.js:165
++#: js/TimesheetGridPanel.js:327 js/TimeaccountGridPanel.js:176
+ msgid "Export as CSV"
+ msgstr ""
+ #: js/TimesheetGridPanel.js:334
+ msgid "Export as ..."
+ msgstr ""
+ #: js/TimesheetGridPanel.js:377
+ msgid "Mass Update"
+ msgstr ""
+ #: js/TimesheetGridPanel.js:383
+ msgid "Update field:"
+ msgstr ""
+ #: js/TimeAccountContractFilterModel.js:30
+ msgid "Contract"
+ msgstr ""
+ #: js/TimeAccountContractFilterModel.js:32
+ msgid "without contract"
  msgstr ""
  
- #: js/Models.js:54
+ #: js/Models.js:55
  msgid "timesheets list"
  msgid_plural "timesheets lists"
  msgstr[0] ""
@@@ -420,39 -460,9 +460,3 @@@ msgstr "
  #: Preference.php:116
  msgid "default"
  msgstr ""
- #: Setup/setup.xml:4
- msgid "Timetracker"
- msgstr ""
- #: Setup/Initialize.php:33
- msgid "My Timesheets today"
- msgstr ""
- #: Setup/Initialize.php:47
- msgid "My Timesheets this week"
- msgstr ""
- #: Setup/Initialize.php:61
- msgid "My Timesheets last week"
- msgstr ""
- #: Setup/Initialize.php:75
- msgid "My Timesheets this month"
- msgstr ""
- #: Setup/Initialize.php:89
- msgid "My Timesheets last month"
- msgstr ""
- #: Setup/Initialize.php:112 Setup/Update/Release5.php:81
- msgid "Timeaccounts to bill"
- msgstr ""
--
- #: Setup/Initialize.php:126 Setup/Update/Release5.php:95
- msgid "Timeaccounts not yet billed"
 -msgid "Invoice"
--msgstr ""
--
- #: Setup/Initialize.php:141 Setup/Update/Release5.php:109
- msgid "Timeaccounts already billed"
 -msgid "TimetrackerTimeaccount"
--msgstr ""
@@@ -40,10 -41,10 +40,10 @@@ class Tinebase_Backend_Sql_Command_Mysq
          
          return new Zend_Db_Expr("GROUP_CONCAT( DISTINCT $quotedField)");
      }
 -
 +    
      /**
       * returns concatenation expression
-      *
+      * 
       * @param array $values
       */
      public function getConcat($values)
@@@ -191,8 -193,8 +193,8 @@@ summaryRenderer: function(v, params, da
              data = this.calculate(rs, cs),
              markup = this.renderSummary({data: data}, cs),
              existing = this.getSummaryNode(gid);
-             
 -           
--        if(existing){
++        
++        if (existing){
              g.removeChild(existing);
          }
          Ext.DomHelper.append(g, markup);
@@@ -1573,180 -1736,174 +1573,188 @@@ msgstr[1] "Wollen Sie wirklich die ausg
  msgid "Deleting {0}"
  msgstr "Lösche {0}"
  
 -#: js/widgets/grid/GridPanel.js:1804
 -msgid " ... This may take a long time!"
 -msgstr " ... Das kann eine ganze Weile dauern!"
 +#: js/widgets/grid/GridPanel.js:1853
 +msgid "... This may take a long time!"
 +msgstr "... das könnte eine ganze Weile dauern!"
  
 -#: js/widgets/grid/ForeignRecordFilter.js:61
 -msgid "Edit definition"
 -msgstr "Definition bearbeiten"
 +#: js/widgets/grid/FilterStructureTreePanel.js:35
 +#: js/widgets/grid/FilterStructureTreePanel.js:52
 +msgid "Show records that match to one of the following filters"
 +msgstr "Zeige Datensätze die zu einem der folgenden Filter passen"
  
 -#: js/widgets/grid/ForeignRecordFilter.js:71
 -msgid "Start definition"
 -msgstr "Starte Definition"
 +#: js/widgets/grid/FilterStructureTreePanel.js:37
 +#: js/widgets/grid/FilterStructureTreePanel.js:51
 +msgid "or alternatively"
 +msgstr "oder alternativ"
  
 -#: js/widgets/grid/ForeignRecordFilter.js:111
 -msgid "Related to"
 -msgstr "Verknüpft mit"
 +#: js/widgets/grid/FilterStructureTreePanel.js:55
 +msgid "Add alternative filter"
 +msgstr "Alternativen Filter hinzufügen"
  
 -#: js/widgets/relation/FilterModel.js:32
 -#: js/widgets/relation/GenericPickerGridPanel.js:133 js/Models.js:400
 -msgid "Relation"
 -msgid_plural "Relations"
 -msgstr[0] "Verknüpfung"
 -msgstr[1] "Verknüpfungen"
 +#: js/widgets/grid/FilterStructureTreePanel.js:61
 +msgid "Remove Filter"
 +msgstr "Filter entfernen"
  
 -#: js/widgets/relation/FilterModel.js:76
 -msgid "Defined by ..."
 -msgstr "Definiert durch ..."
 +#: js/widgets/grid/FilterModel.js:180
 +msgid "today"
 +msgstr "heute"
  
 -#: js/widgets/relation/FilterModel.js:119
 -msgid "Define ..."
 -msgstr "Definiere ..."
 +#: js/widgets/grid/FilterModel.js:181
 +msgid "yesterday"
 +msgstr "gestern"
  
 -#: js/widgets/relation/GenericPickerGridPanel.js:126
 -msgid "Edit record"
 -msgstr "Datensatz bearbeiten"
 +#: js/widgets/grid/FilterModel.js:182
 +msgid "this week"
 +msgstr "dieser Woche"
  
 -#: js/widgets/relation/GenericPickerGridPanel.js:162
 -msgid "Sibling"
 -msgstr "Geschwister"
 +#: js/widgets/grid/FilterModel.js:183
 +msgid "last week"
 +msgstr "letzter Woche"
  
 -#: js/widgets/relation/GenericPickerGridPanel.js:163
 -msgid "Parent"
 -msgstr "Eltern"
 +#: js/widgets/grid/FilterModel.js:184
 +msgid "the week before last"
 +msgstr "vorletzte Woche"
  
 -#: js/widgets/relation/GenericPickerGridPanel.js:164
 -msgid "Child"
 -msgstr "Kind"
 +#: js/widgets/grid/FilterModel.js:187
 +msgid "last three months"
 +msgstr "letzten drei Monate"
  
++<<<<<<< HEAD
 +#: js/widgets/grid/FilterModel.js:188
 +msgid "last six months"
 +msgstr "letzten sechs Monate"
++=======
+ #: js/widgets/relation/GenericPickerGridPanel.js:263
+ msgid ""
+ "The maximum number of {0} with the type \"{1}\" is reached. Please change the "
+ "type of this relation"
+ msgstr "Die maximale Anzahl an {0}n mit dem Typ \"{1}\" wurde erreicht. Bitte ändern Sie den Typ der Verknüpfung."
++>>>>>>> pu/2013.10-invoices
  
 -#: js/widgets/relation/GenericPickerGridPanel.js:272
 -msgid ""
 -"The maximum number of {0}s with the type {1} is reached at the {2} you "
 -"added. Please change the type of this relation or edit the {2}"
 -msgstr "Die maximale Anzahl von {0} mit Typ {1} wurde bei {2} erreicht. Bitte ändern Sie den Typ der Verknüpfung oder editieren sie den {2}"
 +#: js/widgets/grid/FilterModel.js:189
 +msgid "anytime"
 +msgstr "Jederzeit"
  
 -#: js/widgets/relation/GenericPickerGridPanel.js:299
 -msgid "No Dialog"
 -msgstr "Kein Dialog"
 +#: js/widgets/grid/FilterModel.js:204
 +msgid "tomorrow"
 +msgstr "morgen"
  
 -#: js/widgets/relation/GenericPickerGridPanel.js:300
 -msgid ""
 -"The Record can't be opened. There doesn't exist any dialog for editing this "
 -"Record!"
 -msgstr "Der Datensatz konnte nicht geöffnet werden. Es gibt keinen Dialog zum editieren dieses Datensatzes."
 +#: js/widgets/grid/FilterModel.js:205
 +msgid "next week"
 +msgstr "nächste Woche"
  
 -#: js/widgets/relation/GenericPickerGridPanel.js:456
 -msgid "Record"
 -msgstr "Datensatz"
 +#: js/widgets/grid/FilterModel.js:206
 +msgid "next month"
 +msgstr "nächster Monat"
  
 -#: js/widgets/relation/GenericPickerGridPanel.js:458
 -msgid "Remark"
 -msgstr "Anmerkung"
 +#: js/widgets/grid/FilterModel.js:207
 +msgid "next quarter"
 +msgstr "nächstes Quartal"
  
 -#: js/widgets/relation/GenericPickerGridPanel.js:459
 -msgid "Dependency"
 -msgstr "Abhängigkeit"
 +#: js/widgets/grid/FilterModel.js:208
 +msgid "next year"
 +msgstr "nächstes Jahr"
 +
 +#: js/widgets/grid/FilterModel.js:224
 +msgid "contains"
 +msgstr "enthält"
 +
 +#: js/widgets/grid/FilterModel.js:225
 +msgid "reg. exp."
 +msgstr "reg. Ausdruck"
  
 -#: js/widgets/relation/GenericPickerGridPanel.js:948
 -msgid ""
 -"The record you tried to link is already linked. Please edit the existing "
 -"link."
 -msgstr "Der Datensatz, den Sie verknüpfen möchten, ist bereits verknüpft. Bitte bearbeiten Sie die bereits vorhandene Verknüpfung."
 +#: js/widgets/grid/FilterModel.js:227
 +msgid "is equal to without (-, )"
 +msgstr "ist gleich ohne (-, )"
  
 -#: js/widgets/relation/GenericPickerGridPanel.js:961
 -#: js/widgets/form/RecordPickerComboBox.js:295
 -msgid "You tried to link a record with itself. This is not allowed!"
 -msgstr "Sie versuchen den Datensatz mit sich selbst zu verknüpfen. Dieser Vorgang ist nicht erlaubt."
 +#: js/widgets/grid/FilterModel.js:228
 +msgid "is greater than"
 +msgstr "ist größer als"
  
 -#: js/widgets/relation/PickerCombo.js:93
 -msgid ""
 -"The {1} \"{2}\" is already used in the Field \"{0}\" and can be linked only "
 -"once!"
 -msgstr "Der {1} \"{2}\" wird bereits in Feld \"{0}\" benutzt und kann nur einmal verknüpft werden!"
 +#: js/widgets/grid/FilterModel.js:229
 +msgid "is less than"
 +msgstr "ist kleiner als"
  
 -#: js/widgets/tree/ContextMenu.js:43 js/widgets/tree/ContextMenu.js:265
 -msgid "Rename {0}"
 -msgstr "{0} umbenennen"
 +#: js/widgets/grid/FilterModel.js:230
 +msgid "is not"
 +msgstr "ist nicht"
  
 -#: js/widgets/tree/ContextMenu.js:61
 -msgid "Manage {0} Permissions"
 -msgstr "{0} Berechtigungen verwalten"
 +#: js/widgets/grid/FilterModel.js:231
 +msgid "one of"
 +msgstr "eines von"
  
 -#: js/widgets/tree/ContextMenu.js:69
 -msgid "{0} Properties"
 -msgstr "{0} Eigenschaften"
 +#: js/widgets/grid/FilterModel.js:232
 +msgid "none of"
 +msgstr "keines von"
  
 -#: js/widgets/tree/ContextMenu.js:78
 -msgid "Set {0} color"
 -msgstr "{0} Farbe einstellen"
 +#: js/widgets/grid/FilterModel.js:233
 +msgid "is before"
 +msgstr "liegt vor"
  
 -#: js/widgets/tree/ContextMenu.js:92
 -msgid "Reload {0}"
 -msgstr "{0} neu laden"
 +#: js/widgets/grid/FilterModel.js:234
 +msgid "is after"
 +msgstr "liegt nach"
  
 -#: js/widgets/tree/ContextMenu.js:109
 -msgid "Edit Properties"
 -msgstr "Eigenschaften bearbeiten"
 +#: js/widgets/grid/FilterModel.js:235
 +msgid "is within"
 +msgstr "innerhalb"
  
 -#: js/widgets/tree/ContextMenu.js:124
 -#: js/widgets/dialog/AttachmentsGridPanel.js:131
 -msgid "Download"
 -msgstr "Download"
 +#: js/widgets/grid/FilterModel.js:236
 +msgid "is in week no."
 +msgstr "ist in Kalenderwoche"
  
 -#: js/widgets/tree/ContextMenu.js:185
 -msgid "New {0}"
 -msgstr "Neue {0}"
 +#: js/widgets/grid/FilterModel.js:237
 +msgid "starts with"
 +msgstr "beginnt mit"
  
 -#: js/widgets/tree/ContextMenu.js:185
 -msgid "Please enter the name of the new {0}:"
 -msgstr "Bitte den Namen für neue {0} eingeben:"
 +#: js/widgets/grid/FilterModel.js:238
 +msgid "ends with"
 +msgstr "endet mit"
  
 -#: js/widgets/tree/ContextMenu.js:188
 -msgid "No {0} added"
 -msgstr "Kein {0} hinzugefügt"
 +#: js/widgets/grid/FilterModel.js:239
 +msgid "defined by"
 +msgstr "definiert durch"
  
 -#: js/widgets/tree/ContextMenu.js:188 js/widgets/tree/ContextMenu.js:272
 -msgid "You have to supply a {0} name!"
 -msgstr "Sie sollten einen Namen für {0} angeben!"
 +#: js/widgets/grid/FilterModel.js:409
 +msgid "Search Account ..."
 +msgstr "Suche nach Benutzern ..."
  
 -#: js/widgets/tree/ContextMenu.js:191
 -msgid "Creating {0}..."
 -msgstr "Einrichten {0}..."
 +#: js/widgets/grid/FilterToolbarQuickFilterPlugin.js:181
 +#: js/widgets/grid/FilterPanel.js:261
 +msgid "show details"
 +msgstr "Details anzeigen"
  
 -#: js/widgets/tree/ContextMenu.js:266
 -msgid "Please enter the new name of the {0}:"
 -msgstr "Bitte den Namen für {0}: eingeben:"
 +#: js/widgets/grid/FilterToolbarQuickFilterPlugin.js:182
 +#: js/widgets/grid/FilterPanel.js:262
 +msgid "Always show advanced filters"
 +msgstr "Zeige erweiterte Filter immer an"
  
 -#: js/widgets/tree/ContextMenu.js:272
 -msgid "Not renamed {0}"
 -msgstr "{0} nicht umbenannt"
 +#: js/widgets/grid/FilterToolbarQuickFilterPlugin.js:368
 +#, python-brace-format
 +msgid "Your view is limited by {0} criteria:"
 +msgid_plural "Your view is limited by {0} criterias:"
 +msgstr[0] "Ihre Anzeige ist durch {0} Kriterium limitiert:"
 +msgstr[1] "Ihre Anzeige ist durch {0} Kriterien limitiert:"
  
 -#: js/widgets/tree/ContextMenu.js:346
 -msgid "Do you really want to delete the {0} \"{1}\"?"
 -msgstr "Möchten Sie {0} \"{1}\" wirklich löschen?"
 +#: js/widgets/grid/RendererManager.js:54
 +msgid "has notes"
 +msgstr "hat Notizen"
  
 -#: js/widgets/tree/ContextMenu.js:457
 -msgid "Manage Permissions for {0} \"{1}\""
 -msgstr "Rechte für {0} :\"{1}\" verwalten"
 +#: js/widgets/grid/RendererManager.js:57
 +msgid "has relations"
 +msgstr "hat Verknüpfung"
  
 -#: js/widgets/tree/ContextMenu.js:481
 -msgid "Properties for {0} \"{1}\""
 -msgstr "Eigenschaften von {0} \"{1}\""
 +#: js/widgets/grid/FilterPanel.js:78
 +msgid "Attention: There are more filters active!"
 +msgstr "Achtung: Es sind noch weitere Filter gesetzt!"
 +
 +#: js/widgets/grid/FilterPanel.js:511
 +#, python-brace-format
 +msgid "Criteria {0}"
 +msgstr "Kriterium {0}"
  
 -#: js/widgets/dialog/ImportDialog.js:223
 +#: js/widgets/dialog/SimpleImportDialog.js:129
 +#: js/widgets/dialog/ImportDialog.js:227
  msgid "Choose File and Format"
  msgstr "Datei und Format wählen"
  
@@@ -3171,26 -2916,44 +3179,41 @@@ msgstr "Tine 2.0 muss aktualisiert werd
  msgid "Please wait or contact your administrator"
  msgstr "Bitte warten Sie oder kontaktieren Sie den Administrator"
  
 -#: Exception.php:49
 -msgid "Exception ({0})"
 -msgstr "Ausnahmefehler ({0})"
 +#: views/deactivationNotification.php:11
 +msgid "Your user account has been deactivated"
 +msgstr "Ihr Benutzerkonto würde deaktiviert"
  
 -#: Container.php:682
 -#, python-format
 -msgid "%s's personal container"
 -msgstr "%s's persönlicher Ordner"
 +#: views/deactivationNotification.php:13
 +msgid "Deactivation date"
 +msgstr "Deaktivierungsdatum"
  
 -#: Container.php:1530
 -msgid ""
 -"You are not allowed to delete this Container. Please define another "
 -"container as the default addressbook for internal contacts!"
 -msgstr "Es ist nicht erlaubt diesen Ordner zu löschen. Bitte definieren sie zuvor einen anderen Ordner für interne Kontakte!"
 +#: views/deactivationNotification.php:14
 +msgid "Tine 2.0 URL"
 +msgstr "Tine 2.0 URL"
  
 -msgid "The month must have the format YYYY-MM!"
 -msgstr "Der Monat muss im Format JJJJ-MM angegeben werden!"
 +#: Record/RecordSetDiff.php:42
 +msgid "added"
 +msgstr "hinzugefügt"
  
 -msgid "Wrong month format!"
 -msgstr "Monat falsch angegeben!"
 +#: Record/RecordSetDiff.php:43
 +msgid "removed"
 +msgstr "entfernt"
 +
 +#: Record/RecordSetDiff.php:44
 +msgid "modified"
 +msgstr "geändert"
+ msgid "or"
+ msgstr "oder"
+ msgid "from"
+ msgstr "von"
+ msgid "to"
+ msgstr "an"
+ msgid "You tried to create a relation which is forbidden by the constraints config of one of the models."
+ msgstr "Sie haben versucht, eine Verknüpfung zu aktualisieren, wodurch Verknüpfungen entstanden sind, die nicht erlaubt sind."
 -msgid "Invalid Relations"
 -msgstr "Fehlerhafte Verknüpfung"
 -
 -msgid "Records"
 -msgstr "Datensätze"
 -
+ msgid "Export Records from these Positions"
+ msgstr "Datensätze dieser Rechnungspositionen exportieren"
@@@ -13,2795 -13,2718 +13,2892 @@@ msgstr "
  "X-Poedit-SourceCharset: utf-8\n"
  "Plural-Forms: nplurals=2; plural=n != 1;\n"
  
- #: Export/Pdf.php:216 js/widgets/tags/TagsPanel.js:57
- #: js/widgets/tags/TagsPanel.js:426
- msgid "Tags"
- msgstr ""
- #: Export/Pdf.php:437
- msgid "Created by"
 -#: Preference.php:122
 -msgid "Page size"
++#: Group/Abstract.php:191 User/Abstract.php:319 User/Abstract.php:320
++#: User/Abstract.php:321 User/Abstract.php:322 User/Abstract.php:323
++#: User/Abstract.php:324 js/ux/ConnectionStatus.js:58
++msgid "unknown"
  msgstr ""
  
- #: Export/Pdf.php:483
- msgid "Activities"
 -#: Preference.php:123
 -msgid "Page size in grids"
++#: Preference/Abstract.php:517
++msgid "default"
  msgstr ""
  
- #: Export/Spreadsheet/Ods.php:353
- msgid "Data"
 -#: Preference.php:126
 -msgid "Grid stripe rows"
++#: Setup/setup.xml:3345
++msgid "note"
  msgstr ""
  
- #: Export/Spreadsheet/Xls.php:365
- msgid "Without company assigned"
 -#: Preference.php:127
 -msgid "Stripe rows in grids"
++#: Setup/setup.xml:3350
++msgid "default note type"
  msgstr ""
  
- #: User/Sql.php:1041
- msgid "Your Tine 2.0 account has been deactivated"
 -#: Preference.php:130
 -msgid "Grid load mask"
++#: Setup/setup.xml:3376
++msgid "telephone"
  msgstr ""
  
- #: User/Abstract.php:319 User/Abstract.php:320 User/Abstract.php:321
- #: User/Abstract.php:322 User/Abstract.php:323 User/Abstract.php:324
- #: js/ux/ConnectionStatus.js:58 Group/Abstract.php:191
- msgid "unknown"
 -#: Preference.php:131
 -msgid "Show load mask in grids"
++#: Setup/setup.xml:3381
++msgid "telephone call"
  msgstr ""
  
- #: ModelConfiguration.php:41 ModelConfiguration.php:50
- #: ModelConfiguration.php:82 ModelConfiguration.php:91
- msgid "Record Name"
- msgid_plural "Records Name"
- msgstr[0] ""
- msgstr[1] ""
- #: ModelConfiguration.php:164 ModelConfiguration.php:252
- msgid "Group"
 -#: Preference.php:134
 -msgid "Dialog buttons order style"
++#: Setup/setup.xml:3407
++msgid "email"
  msgstr ""
  
- #: ModelConfiguration.php:209
- #: js/widgets/persistentfilter/EditPersistentFilterPanel.js:195
- msgid "Title"
 -#: Preference.php:135
 -msgid "Dialog buttons order style (Windows / Mac)"
++#: Setup/setup.xml:3412
++msgid "email contact"
  msgstr ""
  
- #: ModelConfiguration.php:213
- msgid "New Car"
 -#: Preference.php:138
 -msgid "Auto search on filter change"
++#: Setup/setup.xml:3438
++msgid "created"
  msgstr ""
  
- #: ModelConfiguration.php:379 ModelConfiguration.php:382
- msgid "Banking Information"
 -#: Preference.php:139
 -msgid "Perform auto search when filter is changed"
++#: Setup/setup.xml:3443
++msgid "record created"
  msgstr ""
  
- #: ModelConfiguration.php:383
- msgid "Private Information"
 -#: Preference.php:142 js/widgets/TimezoneChooser.js:37
 -msgid "Timezone"
++#: Setup/setup.xml:3469
++msgid "changed"
  msgstr ""
  
- #: Exception/PasswordPolicyViolation.php:22
- msgid "Password Policy Violation"
 -#: Preference.php:143
 -msgid "The timezone in which dates are shown in Tine 2.0."
++#: Setup/setup.xml:3474
++msgid "record changed"
  msgstr ""
  
- #: Exception/SystemGeneric.php:27
- msgid "Generic System Exception"
 -#: Preference.php:146 js/widgets/LangChooser.js:35
 -msgid "Language"
++#: User/Sql.php:1041
++msgid "Your Tine 2.0 account has been deactivated"
  msgstr ""
  
- #: Exception/MonthFormat.php:26
- msgid "Wrong month format!"
 -#: Preference.php:147
 -msgid "The language of the Tine 2.0 GUI."
++#: Container.php:706
++#, python-format
++msgid "%s's personal container"
  msgstr ""
  
- #: Exception/MonthFormat.php:31
- msgid "The month must have the format YYYY-MM!"
 -#: Preference.php:150
 -msgid "Default Application"
++#: Container.php:1617
++msgid ""
++"You are not allowed to delete this Container. Please define another "
++"container as the default addressbook for internal contacts!"
  msgstr ""
  
- #: Exception/InvalidRelationConstraints.php:26
- msgid "Invalid Relations"
 -#: Preference.php:151
 -msgid "The default application to show after login."
++#: Acl/Rights/Abstract.php:72
++msgid "admin"
  msgstr ""
  
- #: Exception/InvalidRelationConstraints.php:36
- msgid ""
- "You tried to create a relation which is forbidden by the constraints config "
- "of one of the models."
 -#: Preference.php:154
 -msgid "Window Type"
++#: Acl/Rights/Abstract.php:73
++msgid "admin right description"
  msgstr ""
  
- #: Exception/Record/SystemContainer.php:22
- msgid "System Container"
 -#: Preference.php:155
 -msgid "You can choose between modal windows or normal browser popup windows."
++#: Acl/Rights/Abstract.php:76
++msgid "run"
  msgstr ""
  
- #: Exception/Record/SystemContainer.php:28
- msgid "This is a system container which could not be deleted!"
 -#: Preference.php:158
 -msgid "Confirm Logout"
++#: Acl/Rights/Abstract.php:77
++msgid "run right description"
  msgstr ""
  
 -#: Preference.php:159
 -msgid "Show confirmation dialog on logout."
 +#: Acl/Rights.php:147
 +msgid "Report bugs"
  msgstr ""
  
 -#: Import/Csv/Abstract.php:200
 -#, python-format
 -msgid "The following fields weren't imported: %s"
 +#: Acl/Rights.php:148
 +msgid "Report bugs to the software vendor directly when they occur."
  msgstr ""
  
 -#: Import/Csv/Abstract.php:201
 -msgid "N/A"
 +#: Acl/Rights.php:151
 +msgid "Check version"
  msgstr ""
  
 -#: Setup/setup.xml:3111
 -msgid "note"
 +#: Acl/Rights.php:152
 +msgid "Check for new versions of this software."
  msgstr ""
  
 -#: Setup/setup.xml:3116
 -msgid "default note type"
 +#: Acl/Rights.php:155
 +msgid "Manage own profile"
  msgstr ""
  
 -#: Setup/setup.xml:3142
 -msgid "telephone"
 +#: Acl/Rights.php:156
 +msgid "The right to manage the own profile (selected contact data)."
  msgstr ""
  
 -#: Setup/setup.xml:3147
 -msgid "telephone call"
 +#: Acl/Rights.php:159
 +msgid "Manage own client state"
  msgstr ""
  
 -#: Setup/setup.xml:3173
 -msgid "email"
 +#: Acl/Rights.php:160
 +msgid "The right to manage the own client state."
  msgstr ""
  
- #: Acl/Rights/Abstract.php:72
- msgid "admin"
 -#: Setup/setup.xml:3178
 -msgid "email contact"
++#: WebDav/PrincipalBackend.php:525
++msgid "Shared folders"
  msgstr ""
  
- #: Acl/Rights/Abstract.php:73
- msgid "admin right description"
 -#: Setup/setup.xml:3204
 -msgid "created"
++#: Import/Csv/Abstract.php:200
++#, python-format
++msgid "The following fields weren't imported: %s"
  msgstr ""
  
- #: Acl/Rights/Abstract.php:76
- msgid "run"
 -#: Setup/setup.xml:3209
 -msgid "record created"
++#: Import/Csv/Abstract.php:201
++msgid "N/A"
  msgstr ""
  
- #: Acl/Rights/Abstract.php:77
- msgid "run right description"
 -#: Setup/setup.xml:3235
 -msgid "changed"
++#: Frontend/Cli.php:736
++#, python-format
++msgid "%s's personal "
  msgstr ""
  
- #: Preference/Abstract.php:517
- msgid "default"
 -#: Setup/setup.xml:3240
 -msgid "record changed"
++#: Frontend/Http.php:406 js/ExceptionHandler.js:168
++msgid "Authorisation Required"
  msgstr ""
  
- #: PersistentFilter.php:152
 -#: PersistentFilter.php:138
--msgid "- The last filter I used -"
++#: Frontend/Http.php:407
++msgid "Your session is not valid. You need to login again."
+ msgstr ""
 -#: Container.php:682
 -#, python-format
 -msgid "%s's personal container"
++#: Frontend/Http.php:432 js/ExceptionDialog.js:62
++msgid "Abnormal End"
+ msgstr ""
 -#: Container.php:1530
 -msgid ""
 -"You are not allowed to delete this Container. Please define another "
 -"container as the default addressbook for internal contacts!"
++#: Frontend/Http.php:433 js/ExceptionDialog.js:154
++msgid "An error occurred, the program ended abnormal."
  msgstr ""
  
 -#: Group/Abstract.php:191 js/ux/ConnectionStatus.js:58 User/Abstract.php:319
 -#: User/Abstract.php:320 User/Abstract.php:321 User/Abstract.php:322
 -#: User/Abstract.php:323 User/Abstract.php:324
 -msgid "unknown"
 +#: Notes.php:426
 +msgid "by"
 +msgstr ""
 +
 +#: Notes.php:435
 +msgid "Changed fields:"
  msgstr ""
  
- #: js/ux/SearchField.js:44
- msgid "enter searchfilter"
+ #: views/update.php:24
+ msgid "Tine 2.0 needs to be updated or is not installed yet."
  msgstr ""
  
- #: js/ux/PopupWindowManager.js:175
- msgid ""
- "The window you want to work with is backgrounded. Your browser doesn't "
- "support to foreground the window for you, so you need to use your operating "
- "systems window switching features. Please send complaints to your browser "
- "vendor!"
+ #: views/update.php:25
+ msgid "Please wait or contact your administrator"
  msgstr ""
  
- #: js/ux/Percentage.js:193
- msgid "(paused)"
 -#: js/AppManager.js:208
 -msgid "Missing Applications"
++#: views/deactivationNotification.php:11
++msgid "Your user account has been deactivated"
  msgstr ""
  
- #: js/ux/grid/PagingToolbar.js:57
- #, python-brace-format
- msgid "{0} selected"
 -#: js/AppManager.js:209
 -msgid ""
 -"There are no applications enabled for you. Please contact your administrator."
++#: views/deactivationNotification.php:12 js/LoginPanel.js:93
++#: js/widgets/dialog/CredentialsDialog.js:61
++msgid "Username"
  msgstr ""
  
- #: js/ux/grid/PagingToolbar.js:58
- msgid "Unselect all"
 -#: js/tineInit.js:605
 -msgid ""
 -"Fatal Error: Client self-update failed, please contact your administrator "
 -"and/or restart/reload your browser."
++#: views/deactivationNotification.php:13
++msgid "Deactivation date"
  msgstr ""
  
- #: js/ux/grid/PagingToolbar.js:59
 -#: js/MainMenu.js:66
--#, python-brace-format
- msgid "Select all pages ({0} records)"
 -msgid "User: {0}"
++#: views/deactivationNotification.php:14
++msgid "Tine 2.0 URL"
  msgstr ""
  
- #: js/ux/grid/PagingToolbar.js:60
- msgid "Toggle selection"
 -#: js/MainMenu.js:118 js/AboutDialog.js:41
 -#, python-brace-format
 -msgid "About {0}"
++#: Export/Pdf.php:216 js/widgets/tags/TagsPanel.js:57
++#: js/widgets/tags/TagsPanel.js:426
++msgid "Tags"
  msgstr ""
  
- #: js/ux/ConnectionStatus.js:56
- msgid "online"
 -#: js/MainMenu.js:124
 -msgid "Help"
++#: Export/Pdf.php:437
++msgid "Created by"
  msgstr ""
  
- #: js/ux/ConnectionStatus.js:57
- msgid "offline"
 -#: js/MainMenu.js:131
 -msgid "Debug Console (Ctrl + F11)"
++#: Export/Pdf.php:483
++msgid "Activities"
  msgstr ""
  
- #: js/ux/form/LayerCombo.js:186 js/PasswordChangeDialog.js:66
- #: js/LicenseScreen.js:51 js/widgets/account/ChangeAccountAction.js:78
- #: js/widgets/EditRecord.js:157 js/widgets/container/ContainerSelect.js:490
- #: js/widgets/ActivitiesPanel.js:340
- #: js/widgets/tags/TagsMassAttachAction.js:84
- #: js/widgets/dialog/AddToRecordPanel.js:111
- #: js/widgets/dialog/MultiOptionsDialog.js:102
- #: js/widgets/dialog/PreferencesDialog.js:109
- #: js/widgets/dialog/EditDialog.js:398
- #: js/widgets/dialog/ExceptionHandlerDialog.js:197 js/CreditsScreen.js:53
- #: js/AboutDialog.js:61
- msgid "Ok"
 -#: js/MainMenu.js:137 js/widgets/dialog/PreferencesPanel.js:36
 -msgid "Preferences"
++#: Export/Spreadsheet/Ods.php:353
++msgid "Data"
  msgstr ""
  
- #: js/ux/form/LayerCombo.js:193 js/ExceptionDialog.js:109
- #: js/ExceptionDialog.js:119 js/PasswordChangeDialog.js:60
- #: js/widgets/account/ChangeAccountAction.js:99 js/widgets/EditRecord.js:178
- #: js/widgets/container/ContainerSelect.js:481
- #: js/widgets/ActivitiesPanel.js:332 js/widgets/tags/TagToggleBox.js:59
- #: js/widgets/tags/TagsMassAttachAction.js:105
- #: js/widgets/persistentfilter/EditPersistentFilterPanel.js:76
- #: js/widgets/dialog/WizardPanel.js:187
- #: js/widgets/dialog/DuplicateMergeDialog.js:79
- #: js/widgets/dialog/AddToRecordPanel.js:103
- #: js/widgets/dialog/MultiOptionsDialog.js:109
- #: js/widgets/dialog/PreferencesDialog.js:117
- #: js/widgets/dialog/EditDialog.js:418
- #: js/widgets/dialog/ExceptionHandlerDialog.js:189
- msgid "Cancel"
 -#: js/MainMenu.js:144
 -msgid "Edit Profile"
++#: Export/Spreadsheet/Xls.php:365
++msgid "Without company assigned"
  msgstr ""
  
- #: js/ux/form/ImageField.js:76
- msgid "Loading"
 -#: js/MainMenu.js:151
 -msgid "Change password"
++#: js/AdminPanel.js:75
++msgid "Profile Information"
  msgstr ""
  
- #: js/ux/form/ImageField.js:78
- msgid "Click to edit"
 -#: js/MainMenu.js:158
 -msgid "Logout"
++#: js/AdminPanel.js:79 js/widgets/dialog/EditDialog.js:409
++#: js/widgets/EditRecord.js:168
++msgid "Apply"
  msgstr ""
  
- #: js/ux/form/ImageField.js:146
- msgid "Image Failed"
 -#: js/MainMenu.js:159
 -#, python-brace-format
 -msgid "Logout from {0}"
++#: js/AdminPanel.js:94 js/widgets/TimezoneChooser.js:77
++#: js/widgets/LangChooser.js:68
++msgid "Please Wait"
  msgstr ""
  
- #: js/ux/form/ImageField.js:146
- msgid "Could not load image. Please notify your Administrator"
 -#: js/MainMenu.js:166 js/AboutDialog.js:56
 -#, python-brace-format
 -msgid "Learn more about {0}"
++#: js/AdminPanel.js:156 js/widgets/container/GrantsGrid.js:43
++#: js/widgets/persistentfilter/EditPersistentFilterPanel.js:262
++msgid "Read"
  msgstr ""
  
- #: js/ux/form/ImageField.js:168
- msgid "Not An Image"
 -#: js/MainMenu.js:176
 -msgid "Allow desktop notifications"
++#: js/AdminPanel.js:157
++msgid "The field is readable part of the profile"
  msgstr ""
  
- #: js/ux/form/ImageField.js:168
- msgid "Please select an image file (gif/png/jpeg)"
 -#: js/MainMenu.js:177
 -msgid "Request permissions for webkit desktop notifications."
++#: js/AdminPanel.js:161 js/widgets/container/GrantsGrid.js:47
++#: js/widgets/persistentfilter/EditPersistentFilterPanel.js:268
++msgid "Edit"
  msgstr ""
  
- #: js/ux/form/ImageField.js:211 js/widgets/grid/FileUploadGrid.js:114
- msgid "Upload Failed"
 -#: js/MainMenu.js:187
 -msgid "Install web app"
++#: js/AdminPanel.js:162
++msgid "The field is editable part of the profile"
  msgstr ""
  
- #: js/ux/form/ImageField.js:211
- msgid "Could not upload image. Please notify your Administrator"
 -#: js/MainMenu.js:188
 -msgid "Install Tine 2.0 as web app in your browser."
++#: js/AdminPanel.js:175 js/widgets/dialog/DuplicateResolveGridPanel.js:203
++msgid "Field Name"
  msgstr ""
  
- #: js/ux/form/ImageField.js:224
- msgid "Change Image"
 -#: js/MainMenu.js:243 js/widgets/dialog/EditDialog.js:827
 -#: js/widgets/dialog/MultipleEditDialogPlugin.js:690
 -#: js/widgets/grid/GridPanel.js:1787
 -#: js/widgets/persistentfilter/PickerPanel.js:325
 -#: js/widgets/tree/ContextMenu.js:346
 -msgid "Confirm"
++#: js/LoginPanel.js:83 js/LoginPanel.js:159
++msgid "Login"
  msgstr ""
  
- #: js/ux/form/ImageField.js:232 js/ux/form/ImageField.js:250
- msgid "Crop Image"
 -#: js/MainMenu.js:243
 -msgid "Are you sure you want to logout?"
++#: js/LoginPanel.js:111 js/widgets/dialog/CredentialsDialog.js:65
++msgid "Password"
  msgstr ""
  
- #: js/ux/form/ImageField.js:256
- msgid "Delete Image"
 -#: js/MainMenu.js:257
 -msgid "Logging you out..."
++#: js/LoginPanel.js:128
++msgid "Certificate detected. Please, press Login button to proceed."
  msgstr ""
  
- #: js/ux/form/ImageField.js:265
- msgid "Show Original Image"
 -#: js/MainMenu.js:257 js/LoginPanel.js:474
 -msgid "Please wait!"
++#: js/LoginPanel.js:185
++msgid "Version"
  msgstr ""
  
- #: js/ux/form/ComboBoxRecentsPlugin.js:43
- #: js/widgets/container/ContainerSelect.js:129
 -#: js/ApplicationStarter.js:539
 -msgid "New "
++#: js/LoginPanel.js:217
 +#, python-brace-format
- msgid "choose other {0}..."
++msgid "{0} is made for you"
  msgstr ""
  
- #: js/ux/form/RecordsComboBox.js:26
- msgid "Software Version"
 -#: js/ux/Percentage.js:193
 -msgid "(paused)"
++#: js/LoginPanel.js:219
++#, python-brace-format
++msgid ""
++"{0} wants to make business collaboration easier and more enjoyable - for "
++"your needs! So you are warmly welcome to discuss with us, bring in ideas and "
++"get help."
  msgstr ""
  
- #: js/ExceptionDialog.js:62 Frontend/Http.php:427
- msgid "Abnormal End"
 -#: js/ux/ConnectionStatus.js:56
 -msgid "online"
++#: js/LoginPanel.js:225
++#, python-brace-format
++msgid "{0} Homepage"
  msgstr ""
  
- #: js/ExceptionDialog.js:103 js/ExceptionDialog.js:126
- msgid "Send Report"
 -#: js/ux/ConnectionStatus.js:57
 -msgid "offline"
++#: js/LoginPanel.js:226
++#, python-brace-format
++msgid "{0} Forum"
  msgstr ""
  
- #: js/ExceptionDialog.js:154 Frontend/Http.php:428
- msgid "An error occurred, the program ended abnormal."
 -#: js/ux/grid/PagingToolbar.js:57
 -#, python-brace-format
 -msgid "{0} selected"
++#: js/LoginPanel.js:230
++msgid "Translations"
  msgstr ""
  
- #: js/ExceptionDialog.js:155
- msgid "The last action you made was potentially not performed correctly."
 -#: js/ux/grid/PagingToolbar.js:58
 -msgid "Unselect all"
++#: js/LoginPanel.js:232
++#, python-brace-format
++msgid "Translation state of {0}: {1}%."
  msgstr ""
  
- #: js/ExceptionDialog.js:156
 -#: js/ux/grid/PagingToolbar.js:59
++#: js/LoginPanel.js:234
+ #, python-brace-format
 -msgid "Select all pages ({0} records)"
 +msgid ""
- "Please help improving this software and notify the vendor. Include a brief "
- "description of what you where doing when the error occurred."
++"If the state of your language is not satisfying, or if you miss a language, "
++"please consider becoming a {0} translator."
  msgstr ""
  
- #: js/ExceptionDialog.js:162 js/widgets/tags/TagsPanel.js:508
- #: js/widgets/relation/GenericPickerGridPanel.js:457
- #: js/widgets/persistentfilter/EditPersistentFilterPanel.js:204
- msgid "Description"
 -#: js/ux/grid/PagingToolbar.js:60
 -msgid "Toggle selection"
++#: js/LoginPanel.js:237
++#, python-brace-format
++msgid "{0} Translation Howto"
  msgstr ""
  
- #: js/ExceptionDialog.js:170
- msgid "Send Contact Information"
 -#: js/ux/grid/GroupingGridPlugin.js:95
 -msgid "Export Records from these Positions"
++#: js/LoginPanel.js:238
++msgid "Detailed Language Statistics"
  msgstr ""
  
- #: js/ExceptionDialog.js:187
- msgid "Details:"
 -#: js/ux/PopupWindowManager.js:175
 -msgid ""
 -"The window you want to work with is backgrounded. Your browser doesn't "
 -"support to foreground the window for you, so you need to use your operating "
 -"systems window switching features. Please send complaints to your browser "
 -"vendor!"
++#: js/LoginPanel.js:258
++msgid "Powered by:"
  msgstr ""
  
- #: js/ExceptionDialog.js:211
- msgid "Sending report..."
 -#: js/ux/form/RecordsComboBox.js:26
 -msgid "Software Version"
++#: js/LoginPanel.js:258
++msgid "online open source groupware and crm"
  msgstr ""
  
- #: js/ExceptionDialog.js:211
- msgid "Please wait a moment"
 -#: js/ux/form/ComboBoxRecentsPlugin.js:43
 -#: js/widgets/container/ContainerSelect.js:129
++#: js/LoginPanel.js:308
+ #, python-brace-format
 -msgid "choose other {0}..."
++msgid "about {0} minutes"
  msgstr ""
  
- #: js/ExceptionDialog.js:260
- msgid "Transmission Completed"
 -#: js/ux/form/ImageField.js:76
 -msgid "Loading"
++#: js/LoginPanel.js:313 js/LoginPanel.js:551
++msgid "Tine 2.0 needs your help"
  msgstr ""
  
- #: js/ExceptionDialog.js:261
- msgid "Your report has been sent. Thanks for your contribution"
 -#: js/ux/form/ImageField.js:78
 -msgid "Click to edit"
++#: js/LoginPanel.js:315 js/LoginPanel.js:553
++msgid ""
++"We regularly need your feedback to make the next Tine 2.0 releases fit your "
++"needs even better. Help us and yourself by participating:"
  msgstr ""
  
- #: js/ExceptionDialog.js:261
- msgid "Please restart your browser now!"
 -#: js/ux/form/ImageField.js:146
 -msgid "Image Failed"
++#: js/LoginPanel.js:321
++msgid "participate!"
  msgstr ""
  
- #: js/AdminPanel.js:75
- msgid "Profile Information"
 -#: js/ux/form/ImageField.js:146
 -msgid "Could not load image. Please notify your Administrator"
++#: js/LoginPanel.js:343
++msgid "Languages"
  msgstr ""
  
- #: js/AdminPanel.js:79 js/widgets/EditRecord.js:168
- #: js/widgets/dialog/EditDialog.js:409
- msgid "Apply"
 -#: js/ux/form/ImageField.js:168
 -msgid "Not An Image"
++#: js/LoginPanel.js:344
++msgid "Duration"
  msgstr ""
  
- #: js/AdminPanel.js:94 js/widgets/TimezoneChooser.js:77
- #: js/widgets/LangChooser.js:68
- msgid "Please Wait"
 -#: js/ux/form/ImageField.js:168
 -msgid "Please select an image file (gif/png/jpeg)"
++#: js/LoginPanel.js:385
++msgid "Browser incompatible"
  msgstr ""
  
- #: js/AdminPanel.js:156 js/widgets/container/GrantsGrid.js:43
- #: js/widgets/persistentfilter/EditPersistentFilterPanel.js:262
- msgid "Read"
 -#: js/ux/form/ImageField.js:211 js/widgets/grid/FileUploadGrid.js:114
 -msgid "Upload Failed"
++#: js/LoginPanel.js:387
++msgid "Your browser is not supported by Tine 2.0."
  msgstr ""
  
- #: js/AdminPanel.js:157
- msgid "The field is readable part of the profile"
 -#: js/ux/form/ImageField.js:211
 -msgid "Could not upload image. Please notify your Administrator"
++#: js/LoginPanel.js:392
++msgid "Browser incompatible?"
  msgstr ""
  
- #: js/AdminPanel.js:161 js/widgets/container/GrantsGrid.js:47
- #: js/widgets/persistentfilter/EditPersistentFilterPanel.js:268
- msgid "Edit"
 -#: js/ux/form/ImageField.js:224
 -msgid "Change Image"
++#: js/LoginPanel.js:394
++msgid ""
++"You are using an unrecognized browser. This could result in unexpected "
++"behaviour."
  msgstr ""
  
- #: js/AdminPanel.js:162
- msgid "The field is editable part of the profile"
 -#: js/ux/form/ImageField.js:232 js/ux/form/ImageField.js:250
 -msgid "Crop Image"
++#: js/LoginPanel.js:400
++msgid "You might try one of these browsers:"
  msgstr ""
  
- #: js/AdminPanel.js:175 js/widgets/dialog/DuplicateResolveGridPanel.js:203
- msgid "Field Name"
 -#: js/ux/form/ImageField.js:256
 -msgid "Delete Image"
++#: js/LoginPanel.js:460
++msgid "Logging you in..."
  msgstr ""
  
- #: js/prototypeTranslations.js:20 js/prototypeTranslations.js:21
- msgid "Outdent Text"
 -#: js/ux/form/ImageField.js:265
 -msgid "Show Original Image"
++#: js/LoginPanel.js:460 js/widgets/dialog/MultipleEditDialogPlugin.js:693
++#: js/widgets/tree/ContextMenu.js:202 js/widgets/container/GrantsDialog.js:95
++#: js/widgets/persistentfilter/PickerPanel.js:328
++#: js/widgets/persistentfilter/PickerPanel.js:366
++#: js/widgets/persistentfilter/PickerPanel.js:421
++msgid "Please wait"
  msgstr ""
  
- #: js/prototypeTranslations.js:22 js/prototypeTranslations.js:23
- msgid "Indent Text"
 -#: js/ux/form/LayerCombo.js:186 js/AboutDialog.js:61 js/CreditsScreen.js:53
 -#: js/PasswordChangeDialog.js:66 js/LicenseScreen.js:51
 -#: js/widgets/tags/TagsMassAttachAction.js:84
 -#: js/widgets/dialog/AddToRecordPanel.js:111
 -#: js/widgets/dialog/EditDialog.js:373
 -#: js/widgets/dialog/MultiOptionsDialog.js:102
 -#: js/widgets/dialog/PreferencesDialog.js:109
 -#: js/widgets/dialog/ExceptionHandlerDialog.js:194
 -#: js/widgets/container/ContainerSelect.js:490
 -#: js/widgets/ActivitiesPanel.js:340 js/widgets/EditRecord.js:157
 -msgid "Ok"
++#: js/LoginPanel.js:474
++#, python-brace-format
++msgid "Login successful. Loading {0}..."
  msgstr ""
  
- #: js/prototypeTranslations.js:24 js/prototypeTranslations.js:25
- msgid "Remove Formatting"
 -#: js/ux/form/LayerCombo.js:193 js/PasswordChangeDialog.js:60
 -#: js/ExceptionDialog.js:109 js/ExceptionDialog.js:119
 -#: js/widgets/tags/TagToggleBox.js:59
 -#: js/widgets/tags/TagsMassAttachAction.js:105
 -#: js/widgets/dialog/DuplicateMergeDialog.js:79
 -#: js/widgets/dialog/AddToRecordPanel.js:103
 -#: js/widgets/dialog/EditDialog.js:393
 -#: js/widgets/dialog/MultiOptionsDialog.js:109
 -#: js/widgets/dialog/PreferencesDialog.js:117
 -#: js/widgets/dialog/WizardPanel.js:187
 -#: js/widgets/dialog/ExceptionHandlerDialog.js:186
 -#: js/widgets/container/ContainerSelect.js:481
 -#: js/widgets/ActivitiesPanel.js:332
 -#: js/widgets/persistentfilter/EditPersistentFilterPanel.js:76
 -#: js/widgets/EditRecord.js:178
 -msgid "Cancel"
++#: js/LoginPanel.js:474 js/MainMenu.js:277
++msgid "Please wait!"
  msgstr ""
  
- #: js/AppManager.js:208
- msgid "Missing Applications"
 -#: js/ux/SearchField.js:44
 -msgid "enter searchfilter"
++#: js/LoginPanel.js:482 js/ExceptionHandler.js:233
++msgid "Connection lost, please check your network!"
  msgstr ""
  
- #: js/AppManager.js:209
- msgid ""
- "There are no applications enabled for you. Please contact your administrator."
 -#: js/AboutDialog.js:71
 -msgid "Released under different"
++#: js/LoginPanel.js:486
++msgid "There was an error verifying your certificate!!!"
  msgstr ""
  
- #: js/ApplicationStarter.js:539
- msgid "New "
 -#: js/AboutDialog.js:72
 -msgid "Open Source Licenses"
++#: js/LoginPanel.js:487
++msgid "Your username and/or your password are wrong!!!"
  msgstr ""
  
- #: js/Container.js:123
- #, python-brace-format
- msgid "All {0}"
 -#: js/AboutDialog.js:79
 -msgid "with the help of our"
++#: js/LoginPanel.js:489
++msgid "Login failure"
  msgstr ""
  
- #: js/Container.js:124
- #, python-brace-format
- msgid "Shared {0}"
 -#: js/AboutDialog.js:80
 -msgid "Contributors"
++#: js/LoginPanel.js:508 js/widgets/dialog/CredentialsDialog.js:126
++#: js/widgets/dialog/PreferencesDialog.js:248
++#: js/widgets/dialog/PreferencesDialog.js:277
++#: js/widgets/dialog/MultipleEditDialogPlugin.js:655
++#: js/widgets/dialog/ExportDialog.js:150 js/widgets/dialog/EditDialog.js:822
++msgid "Errors"
  msgstr ""
  
- #: js/Container.js:125
- #, python-brace-format
- msgid "Other Users {0}"
 -#: js/data/Record.js:203
 -msgid "Task"
 -msgid_plural "Tasks"
 -msgstr[0] ""
 -msgstr[1] ""
++#: js/LoginPanel.js:508 js/widgets/dialog/CredentialsDialog.js:126
++#: js/widgets/dialog/MultipleEditDialogPlugin.js:655
++#: js/widgets/dialog/ExportDialog.js:150 js/widgets/dialog/EditDialog.js:844
++msgid "Please fix the errors noted."
 +msgstr ""
  
- #: js/Container.js:130
- #, python-brace-format
- msgid "My {0}"
 -#: js/data/Record.js:207
 -msgid "to do list"
 -msgid_plural "to do lists"
 -msgstr[0] ""
 -msgstr[1] ""
++#: js/LoginPanel.js:523
++msgid "Please enter your login data"
 +msgstr ""
  
- #: js/tineInit.js:605
- msgid ""
- "Fatal Error: Client self-update failed, please contact your administrator "
- "and/or restart/reload your browser."
 -#: js/common.js:235
 -msgid "Usage:&#160;"
++#: js/widgets/TimezoneChooser.js:37 Preference.php:142
++msgid "Timezone"
  msgstr ""
  
- #: js/PasswordChangeDialog.js:32
- #, python-brace-format
- msgid "Change Password For \"{0}\""
 -#: js/common.js:255 js/common.js:260 js/widgets/tags/TagCombo.js:134
 -#: js/widgets/tags/TagCombo.js:139 js/widgets/tags/TagToggleBox.js:112
 -#: js/widgets/tags/TagToggleBox.js:117 js/widgets/tags/TagsPanel.js:137
 -msgid "personal"
++#: js/widgets/TimezoneChooser.js:77
++msgid "setting new timezone..."
  msgstr ""
  
- #: js/PasswordChangeDialog.js:48
- msgid "Old Password"
 -#: js/common.js:273 js/common.js:311
 -msgid "No Information"
++#: js/widgets/ActivitiesPanel.js:153
++msgid "Add a Note..."
  msgstr ""
  
- #: js/PasswordChangeDialog.js:52
- msgid "New Password"
 -#: js/common.js:360
 -#, python-brace-format
 -msgid "{0} minute"
 -msgid_plural "{0} minutes"
 -msgstr[0] ""
 -msgstr[1] ""
++#: js/widgets/ActivitiesPanel.js:168 js/widgets/ActivitiesPanel.js:181
++#: js/widgets/container/GrantsGrid.js:45
++msgid "Add"
 +msgstr ""
  
- #: js/PasswordChangeDialog.js:56
- msgid "Repeat new Password"
 -#: js/common.js:361
 -#, python-brace-format
 -msgid "{0} hour"
 -msgid_plural "{0} hours"
 -msgstr[0] ""
 -msgstr[1] ""
++#: js/widgets/ActivitiesPanel.js:168 js/widgets/ActivitiesPanel.js:491
++msgid "Note"
 +msgstr ""
  
- #: js/PasswordChangeDialog.js:75
- msgid "Please Wait!"
 -#: js/common.js:362
 -#, python-brace-format
 -msgid "{0} workday"
 -msgid_plural "{0} workdays"
 -msgstr[0] ""
 -msgstr[1] ""
++#: js/widgets/ActivitiesPanel.js:182 js/widgets/ActivitiesPanel.js:413
++msgid "Add new note"
 +msgstr ""
 +
- #: js/PasswordChangeDialog.js:76
- msgid "changing password..."
++#: js/widgets/ActivitiesPanel.js:209 js/widgets/ActivitiesPanel.js:228
++msgid "Notes"
 +msgstr ""
 +
- #: js/PasswordChangeDialog.js:87
- msgid "Success"
++#: js/widgets/ActivitiesPanel.js:311
++msgid "Enter new note:"
 +msgstr ""
  
- #: js/PasswordChangeDialog.js:88
- msgid "Your password has been changed."
 -#: js/common.js:389
++#: js/widgets/ActivitiesPanel.js:332
++#: js/widgets/tags/TagsMassAttachAction.js:105
++#: js/widgets/tags/TagToggleBox.js:59
++#: js/widgets/account/ChangeAccountAction.js:99
++#: js/widgets/dialog/ExceptionHandlerDialog.js:189
++#: js/widgets/dialog/PreferencesDialog.js:117
++#: js/widgets/dialog/WizardPanel.js:187
++#: js/widgets/dialog/DuplicateMergeDialog.js:79
++#: js/widgets/dialog/AddToRecordPanel.js:103
++#: js/widgets/dialog/EditDialog.js:418
++#: js/widgets/dialog/MultiOptionsDialog.js:109
++#: js/widgets/container/ContainerSelect.js:481 js/widgets/EditRecord.js:178
++#: js/widgets/persistentfilter/EditPersistentFilterPanel.js:76
++#: js/PasswordChangeDialog.js:60 js/ux/form/LayerCombo.js:193
++#: js/ExceptionDialog.js:109 js/ExceptionDialog.js:119
++msgid "Cancel"
 +msgstr ""
 +
- #: js/PasswordChangeDialog.js:100 js/PasswordChangeDialog.js:110
- #: js/widgets/relation/GenericPickerGridPanel.js:916
- #: js/widgets/relation/GenericPickerGridPanel.js:929
- #: js/widgets/dialog/ImportDialog.js:658
- #: js/widgets/dialog/MultipleEditResultSummary.js:196
- #: js/widgets/form/RecordPickerComboBox.js:294
- msgid "Failure"
++#: js/widgets/ActivitiesPanel.js:340
++#: js/widgets/tags/TagsMassAttachAction.js:84
++#: js/widgets/account/ChangeAccountAction.js:78
++#: js/widgets/dialog/ExceptionHandlerDialog.js:197
++#: js/widgets/dialog/PreferencesDialog.js:109
++#: js/widgets/dialog/AddToRecordPanel.js:111
++#: js/widgets/dialog/EditDialog.js:398
++#: js/widgets/dialog/MultiOptionsDialog.js:102
++#: js/widgets/container/ContainerSelect.js:490 js/widgets/EditRecord.js:157
++#: js/AboutDialog.js:61 js/PasswordChangeDialog.js:66
++#: js/ux/form/LayerCombo.js:186 js/LicenseScreen.js:51 js/CreditsScreen.js:53
++msgid "Ok"
 +msgstr ""
 +
- #: js/PasswordChangeDialog.js:111
- msgid "The new passwords mismatch, please correct them."
++#: js/widgets/ActivitiesPanel.js:356 js/widgets/ActivitiesPanel.js:412
++msgid "Add Note"
 +msgstr ""
 +
- #: js/common.js:235
- msgid "Usage:&#160;"
++#: js/widgets/ActivitiesPanel.js:399
+ #, python-brace-format
 -msgid "{0} second"
 -msgid_plural "{0} seconds"
 -msgstr[0] ""
 -msgstr[1] ""
++msgid "Add a {0} Note"
 +msgstr ""
  
- #: js/common.js:255 js/common.js:260 js/widgets/tags/TagToggleBox.js:112
- #: js/widgets/tags/TagToggleBox.js:117 js/widgets/tags/TagCombo.js:134
- #: js/widgets/tags/TagCombo.js:139 js/widgets/tags/TagsPanel.js:137
- msgid "personal"
 -#: js/CreditsScreen.js:36
 -msgid "Credits"
++#: js/widgets/ActivitiesPanel.js:489 js/widgets/ActivitiesPanel.js:626
++#: js/widgets/relation/GenericPickerGridPanel.js:460
++#: js/widgets/grid/LinkGridPanel.js:105
++msgid "Type"
  msgstr ""
  
- #: js/common.js:273 js/common.js:311
- msgid "No Information"
 -#: js/AdminPanel.js:75
 -msgid "Profile Information"
++#: js/widgets/ActivitiesPanel.js:492
++#: js/widgets/dialog/AttachmentsGridPanel.js:106
++#: js/widgets/grid/GridPanel.js:1420
++msgid "Created By"
  msgstr ""
  
- #: js/common.js:360
- #, python-brace-format
- msgid "{0} minute"
- msgid_plural "{0} minutes"
- msgstr[0] ""
- msgstr[1] ""
- #: js/common.js:361
- #, python-brace-format
- msgid "{0} hour"
- msgid_plural "{0} hours"
- msgstr[0] ""
- msgstr[1] ""
 -#: js/AdminPanel.js:79 js/widgets/dialog/EditDialog.js:384
 -#: js/widgets/EditRecord.js:168
 -msgid "Apply"
++#: js/widgets/ActivitiesPanel.js:493
++msgid "Timestamp"
+ msgstr ""
  
- #: js/common.js:362
 -#: js/AdminPanel.js:94 js/widgets/LangChooser.js:68
 -#: js/widgets/TimezoneChooser.js:77
 -msgid "Please Wait"
++#: js/widgets/ActivitiesPanel.js:507
 +#, python-brace-format
- msgid "{0} workday"
- msgid_plural "{0} workdays"
- msgstr[0] ""
- msgstr[1] ""
++msgid "Displaying history records {0} - {1} of {2}"
+ msgstr ""
  
- #: js/common.js:389
- #, python-brace-format
- msgid "{0} second"
- msgid_plural "{0} seconds"
- msgstr[0] ""
- msgstr[1] ""
 -#: js/AdminPanel.js:156 js/widgets/container/GrantsGrid.js:43
 -msgid "Read"
++#: js/widgets/ActivitiesPanel.js:508
++msgid "No history to display"
+ msgstr ""
  
- #: js/LicenseScreen.js:35
- msgid "License"
 -#: js/AdminPanel.js:157
 -msgid "The field is readable part of the profile"
++#: js/widgets/ActivitiesPanel.js:608
++msgid "History"
  msgstr ""
  
- #: js/MainScreen.js:205
- msgid "Your password expired. Please enter a new user password:"
 -#: js/AdminPanel.js:161 js/widgets/container/GrantsGrid.js:47
 -msgid "Edit"
++#: js/widgets/ActivitiesPanel.js:620
++msgid "Quick Search"
  msgstr ""
  
- #: js/widgets/TimezoneChooser.js:37 Preference.php:142
- msgid "Timezone"
 -#: js/AdminPanel.js:162
 -msgid "The field is editable part of the profile"
++#: js/widgets/ActivitiesPanel.js:621 js/widgets/ActivitiesPanel.js:622
++msgid "Time"
  msgstr ""
  
- #: js/widgets/TimezoneChooser.js:77
- msgid "setting new timezone..."
 -#: js/AdminPanel.js:175 js/widgets/dialog/DuplicateResolveGridPanel.js:203
 -msgid "Field Name"
++#: js/widgets/ActivitiesPanel.js:624
++msgid "User"
  msgstr ""
  
- #: js/widgets/account/PickerGridPanel.js:158
- msgid "Search User"
 -#: js/ExceptionHandler.js:168 Frontend/Http.php:396
 -msgid "Authorisation Required"
++#: js/widgets/customfields/EditDialogPlugin.js:155
++msgid "General"
  msgstr ""
  
- #: js/widgets/account/PickerGridPanel.js:164
- msgid "Search Group"
 -#: js/ExceptionHandler.js:169
 -msgid "Your session timed out. You need to login again."
++#: js/widgets/customfields/EditDialogPlugin.js:167
++msgid "Custom Fields"
  msgstr ""
  
- #: js/widgets/account/PickerGridPanel.js:170
- msgid "Add Anyone"
 -#: js/ExceptionHandler.js:184
 -msgid "Insufficient Rights"
++#: js/widgets/tags/TagCombo.js:46
++msgid "tag name"
  msgstr ""
  
- #: js/widgets/account/PickerGridPanel.js:213
- msgid "Anyone"
 -#: js/ExceptionHandler.js:185
 -msgid "Sorry, you are not permitted to perform this action"
++#: js/widgets/tags/TagCombo.js:134 js/widgets/tags/TagCombo.js:139
++#: js/widgets/tags/TagToggleBox.js:112 js/widgets/tags/TagToggleBox.js:117
++#: js/widgets/tags/TagsPanel.js:137 js/common.js:257 js/common.js:262
++msgid "personal"
  msgstr ""
  
- #: js/widgets/account/PickerGridPanel.js:229
- msgid "Search for users ..."
- msgstr ""
- #: js/widgets/account/PickerGridPanel.js:251
- msgid "Search for groups ..."
- msgstr ""
- #: js/widgets/account/PickerGridPanel.js:267
- #: js/widgets/container/PropertiesDialog.js:107
- #: js/widgets/grid/LinkGridPanel.js:103
- #: js/widgets/dialog/AttachmentsGridPanel.js:86 js/Models.js:430
- msgid "Name"
 -#: js/ExceptionHandler.js:193
 -msgid "Not Found"
++#: js/widgets/tags/TagsMassDetachAction.js:18
++msgid "Detach tag(s)"
  msgstr ""
  
- #: js/widgets/account/ChangeAccountAction.js:18
- msgid "Change user account"
 -#: js/ExceptionHandler.js:194
 -msgid ""
 -"Sorry, your request could not be completed because the required data could "
 -"not be found. In most cases this means that someone already deleted the "
 -"data. Please refresh your current view."
++#: js/widgets/tags/TagsMassDetachAction.js:84
++msgid "Select Tag(s) to detach"
  msgstr ""
  
- #: js/widgets/account/ChangeAccountAction.js:20
- msgid "Switch to another user's account"
 -#: js/ExceptionHandler.js:202
 -msgid "Concurrent Updates"
++#: js/widgets/tags/TagsMassAttachAction.js:18
++msgid "Add Tag"
  msgstr ""
  
- #: js/widgets/account/ChangeAccountAction.js:65
- msgid "Switch to this user account:"
 -#: js/ExceptionHandler.js:203
 -msgid ""
 -"Someone else saved this record while you where editing the data. You need to "
 -"reload and make your changes again."
++#: js/widgets/tags/TagsMassAttachAction.js:76
++msgid "Attach the following tag to all selected items:"
  msgstr ""
  
- #: js/widgets/account/ChangeAccountAction.js:92
- msgid "Select Account"
 -#: js/ExceptionHandler.js:211
 -msgid "Service Unavailable"
++#: js/widgets/tags/TagsMassAttachAction.js:98
++msgid "Select Tag"
  msgstr ""
  
- #: js/widgets/account/ChangeAccountAction.js:115
- msgid "Changing user account ..."
 -#: js/ExceptionHandler.js:212
 -msgid ""
 -"The server is currently unable to handle the request due to a temporary "
 -"overloading, maintenance or misconfiguration of the server. Please try again "
 -"or contact your administrator."
++#: js/widgets/tags/TagsMassAttachAction.js:128
++msgid "Attaching Tag"
  msgstr ""
  
- #: js/widgets/EditRecord.js:131 js/widgets/dialog/EditDialog.js:466
- #: js/widgets/dialog/EditDialog.js:494
- msgid "Saved in"
 -#: js/ExceptionHandler.js:218
 -msgid "Server Message:"
++#: js/widgets/tags/TagToggleBox.js:52
++msgid "Detach Tags"
  msgstr ""
  
- #: js/widgets/EditRecord.js:188 js/widgets/dialog/EditDialog.js:427
- msgid "delete"
 -#: js/ExceptionHandler.js:220
 -msgid "Invalid Data"
++#: js/widgets/tags/TagToggleBox.js:52
++msgid "Attach Tags"
  msgstr ""
  
- #: js/widgets/tree/ContextMenu.js:35 js/widgets/grid/FileUploadGrid.js:241
- #: js/widgets/grid/GridPanel.js:578
- #, python-brace-format
- msgid "Add {0}"
 -#: js/ExceptionHandler.js:221
 -msgid "Your input data is not valid. Please provide valid data."
++#: js/widgets/tags/TagToggleBox.js:140
++msgid "No Tags to detach found in the selected records"
  msgstr ""
  
- #: js/widgets/tree/ContextMenu.js:43 js/widgets/tree/ContextMenu.js:276
- #, python-brace-format
- msgid "Rename {0}"
 -#: js/ExceptionHandler.js:233 js/LoginPanel.js:482
 -msgid "Connection lost, please check your network!"
++#: js/widgets/tags/TagToggleBox.js:141
++msgid "Please Wait..."
  msgstr ""
  
- #: js/widgets/tree/ContextMenu.js:52 js/widgets/grid/GridPanel.js:652
- #: js/widgets/grid/GridPanel.js:653 js/widgets/grid/GridPanel.js:655
- #, python-brace-format
- msgid "Delete {0}"
- msgid_plural "Delete {0}"
- msgstr[0] ""
- msgstr[1] ""
- #: js/widgets/tree/ContextMenu.js:61
- #, python-brace-format
- msgid "Manage {0} Permissions"
 -#: js/ExceptionHandler.js:239
 -msgid "Timeout"
++#: js/widgets/tags/TagToggleBox.js:152
++msgid "Detaching Tags"
  msgstr ""
  
- #: js/widgets/tree/ContextMenu.js:69
- #, python-brace-format
- msgid "{0} Properties"
 -#: js/ExceptionHandler.js:240
 -msgid ""
 -"Sorry, some timeout occured while processing your request. Please reload "
 -"your browser, try again or contact your administrator."
++#: js/widgets/tags/TagsPanel.js:114
++msgid "Add a new personal tag"
  msgstr ""
  
- #: js/widgets/tree/ContextMenu.js:78
- #, python-brace-format
- msgid "Set {0} color"
 -#: js/ExceptionHandler.js:248
 -msgid "No Response"
++#: js/widgets/tags/TagsPanel.js:117
++msgid "Add New Personal Tag"
  msgstr ""
  
- #: js/widgets/tree/ContextMenu.js:92
- #, python-brace-format
- msgid "Reload {0}"
 -#: js/ExceptionHandler.js:249
 -msgid ""
 -"Sorry, the Server did not respond any data. Please reload your browser, try "
 -"again or contact your administrator."
++#: js/widgets/tags/TagsPanel.js:118
++msgid "Please note: You create a personal tag. Only you can see it!"
  msgstr ""
  
- #: js/widgets/tree/ContextMenu.js:100 js/widgets/grid/FileUploadGrid.js:195
- msgid "Resume upload"
 -#: js/ExceptionHandler.js:256
 -msgid "Out of Resources"
++#: js/widgets/tags/TagsPanel.js:118
++msgid "Enter tag name:"
  msgstr ""
  
- #: js/widgets/tree/ContextMenu.js:109
- msgid "Edit Properties"
 -#: js/ExceptionHandler.js:257
 -msgid ""
 -"Sorry, the Server stated a \"memory exhausted\" condition. Please contact "
 -"your administrator."
++#: js/widgets/tags/TagsPanel.js:159
++msgid "No Tags to display"
  msgstr ""
  
- #: js/widgets/tree/ContextMenu.js:116 js/widgets/grid/FileUploadGrid.js:187
- msgid "Pause upload"
- msgstr ""
 -#: js/ExceptionHandler.js:273
 -msgid "No Role Memberships"
++#: js/widgets/tags/TagsPanel.js:182
++msgid "Detach tag"
++msgid_plural "Detach tags"
++msgstr[0] ""
++msgstr[1] ""
 +
- #: js/widgets/tree/ContextMenu.js:124
- #: js/widgets/dialog/AttachmentsGridPanel.js:131
- msgid "Download"
++#: js/widgets/tags/TagsPanel.js:192
++msgid "Edit tag"
  msgstr ""
  
- #: js/widgets/tree/ContextMenu.js:132
- msgid "Publish"
 -#: js/ExceptionHandler.js:274
 -msgid ""
 -"Your user account has no role memberships. Please contact your administrator."
++#: js/widgets/tags/TagsPanel.js:197 js/widgets/tags/TagsPanel.js:202
++msgid "Rename Tag"
  msgstr ""
  
- #: js/widgets/tree/ContextMenu.js:196
- #, python-brace-format
- msgid "New {0}"
 -#: js/ExceptionHandler.js:289
 -msgid "Method Not Found / Insufficent Permissions"
++#: js/widgets/tags/TagsPanel.js:202
++msgid "Please enter a new name:"
  msgstr ""
  
- #: js/widgets/tree/ContextMenu.js:196
- #, python-brace-format
- msgid "Please enter the name of the new {0}:"
 -#: js/ExceptionHandler.js:290
 -msgid ""
 -"You tried to access a function that is not available. Please reload your "
 -"browser, try again or contact your administrator."
++#: js/widgets/tags/TagsPanel.js:211
++msgid "Edit Description"
  msgstr ""
  
- #: js/widgets/tree/ContextMenu.js:199
- #, python-brace-format
- msgid "No {0} added"
 -#: js/LoginPanel.js:83 js/LoginPanel.js:159
 -msgid "Login"
++#: js/widgets/tags/TagsPanel.js:216
++msgid "Description for tag"
  msgstr ""
  
- #: js/widgets/tree/ContextMenu.js:199 js/widgets/tree/ContextMenu.js:283
- #, python-brace-format
- msgid "You have to supply a {0} name!"
 -#: js/LoginPanel.js:93 js/widgets/dialog/CredentialsDialog.js:61
 -msgid "Username"
++#: js/widgets/tags/TagsPanel.js:216
++msgid "Please enter new description:"
  msgstr ""
  
- #: js/widgets/tree/ContextMenu.js:202 js/widgets/container/GrantsDialog.js:95
- #: js/widgets/persistentfilter/PickerPanel.js:328
- #: js/widgets/persistentfilter/PickerPanel.js:366
- #: js/widgets/persistentfilter/PickerPanel.js:421
- #: js/widgets/dialog/MultipleEditDialogPlugin.js:693 js/LoginPanel.js:460
- msgid "Please wait"
 -#: js/LoginPanel.js:111 js/widgets/dialog/CredentialsDialog.js:65
 -msgid "Password"
++#: js/widgets/tags/TagsPanel.js:225
++msgid "Change Color"
  msgstr ""
  
- #: js/widgets/tree/ContextMenu.js:202
- #, python-brace-format
- msgid "Creating {0}..."
- msgstr ""
 -#: js/LoginPanel.js:128
 -msgid "Certificate detected. Please, press Login button to proceed."
++#: js/widgets/tags/TagsPanel.js:254
++msgid "Delete Tag"
++msgid_plural "Delete Tags"
++msgstr[0] ""
++msgstr[1] ""
 +
- #: js/widgets/tree/ContextMenu.js:277
- #, python-brace-format
- msgid "Please enter the new name of the {0}:"
- msgstr ""
++#: js/widgets/tags/TagsPanel.js:267
++msgid "Realy Delete Selected Tag?"
++msgid_plural "Realy Delete Selected Tags?"
++msgstr[0] ""
++msgstr[1] ""
 +
- #: js/widgets/tree/ContextMenu.js:283
- #, python-brace-format
- msgid "Not renamed {0}"
- msgstr ""
++#: js/widgets/tags/TagsPanel.js:268
++msgid "the selected tag will be deleted and disapear for all entries"
++msgid_plural "The selected tags will be removed and disapear for all entries"
++msgstr[0] ""
++msgstr[1] ""
 +
- #: js/widgets/tree/ContextMenu.js:357
- #: js/widgets/persistentfilter/PickerPanel.js:326
- #: js/widgets/grid/GridPanel.js:1810
- #: js/widgets/dialog/MultipleEditDialogPlugin.js:690
- #: js/widgets/dialog/EditDialog.js:851 js/MainMenu.js:263
- msgid "Confirm"
++#: js/widgets/tags/TagsPanel.js:272
++msgid "Please wait a moment..."
  msgstr ""
  
- #: js/widgets/tree/ContextMenu.js:357
- #, python-brace-format
- msgid "Do you really want to delete the {0} \"{1}\"?"
- msgstr ""
 -#: js/LoginPanel.js:185
 -msgid "Version"
++#: js/widgets/tags/TagsPanel.js:272
++msgid "Deleting Tag"
++msgid_plural "Deleting Tags"
++msgstr[0] ""
++msgstr[1] ""
 +
- #: js/widgets/tree/ContextMenu.js:468
- #, python-brace-format
- msgid "Manage Permissions for {0} \"{1}\""
++#: js/widgets/tags/TagsPanel.js:288 js/widgets/tags/TagsPanel.js:380
++#: js/widgets/tags/TagsPanel.js:413 js/widgets/dialog/EditDialog.js:863
++msgid "Failed"
  msgstr ""
  
- #: js/widgets/tree/ContextMenu.js:492
 -#: js/LoginPanel.js:217
--#, python-brace-format
- msgid "Properties for {0} \"{1}\""
 -msgid "{0} is made for you"
++#: js/widgets/tags/TagsPanel.js:288
++msgid "Could not delete Tag(s)."
  msgstr ""
  
- #: js/widgets/container/ContainerSelect.js:132
 -#: js/LoginPanel.js:219
--#, python-brace-format
- msgid "Select a {0}"
 -msgid ""
 -"{0} wants to make business collaboration easier and more enjoyable - for "
 -"your needs! So you are warmly welcome to discuss with us, bring in ideas and "
 -"get help."
++#: js/widgets/tags/TagsPanel.js:332 js/widgets/tags/TagsPanel.js:394
++msgid "Notice"
  msgstr ""
  
- #: js/widgets/container/ContainerSelect.js:152
 -#: js/LoginPanel.js:225
--#, python-brace-format
- msgid "Recently used {0}:"
 -msgid "{0} Homepage"
++#: js/widgets/tags/TagsPanel.js:333 js/widgets/tags/TagsPanel.js:395
++msgid "The minimum tag length is three."
  msgstr ""
  
- #: js/widgets/container/ContainerSelect.js:478
 -#: js/LoginPanel.js:226
--#, python-brace-format
- msgid "please select a {0}"
 -msgid "{0} Forum"
++#: js/widgets/tags/TagsPanel.js:380
++msgid "Could not create tag."
  msgstr ""
  
- #: js/widgets/container/CalDAVContainerPropertiesHookField.js:35
- msgid "CalDAV URL"
 -#: js/LoginPanel.js:230
 -msgid "Translations"
++#: js/widgets/tags/TagsPanel.js:413
++msgid "Could not update tag."
  msgstr ""
  
- #: js/widgets/container/PropertiesDialog.js:90
- msgid "Properties"
 -#: js/LoginPanel.js:232
 -#, python-brace-format
 -msgid "Translation state of {0}: {1}%."
++#: js/widgets/tags/TagsPanel.js:508
++#: js/widgets/relation/GenericPickerGridPanel.js:457
++#: js/widgets/persistentfilter/EditPersistentFilterPanel.js:204
++#: js/ExceptionDialog.js:162
++msgid "Description"
  msgstr ""
  
- #: js/widgets/container/PropertiesDialog.js:113
 -#: js/LoginPanel.js:234
 -#, python-brace-format
 -msgid ""
 -"If the state of your language is not satisfying, or if you miss a language, "
 -"please consider becoming a {0} translator."
 +#: js/widgets/tags/TagsPanel.js:512
++#: js/widgets/container/PropertiesDialog.js:113
 +msgid "Color"
  msgstr ""
  
- #: js/widgets/container/PropertiesDialog.js:119
- msgid "My Grants"
- msgstr ""
- #: js/widgets/container/TreePanel.js:142
- msgid "container"
- msgid_plural "containers"
 -#: js/LoginPanel.js:237
 -#, python-brace-format
 -msgid "{0} Translation Howto"
++#: js/widgets/tags/TagFilter.js:30 js/Models.js:143
++msgid "Tag"
++msgid_plural "Tags"
 +msgstr[0] ""
 +msgstr[1] ""
 +
- #: js/widgets/container/TreePanel.js:547
- #, python-brace-format
- msgid "You are not allowed to select the {0} '{1}':"
++#: js/widgets/MainScreen.js:264
++msgid "Save current view as favorite"
  msgstr ""
  
- #: js/widgets/container/TreePanel.js:548
- #, python-brace-format
- msgid "{0} grant is required for desired action"
 -#: js/LoginPanel.js:238
 -msgid "Detailed Language Statistics"
++#: js/widgets/CountryCombo.js:34
++msgid "Select a country..."
  msgstr ""
  
- #: js/widgets/container/TreePanel.js:549
- msgid "Insufficient Grants"
 -#: js/LoginPanel.js:258
 -msgid "Powered by:"
++#: js/widgets/account/ChangeAccountAction.js:18
++msgid "Change user account"
  msgstr ""
  
- #: js/widgets/container/GrantsDialog.js:52
- msgid "Folder"
 -#: js/LoginPanel.js:258
 -msgid "online open source groupware and crm"
++#: js/widgets/account/ChangeAccountAction.js:20
++msgid "Switch to another user's account"
  msgstr ""
  
- #: js/widgets/container/GrantsDialog.js:95
- msgid "Updating Grants"
 -#: js/LoginPanel.js:308
 -#, python-brace-format
 -msgid "about {0} minutes"
++#: js/widgets/account/ChangeAccountAction.js:65
++msgid "Switch to this user account:"
  msgstr ""
  
- #: js/widgets/container/GrantsDialog.js:125
- msgid "Error"
 -#: js/LoginPanel.js:313 js/LoginPanel.js:551
 -msgid "Tine 2.0 needs your help"
++#: js/widgets/account/ChangeAccountAction.js:92
++msgid "Select Account"
  msgstr ""
  
- #: js/widgets/container/GrantsDialog.js:126
- msgid "You are not allowed to remove all admins for this container!"
 -#: js/LoginPanel.js:315 js/LoginPanel.js:553
 -msgid ""
 -"We regularly need your feedback to make the next Tine 2.0 releases fit your "
 -"needs even better. Help us and yourself by participating:"
++#: js/widgets/account/ChangeAccountAction.js:115
++msgid "Changing user account ..."
  msgstr ""
  
- #: js/widgets/container/GrantsGrid.js:44
- msgid "The grant to read records of this container"
 -#: js/LoginPanel.js:321
 -msgid "participate!"
++#: js/widgets/account/PickerGridPanel.js:158
++msgid "Search User"
  msgstr ""
  
- #: js/widgets/container/GrantsGrid.js:45 js/widgets/ActivitiesPanel.js:168
- #: js/widgets/ActivitiesPanel.js:181
- msgid "Add"
 -#: js/LoginPanel.js:343
 -msgid "Languages"
++#: js/widgets/account/PickerGridPanel.js:164
++msgid "Search Group"
  msgstr ""
  
- #: js/widgets/container/GrantsGrid.js:46
- msgid "The grant to add records to this container"
 -#: js/LoginPanel.js:344
 -msgid "Duration"
++#: js/widgets/account/PickerGridPanel.js:170
++msgid "Add Anyone"
  msgstr ""
  
- #: js/widgets/container/GrantsGrid.js:48
- msgid "The grant to edit records in this container"
 -#: js/LoginPanel.js:385
 -msgid "Browser incompatible"
++#: js/widgets/account/PickerGridPanel.js:213
++msgid "Anyone"
  msgstr ""
  
- #: js/widgets/container/GrantsGrid.js:49
- #: js/widgets/persistentfilter/EditPersistentFilterPanel.js:274
- msgid "Delete"
 -#: js/LoginPanel.js:387
 -msgid "Your browser is not supported by Tine 2.0."
++#: js/widgets/account/PickerGridPanel.js:229
++msgid "Search for users ..."
  msgstr ""
  
- #: js/widgets/container/GrantsGrid.js:50
- msgid "The grant to delete records in this container"
 -#: js/LoginPanel.js:392
 -msgid "Browser incompatible?"
++#: js/widgets/account/PickerGridPanel.js:251
++msgid "Search for groups ..."
  msgstr ""
  
- #: js/widgets/container/GrantsGrid.js:51 js/widgets/dialog/ExportDialog.js:48
- #: js/Models.js:338
- msgid "Export"
- msgid_plural "Export"
- msgstr[0] ""
- msgstr[1] ""
 -#: js/LoginPanel.js:394
 -msgid ""
 -"You are using an unrecognized browser. This could result in unexpected "
 -"behaviour."
++#: js/widgets/account/PickerGridPanel.js:267
++#: js/widgets/dialog/AttachmentsGridPanel.js:86
++#: js/widgets/container/PropertiesDialog.js:107
++#: js/widgets/grid/LinkGridPanel.js:103 js/Models.js:430
++msgid "Name"
+ msgstr ""
  
- #: js/widgets/container/GrantsGrid.js:52
- msgid "The grant to export records from this container"
 -#: js/LoginPanel.js:400
 -msgid "You might try one of these browsers:"
++#: js/widgets/dialog/AdminPanel.js:59
++#, python-brace-format
++msgid "Change settings for application {0}"
  msgstr ""
  
- #: js/widgets/container/GrantsGrid.js:53
- msgid "Sync"
 -#: js/LoginPanel.js:460
 -msgid "Logging you in..."
++#: js/widgets/dialog/AdminPanel.js:107
++msgid "Defaults"
  msgstr ""
  
- #: js/widgets/container/GrantsGrid.js:54
- msgid "The grant to synchronise records with this container"
 -#: js/LoginPanel.js:460 js/widgets/dialog/MultipleEditDialogPlugin.js:693
 -#: js/widgets/container/GrantsDialog.js:95
 -#: js/widgets/persistentfilter/PickerPanel.js:327
 -#: js/widgets/persistentfilter/PickerPanel.js:365
 -#: js/widgets/persistentfilter/PickerPanel.js:417
 -#: js/widgets/tree/ContextMenu.js:191
 -msgid "Please wait"
++#: js/widgets/dialog/AlarmPanel.js:34
++msgid "Alarms"
  msgstr ""
  
- #: js/widgets/container/GrantsGrid.js:55
- msgid "Admin"
 -#: js/LoginPanel.js:474
 -#, python-brace-format
 -msgid "Login successful. Loading {0}..."
++#: js/widgets/dialog/AlarmPanel.js:37
++msgid "0 minutes before"
  msgstr ""
  
- #: js/widgets/container/GrantsGrid.js:56
- msgid "The grant to administrate this container"
 -#: js/LoginPanel.js:486
 -msgid "There was an error verifying your certificate!!!"
++#: js/widgets/dialog/AlarmPanel.js:38
++msgid "5 minutes before"
  msgstr ""
  
- #: js/widgets/container/GrantsGrid.js:58
- msgid "Free Busy"
 -#: js/LoginPanel.js:487
 -msgid "Your username and/or your password are wrong!!!"
++#: js/widgets/dialog/AlarmPanel.js:39
++msgid "15 minutes before"
  msgstr ""
  
- #: js/widgets/container/GrantsGrid.js:59
- msgid "The grant to access free busy information of events in this calendar"
 -#: js/LoginPanel.js:489
 -msgid "Login failure"
++#: js/widgets/dialog/AlarmPanel.js:40
++msgid "30 minutes before"
  msgstr ""
  
- #: js/widgets/container/GrantsGrid.js:60
- msgid "Private"
 -#: js/LoginPanel.js:508 js/widgets/dialog/ExportDialog.js:150
 -#: js/widgets/dialog/EditDialog.js:798
 -#: js/widgets/dialog/CredentialsDialog.js:126
 -#: js/widgets/dialog/PreferencesDialog.js:248
 -#: js/widgets/dialog/PreferencesDialog.js:277
 -#: js/widgets/dialog/MultipleEditDialogPlugin.js:655
 -msgid "Errors"
++#: js/widgets/dialog/AlarmPanel.js:41
++msgid "1 hour before"
  msgstr ""
  
- #: js/widgets/container/GrantsGrid.js:61
- msgid "The grant to access records marked as private in this container"
 -#: js/LoginPanel.js:508 js/widgets/dialog/ExportDialog.js:150
 -#: js/widgets/dialog/EditDialog.js:820
 -#: js/widgets/dialog/CredentialsDialog.js:126
 -#: js/widgets/dialog/MultipleEditDialogPlugin.js:655
 -msgid "Please fix the errors noted."
++#: js/widgets/dialog/AlarmPanel.js:42
++msgid "2 hours before"
  msgstr ""
  
- #: js/widgets/container/FilterModel.js:160
- msgid "is personal of"
 -#: js/LoginPanel.js:523
 -msgid "Please enter your login data"
++#: js/widgets/dialog/AlarmPanel.js:43
++msgid "12 hours before"
  msgstr ""
  
- #: js/widgets/container/FilterModel.js:160
- #: js/widgets/container/FilterModel.js:164 js/widgets/grid/FilterModel.js:226
- msgid "is equal to"
 -#: js/Models.js:141 js/widgets/tags/TagFilter.js:30
 -msgid "Tag"
 -msgid_plural "Tags"
 -msgstr[0] ""
 -msgstr[1] ""
++#: js/widgets/dialog/AlarmPanel.js:44
++msgid "1 day before"
 +msgstr ""
  
- #: js/widgets/container/FilterModel.js:267
- #: js/widgets/grid/PickerGridPanel.js:260
- #: js/widgets/grid/FilterModelMultiSelect.js:214
- #: js/widgets/grid/PickerFilter.js:310
- #, python-brace-format
- msgid "Selected  {0}"
 -#: js/Models.js:272
 -msgid "Alarm"
 -msgid_plural "Alarms"
 -msgstr[0] ""
 -msgstr[1] ""
++#: js/widgets/dialog/AlarmPanel.js:45
++msgid "2 days before"
 +msgstr ""
  
- #: js/widgets/mainscreen/WestPanel.js:302
- msgid "containers"
 -#: js/Models.js:310
 -msgid "Import"
 -msgid_plural "Imports"
 -msgstr[0] ""
 -msgstr[1] ""
++#: js/widgets/dialog/AlarmPanel.js:46
++msgid "Custom Datetime"
 +msgstr ""
  
- #: js/widgets/mainscreen/WestPanel.js:329
- msgid "Favorites"
 -#: js/Models.js:336 js/widgets/dialog/ExportDialog.js:48
 -#: js/widgets/container/GrantsGrid.js:51
 -msgid "Export"
 -msgid_plural "Export"
 -msgstr[0] ""
 -msgstr[1] ""
++#: js/widgets/dialog/AlarmPanel.js:58
++msgid "Alarm Time"
 +msgstr ""
  
- #: js/widgets/ActivitiesPanel.js:153
- msgid "Add a Note..."
 -#: js/Models.js:373
 -msgid "Credentials"
 -msgid_plural "Credentials"
 -msgstr[0] ""
 -msgstr[1] ""
++#: js/widgets/dialog/AlarmPanel.js:170
++#, python-brace-format
++msgid "{0} minutes before"
 +msgstr ""
  
- #: js/widgets/ActivitiesPanel.js:168 js/widgets/ActivitiesPanel.js:491
- msgid "Note"
 -#: js/Models.js:400 js/widgets/relation/FilterModel.js:32
 -#: js/widgets/relation/GenericPickerGridPanel.js:133
 -msgid "Relation"
 -msgid_plural "Relations"
 -msgstr[0] ""
 -msgstr[1] ""
++#: js/widgets/dialog/SimpleImportDialog.js:129
++#: js/widgets/dialog/ImportDialog.js:227
++msgid "Choose File and Format"
 +msgstr ""
  
- #: js/widgets/ActivitiesPanel.js:182 js/widgets/ActivitiesPanel.js:413
- msgid "Add new note"
 -#: js/Models.js:421
 -msgid "Department"
 -msgid_plural "Departments"
 -msgstr[0] ""
 -msgstr[1] ""
++#: js/widgets/dialog/SimpleImportDialog.js:138
++#: js/widgets/dialog/ImportDialog.js:236
++msgid "Choose Import File"
 +msgstr ""
  
- #: js/widgets/ActivitiesPanel.js:209 js/widgets/ActivitiesPanel.js:228
- msgid "Notes"
 -#: js/Models.js:428 js/widgets/account/PickerGridPanel.js:267
 -#: js/widgets/dialog/AttachmentsGridPanel.js:86
 -#: js/widgets/container/PropertiesDialog.js:107
 -#: js/widgets/grid/LinkGridPanel.js:103
 -msgid "Name"
++#: js/widgets/dialog/SimpleImportDialog.js:142
++#: js/widgets/dialog/ImportDialog.js:240
++msgid ""
++"Please choose the file that contains the records you want to add to Tine 2.0"
  msgstr ""
  
- #: js/widgets/ActivitiesPanel.js:311
- msgid "Enter new note:"
 -#: js/Models.js:447
 -msgid "Config"
 -msgid_plural "Configs"
 -msgstr[0] ""
 -msgstr[1] ""
++#: js/widgets/dialog/SimpleImportDialog.js:146
++#: js/widgets/dialog/ImportDialog.js:244
++#, python-brace-format
++msgid "Select file containing your {0}"
 +msgstr ""
  
- #: js/widgets/ActivitiesPanel.js:356 js/widgets/ActivitiesPanel.js:412
- msgid "Add Note"
 -#: js/Models.js:447
 -msgid "Configs"
++#: js/widgets/dialog/SimpleImportDialog.js:154
++#: js/widgets/dialog/ImportDialog.js:340
++msgid "Set Import Options"
  msgstr ""
  
- #: js/widgets/ActivitiesPanel.js:399
 -#: js/Models.js:475 js/widgets/grid/FileUploadGrid.js:68
 -msgid "File"
 -msgid_plural "Files"
 -msgstr[0] ""
 -msgstr[1] ""
++#: js/widgets/dialog/SimpleImportDialog.js:158
++#: js/widgets/dialog/ImportDialog.js:348
 +#, python-brace-format
- msgid "Add a {0} Note"
++msgid "Select {0} to add you {1} to:"
 +msgstr ""
  
- #: js/widgets/ActivitiesPanel.js:489 js/widgets/ActivitiesPanel.js:626
- #: js/widgets/relation/GenericPickerGridPanel.js:460
- #: js/widgets/grid/LinkGridPanel.js:105
- msgid "Type"
 -#: js/prototypeTranslations.js:20 js/prototypeTranslations.js:21
 -msgid "Outdent Text"
++#: js/widgets/dialog/SimpleImportDialog.js:174
++#: js/widgets/dialog/ImportDialog.js:252 js/widgets/dialog/ImportDialog.js:257
++msgid "What should the file you upload look like?"
  msgstr ""
  
- #: js/widgets/ActivitiesPanel.js:492 js/widgets/grid/GridPanel.js:1420
- #: js/widgets/dialog/AttachmentsGridPanel.js:106
- msgid "Created By"
 -#: js/prototypeTranslations.js:22 js/prototypeTranslations.js:23
 -msgid "Indent Text"
++#: js/widgets/dialog/SimpleImportDialog.js:179
++#: js/widgets/dialog/ImportDialog.js:260
++msgid ""
++"Tine 2.0 does not understand all kind of files you might want to upload. You "
++"will have to manually adjust your file so Tine 2.0 can handle it."
  msgstr ""
  
- #: js/widgets/ActivitiesPanel.js:493
- msgid "Timestamp"
 -#: js/prototypeTranslations.js:24 js/prototypeTranslations.js:25
 -msgid "Remove Formatting"
++#: js/widgets/dialog/SimpleImportDialog.js:182
++#: js/widgets/dialog/ImportDialog.js:263
++msgid ""
++"Following you find a list of all supported import formats and a sample file, "
++"how Tine 2.0 expects your file to look like."
  msgstr ""
  
- #: js/widgets/ActivitiesPanel.js:507
 -#: js/PasswordChangeDialog.js:32
 -#, python-brace-format
 -msgid "Change Password For \"{0}\""
++#: js/widgets/dialog/SimpleImportDialog.js:185
++#: js/widgets/dialog/ImportDialog.js:266
++msgid "Please select the import format of the file you want to upload"
+ msgstr ""
 -#: js/PasswordChangeDialog.js:48
 -msgid "Old Password"
++#: js/widgets/dialog/SimpleImportDialog.js:206
++#: js/widgets/dialog/ImportDialog.js:287 js/widgets/dialog/ImportDialog.js:319
++msgid "Download example file"
+ msgstr ""
 -#: js/PasswordChangeDialog.js:52
 -msgid "New Password"
++#: js/widgets/dialog/SimpleImportDialog.js:222
++#: js/widgets/dialog/ImportDialog.js:673
 +#, python-brace-format
- msgid "Displaying history records {0} - {1} of {2}"
++msgid "Importing {0}"
  msgstr ""
  
- #: js/widgets/ActivitiesPanel.js:508
- msgid "No history to display"
 -#: js/PasswordChangeDialog.js:56
 -msgid "Repeat new Password"
++#: js/widgets/dialog/CredentialsDialog.js:84
++msgid "Please enter your credentials"
  msgstr ""
  
- #: js/widgets/ActivitiesPanel.js:608
- msgid "History"
 -#: js/PasswordChangeDialog.js:75
 -msgid "Please Wait!"
++#: js/widgets/dialog/ExceptionHandlerDialog.js:220
++#, python-brace-format
++msgid "{1} - Exception {0}"
  msgstr ""
  
- #: js/widgets/ActivitiesPanel.js:620
- msgid "Quick Search"
 -#: js/PasswordChangeDialog.js:76
 -msgid "changing password..."
++#: js/widgets/dialog/ExceptionHandlerDialog.js:222
++#, python-brace-format
++msgid "{0} - Unknown Exception"
  msgstr ""
  
- #: js/widgets/ActivitiesPanel.js:621 js/widgets/ActivitiesPanel.js:622
- msgid "Time"
 -#: js/PasswordChangeDialog.js:87
 -msgid "Success"
++#: js/widgets/dialog/PreferencesDialog.js:125
++msgid "Admin Mode"
  msgstr ""
  
- #: js/widgets/ActivitiesPanel.js:624
- msgid "User"
 -#: js/PasswordChangeDialog.js:88
 -msgid "Your password has been changed."
++#: js/widgets/dialog/PreferencesDialog.js:163
++msgid "Applications"
  msgstr ""
  
- #: js/widgets/tags/TagToggleBox.js:52
- msgid "Detach Tags"
 -#: js/PasswordChangeDialog.js:100 js/PasswordChangeDialog.js:110
 -#: js/widgets/relation/GenericPickerGridPanel.js:916
 -#: js/widgets/relation/GenericPickerGridPanel.js:929
 -#: js/widgets/dialog/ImportDialog.js:654
 -#: js/widgets/dialog/MultipleEditResultSummary.js:196
 -#: js/widgets/form/RecordPickerComboBox.js:294
 -msgid "Failure"
++#: js/widgets/dialog/PreferencesDialog.js:192
++msgid "Edit Preferences"
  msgstr ""
  
- #: js/widgets/tags/TagToggleBox.js:52
- msgid "Attach Tags"
 -#: js/PasswordChangeDialog.js:111
 -msgid "The new passwords mismatch, please correct them."
++#: js/widgets/dialog/PreferencesDialog.js:193
++msgid "Loading ..."
  msgstr ""
  
- #: js/widgets/tags/TagToggleBox.js:140
- msgid "No Tags to detach found in the selected records"
 -#: js/ExceptionDialog.js:62 Frontend/Http.php:422
 -msgid "Abnormal End"
++#: js/widgets/dialog/PreferencesDialog.js:248
++#: js/widgets/form/ConfigPanel.js:134
++msgid "You need to correct the red marked fields before config could be saved"
  msgstr ""
  
- #: js/widgets/tags/TagToggleBox.js:141
- msgid "Please Wait..."
 -#: js/ExceptionDialog.js:103 js/ExceptionDialog.js:126
 -msgid "Send Report"
++#: js/widgets/dialog/PreferencesDialog.js:277
++msgid "Saving of preferences failed."
  msgstr ""
  
- #: js/widgets/tags/TagToggleBox.js:152
- msgid "Detaching Tags"
 -#: js/ExceptionDialog.js:154 Frontend/Http.php:423
 -msgid "An error occurred, the program ended abnormal."
++#: js/widgets/dialog/ImportDialog.js:290
++msgid "Import description"
  msgstr ""
  
- #: js/widgets/tags/TagsMassDetachAction.js:18
- msgid "Detach tag(s)"
 -#: js/ExceptionDialog.js:155
 -msgid "The last action you made was potentially not performed correctly."
++#: js/widgets/dialog/ImportDialog.js:400
++msgid "Checking Import"
  msgstr ""
  
- #: js/widgets/tags/TagsMassDetachAction.js:84
- msgid "Select Tag(s) to detach"
 -#: js/ExceptionDialog.js:156
 -msgid ""
 -"Please help improving this software and notify the vendor. Include a brief "
 -"description of what you where doing when the error occurred."
++#: js/widgets/dialog/ImportDialog.js:429
++msgid "Resolve Conflicts"
  msgstr ""
  
- #: js/widgets/tags/TagFilter.js:30 js/Models.js:143
- msgid "Tag"
- msgid_plural "Tags"
- msgstr[0] ""
- msgstr[1] ""
 -#: js/ExceptionDialog.js:162 js/widgets/relation/GenericPickerGridPanel.js:457
 -#: js/widgets/tags/TagsPanel.js:509
 -#: js/widgets/persistentfilter/EditPersistentFilterPanel.js:191
 -msgid "Description"
++#: js/widgets/dialog/ImportDialog.js:438
++#, python-brace-format
++msgid "There are {0} {1} that might already exist."
+ msgstr ""
  
- #: js/widgets/tags/TagsMassAttachAction.js:18
- msgid "Add Tag"
 -#: js/ExceptionDialog.js:170
 -msgid "Send Contact Information"
++#: js/widgets/dialog/ImportDialog.js:445
++msgid "Conflict"
  msgstr ""
  
- #: js/widgets/tags/TagsMassAttachAction.js:76
- msgid "Attach the following tag to all selected items:"
 -#: js/ExceptionDialog.js:187
 -msgid "Details:"
++#: js/widgets/dialog/ImportDialog.js:446
++msgid "First Conflict"
  msgstr ""
  
- #: js/widgets/tags/TagsMassAttachAction.js:98
- msgid "Select Tag"
 -#: js/ExceptionDialog.js:211
 -msgid "Sending report..."
++#: js/widgets/dialog/ImportDialog.js:447
++msgid "Previous Conflict"
  msgstr ""
  
- #: js/widgets/tags/TagsMassAttachAction.js:128
- msgid "Attaching Tag"
 -#: js/ExceptionDialog.js:211
 -msgid "Please wait a moment"
++#: js/widgets/dialog/ImportDialog.js:448
++msgid "Next Conflict"
  msgstr ""
  
- #: js/widgets/tags/TagCombo.js:46
- msgid "tag name"
 -#: js/ExceptionDialog.js:260
 -msgid "Transmission Completed"
++#: js/widgets/dialog/ImportDialog.js:449
++msgid "Last Conflict"
  msgstr ""
  
- #: js/widgets/tags/TagsPanel.js:114
- msgid "Add a new personal tag"
 -#: js/ExceptionDialog.js:261
 -msgid "Your report has been sent. Thanks for your contribution"
++#: js/widgets/dialog/ImportDialog.js:455
++msgid "Conflict is resolved"
  msgstr ""
  
- #: js/widgets/tags/TagsPanel.js:117
- msgid "Add New Personal Tag"
 -#: js/ExceptionDialog.js:261
 -msgid "Please restart your browser now!"
++#: js/widgets/dialog/ImportDialog.js:460
++msgid "Resolve all conflicts"
  msgstr ""
  
- #: js/widgets/tags/TagsPanel.js:118
- msgid "Please note: You create a personal tag. Only you can see it!"
 -#: js/LicenseScreen.js:35
 -msgid "License"
++#: js/widgets/dialog/ImportDialog.js:554
++msgid "Processing Conflict Data"
  msgstr ""
  
- #: js/widgets/tags/TagsPanel.js:118
- msgid "Enter tag name:"
 -#: js/widgets/relation/FilterModel.js:76
 -msgid "Defined by ..."
++#: js/widgets/dialog/ImportDialog.js:579 js/widgets/dialog/ImportDialog.js:599
++msgid "No conflict to resolve"
  msgstr ""
  
- #: js/widgets/tags/TagsPanel.js:159
- msgid "No Tags to display"
 -#: js/widgets/relation/FilterModel.js:92
 -#: js/widgets/grid/ForeignRecordFilter.js:406
 -#: js/widgets/grid/FilterModel.js:285
 -msgid "select a operator"
++#: js/widgets/dialog/ImportDialog.js:598
++#, python-brace-format
++msgid "(This is record {0} in your import file)"
  msgstr ""
  
- #: js/widgets/tags/TagsPanel.js:182
- msgid "Detach tag"
- msgid_plural "Detach tags"
- msgstr[0] ""
- msgstr[1] ""
 -#: js/widgets/relation/FilterModel.js:119
 -msgid "Define ..."
++#: js/widgets/dialog/ImportDialog.js:623
++msgid "No Detail Informations"
+ msgstr ""
  
- #: js/widgets/tags/TagsPanel.js:192
- msgid "Edit tag"
 -#: js/widgets/relation/GenericPickerGridPanel.js:126
 -msgid "Edit record"
++#: js/widgets/dialog/ImportDialog.js:628
++#: js/widgets/dialog/MultipleEditResultSummary.js:213
++msgid "Summary"
  msgstr ""
  
- #: js/widgets/tags/TagsPanel.js:197 js/widgets/tags/TagsPanel.js:202
- msgid "Rename Tag"
 -#: js/widgets/relation/GenericPickerGridPanel.js:162
 -msgid "Sibling"
++#: js/widgets/dialog/ImportDialog.js:657
++#: js/widgets/dialog/MultipleEditResultSummary.js:192
++msgid "Index"
  msgstr ""
  
- #: js/widgets/tags/TagsPanel.js:202
- msgid "Please enter a new name:"
 -#: js/widgets/relation/GenericPickerGridPanel.js:163
 -msgid "Parent"
++#: js/widgets/dialog/ImportDialog.js:658
++#: js/widgets/dialog/MultipleEditResultSummary.js:196
++#: js/widgets/form/RecordPickerComboBox.js:294
++#: js/widgets/relation/GenericPickerGridPanel.js:916
++#: js/widgets/relation/GenericPickerGridPanel.js:929
++#: js/PasswordChangeDialog.js:100 js/PasswordChangeDialog.js:110
++msgid "Failure"
  msgstr ""
  
- #: js/widgets/tags/TagsPanel.js:211
- msgid "Edit Description"
 -#: js/widgets/relation/GenericPickerGridPanel.js:164
 -msgid "Child"
++#: js/widgets/dialog/ImportDialog.js:704
++#, python-brace-format
++msgid "{0} records had failures and where discarded."
  msgstr ""
  
- #: js/widgets/tags/TagsPanel.js:216
- msgid "Description for tag"
 -#: js/widgets/relation/GenericPickerGridPanel.js:265
++#: js/widgets/dialog/ImportDialog.js:746
+ #, python-brace-format
 -msgid ""
 -"The maximum number of {0} with the type \"{1}\" is reached. Please change "
 -"the type of this relation"
++msgid "In total we found {0} records in your import file."
  msgstr ""
  
- #: js/widgets/tags/TagsPanel.js:216
- msgid "Please enter new description:"
 -#: js/widgets/relation/GenericPickerGridPanel.js:270
++#: js/widgets/dialog/ImportDialog.js:749
+ #, python-brace-format
 -msgid ""
 -"The maximum number of {0}s with the type \"{1}\" is reached at the {2} you "
 -"added. Please change the type of this relation or edit the {2}"
++msgid "{0} of them will be added as new records into: \"{1}\"."
  msgstr ""
  
- #: js/widgets/tags/TagsPanel.js:225
- msgid "Change Color"
 -#: js/widgets/relation/GenericPickerGridPanel.js:299
 -msgid "No Dialog"
++#: js/widgets/dialog/ImportDialog.js:756
++#, python-brace-format
++msgid "{0} of them where identified as duplicates."
  msgstr ""
  
- #: js/widgets/tags/TagsPanel.js:254
- msgid "Delete Tag"
- msgid_plural "Delete Tags"
- msgstr[0] ""
- msgstr[1] ""
 -#: js/widgets/relation/GenericPickerGridPanel.js:300
++#: js/widgets/dialog/ImportDialog.js:759
++#, python-brace-format
+ msgid ""
 -"The Record can't be opened. There doesn't exist any dialog for editing this "
 -"Record!"
 -msgstr ""
 -
 -#: js/widgets/relation/GenericPickerGridPanel.js:456
 -msgid "Record"
++"From the identified duplicates {0} will be merged into the existing records."
+ msgstr ""
  
- #: js/widgets/tags/TagsPanel.js:267
- msgid "Realy Delete Selected Tag?"
- msgid_plural "Realy Delete Selected Tags?"
- msgstr[0] ""
- msgstr[1] ""
 -#: js/widgets/relation/GenericPickerGridPanel.js:458
 -msgid "Remark"
++#: js/widgets/dialog/ImportDialog.js:763
++#, python-brace-format
++msgid "From the identified duplicates {0} will be discarded."
+ msgstr ""
  
- #: js/widgets/tags/TagsPanel.js:268
- msgid "the selected tag will be deleted and disapear for all entries"
- msgid_plural "The selected tags will be removed and disapear for all entries"
- msgstr[0] ""
- msgstr[1] ""
 -#: js/widgets/relation/GenericPickerGridPanel.js:459
 -msgid "Dependency"
++#: js/widgets/dialog/ImportDialog.js:779
++#, python-brace-format
++msgid "All records will be tagged with: \"{0}\" so you can find them easily."
+ msgstr ""
  
- #: js/widgets/tags/TagsPanel.js:272
- msgid "Please wait a moment..."
 -#: js/widgets/relation/GenericPickerGridPanel.js:460
 -#: js/widgets/grid/LinkGridPanel.js:105 js/widgets/ActivitiesPanel.js:489
 -#: js/widgets/ActivitiesPanel.js:626
 -msgid "Type"
++#: js/widgets/dialog/ImportDialog.js:790
++#, python-brace-format
++msgid "{0} records have failures and will be discarded."
  msgstr ""
  
- #: js/widgets/tags/TagsPanel.js:272
- msgid "Deleting Tag"
- msgid_plural "Deleting Tags"
- msgstr[0] ""
- msgstr[1] ""
 -#: js/widgets/relation/GenericPickerGridPanel.js:461
 -#: js/widgets/dialog/AttachmentsGridPanel.js:104
 -#: js/widgets/grid/GridPanel.js:1396
 -msgid "Creation Time"
++#: js/widgets/dialog/LinkPanel.js:46
++msgid "Links"
+ msgstr ""
  
- #: js/widgets/tags/TagsPanel.js:288 js/widgets/tags/TagsPanel.js:380
- #: js/widgets/tags/TagsPanel.js:413 js/widgets/dialog/EditDialog.js:863
- msgid "Failed"
 -#: js/widgets/relation/GenericPickerGridPanel.js:917
 -msgid ""
 -"The record you tried to link is already linked. Please edit the existing "
 -"link."
++#: js/widgets/dialog/MultipleEditDialogPlugin.js:341
++#: js/widgets/dialog/MultipleEditDialogPlugin.js:475
++msgid "Delete value from all selected records"
+ msgstr ""
 -#: js/widgets/relation/GenericPickerGridPanel.js:930
 -#: js/widgets/form/RecordPickerComboBox.js:295
 -msgid "You tried to link a record with itself. This is not allowed!"
++#: js/widgets/dialog/MultipleEditDialogPlugin.js:458
++msgid "Undo change for all selected records"
+ msgstr ""
 -#: js/widgets/relation/PickerCombo.js:93
++#: js/widgets/dialog/MultipleEditDialogPlugin.js:533
+ #, python-brace-format
 -msgid ""
 -"The {1} \"{2}\" is already used in the Field \"{0}\" and can be linked only "
 -"once!"
++msgid "Edit {0} {1}"
+ msgstr ""
 -#: js/widgets/mainscreen/WestPanel.js:302
 -msgid "containers"
++#: js/widgets/dialog/MultipleEditDialogPlugin.js:592
++msgid "Different Values"
+ msgstr ""
 -#: js/widgets/mainscreen/WestPanel.js:329
 -msgid "Favorites"
++#: js/widgets/dialog/MultipleEditDialogPlugin.js:593
++msgid ""
++"This field has different values. Editing this field will overwrite the old "
++"values."
+ msgstr ""
 -#: js/widgets/tags/TagCombo.js:46
 -msgid "tag name"
++#: js/widgets/dialog/MultipleEditDialogPlugin.js:690
++#: js/widgets/dialog/EditDialog.js:851 js/widgets/tree/ContextMenu.js:357
++#: js/widgets/persistentfilter/PickerPanel.js:326
++#: js/widgets/grid/GridPanel.js:1810 js/MainMenu.js:263
++msgid "Confirm"
  msgstr ""
  
- #: js/widgets/tags/TagsPanel.js:288
- msgid "Could not delete Tag(s)."
 -#: js/widgets/tags/TagToggleBox.js:52
 -msgid "Detach Tags"
++#: js/widgets/dialog/MultipleEditDialogPlugin.js:690
++#, python-brace-format
++msgid "Do you really want to change these {0} records?"
  msgstr ""
  
- #: js/widgets/tags/TagsPanel.js:332 js/widgets/tags/TagsPanel.js:394
- msgid "Notice"
 -#: js/widgets/tags/TagToggleBox.js:52
 -msgid "Attach Tags"
++#: js/widgets/dialog/MultipleEditDialogPlugin.js:693
++msgid "Applying changes"
  msgstr ""
  
- #: js/widgets/tags/TagsPanel.js:333 js/widgets/tags/TagsPanel.js:395
- msgid "The minimum tag length is three."
 -#: js/widgets/tags/TagToggleBox.js:140
 -msgid "No Tags to detach found in the selected records"
++#: js/widgets/dialog/WizardPanel.js:173
++msgid "Back"
  msgstr ""
  
- #: js/widgets/tags/TagsPanel.js:380
- msgid "Could not create tag."
 -#: js/widgets/tags/TagToggleBox.js:141
 -msgid "Please Wait..."
++#: js/widgets/dialog/WizardPanel.js:180
++msgid "Next"
  msgstr ""
  
- #: js/widgets/tags/TagsPanel.js:413
- msgid "Could not update tag."
 -#: js/widgets/tags/TagToggleBox.js:152
 -msgid "Detaching Tags"
++#: js/widgets/dialog/WizardPanel.js:194
++msgid "Finish"
  msgstr ""
  
- #: js/widgets/MainScreen.js:264
- msgid "Save current view as favorite"
 -#: js/widgets/tags/TagsPanel.js:57 js/widgets/tags/TagsPanel.js:426
 -#: Export/Pdf.php:216
 -msgid "Tags"
++#: js/widgets/dialog/PreferencesPanel.js:36 js/MainMenu.js:157
++msgid "Preferences"
  msgstr ""
  
- #: js/widgets/VersionCheck.js:50 js/widgets/VersionCheck.js:59
- msgid "New version of Tine 2.0 available"
 -#: js/widgets/tags/TagsPanel.js:114
 -msgid "Add a new personal tag"
++#: js/widgets/dialog/PreferencesPanel.js:185
++msgid "There are no preferences for this application."
  msgstr ""
  
- #: js/widgets/VersionCheck.js:51 js/widgets/VersionCheck.js:60
- #, python-brace-format
- msgid "Version \"{0}\" of Tine 2.0 is available."
 -#: js/widgets/tags/TagsPanel.js:117
 -msgid "Add New Personal Tag"
++#: js/widgets/dialog/DuplicateMergeDialog.js:87
++#: js/widgets/dialog/MultipleEditResultSummary.js:86
++#: js/widgets/persistentfilter/EditPersistentFilterPanel.js:69
++msgid "OK"
  msgstr ""
  
- #: js/widgets/VersionCheck.js:52
- msgid "It's a critical update and must be installed as soon as possible!"
 -#: js/widgets/tags/TagsPanel.js:118
 -msgid "Please note: You create a personal tag. Only you can see it!"
++#: js/widgets/dialog/DuplicateMergeDialog.js:134
++msgid "Merging Records..."
  msgstr ""
  
- #: js/widgets/VersionCheck.js:61
- msgid "Please consider updating!"
 -#: js/widgets/tags/TagsPanel.js:118
 -msgid "Enter tag name:"
++#: js/widgets/dialog/DuplicateMergeDialog.js:173
++msgid "Merge Failed"
  msgstr ""
  
- #: js/widgets/relation/PickerCombo.js:93
 -#: js/widgets/tags/TagsPanel.js:159
 -msgid "No Tags to display"
++#: js/widgets/dialog/DuplicateMergeDialog.js:173
 +#, python-brace-format
- msgid ""
- "The {1} \"{2}\" is already used in the Field \"{0}\" and can be linked only "
- "once!"
++msgid "The merge succeeded, but the duplicate {0} could not be deleted."
  msgstr ""
  
- #: js/widgets/relation/GenericPickerGridPanel.js:126
- msgid "Edit record"
 -#: js/widgets/tags/TagsPanel.js:182
 -msgid "Detach tag"
 -msgid_plural "Detach tags"
 -msgstr[0] ""
 -msgstr[1] ""
 -
 -#: js/widgets/tags/TagsPanel.js:192
 -msgid "Edit tag"
++#: js/widgets/dialog/DuplicateMergeDialog.js:212
++#, python-brace-format
++msgid "Merge {0}, prefer First"
  msgstr ""
  
- #: js/widgets/relation/GenericPickerGridPanel.js:133
- #: js/widgets/relation/FilterModel.js:32 js/Models.js:402
- msgid "Relation"
- msgid_plural "Relations"
- msgstr[0] ""
- msgstr[1] ""
- #: js/widgets/relation/GenericPickerGridPanel.js:162
- msgid "Sibling"
 -#: js/widgets/tags/TagsPanel.js:197 js/widgets/tags/TagsPanel.js:202
 -msgid "Rename Tag"
++#: js/widgets/dialog/DuplicateMergeDialog.js:213
++#, python-brace-format
++msgid "Merge {0}, prefer Second"
  msgstr ""
  
- #: js/widgets/relation/GenericPickerGridPanel.js:163
- msgid "Parent"
 -#: js/widgets/tags/TagsPanel.js:202
 -msgid "Please enter a new name:"
++#: js/widgets/dialog/DuplicateMergeDialog.js:220
++#: js/widgets/grid/GridPanel.js:616
++#, python-brace-format
++msgid "Merge {0}"
  msgstr ""
  
- #: js/widgets/relation/GenericPickerGridPanel.js:164
- msgid "Child"
 -#: js/widgets/tags/TagsPanel.js:211
 -msgid "Edit Description"
++#: js/widgets/dialog/DuplicateMergeDialog.js:223
++#, python-brace-format
++msgid "First {0}"
  msgstr ""
  
- #: js/widgets/relation/GenericPickerGridPanel.js:265
 -#: js/widgets/tags/TagsPanel.js:216
 -msgid "Description for tag"
++#: js/widgets/dialog/DuplicateMergeDialog.js:224
 +#, python-brace-format
- msgid ""
- "The maximum number of {0} with the type \"{1}\" is reached. Please change "
- "the type of this relation"
++msgid "Second {0}"
  msgstr ""
  
- #: js/widgets/relation/GenericPickerGridPanel.js:270
 -#: js/widgets/tags/TagsPanel.js:216
 -msgid "Please enter new description:"
++#: js/widgets/dialog/DuplicateMergeDialog.js:225
 +#, python-brace-format
- msgid ""
- "The maximum number of {0}s with the type \"{1}\" is reached at the {2} you "
- "added. Please change the type of this relation or edit the {2}"
++msgid "Final {0}"
  msgstr ""
  
- #: js/widgets/relation/GenericPickerGridPanel.js:299
- msgid "No Dialog"
 -#: js/widgets/tags/TagsPanel.js:225
 -msgid "Change Color"
++#: js/widgets/dialog/DuplicateResolveGridPanel.js:41
++msgid "The record you try to add might already exist."
  msgstr ""
  
- #: js/widgets/relation/GenericPickerGridPanel.js:300
- msgid ""
- "The Record can't be opened. There doesn't exist any dialog for editing this "
- "Record!"
 -#: js/widgets/tags/TagsPanel.js:254
 -msgid "Delete Tag"
 -msgid_plural "Delete Tags"
 -msgstr[0] ""
 -msgstr[1] ""
 -
 -#: js/widgets/tags/TagsPanel.js:267
 -msgid "Realy Delete Selected Tag?"
 -msgid_plural "Realy Delete Selected Tags?"
 -msgstr[0] ""
 -msgstr[1] ""
 -
 -#: js/widgets/tags/TagsPanel.js:268
 -msgid "the selected tag will be deleted and disapear for all entries"
 -msgid_plural "The selected tags will be removed and disapear for all entries"
 -msgstr[0] ""
 -msgstr[1] ""
 -
 -#: js/widgets/tags/TagsPanel.js:272
 -msgid "Please wait a moment..."
++#: js/widgets/dialog/DuplicateResolveGridPanel.js:196
++msgid "Field Group"
  msgstr ""
  
- #: js/widgets/relation/GenericPickerGridPanel.js:456
- #: js/widgets/grid/GridPanel.js:1148
- msgid "Record"
 -#: js/widgets/tags/TagsPanel.js:272
 -msgid "Deleting Tag"
 -msgid_plural "Deleting Tags"
 -msgstr[0] ""
 -msgstr[1] ""
++#: js/widgets/dialog/DuplicateResolveGridPanel.js:210
++msgid "My Value"
 +msgstr ""
  
- #: js/widgets/relation/GenericPickerGridPanel.js:458
- msgid "Remark"
 -#: js/widgets/tags/TagsPanel.js:288 js/widgets/tags/TagsPanel.js:380
 -#: js/widgets/tags/TagsPanel.js:413 js/widgets/dialog/EditDialog.js:839
 -msgid "Failed"
++#: js/widgets/dialog/DuplicateResolveGridPanel.js:218
++msgid "Existing Value"
  msgstr ""
  
- #: js/widgets/relation/GenericPickerGridPanel.js:459
- msgid "Dependency"
 -#: js/widgets/tags/TagsPanel.js:288
 -msgid "Could not delete Tag(s)."
++#: js/widgets/dialog/DuplicateResolveGridPanel.js:226
++msgid "Final Value"
  msgstr ""
  
- #: js/widgets/relation/GenericPickerGridPanel.js:461
- #: js/widgets/grid/GridPanel.js:1419
- #: js/widgets/dialog/AttachmentsGridPanel.js:104
- msgid "Creation Time"
 -#: js/widgets/tags/TagsPanel.js:332 js/widgets/tags/TagsPanel.js:394
 -msgid "Notice"
++#: js/widgets/dialog/DuplicateResolveGridPanel.js:243
++msgid "Action:"
  msgstr ""
  
- #: js/widgets/relation/GenericPickerGridPanel.js:917
- msgid ""
- "The record you tried to link is already linked. Please edit the existing "
- "link."
 -#: js/widgets/tags/TagsPanel.js:333 js/widgets/tags/TagsPanel.js:395
 -msgid "The minimum tag length is three."
++#: js/widgets/dialog/DuplicateResolveGridPanel.js:259
++msgid "Merge, keeping existing details"
  msgstr ""
  
- #: js/widgets/relation/GenericPickerGridPanel.js:930
- #: js/widgets/form/RecordPickerComboBox.js:295
- msgid "You tried to link a record with itself. This is not allowed!"
 -#: js/widgets/tags/TagsPanel.js:380
 -msgid "Could not create tag."
++#: js/widgets/dialog/DuplicateResolveGridPanel.js:260
++msgid "Merge, keeping my details"
  msgstr ""
  
- #: js/widgets/relation/FilterModel.js:76
- msgid "Defined by ..."
 -#: js/widgets/tags/TagsPanel.js:413
 -msgid "Could not update tag."
++#: js/widgets/dialog/DuplicateResolveGridPanel.js:261
++msgid "Keep existing record and discard mine"
  msgstr ""
  
- #: js/widgets/relation/FilterModel.js:92
- #: js/widgets/grid/ForeignRecordFilter.js:406
- #: js/widgets/grid/FilterModel.js:285
- msgid "select a operator"
 -#: js/widgets/tags/TagsPanel.js:513
 -#: js/widgets/container/PropertiesDialog.js:113
 -msgid "Color"
++#: js/widgets/dialog/DuplicateResolveGridPanel.js:262
++msgid "Keep both records"
  msgstr ""
  
- #: js/widgets/relation/FilterModel.js:119
- msgid "Define ..."
- msgstr ""
 -#: js/widgets/tags/TagsMassDetachAction.js:18
 -msgid "Detach tag(s)"
++#: js/widgets/dialog/ExportDialog.js:48 js/widgets/container/GrantsGrid.js:51
++#: js/Models.js:338
++msgid "Export"
++msgid_plural "Export"
++msgstr[0] ""
++msgstr[1] ""
 +
- #: js/widgets/customfields/EditDialogPlugin.js:155
- msgid "General"
++#: js/widgets/dialog/ExportDialog.js:84
++#, python-brace-format
++msgid "Export {0} {1}"
  msgstr ""
  
- #: js/widgets/customfields/EditDialogPlugin.js:167
- msgid "Custom Fields"
 -#: js/widgets/tags/TagsMassDetachAction.js:84
 -msgid "Select Tag(s) to detach"
++#: js/widgets/dialog/ExportDialog.js:111
++msgid "Export definition"
  msgstr ""
  
- #: js/widgets/LangChooser.js:35 Preference.php:146
- msgid "Language"
 -#: js/widgets/tags/TagsMassAttachAction.js:18
 -msgid "Add Tag"
++#: js/widgets/dialog/ExportDialog.js:120
++msgid "Select Export Definition ..."
  msgstr ""
  
- #: js/widgets/LangChooser.js:68
- msgid "setting new language..."
 -#: js/widgets/tags/TagsMassAttachAction.js:76
 -msgid "Attach the following tag to all selected items:"
++#: js/widgets/dialog/EditDialog.js:427 js/widgets/EditRecord.js:188
++msgid "delete"
  msgstr ""
  
- #: js/widgets/CountryCombo.js:34
- msgid "Select a country..."
 -#: js/widgets/tags/TagsMassAttachAction.js:98
 -msgid "Select Tag"
++#: js/widgets/dialog/EditDialog.js:466 js/widgets/dialog/EditDialog.js:494
++#: js/widgets/EditRecord.js:131
++msgid "Saved in"
  msgstr ""
  
- #: js/widgets/persistentfilter/PickerPanel.js:121
- msgid "My favorites"
 -#: js/widgets/tags/TagsMassAttachAction.js:128
 -msgid "Attaching Tag"
++#: js/widgets/dialog/EditDialog.js:623 js/widgets/grid/GridPanel.js:567
++#, python-brace-format
++msgid "Copy {0}"
  msgstr ""
  
- #: js/widgets/persistentfilter/PickerPanel.js:299
- msgid "Delete Favorite"
 -#: js/widgets/account/PickerGridPanel.js:158
 -msgid "Search User"
++#: js/widgets/dialog/EditDialog.js:626
++#, python-brace-format
++msgid "Add New {0}"
  msgstr ""
  
- #: js/widgets/persistentfilter/PickerPanel.js:304
- #: js/widgets/persistentfilter/PickerPanel.js:397
- msgid "Edit Favorite"
 -#: js/widgets/account/PickerGridPanel.js:164
 -msgid "Search Group"
++#: js/widgets/dialog/EditDialog.js:628
++#, python-brace-format
++msgid "Edit {0} \"{1}\""
  msgstr ""
  
- #: js/widgets/persistentfilter/PickerPanel.js:309
- msgid "Overwrite Favorite"
 -#: js/widgets/account/PickerGridPanel.js:170
 -msgid "Add Anyone"
++#: js/widgets/dialog/EditDialog.js:699
++#, python-brace-format
++msgid "Transferring {0}..."
  msgstr ""
  
- #: js/widgets/persistentfilter/PickerPanel.js:326
 -#: js/widgets/account/PickerGridPanel.js:213
 -msgid "Anyone"
++#: js/widgets/dialog/EditDialog.js:851
 +#, python-brace-format
- msgid "Do you really want to delete the favorite \"{0}\"?"
++msgid "Do you really want to delete this {0}?"
  msgstr ""
  
- #: js/widgets/persistentfilter/PickerPanel.js:328
 -#: js/widgets/account/PickerGridPanel.js:229
 -msgid "Search for users ..."
++#: js/widgets/dialog/EditDialog.js:853 js/widgets/grid/GridPanel.js:1853
 +#, python-brace-format
- msgid "Deleting Favorite \"{0}\""
++msgid "Deleting {0}"
  msgstr ""
  
- #: js/widgets/persistentfilter/PickerPanel.js:364
- msgid "Overwrite?"
 -#: js/widgets/account/PickerGridPanel.js:251
 -msgid "Search for groups ..."
++#: js/widgets/dialog/EditDialog.js:863
++#, python-brace-format
++msgid "Could not delete {0}."
  msgstr ""
  
- #: js/widgets/persistentfilter/PickerPanel.js:364
 -#: js/widgets/LangChooser.js:68
 -msgid "setting new language..."
++#: js/widgets/dialog/EditDialog.js:918
 +#, python-brace-format
- msgid "Do you want to overwrite the favorite \"{0}\"?"
++msgid "Resolve Duplicate {0} Suspicion"
  msgstr ""
  
- #: js/widgets/persistentfilter/PickerPanel.js:366
- #, python-brace-format
- msgid "Overwriting Favorite \"{0}\""
+ #: js/widgets/dialog/FileListDialog.js:28
+ #: js/widgets/dialog/MultiOptionsDialog.js:28
+ #: js/widgets/dialog/MultiOptionsDialog.js:81
+ msgid "What would you like to do?"
  msgstr ""
  
- #: js/widgets/persistentfilter/PickerPanel.js:387
- msgid "Could not save Favorite"
+ #: js/widgets/dialog/FileListDialog.js:32
+ #: js/widgets/dialog/MultiOptionsDialog.js:32
+ #: js/widgets/dialog/MultiOptionsDialog.js:141
+ msgid "You need to select an option!"
  msgstr ""
  
- #: js/widgets/persistentfilter/PickerPanel.js:387
- msgid "Your current view does not support favorites"
+ #: js/widgets/dialog/FileListDialog.js:93
+ msgid "No"
  msgstr ""
  
- #: js/widgets/persistentfilter/PickerPanel.js:395
- msgid "Create Favorite"
+ #: js/widgets/dialog/FileListDialog.js:102
+ msgid "Yes"
  msgstr ""
  
- #: js/widgets/persistentfilter/PickerPanel.js:421
- #, python-brace-format
- msgid "Saving Favorite \"{0}\""
 -#: js/widgets/dialog/DuplicateMergeDialog.js:87
 -#: js/widgets/dialog/MultipleEditResultSummary.js:86
 -#: js/widgets/persistentfilter/EditPersistentFilterPanel.js:69
 -msgid "OK"
++#: js/widgets/dialog/AttachmentsGridPanel.js:63
++msgid "Attachments"
  msgstr ""
  
- #: js/widgets/persistentfilter/PickerPanel.js:621
- msgid "(shared)"
 -#: js/widgets/dialog/DuplicateMergeDialog.js:134
 -msgid "Merging Records..."
++#: js/widgets/dialog/AttachmentsGridPanel.js:64
++msgid "Attachment"
  msgstr ""
  
- #: js/widgets/persistentfilter/EditPersistentFilterPanel.js:69
- #: js/widgets/dialog/DuplicateMergeDialog.js:87
- #: js/widgets/dialog/MultipleEditResultSummary.js:86
- msgid "OK"
 -#: js/widgets/dialog/DuplicateMergeDialog.js:173
 -msgid "Merge Failed"
++#: js/widgets/dialog/AttachmentsGridPanel.js:94
++msgid "Size"
  msgstr ""
  
- #: js/widgets/persistentfilter/EditPersistentFilterPanel.js:140
- msgid "Favorite not saved"
 -#: js/widgets/dialog/DuplicateMergeDialog.js:173
 -#, python-brace-format
 -msgid "The merge succeeded, but the duplicate {0} could not be deleted."
++#: js/widgets/dialog/AttachmentsGridPanel.js:102
++msgid "Content Type"
+ msgstr ""
 -#: js/widgets/dialog/DuplicateMergeDialog.js:212
 -#, python-brace-format
 -msgid "Merge {0}, prefer First"
++#: js/widgets/dialog/AttachmentsGridPanel.js:104
++#: js/widgets/relation/GenericPickerGridPanel.js:461
++#: js/widgets/grid/GridPanel.js:1419
++msgid "Creation Time"
+ msgstr ""
 -#: js/widgets/dialog/DuplicateMergeDialog.js:213
 -#, python-brace-format
 -msgid "Merge {0}, prefer Second"
++#: js/widgets/dialog/AttachmentsGridPanel.js:131
++#: js/widgets/tree/ContextMenu.js:124
++msgid "Download"
+ msgstr ""
 -#: js/widgets/dialog/DuplicateMergeDialog.js:220
 -#: js/widgets/grid/GridPanel.js:602
++#: js/widgets/dialog/MultipleEditResultSummary.js:146
+ #, python-brace-format
 -msgid "Merge {0}"
++msgid "You edited {0} {1}."
+ msgstr ""
 -#: js/widgets/dialog/DuplicateMergeDialog.js:223
++#: js/widgets/dialog/MultipleEditResultSummary.js:149
+ #, python-brace-format
 -msgid "First {0}"
++msgid "{0} {1} have been updated properly."
  msgstr ""
  
- #: js/widgets/persistentfilter/EditPersistentFilterPanel.js:213
- msgid "Shared Favorite (visible by all users)"
 -#: js/widgets/dialog/DuplicateMergeDialog.js:224
++#: js/widgets/dialog/MultipleEditResultSummary.js:149
+ #, python-brace-format
 -msgid "Second {0}"
++msgid "{0} {1} has been updated properly."
  msgstr ""
  
- #: js/widgets/persistentfilter/EditPersistentFilterPanel.js:264
- msgid "The grant to see and use this filter"
 -#: js/widgets/dialog/DuplicateMergeDialog.js:225
++#: js/widgets/dialog/MultipleEditResultSummary.js:152
+ #, python-brace-format
 -msgid "Final {0}"
++msgid ""
++"{0} {1} have invalid data after updating. These {1} have not been changed."
  msgstr ""
  
- #: js/widgets/persistentfilter/EditPersistentFilterPanel.js:269
- msgid "The grant to edit this filter"
 -#: js/widgets/dialog/ExportDialog.js:84
++#: js/widgets/dialog/MultipleEditResultSummary.js:152
+ #, python-brace-format
 -msgid "Export {0} {1}"
++msgid "{0} {1} has invalid data after updating. This {1} has not been changed."
  msgstr ""
  
- #: js/widgets/persistentfilter/EditPersistentFilterPanel.js:275
- msgid "The grant to delete this filter"
 -#: js/widgets/dialog/ExportDialog.js:111
 -msgid "Export definition"
++#: js/widgets/dialog/PreferencesTreePanel.js:67
++msgid "General Preferences"
  msgstr ""
  
- #: js/widgets/persistentfilter/EditPersistentFilterPanel.js:283
- msgid "Permissions"
 -#: js/widgets/dialog/ExportDialog.js:120
 -msgid "Select Export Definition ..."
++#: js/widgets/dialog/PreferencesTreePanel.js:87
++msgid "My Profile"
  msgstr ""
  
- #: js/widgets/grid/FilterToolbar.js:92 js/widgets/grid/FilterToolbar.js:595
- msgid "Show"
 -#: js/widgets/dialog/EditDialog.js:402 js/widgets/EditRecord.js:188
 -msgid "delete"
++#: js/widgets/form/RecordPickerManager.js:48
++#: js/widgets/form/RecordPickerComboBox.js:119
++msgid "Searching..."
  msgstr ""
  
- #: js/widgets/grid/FilterToolbar.js:178
- msgid "add new filter"
 -#: js/widgets/dialog/EditDialog.js:442 js/widgets/dialog/EditDialog.js:470
 -#: js/widgets/EditRecord.js:131
 -msgid "Saved in"
++#: js/widgets/form/FileUploadButton.js:65
++msgid "Wrong File Type"
  msgstr ""
  
- #: js/widgets/grid/FilterToolbar.js:184
- msgid "reset all filters"
 -#: js/widgets/dialog/EditDialog.js:599 js/widgets/grid/GridPanel.js:553
 -#, python-brace-format
 -msgid "Copy {0}"
++#: js/widgets/form/FileUploadButton.js:65
++msgid "Please select a file with one of the following extensions:"
 +msgstr ""
 +
- #: js/widgets/grid/FilterToolbar.js:190
- msgid "start search"
++#: js/widgets/form/RecordPickerComboBox.js:295
++#: js/widgets/relation/GenericPickerGridPanel.js:930
++msgid "You tried to link a record with itself. This is not allowed!"
 +msgstr ""
 +
- #: js/widgets/grid/FilterToolbar.js:198
- msgid "save as favorite"
++#: js/widgets/form/ConfigPanel.js:113
++msgid "Configuration Problem"
 +msgstr ""
 +
- #: js/widgets/grid/FilterToolbar.js:205
- msgid "Load a favorite"
++#: js/widgets/form/ConfigPanel.js:134
++msgid "Invalid configuration"
 +msgstr ""
 +
- #: js/widgets/grid/FilterToolbar.js:370
- msgid "select a field"
++#: js/widgets/form/ConfigPanel.js:158
++msgid "Transferring Configuration..."
 +msgstr ""
 +
- #: js/widgets/grid/FilterToolbar.js:408
- msgid "Delete this filter"
++#: js/widgets/form/ConfigPanel.js:254
++msgid "Save config"
 +msgstr ""
 +
- #: js/widgets/grid/QuickaddGridPanel.js:91
- msgid "Remove"
++#: js/widgets/form/ConfigPanel.js:264
++msgid "Reload config"
 +msgstr ""
 +
- #: js/widgets/grid/ForeignRecordFilter.js:61
- msgid "Edit definition"
++#: js/widgets/mainscreen/WestPanel.js:302
++msgid "containers"
 +msgstr ""
 +
- #: js/widgets/grid/ForeignRecordFilter.js:71
- msgid "Start definition"
++#: js/widgets/mainscreen/WestPanel.js:329
++msgid "Favorites"
 +msgstr ""
 +
- #: js/widgets/grid/ForeignRecordFilter.js:111
- msgid "Related to"
++#: js/widgets/VersionCheck.js:51 js/widgets/VersionCheck.js:60
++msgid "New version of Tine 2.0 available"
  msgstr ""
  
- #: js/widgets/grid/MonthFilter.js:34
- msgid "Month"
 -#: js/widgets/dialog/EditDialog.js:602
++#: js/widgets/VersionCheck.js:52 js/widgets/VersionCheck.js:61
+ #, python-brace-format
 -msgid "Add New {0}"
++msgid "Version \"{0}\" of Tine 2.0 is available."
 +msgstr ""
 +
- #: js/widgets/grid/MonthFilter.js:121 js/widgets/grid/FilterModel.js:185
- msgid "this month"
++#: js/widgets/VersionCheck.js:53
++msgid "It's a critical update and must be installed as soon as possible!"
  msgstr ""
  
- #: js/widgets/grid/MonthFilter.js:122 js/widgets/grid/FilterModel.js:186
- msgid "last month"
 -#: js/widgets/dialog/EditDialog.js:604
++#: js/widgets/VersionCheck.js:62
++msgid "Please consider updating!"
 +msgstr ""
 +
- #: js/widgets/grid/MonthFilter.js:123 js/widgets/grid/FilterModel.js:190
- msgid "this quarter"
++#: js/widgets/tree/ContextMenu.js:35 js/widgets/grid/FileUploadGrid.js:241
++#: js/widgets/grid/GridPanel.js:578
+ #, python-brace-format
 -msgid "Edit {0} \"{1}\""
++msgid "Add {0}"
  msgstr ""
  
- #: js/widgets/grid/MonthFilter.js:124 js/widgets/grid/FilterModel.js:191
- msgid "last quarter"
 -#: js/widgets/dialog/EditDialog.js:674
++#: js/widgets/tree/ContextMenu.js:43 js/widgets/tree/ContextMenu.js:276
+ #, python-brace-format
 -msgid "Transferring {0}..."
++msgid "Rename {0}"
  msgstr ""
  
- #: js/widgets/grid/MonthFilter.js:125 js/widgets/grid/FilterModel.js:192
- msgid "this year"
- msgstr ""
 -#: js/widgets/dialog/EditDialog.js:827
++#: js/widgets/tree/ContextMenu.js:52 js/widgets/grid/GridPanel.js:652
++#: js/widgets/grid/GridPanel.js:653 js/widgets/grid/GridPanel.js:655
+ #, python-brace-format
 -msgid "Do you really want to delete this {0}?"
++msgid "Delete {0}"
++msgid_plural "Delete {0}"
++msgstr[0] ""
++msgstr[1] ""
 +
- #: js/widgets/grid/MonthFilter.js:126 js/widgets/grid/FilterModel.js:193
- msgid "last year"
++#: js/widgets/tree/ContextMenu.js:61
++#, python-brace-format
++msgid "Manage {0} Permissions"
  msgstr ""
  
- #: js/widgets/grid/PickerGridPanel.js:162
- msgid "Remove record"
 -#: js/widgets/dialog/EditDialog.js:829 js/widgets/grid/GridPanel.js:1830
++#: js/widgets/tree/ContextMenu.js:69
+ #, python-brace-format
 -msgid "Deleting {0}"
++msgid "{0} Properties"
  msgstr ""
  
- #: js/widgets/grid/PickerGridPanel.js:304
- msgid "Search for records ..."
 -#: js/widgets/dialog/EditDialog.js:839
++#: js/widgets/tree/ContextMenu.js:78
+ #, python-brace-format
 -msgid "Could not delete {0}."
++msgid "Set {0} color"
  msgstr ""
  
- #: js/widgets/grid/FileUploadGrid.js:68 js/Models.js:477
- msgid "File"
- msgid_plural "Files"
- msgstr[0] ""
- msgstr[1] ""
 -#: js/widgets/dialog/EditDialog.js:894
++#: js/widgets/tree/ContextMenu.js:92
+ #, python-brace-format
 -msgid "Resolve Duplicate {0} Suspicion"
++msgid "Reload {0}"
+ msgstr ""
  
- #: js/widgets/grid/FileUploadGrid.js:115
- msgid ""
- "Could not upload file. Filesize could be too big. Please notify your "
- "Administrator. Max upload size:"
 -#: js/widgets/dialog/PreferencesTreePanel.js:67
 -msgid "General Preferences"
++#: js/widgets/tree/ContextMenu.js:100 js/widgets/grid/FileUploadGrid.js:195
++msgid "Resume upload"
  msgstr ""
  
- #: js/widgets/grid/FileUploadGrid.js:179
- #, python-brace-format
- msgid "Remove {0}"
 -#: js/widgets/dialog/PreferencesTreePanel.js:87
 -msgid "My Profile"
++#: js/widgets/tree/ContextMenu.js:109
++msgid "Edit Properties"
  msgstr ""
  
- #: js/widgets/grid/FileUploadGrid.js:283
- msgid "name"
 -#: js/widgets/dialog/DuplicateResolveGridPanel.js:41
 -msgid "The record you try to add might already exist."
++#: js/widgets/tree/ContextMenu.js:116 js/widgets/grid/FileUploadGrid.js:187
++msgid "Pause upload"
  msgstr ""
  
- #: js/widgets/grid/FileUploadGrid.js:290
- msgid "size"
 -#: js/widgets/dialog/DuplicateResolveGridPanel.js:196
 -msgid "Field Group"
++#: js/widgets/tree/ContextMenu.js:132
++msgid "Publish"
  msgstr ""
  
- #: js/widgets/grid/FileUploadGrid.js:297
- msgid "type"
 -#: js/widgets/dialog/DuplicateResolveGridPanel.js:210
 -msgid "My Value"
++#: js/widgets/tree/ContextMenu.js:196
++#, python-brace-format
++msgid "New {0}"
  msgstr ""
  
- #: js/widgets/grid/GridPanel.js:323
 -#: js/widgets/dialog/DuplicateResolveGridPanel.js:218
 -msgid "Existing Value"
++#: js/widgets/tree/ContextMenu.js:196
 +#, python-brace-format
- msgid ""
- "There could not be found any {0}. Please try to change your filter-criteria, "
- "view-options or the {1} you search in."
++msgid "Please enter the name of the new {0}:"
  msgstr ""
  
- #: js/widgets/grid/GridPanel.js:324
 -#: js/widgets/dialog/DuplicateResolveGridPanel.js:226
 -msgid "Final Value"
++#: js/widgets/tree/ContextMenu.js:199
 +#, python-brace-format
- msgid ""
- "There could not be found any {0}. Please try to change your filter-criteria, "
- "view-options or change the module you search in."
++msgid "No {0} added"
  msgstr ""
  
- #: js/widgets/grid/GridPanel.js:326 js/widgets/grid/GridPanel.js:552
- #: js/widgets/grid/GridPanel.js:553 js/widgets/grid/GridPanel.js:554
 -#: js/widgets/dialog/DuplicateResolveGridPanel.js:243
 -msgid "Action:"
++#: js/widgets/tree/ContextMenu.js:199 js/widgets/tree/ContextMenu.js:283
 +#, python-brace-format
- msgid "Edit {0}"
- msgid_plural "Edit {0}"
- msgstr[0] ""
- msgstr[1] ""
++msgid "You have to supply a {0} name!"
+ msgstr ""
  
- #: js/widgets/grid/GridPanel.js:567 js/widgets/dialog/EditDialog.js:623
 -#: js/widgets/dialog/DuplicateResolveGridPanel.js:259
 -msgid "Merge, keeping existing details"
++#: js/widgets/tree/ContextMenu.js:202
 +#, python-brace-format
- msgid "Copy {0}"
++msgid "Creating {0}..."
  msgstr ""
  
- #: js/widgets/grid/GridPanel.js:586
- msgid "Print Page"
 -#: js/widgets/dialog/DuplicateResolveGridPanel.js:260
 -msgid "Merge, keeping my details"
++#: js/widgets/tree/ContextMenu.js:277
++#, python-brace-format
++msgid "Please enter the new name of the {0}:"
  msgstr ""
  
- #: js/widgets/grid/GridPanel.js:616
- #: js/widgets/dialog/DuplicateMergeDialog.js:220
 -#: js/widgets/dialog/DuplicateResolveGridPanel.js:261
 -msgid "Keep existing record and discard mine"
++#: js/widgets/tree/ContextMenu.js:283
 +#, python-brace-format
- msgid "Merge {0}"
++msgid "Not renamed {0}"
  msgstr ""
  
- #: js/widgets/grid/GridPanel.js:1071
- msgid "No data to display"
 -#: js/widgets/dialog/DuplicateResolveGridPanel.js:262
 -msgid "Keep both records"
++#: js/widgets/tree/ContextMenu.js:357
++#, python-brace-format
++msgid "Do you really want to delete the {0} \"{1}\"?"
  msgstr ""
  
- #: js/widgets/grid/GridPanel.js:1093
 -#: js/widgets/dialog/CredentialsDialog.js:84
 -msgid "Please enter your credentials"
++#: js/widgets/tree/ContextMenu.js:468
 +#, python-brace-format
- msgid "Displaying records {0} - {1} of {2}"
++msgid "Manage Permissions for {0} \"{1}\""
  msgstr ""
  
- #: js/widgets/grid/GridPanel.js:1094
 -#: js/widgets/dialog/ImportDialog.js:223
 -msgid "Choose File and Format"
++#: js/widgets/tree/ContextMenu.js:492
 +#, python-brace-format
- msgid "No {0} to display"
++msgid "Properties for {0} \"{1}\""
  msgstr ""
  
- #: js/widgets/grid/GridPanel.js:1148
- msgid "Records"
 -#: js/widgets/dialog/ImportDialog.js:232
 -msgid "Choose Import File"
++#: js/widgets/container/FilterModel.js:160
++msgid "is personal of"
  msgstr ""
  
- #: js/widgets/grid/GridPanel.js:1352
- msgid "New..."
 -#: js/widgets/dialog/ImportDialog.js:236
 -msgid ""
 -"Please choose the file that contains the records you want to add to Tine 2.0"
++#: js/widgets/container/FilterModel.js:160
++#: js/widgets/container/FilterModel.js:164 js/widgets/grid/FilterModel.js:226
++msgid "is equal to"
  msgstr ""
  
- #: js/widgets/grid/GridPanel.js:1371
- msgid "Add to..."
 -#: js/widgets/dialog/ImportDialog.js:240
++#: js/widgets/container/FilterModel.js:267
++#: js/widgets/grid/PickerGridPanel.js:260 js/widgets/grid/PickerFilter.js:310
++#: js/widgets/grid/FilterModelMultiSelect.js:214
+ #, python-brace-format
 -msgid "Select file containing your {0}"
++msgid "Selected  {0}"
 +msgstr ""
 +
- #: js/widgets/grid/GridPanel.js:1421
- msgid "Last Modified Time"
++#: js/widgets/container/PropertiesDialog.js:90
++msgid "Properties"
 +msgstr ""
 +
- #: js/widgets/grid/GridPanel.js:1422
- msgid "Last Modified By"
++#: js/widgets/container/PropertiesDialog.js:119
++msgid "My Grants"
 +msgstr ""
 +
- #: js/widgets/grid/GridPanel.js:1784
- msgid "Not Allowed"
++#: js/widgets/container/GrantsDialog.js:52
++msgid "Folder"
 +msgstr ""
 +
- #: js/widgets/grid/GridPanel.js:1785
- msgid "You are not allowed to delete all pages at once"
++#: js/widgets/container/GrantsDialog.js:95
++msgid "Updating Grants"
 +msgstr ""
 +
- #: js/widgets/grid/GridPanel.js:1808
- #, python-brace-format
- msgid "Do you really want to delete the selected record ({0})?"
- msgid_plural "Do you really want to delete the selected records ({0})?"
- msgstr[0] ""
- msgstr[1] ""
++#: js/widgets/container/GrantsDialog.js:125
++msgid "Error"
+ msgstr ""
  
- #: js/widgets/grid/GridPanel.js:1853 js/widgets/dialog/EditDialog.js:853
- #, python-brace-format
- msgid "Deleting {0}"
 -#: js/widgets/dialog/ImportDialog.js:248 js/widgets/dialog/ImportDialog.js:253
 -msgid "What should the file you upload look like?"
++#: js/widgets/container/GrantsDialog.js:126
++msgid "You are not allowed to remove all admins for this container!"
  msgstr ""
  
- #: js/widgets/grid/GridPanel.js:1853
- msgid "... This may take a long time!"
 -#: js/widgets/dialog/ImportDialog.js:256
 -msgid ""
 -"Tine 2.0 does not understand all kind of files you might want to upload. You "
 -"will have to manually adjust your file so Tine 2.0 can handle it."
++#: js/widgets/container/ContainerSelect.js:129
++#: js/ux/form/ComboBoxRecentsPlugin.js:43
++#, python-brace-format
++msgid "choose other {0}..."
  msgstr ""
  
- #: js/widgets/grid/FilterStructureTreePanel.js:35
- #: js/widgets/grid/FilterStructureTreePanel.js:52
- msgid "Show records that match to one of the following filters"
 -#: js/widgets/dialog/ImportDialog.js:259
 -msgid ""
 -"Following you find a list of all supported import formats and a sample file, "
 -"how Tine 2.0 expects your file to look like."
++#: js/widgets/container/ContainerSelect.js:132
++#, python-brace-format
++msgid "Select a {0}"
  msgstr ""
  
- #: js/widgets/grid/FilterStructureTreePanel.js:37
- #: js/widgets/grid/FilterStructureTreePanel.js:51
- msgid "or alternatively"
 -#: js/widgets/dialog/ImportDialog.js:262
 -msgid "Please select the import format of the file you want to upload"
++#: js/widgets/container/ContainerSelect.js:152
++#, python-brace-format
++msgid "Recently used {0}:"
  msgstr ""
  
- #: js/widgets/grid/FilterStructureTreePanel.js:55
- msgid "Add alternative filter"
 -#: js/widgets/dialog/ImportDialog.js:283 js/widgets/dialog/ImportDialog.js:315
 -msgid "Download example file"
++#: js/widgets/container/ContainerSelect.js:478
++#, python-brace-format
++msgid "please select a {0}"
  msgstr ""
  
- #: js/widgets/grid/FilterStructureTreePanel.js:61
- msgid "Remove Filter"
 -#: js/widgets/dialog/ImportDialog.js:286
 -msgid "Import description"
--msgstr ""
++#: js/widgets/container/TreePanel.js:142
++msgid "container"
++msgid_plural "containers"
++msgstr[0] ""
++msgstr[1] ""
  
- #: js/widgets/grid/FilterModel.js:180
- msgid "today"
 -#: js/widgets/dialog/ImportDialog.js:336
 -msgid "Set Import Options"
++#: js/widgets/container/TreePanel.js:547
++#, python-brace-format
++msgid "You are not allowed to select the {0} '{1}':"
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:181
- msgid "yesterday"
 -#: js/widgets/dialog/ImportDialog.js:344
++#: js/widgets/container/TreePanel.js:548
+ #, python-brace-format
 -msgid "Select {0} to add you {1} to:"
++msgid "{0} grant is required for desired action"
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:182
- msgid "this week"
 -#: js/widgets/dialog/ImportDialog.js:396
 -msgid "Checking Import"
++#: js/widgets/container/TreePanel.js:549
++msgid "Insufficient Grants"
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:183
- msgid "last week"
 -#: js/widgets/dialog/ImportDialog.js:425
 -msgid "Resolve Conflicts"
++#: js/widgets/container/CalDAVContainerPropertiesHookField.js:35
++msgid "CalDAV URL"
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:184
- msgid "the week before last"
 -#: js/widgets/dialog/ImportDialog.js:434
 -#, python-brace-format
 -msgid "There are {0} {1} that might already exist."
++#: js/widgets/container/GrantsGrid.js:44
++msgid "The grant to read records of this container"
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:187
- msgid "last three months"
 -#: js/widgets/dialog/ImportDialog.js:441
 -msgid "Conflict"
++#: js/widgets/container/GrantsGrid.js:46
++msgid "The grant to add records to this container"
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:188
- msgid "last six months"
 -#: js/widgets/dialog/ImportDialog.js:442
 -msgid "First Conflict"
++#: js/widgets/container/GrantsGrid.js:48
++msgid "The grant to edit records in this container"
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:189
- msgid "anytime"
 -#: js/widgets/dialog/ImportDialog.js:443
 -msgid "Previous Conflict"
++#: js/widgets/container/GrantsGrid.js:49
++#: js/widgets/persistentfilter/EditPersistentFilterPanel.js:274
++msgid "Delete"
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:204
- msgid "tomorrow"
 -#: js/widgets/dialog/ImportDialog.js:444
 -msgid "Next Conflict"
++#: js/widgets/container/GrantsGrid.js:50
++msgid "The grant to delete records in this container"
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:205
- msgid "next week"
 -#: js/widgets/dialog/ImportDialog.js:445
 -msgid "Last Conflict"
++#: js/widgets/container/GrantsGrid.js:52
++msgid "The grant to export records from this container"
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:206
- msgid "next month"
 -#: js/widgets/dialog/ImportDialog.js:451
 -msgid "Conflict is resolved"
++#: js/widgets/container/GrantsGrid.js:53
++msgid "Sync"
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:207
- msgid "next quarter"
 -#: js/widgets/dialog/ImportDialog.js:456
 -msgid "Resolve all conflicts"
++#: js/widgets/container/GrantsGrid.js:54
++msgid "The grant to synchronise records with this container"
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:208
- msgid "next year"
 -#: js/widgets/dialog/ImportDialog.js:550
 -msgid "Processing Conflict Data"
++#: js/widgets/container/GrantsGrid.js:55
++msgid "Admin"
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:224
- msgid "contains"
 -#: js/widgets/dialog/ImportDialog.js:575 js/widgets/dialog/ImportDialog.js:595
 -msgid "No conflict to resolve"
++#: js/widgets/container/GrantsGrid.js:56
++msgid "The grant to administrate this container"
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:225
- msgid "reg. exp."
 -#: js/widgets/dialog/ImportDialog.js:594
 -#, python-brace-format
 -msgid "(This is record {0} in your import file)"
++#: js/widgets/container/GrantsGrid.js:58
++msgid "Free Busy"
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:227
- msgid "is equal to without (-, )"
 -#: js/widgets/dialog/ImportDialog.js:619
 -msgid "No Detail Informations"
++#: js/widgets/container/GrantsGrid.js:59
++msgid "The grant to access free busy information of events in this calendar"
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:228
- msgid "is greater than"
 -#: js/widgets/dialog/ImportDialog.js:624
 -#: js/widgets/dialog/MultipleEditResultSummary.js:213
 -msgid "Summary"
++#: js/widgets/container/GrantsGrid.js:60
++msgid "Private"
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:229
- msgid "is less than"
 -#: js/widgets/dialog/ImportDialog.js:653
 -#: js/widgets/dialog/MultipleEditResultSummary.js:192
 -msgid "Index"
++#: js/widgets/container/GrantsGrid.js:61
++msgid "The grant to access records marked as private in this container"
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:230
- msgid "is not"
 -#: js/widgets/dialog/ImportDialog.js:669
 -#, python-brace-format
 -msgid "Importing {0}"
++#: js/widgets/relation/FilterModel.js:32
++#: js/widgets/relation/GenericPickerGridPanel.js:133 js/Models.js:402
++msgid "Relation"
++msgid_plural "Relations"
++msgstr[0] ""
++msgstr[1] ""
++
++#: js/widgets/relation/FilterModel.js:76
++msgid "Defined by ..."
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:231
- msgid "one of"
 -#: js/widgets/dialog/ImportDialog.js:700
 -#, python-brace-format
 -msgid "{0} records had failures and where discarded."
++#: js/widgets/relation/FilterModel.js:92 js/widgets/grid/FilterModel.js:285
++#: js/widgets/grid/ForeignRecordFilter.js:406
++msgid "select a operator"
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:232
- msgid "none of"
 -#: js/widgets/dialog/ImportDialog.js:742
 -#, python-brace-format
 -msgid "In total we found {0} records in your import file."
++#: js/widgets/relation/FilterModel.js:119
++msgid "Define ..."
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:233
- msgid "is before"
 -#: js/widgets/dialog/ImportDialog.js:745
 -#, python-brace-format
 -msgid "{0} of them will be added as new records into: \"{1}\"."
++#: js/widgets/relation/GenericPickerGridPanel.js:126
++msgid "Edit record"
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:234
- msgid "is after"
 -#: js/widgets/dialog/ImportDialog.js:752
 -#, python-brace-format
 -msgid "{0} of them where identified as duplicates."
++#: js/widgets/relation/GenericPickerGridPanel.js:162
++msgid "Sibling"
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:235
- msgid "is within"
 -#: js/widgets/dialog/ImportDialog.js:755
 -#, python-brace-format
 -msgid ""
 -"From the identified duplicates {0} will be merged into the existing records."
++#: js/widgets/relation/GenericPickerGridPanel.js:163
++msgid "Parent"
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:236
- msgid "is in week no."
 -#: js/widgets/dialog/ImportDialog.js:759
 -#, python-brace-format
 -msgid "From the identified duplicates {0} will be discarded."
++#: js/widgets/relation/GenericPickerGridPanel.js:164
++msgid "Child"
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:237
- msgid "starts with"
 -#: js/widgets/dialog/ImportDialog.js:775
++#: js/widgets/relation/GenericPickerGridPanel.js:265
+ #, python-brace-format
 -msgid "All records will be tagged with: \"{0}\" so you can find them easily."
++msgid ""
++"The maximum number of {0} with the type \"{1}\" is reached. Please change "
++"the type of this relation"
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:238
- msgid "ends with"
 -#: js/widgets/dialog/ImportDialog.js:786
++#: js/widgets/relation/GenericPickerGridPanel.js:270
+ #, python-brace-format
 -msgid "{0} records have failures and will be discarded."
++msgid ""
++"The maximum number of {0}s with the type \"{1}\" is reached at the {2} you "
++"added. Please change the type of this relation or edit the {2}"
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:239
- msgid "defined by"
 -#: js/widgets/dialog/AlarmPanel.js:34
 -msgid "Alarms"
++#: js/widgets/relation/GenericPickerGridPanel.js:299
++msgid "No Dialog"
  msgstr ""
  
- #: js/widgets/grid/FilterModel.js:409
- msgid "Search Account ..."
 -#: js/widgets/dialog/AlarmPanel.js:37
 -msgid "0 minutes before"
++#: js/widgets/relation/GenericPickerGridPanel.js:300
++msgid ""
++"The Record can't be opened. There doesn't exist any dialog for editing this "
++"Record!"
  msgstr ""
  
- #: js/widgets/grid/FilterToolbarQuickFilterPlugin.js:181
- #: js/widgets/grid/FilterPanel.js:261
- msgid "show details"
 -#: js/widgets/dialog/AlarmPanel.js:38
 -msgid "5 minutes before"
++#: js/widgets/relation/GenericPickerGridPanel.js:456
++#: js/widgets/grid/GridPanel.js:1148
++msgid "Record"
  msgstr ""
  
- #: js/widgets/grid/FilterToolbarQuickFilterPlugin.js:182
- #: js/widgets/grid/FilterPanel.js:262
- msgid "Always show advanced filters"
 -#: js/widgets/dialog/AlarmPanel.js:39
 -msgid "15 minutes before"
++#: js/widgets/relation/GenericPickerGridPanel.js:458
++msgid "Remark"
  msgstr ""
  
- #: js/widgets/grid/FilterToolbarQuickFilterPlugin.js:368
- #, python-brace-format
- msgid "Your view is limited by {0} criteria:"
- msgid_plural "Your view is limited by {0} criterias:"
- msgstr[0] ""
- msgstr[1] ""
 -#: js/widgets/dialog/AlarmPanel.js:40
 -msgid "30 minutes before"
++#: js/widgets/relation/GenericPickerGridPanel.js:459
++msgid "Dependency"
+ msgstr ""
  
- #: js/widgets/grid/RendererManager.js:54
- msgid "has notes"
 -#: js/widgets/dialog/AlarmPanel.js:41
 -msgid "1 hour before"
++#: js/widgets/relation/GenericPickerGridPanel.js:917
++msgid ""
++"The record you tried to link is already linked. Please edit the existing "
++"link."
  msgstr ""
  
- #: js/widgets/grid/RendererManager.js:57
- msgid "has relations"
 -#: js/widgets/dialog/AlarmPanel.js:42
 -msgid "2 hours before"
++#: js/widgets/relation/PickerCombo.js:93
++#, python-brace-format
++msgid ""
++"The {1} \"{2}\" is already used in the Field \"{0}\" and can be linked only "
++"once!"
  msgstr ""
  
- #: js/widgets/grid/FilterPanel.js:78
- msgid "Attention: There are more filters active!"
 -#: js/widgets/dialog/AlarmPanel.js:43
 -msgid "12 hours before"
++#: js/widgets/LangChooser.js:35 Preference.php:146
++msgid "Language"
  msgstr ""
  
- #: js/widgets/grid/FilterPanel.js:511
- #, python-brace-format
- msgid "Criteria {0}"
 -#: js/widgets/dialog/AlarmPanel.js:44
 -msgid "1 day before"
++#: js/widgets/LangChooser.js:68
++msgid "setting new language..."
  msgstr ""
  
- #: js/widgets/dialog/SimpleImportDialog.js:129
- #: js/widgets/dialog/ImportDialog.js:227
- msgid "Choose File and Format"
 -#: js/widgets/dialog/AlarmPanel.js:45
 -msgid "2 days before"
++#: js/widgets/persistentfilter/EditPersistentFilterPanel.js:140
++msgid "Favorite not saved"
  msgstr ""
  
- #: js/widgets/dialog/SimpleImportDialog.js:138
- #: js/widgets/dialog/ImportDialog.js:236
- msgid "Choose Import File"
 -#: js/widgets/dialog/AlarmPanel.js:46
 -msgid "Custom Datetime"
++#: js/widgets/persistentfilter/EditPersistentFilterPanel.js:195
++#: ModelConfiguration.php:209
++msgid "Title"
  msgstr ""
  
- #: js/widgets/dialog/SimpleImportDialog.js:142
- #: js/widgets/dialog/ImportDialog.js:240
- msgid ""
- "Please choose the file that contains the records you want to add to Tine 2.0"
 -#: js/widgets/dialog/AlarmPanel.js:58
 -msgid "Alarm Time"
++#: js/widgets/persistentfilter/EditPersistentFilterPanel.js:213
++msgid "Shared Favorite (visible by all users)"
  msgstr ""
  
- #: js/widgets/dialog/SimpleImportDialog.js:146
- #: js/widgets/dialog/ImportDialog.js:244
 -#: js/widgets/dialog/AlarmPanel.js:170
--#, python-brace-format
- msgid "Select file containing your {0}"
 -msgid "{0} minutes before"
++#: js/widgets/persistentfilter/EditPersistentFilterPanel.js:264
++msgid "The grant to see and use this filter"
  msgstr ""
  
- #: js/widgets/dialog/SimpleImportDialog.js:154
- #: js/widgets/dialog/ImportDialog.js:340
- msgid "Set Import Options"
 -#: js/widgets/dialog/AdminPanel.js:59
 -#, python-brace-format
 -msgid "Change settings for application {0}"
++#: js/widgets/persistentfilter/EditPersistentFilterPanel.js:269
++msgid "The grant to edit this filter"
  msgstr ""
  
- #: js/widgets/dialog/SimpleImportDialog.js:158
- #: js/widgets/dialog/ImportDialog.js:348
- #, python-brace-format
- msgid "Select {0} to add you {1} to:"
 -#: js/widgets/dialog/AdminPanel.js:107
 -msgid "Defaults"
++#: js/widgets/persistentfilter/EditPersistentFilterPanel.js:275
++msgid "The grant to delete this filter"
  msgstr ""
  
- #: js/widgets/dialog/SimpleImportDialog.js:174
- #: js/widgets/dialog/ImportDialog.js:252 js/widgets/dialog/ImportDialog.js:257
- msgid "What should the file you upload look like?"
 -#: js/widgets/dialog/LinkPanel.js:46
 -msgid "Links"
++#: js/widgets/persistentfilter/EditPersistentFilterPanel.js:283
++msgid "Permissions"
  msgstr ""
  
- #: js/widgets/dialog/SimpleImportDialog.js:179
- #: js/widgets/dialog/ImportDialog.js:260
- msgid ""
- "Tine 2.0 does not understand all kind of files you might want to upload. You "
- "will have to manually adjust your file so Tine 2.0 can handle it."
 -#: js/widgets/dialog/MultipleEditResultSummary.js:146
 -#, python-brace-format
 -msgid "You edited {0} {1}."
++#: js/widgets/persistentfilter/PickerPanel.js:121
++msgid "My favorites"
  msgstr ""
  
- #: js/widgets/dialog/SimpleImportDialog.js:182
- #: js/widgets/dialog/ImportDialog.js:263
- msgid ""
- "Following you find a list of all supported import formats and a sample file, "
- "how Tine 2.0 expects your file to look like."
 -#: js/widgets/dialog/MultipleEditResultSummary.js:149
 -#, python-brace-format
 -msgid "{0} {1} have been updated properly."
++#: js/widgets/persistentfilter/PickerPanel.js:299
++msgid "Delete Favorite"
  msgstr ""
  
- #: js/widgets/dialog/SimpleImportDialog.js:185
- #: js/widgets/dialog/ImportDialog.js:266
- msgid "Please select the import format of the file you want to upload"
 -#: js/widgets/dialog/MultipleEditResultSummary.js:149
 -#, python-brace-format
 -msgid "{0} {1} has been updated properly."
++#: js/widgets/persistentfilter/PickerPanel.js:304
++#: js/widgets/persistentfilter/PickerPanel.js:397
++msgid "Edit Favorite"
  msgstr ""
  
- #: js/widgets/dialog/SimpleImportDialog.js:206
- #: js/widgets/dialog/ImportDialog.js:287 js/widgets/dialog/ImportDialog.js:319
- msgid "Download example file"
 -#: js/widgets/dialog/MultipleEditResultSummary.js:152
 -#, python-brace-format
 -msgid ""
 -"{0} {1} have invalid data after updating. These {1} have not been changed."
++#: js/widgets/persistentfilter/PickerPanel.js:309
++msgid "Overwrite Favorite"
  msgstr ""
  
- #: js/widgets/dialog/SimpleImportDialog.js:222
- #: js/widgets/dialog/ImportDialog.js:673
 -#: js/widgets/dialog/MultipleEditResultSummary.js:152
++#: js/widgets/persistentfilter/PickerPanel.js:326
  #, python-brace-format
- msgid "Importing {0}"
 -msgid "{0} {1} has invalid data after updating. This {1} has not been changed."
++msgid "Do you really want to delete the favorite \"{0}\"?"
  msgstr ""
  
- #: js/widgets/dialog/WizardPanel.js:173
- msgid "Back"
 -#: js/widgets/dialog/PreferencesDialog.js:125
 -msgid "Admin Mode"
++#: js/widgets/persistentfilter/PickerPanel.js:328
++#, python-brace-format
++msgid "Deleting Favorite \"{0}\""
  msgstr ""
  
- #: js/widgets/dialog/WizardPanel.js:180
- msgid "Next"
 -#: js/widgets/dialog/PreferencesDialog.js:163
 -msgid "Applications"
++#: js/widgets/persistentfilter/PickerPanel.js:364
++msgid "Overwrite?"
  msgstr ""
  
- #: js/widgets/dialog/WizardPanel.js:194
- msgid "Finish"
 -#: js/widgets/dialog/PreferencesDialog.js:192
 -msgid "Edit Preferences"
++#: js/widgets/persistentfilter/PickerPanel.js:364
++#, python-brace-format
++msgid "Do you want to overwrite the favorite \"{0}\"?"
  msgstr ""
  
- #: js/widgets/dialog/DuplicateMergeDialog.js:134
- msgid "Merging Records..."
 -#: js/widgets/dialog/PreferencesDialog.js:193
 -msgid "Loading ..."
++#: js/widgets/persistentfilter/PickerPanel.js:366
++#, python-brace-format
++msgid "Overwriting Favorite \"{0}\""
  msgstr ""
  
- #: js/widgets/dialog/DuplicateMergeDialog.js:173
- msgid "Merge Failed"
 -#: js/widgets/dialog/PreferencesDialog.js:248
 -#: js/widgets/form/ConfigPanel.js:134
 -msgid "You need to correct the red marked fields before config could be saved"
++#: js/widgets/persistentfilter/PickerPanel.js:387
++msgid "Could not save Favorite"
  msgstr ""
  
- #: js/widgets/dialog/DuplicateMergeDialog.js:173
- #, python-brace-format
- msgid "The merge succeeded, but the duplicate {0} could not be deleted."
 -#: js/widgets/dialog/PreferencesDialog.js:277
 -msgid "Saving of preferences failed."
++#: js/widgets/persistentfilter/PickerPanel.js:387
++msgid "Your current view does not support favorites"
  msgstr ""
  
- #: js/widgets/dialog/DuplicateMergeDialog.js:212
- #, python-brace-format
- msgid "Merge {0}, prefer First"
 -#: js/widgets/dialog/MultipleEditDialogPlugin.js:341
 -#: js/widgets/dialog/MultipleEditDialogPlugin.js:475
 -msgid "Delete value from all selected records"
++#: js/widgets/persistentfilter/PickerPanel.js:395
++msgid "Create Favorite"
  msgstr ""
  
- #: js/widgets/dialog/DuplicateMergeDialog.js:213
 -#: js/widgets/dialog/MultipleEditDialogPlugin.js:458
 -msgid "Undo change for all selected records"
++#: js/widgets/persistentfilter/PickerPanel.js:421
 +#, python-brace-format
- msgid "Merge {0}, prefer Second"
++msgid "Saving Favorite \"{0}\""
  msgstr ""
  
- #: js/widgets/dialog/DuplicateMergeDialog.js:223
 -#: js/widgets/dialog/MultipleEditDialogPlugin.js:533
--#, python-brace-format
- msgid "First {0}"
 -msgid "Edit {0} {1}"
++#: js/widgets/persistentfilter/PickerPanel.js:621
++msgid "(shared)"
  msgstr ""
  
- #: js/widgets/dialog/DuplicateMergeDialog.js:224
- #, python-brace-format
- msgid "Second {0}"
 -#: js/widgets/dialog/MultipleEditDialogPlugin.js:592
 -msgid "Different Values"
++#: js/widgets/grid/FilterModel.js:180
++msgid "today"
  msgstr ""
  
- #: js/widgets/dialog/DuplicateMergeDialog.js:225
- #, python-brace-format
- msgid "Final {0}"
 -#: js/widgets/dialog/MultipleEditDialogPlugin.js:593
 -msgid ""
 -"This field has different values. Editing this field will overwrite the old "
 -"values."
++#: js/widgets/grid/FilterModel.js:181
++msgid "yesterday"
  msgstr ""
  
- #: js/widgets/dialog/DuplicateResolveGridPanel.js:41
- msgid "The record you try to add might already exist."
 -#: js/widgets/dialog/MultipleEditDialogPlugin.js:690
 -#, python-brace-format
 -msgid "Do you really want to change these {0} records?"
++#: js/widgets/grid/FilterModel.js:182
++msgid "this week"
  msgstr ""
  
- #: js/widgets/dialog/DuplicateResolveGridPanel.js:196
- msgid "Field Group"
 -#: js/widgets/dialog/MultipleEditDialogPlugin.js:693
 -msgid "Applying changes"
++#: js/widgets/grid/FilterModel.js:183
++msgid "last week"
  msgstr ""
  
- #: js/widgets/dialog/DuplicateResolveGridPanel.js:210
- msgid "My Value"
 -#: js/widgets/dialog/WizardPanel.js:173
 -msgid "Back"
++#: js/widgets/grid/FilterModel.js:184
++msgid "the week before last"
  msgstr ""
  
- #: js/widgets/dialog/DuplicateResolveGridPanel.js:218
- msgid "Existing Value"
 -#: js/widgets/dialog/WizardPanel.js:180
 -msgid "Next"
++#: js/widgets/grid/FilterModel.js:185 js/widgets/grid/MonthFilter.js:121
++msgid "this month"
  msgstr ""
  
- #: js/widgets/dialog/DuplicateResolveGridPanel.js:226
- msgid "Final Value"
 -#: js/widgets/dialog/WizardPanel.js:194
 -msgid "Finish"
++#: js/widgets/grid/FilterModel.js:186 js/widgets/grid/MonthFilter.js:122
++msgid "last month"
  msgstr ""
  
- #: js/widgets/dialog/DuplicateResolveGridPanel.js:243
- msgid "Action:"
 -#: js/widgets/dialog/AttachmentsGridPanel.js:63
 -msgid "Attachments"
++#: js/widgets/grid/FilterModel.js:187
++msgid "last three months"
  msgstr ""
  
- #: js/widgets/dialog/DuplicateResolveGridPanel.js:259
- msgid "Merge, keeping existing details"
 -#: js/widgets/dialog/AttachmentsGridPanel.js:64
 -msgid "Attachment"
++#: js/widgets/grid/FilterModel.js:188
++msgid "last six months"
  msgstr ""
  
- #: js/widgets/dialog/DuplicateResolveGridPanel.js:260
- msgid "Merge, keeping my details"
 -#: js/widgets/dialog/AttachmentsGridPanel.js:94
 -msgid "Size"
++#: js/widgets/grid/FilterModel.js:189
++msgid "anytime"
  msgstr ""
  
- #: js/widgets/dialog/DuplicateResolveGridPanel.js:261
- msgid "Keep existing record and discard mine"
 -#: js/widgets/dialog/AttachmentsGridPanel.js:102
 -msgid "Content Type"
++#: js/widgets/grid/FilterModel.js:190 js/widgets/grid/MonthFilter.js:123
++msgid "this quarter"
  msgstr ""
  
- #: js/widgets/dialog/DuplicateResolveGridPanel.js:262
- msgid "Keep both records"
 -#: js/widgets/dialog/AttachmentsGridPanel.js:106
 -#: js/widgets/grid/GridPanel.js:1397 js/widgets/ActivitiesPanel.js:492
 -msgid "Created By"
++#: js/widgets/grid/FilterModel.js:191 js/widgets/grid/MonthFilter.js:124
++msgid "last quarter"
  msgstr ""
  
- #: js/widgets/dialog/MultipleEditDialogPlugin.js:341
- #: js/widgets/dialog/MultipleEditDialogPlugin.js:475
- msgid "Delete value from all selected records"
 -#: js/widgets/dialog/AttachmentsGridPanel.js:131
 -#: js/widgets/tree/ContextMenu.js:124
 -msgid "Download"
++#: js/widgets/grid/FilterModel.js:192 js/widgets/grid/MonthFilter.js:125
++msgid "this year"
  msgstr ""
  
- #: js/widgets/dialog/MultipleEditDialogPlugin.js:458
- msgid "Undo change for all selected records"
 -#: js/widgets/dialog/PreferencesPanel.js:185
 -msgid "There are no preferences for this application."
++#: js/widgets/grid/FilterModel.js:193 js/widgets/grid/MonthFilter.js:126
++msgid "last year"
  msgstr ""
  
- #: js/widgets/dialog/MultipleEditDialogPlugin.js:533
 -#: js/widgets/dialog/ExceptionHandlerDialog.js:217
--#, python-brace-format
- msgid "Edit {0} {1}"
 -msgid "{1} - Exception {0}"
++#: js/widgets/grid/FilterModel.js:204
++msgid "tomorrow"
  msgstr ""
  
- #: js/widgets/dialog/MultipleEditDialogPlugin.js:592
- msgid "Different Values"
 -#: js/widgets/dialog/ExceptionHandlerDialog.js:219
 -#, python-brace-format
 -msgid "{0} - Unknown Exception"
++#: js/widgets/grid/FilterModel.js:205
++msgid "next week"
  msgstr ""
  
- #: js/widgets/dialog/MultipleEditDialogPlugin.js:593
- msgid ""
- "This field has different values. Editing this field will overwrite the old "
- "values."
 -#: js/widgets/container/GrantsGrid.js:44
 -msgid "The grant to read records of this container"
++#: js/widgets/grid/FilterModel.js:206
++msgid "next month"
  msgstr ""
  
- #: js/widgets/dialog/MultipleEditDialogPlugin.js:655
- #: js/widgets/dialog/ExportDialog.js:150
- #: js/widgets/dialog/PreferencesDialog.js:248
- #: js/widgets/dialog/PreferencesDialog.js:277
- #: js/widgets/dialog/CredentialsDialog.js:126
- #: js/widgets/dialog/EditDialog.js:822 js/LoginPanel.js:508
- msgid "Errors"
 -#: js/widgets/container/GrantsGrid.js:45 js/widgets/ActivitiesPanel.js:168
 -#: js/widgets/ActivitiesPanel.js:181
 -msgid "Add"
++#: js/widgets/grid/FilterModel.js:207
++msgid "next quarter"
  msgstr ""
  
- #: js/widgets/dialog/MultipleEditDialogPlugin.js:655
- #: js/widgets/dialog/ExportDialog.js:150
- #: js/widgets/dialog/CredentialsDialog.js:126
- #: js/widgets/dialog/EditDialog.js:844 js/LoginPanel.js:508
- msgid "Please fix the errors noted."
 -#: js/widgets/container/GrantsGrid.js:46
 -msgid "The grant to add records to this container"
++#: js/widgets/grid/FilterModel.js:208
++msgid "next year"
  msgstr ""
  
- #: js/widgets/dialog/MultipleEditDialogPlugin.js:690
- #, python-brace-format
- msgid "Do you really want to change these {0} records?"
 -#: js/widgets/container/GrantsGrid.js:48
 -msgid "The grant to edit records in this container"
++#: js/widgets/grid/FilterModel.js:224
++msgid "contains"
  msgstr ""
  
- #: js/widgets/dialog/MultipleEditDialogPlugin.js:693
- msgid "Applying changes"
 -#: js/widgets/container/GrantsGrid.js:49
 -msgid "Delete"
++#: js/widgets/grid/FilterModel.js:225
++msgid "reg. exp."
  msgstr ""
  
- #: js/widgets/dialog/AdminPanel.js:59
- #, python-brace-format
- msgid "Change settings for application {0}"
 -#: js/widgets/container/GrantsGrid.js:50
 -msgid "The grant to delete records in this container"
++#: js/widgets/grid/FilterModel.js:227
++msgid "is equal to without (-, )"
  msgstr ""
  
- #: js/widgets/dialog/AdminPanel.js:107
- msgid "Defaults"
 -#: js/widgets/container/GrantsGrid.js:52
 -msgid "The grant to export records from this container"
++#: js/widgets/grid/FilterModel.js:228
++msgid "is greater than"
  msgstr ""
  
- #: js/widgets/dialog/ImportDialog.js:290
- msgid "Import description"
 -#: js/widgets/container/GrantsGrid.js:53
 -msgid "Sync"
++#: js/widgets/grid/FilterModel.js:229
++msgid "is less than"
  msgstr ""
  
- #: js/widgets/dialog/ImportDialog.js:400
- msgid "Checking Import"
 -#: js/widgets/container/GrantsGrid.js:54
 -msgid "The grant to synchronise records with this container"
++#: js/widgets/grid/FilterModel.js:230
++msgid "is not"
  msgstr ""
  
- #: js/widgets/dialog/ImportDialog.js:429
- msgid "Resolve Conflicts"
 -#: js/widgets/container/GrantsGrid.js:55
 -msgid "Admin"
++#: js/widgets/grid/FilterModel.js:231
++msgid "one of"
  msgstr ""
  
- #: js/widgets/dialog/ImportDialog.js:438
- #, python-brace-format
- msgid "There are {0} {1} that might already exist."
 -#: js/widgets/container/GrantsGrid.js:56
 -msgid "The grant to administrate this container"
++#: js/widgets/grid/FilterModel.js:232
++msgid "none of"
  msgstr ""