Compare commits

...

262 Commits
2 ... master

Author SHA1 Message Date
Fabien BOURGEOIS 211a44ab4e [i18n]GOMEM Resource i18n and french translation 2018-02-19 09:49:03 +01:00
Fabien BOURGEOIS 2f22a7c6d7 [ADD]GOLEM Resource Reservation testing 2018-02-19 08:01:35 +01:00
Fabien BOURGEOIS 8490e89959 [TYPO] 2018-02-19 08:01:20 +01:00
Fabien BOURGEOIS 896259dd7f [IMP]GOLEM Resource Reservation : do not allow same hour for start and stop + usage of ValidationError instead of UserError 2018-02-19 08:00:55 +01:00
Fabien BOURGEOIS 94f905b90e [ADD]GOLEM Resource Timetable tests
[IMP]Do not allow equal times between start and stop
2018-02-19 06:50:04 +01:00
Fabien BOURGEOIS cb74acb4e6 [ADD]GOLEM Resource tests
[IMP]Resource validation to False, check dates
2018-02-19 06:49:35 +01:00
Fabien BOURGEOIS aeefceb970 Merge branch 'fabien_resources' 2018-02-18 17:37:16 +01:00
Fabien BOURGEOIS 4c9921c8d8 [UPD]Bump GOLEM Resource version 2018-02-18 17:36:46 +01:00
Fabien BOURGEOIS 05d5cc5cda [FIX]GOLEM Resource : reservation can end at the same time new begin 2018-02-18 17:36:32 +01:00
Fabien BOURGEOIS 518d2c8348 [IMP]GOLEM Resource : add ordering 2018-02-18 17:36:01 +01:00
Fabien BOURGEOIS 977e817326 [ADD]GOLEM Resource : add social abilities on resource and reservation, and track fields on reservation 2018-02-18 17:30:11 +01:00
Fabien BOURGEOIS a5d4e5feb3 [FIX]GOLEM Resource Reservation : dot not allow edit on avaibility fields from reservation form 2018-02-18 17:29:16 +01:00
Fabien BOURGEOIS 6933755fdd [ADD]GOLEM Resource : timetable own tree 2018-02-18 17:18:09 +01:00
Fabien BOURGEOIS 5c87abbbbc [IMP]GOLEM Resource Reservation : display avaibility period and timetable on reservation 2018-02-18 17:17:32 +01:00
Fabien BOURGEOIS bf5314f54f [ADD]GOLEM Resource Type : new direct search on name 2018-02-18 16:55:44 +01:00
Fabien BOURGEOIS 1182d1299b [IMP]GOLEM Resource Reservation tree : new fields, and search : new filters, groups... 2018-02-18 16:55:24 +01:00
Fabien BOURGEOIS 3fbb3fe187 [TYPO]GOLEM Resource : better meaning for reject/validate 2018-02-18 16:43:33 +01:00
Fabien BOURGEOIS 8c59738e3b [IMP]GOLEM Resource reservation form : better organization, fields as invisible when not needed, buttons too 2018-02-18 16:41:50 +01:00
Fabien BOURGEOIS d1c178aa8c [IMP]GOLEM Resource : many enhancements like correct usage of states and readonly everytime but not on draft, access checking server side for validate/reject, fixes on main constraint 2018-02-18 16:41:01 +01:00
Fabien BOURGEOIS 2223b88930 [IMP]GOLEM Resource : small enhancements around form and timetable model 2018-02-18 14:53:53 +01:00
Fabien BOURGEOIS fb89650aa1 [REF]GOLEM Resources : now each model has its file, its view too (better for debugging) 2018-02-18 14:10:30 +01:00
Fabien BOURGEOIS 14729e73f1 [MOV]Rename golem_ressources module to golem_resource, and apply the same thing of filenames 2018-02-18 13:58:33 +01:00
Fabien BOURGEOIS 2c7fb63984 [REF]GOLEM Resource : view reorganization 2018-02-18 13:51:46 +01:00
Fabien BOURGEOIS e1f2a2a47a [ADD]GOLEM Resource : new base security for all models 2018-02-18 13:45:31 +01:00
Fabien BOURGEOIS fe0d57dffc [REF]GOLEM Resources : huge code refactoring, renamings etc. 2018-02-18 13:45:31 +01:00
Fabien BOURGEOIS 2b70d2c1b0 [REF]GOLEM Resources : wizard should be in wizard folder 2018-02-18 08:55:13 +01:00
Fabien BOURGEOIS 661c7fecfe [IMP]GOLEM Resource reservation rejection : enhance quality, use more common idioms 2018-02-18 08:20:39 +01:00
Fabien BOURGEOIS 89319bd7e5 [IMP]GOLEM Resources : add icon, menu reorganization 2018-02-18 07:59:24 +01:00
Fabien BOURGEOIS 9f9459df45 [TYPO]Add updated copyright notices 2018-02-18 07:27:32 +01:00
michel 6e30c39569 [TYPO] 2018-02-15 10:16:51 +01:00
michel 26c592204b [BUG] Add option saison field 2018-02-15 10:15:54 +01:00
eloyoussef 02aef2093a Ajout du wizard en cas de refus + Validation au cas ou ressource le permet 2018-02-14 13:44:37 +01:00
michel f3260ca757 [Bug] Add fonction to Get default season 2018-02-13 16:30:15 +01:00
eloyoussef eccc217882 Ajout des boutons de validation et du filtre sur la liste des résérvation 2018-02-13 15:04:55 +01:00
eloyoussef b389be7bbc Adding fields to resources and reservation : Validation 2018-02-13 14:00:16 +01:00
eloyoussef 602a6a778d Merge branch 'youssef_resources' 2018-02-13 13:48:19 +01:00
Fabien BOURGEOIS bf8fc34b6b [IMP][QUa]GOLEM Member Account enhancements : styles, tree removal (perf), renamings, copyright notices... 2018-02-12 18:54:56 +01:00
michel bfa9298cef [TMP] 2018-02-12 17:45:34 +01:00
michel d53231739d [Translate] to FR 2018-02-12 16:56:05 +01:00
michel 624181c903 [TMP] 2018-02-12 16:30:28 +01:00
eloyoussef 6e4cae64f4 prendre en compte les remarques relatives aux réservation sur une période d'indisponibilité 2018-02-12 16:05:52 +01:00
michel e4ea0a3187 [TMP] state last payment on member form and tree viwes 2018-02-12 16:00:06 +01:00
michel c296a75bb4 / 2018-02-12 10:58:27 +01:00
michel 1ef8c5a6aa / 2018-02-12 08:54:45 +01:00
eloyoussef 3766f49805 1er version du modèle reservation, avec contraintes de disponibilité operationnelles 2018-02-10 00:05:36 +01:00
michel c844cf732f [TMP] beginning of state of last invoice 2018-02-09 19:44:18 +01:00
michel 30d218c64e / 2018-02-09 15:59:27 +01:00
michel a36a3952d0 / 2018-02-09 14:34:39 +01:00
michel 1531a3c7b8 [TMP] beginning of state of last invoice 2018-02-09 14:30:08 +01:00
eloyoussef 7dc2213593 Réalisation des améliorations proposés. 2018-02-08 23:21:33 +01:00
michel 5f8433e112 [TMP] No edit saison 2018-02-08 17:14:49 +01:00
michel e26cd1c149 [New] Module Golem member account 2018-02-08 17:01:41 +01:00
eloyoussef 15a23e460f Améliorations syntaxiques 2018-02-08 12:22:52 +01:00
eloyoussef 3a42ea0a54 finalisation du smart button et contraint d'heure 2018-02-08 12:02:46 +01:00
michel 8c102ff103 [TMP] Button style and currency 2018-02-08 10:18:04 +01:00
michel 7e236226b7 [TMP] Add Smartbutton invoices in member form 2018-02-08 09:22:26 +01:00
eloyoussef 4cec863372 Adding comments to views and fixing the availibility configuration 2018-02-08 00:58:23 +01:00
eloyoussef 25acf52d5e Ajout d'un modèle hour pour la gestion des horaires de disponibilité 2018-02-07 18:13:02 +01:00
eloyoussef 7eda2d4a98 Comments added to models 2018-02-07 10:16:12 +01:00
eloyoussef d814343758 first version of golem ressource, models : resources and reservation 2018-02-07 01:44:48 +01:00
michel 293109fe3c open_partner_invoices 2018-02-06 19:18:11 +01:00
michel 4d01b8d074 [TMP] Add Smartbutton invoices in member form 2018-02-06 14:41:55 +01:00
michel edd333f0ae [TMP] Change color if is payment delayed. 2018-02-06 10:38:18 +01:00
michel 68480e421d [TMP] filter and group date OK 2018-02-05 17:02:55 +01:00
michel ee432805c4 [TMP] filter date 2018-02-05 15:56:52 +01:00
michel df9cdede2d [Typo] 2018-02-05 11:51:57 +01:00
michel a4237fd1c9 [TMP] filter payment in seven days and thirty days 2018-02-05 11:51:20 +01:00
michel d53795aad4 [TMP] Form view 2018-02-05 11:20:45 +01:00
michel 8b9eb0150f [TMP]Add field reference in tree and Typo in model 2018-02-02 18:29:10 +01:00
michel 23caebbce9 [TMP]Add payment_date filter and groupe search 2018-02-02 18:08:16 +01:00
michel 197e9705e0 [TMP] Add field reference 2018-02-02 16:27:45 +01:00
michel 66208d8ca4 [TMP)Add field number bank check 2018-02-02 13:58:36 +01:00
michel fdecad9b99 [TMP]Filter date 2018-02-02 13:57:39 +01:00
michel 503d482c25 [TMP] Translate FR 2018-02-01 18:29:09 +00:00
michel 1307a5458b [TMP]Update number 2018-02-01 18:29:09 +00:00
michel f314c3a76f [TMP] Text msg check_period 2018-02-01 18:29:09 +00:00
michel 52ef7282d6 [TMP) Computed for is_fullseason 2018-02-01 18:29:09 +00:00
michel 797461ab9e [TYPO]readonly 2018-02-01 18:29:09 +00:00
michel d2f379aeef [TMP) add computed for is_fullseason 2018-02-01 18:29:09 +00:00
michel 2310a56a1b [TMP] Display date in if_recurent 2018-02-01 18:29:09 +00:00
michel 8333992f1a / 2018-02-01 18:29:09 +00:00
michel dc88b0d9c4 [TMP] Date for is_recurent. 2018-02-01 18:29:09 +00:00
michel 22118011ce [TMP] Msg and check activity date start end date stop. 2018-02-01 18:29:09 +00:00
michel f8fb3b914d [TMP]Version update and author. 2018-02-01 18:29:08 +00:00
michel 31632cad9b [TMP] msg 2018-02-01 18:29:08 +00:00
michel 163e4d2d1c [TMP] Check the date start ans date end related to season date 2018-02-01 18:29:08 +00:00
michel 03e56bd8e3 [TMP] Check the date start ans date end related to season date 2018-02-01 18:29:08 +00:00
michel ddfedce0cf [TMP] Check the date start ans date end related to season date 2018-02-01 18:29:08 +00:00
Fabien BOURGEOIS 05c11c52cd [IMP]GOLEM Family : allow family creation from member, only if saved, with current member as first one 2018-01-29 16:01:36 +01:00
Fabien BOURGEOIS 4e2cee7d05 [IMP]GOLEM Family : after michel new features merging, some typos 2018-01-29 15:35:52 +01:00
Fabien BOURGEOIS f30bd35a81 Merge branch 'michel_famille' 2018-01-29 15:25:16 +01:00
michel 2c5ea62f0e [TMP]famille to Famille 2018-01-29 10:16:17 +01:00
michel f033db0e1b [TMP]famille to Famille 2018-01-29 09:55:10 +01:00
michel 36b0440dd6 [TMP] form family in form member and translate fr 2018-01-26 19:03:51 +01:00
michel 213fe4005c [tmp]/ 2018-01-26 17:51:50 +01:00
michel cc0c6b9b61 [TMP]If family member family notbook is visible 2018-01-26 13:51:37 +01:00
michel ed34d84a18 / 2018-01-25 15:45:06 +01:00
michel 08510d0762 [TMP]Family form in member form 2018-01-25 14:26:59 +01:00
michel d69f8f7a10 [TMP]Family form in member form 2018-01-25 13:39:07 +01:00
michel 4232d3da73 [TMP]Title style 2018-01-25 10:13:36 +01:00
michel 3b300442b2 [TMP]Display family info in member 2018-01-25 10:02:03 +01:00
michel 79222a4b94 [TMP] add context default_family_id 2018-01-23 16:16:40 +01:00
michel 6d206e0795 [TMP] check if member.family_id 2018-01-23 15:28:56 +01:00
michel ff6b67e27b [TMP] Add Sets as family address if there was no precedence 2018-01-23 15:00:02 +01:00
michel 5714cab5ad [TMP]Add test on zip and city 2018-01-23 11:36:54 +01:00
michel 1a57c993e1 [TMP]update if family.member 2018-01-23 11:14:39 +01:00
michel 94df44087b [TMP]context check 2018-01-23 11:12:48 +01:00
michel 1f974cc217 [TMP]No delete member in member family list 2018-01-23 10:42:15 +01:00
michel 79c683b047 [TMP]Onchange adresse family 2018-01-22 17:47:50 +01:00
michel 57c206039e / 2018-01-22 17:18:49 +01:00
michel e5cf4ad9d4 [TMP] change metode onchange_member 2018-01-22 12:37:06 +01:00
michel 3c795728b5 / 2018-01-22 09:26:22 +01:00
Fabien BOURGEOIS 14220f938b [TYPO]Bad fields on season testing 2018-01-19 07:54:47 +01:00
michel 30dad99689 [TMP] change metode onchange_member 2018-01-18 16:11:36 +01:00
michel c5b86c609e [TMP]Translate FR/fr, and unit test 2018-01-18 15:27:35 +01:00
michel 39fc7085b2 [TMP] Add groupe family 2018-01-18 14:19:50 +01:00
michel de2ac3d99b [TMP] Remove smart button family 2018-01-18 11:29:41 +01:00
michel 9bef8ef4ca [TMP] Sets as member address if there was no precedence 2018-01-18 11:07:36 +01:00
michel e7ba4b91f8 [TMP] Test if date_start date_end is required and vice-versa AND unit test 2018-01-17 15:44:43 +01:00
michel 8cf4a1f07f [TMP] Unit test 2018-01-17 11:18:20 +01:00
michel 409cf1e04a [TMP] Test if date_start date_end is required and vice-versa AND unit test 2018-01-17 11:13:49 +01:00
michel 6bc231fd1e [TMP] Test if date_start date_end is required and vice-versa 2018-01-16 19:23:33 +01:00
michel 5442ab5af3 [TMP] check date and check date in constrains and raise validation error 2018-01-16 17:08:15 +01:00
michel 0841d1de36 [TMP] field name required=True 2018-01-16 11:51:32 +01:00
Fabien BOURGEOIS 28407b4acf [FIX]GOLEM SEASON : use update for onchange + unit test warning on membership creation 2018-01-16 10:53:16 +01:00
michel 5143c1d985 [TMP] Test OK ? 2018-01-15 17:03:12 +01:00
michel 126509768d [TMP] Test 2018-01-15 16:25:27 +01:00
michel 7c0746f98d [TMP]Test 2018-01-15 15:48:51 +01:00
michel 96d84546c2 [TMP] Test 2018-01-15 15:47:39 +01:00
michel a0cc9dcb48 [TMP] Test 2018-01-15 15:40:22 +01:00
michel 0bc3ea6ca3 [TMP] Test 2018-01-15 15:37:09 +01:00
michel f21a7b303c [TMP] Test 2018-01-15 14:13:22 +01:00
michel 985b5ec055 [TMP] test 2018-01-15 12:05:01 +01:00
michel 85d545d530 [TMP] Test 2018-01-15 12:00:50 +01:00
michel ec24ee4a48 [TMP] update inchange season date 2018-01-12 09:52:45 +01:00
michel 0e6efdaf46 [TMP] no create membership 2018-01-12 09:50:01 +01:00
michel 0bc15f059e [TMP]Search family 2018-01-11 17:44:19 +01:00
michel 5197aa9935 [TMP] Delete contacts menu 2018-01-11 17:04:42 +01:00
michel f1a4380a85 [TMP] load membership type date if exist 2018-01-11 14:51:18 +01:00
michel 6eb8b69ad9 Strart work search family 2018-01-11 10:03:55 +01:00
michel 485a45f217 [TPM] Membership type -> Link season 2018-01-10 21:51:39 +01:00
michel a3ea12191f [i18n]Update french translation : from golem_season 2018-01-10 17:56:05 +01:00
michel 52137f3829 [TPM] Membership type -> Link season 2018-01-10 17:48:23 +01:00
michel 66c4f8f75a [IMP]Change name of is free, is paid 2018-01-10 10:41:39 +01:00
michel 1d2b6d5123 [IMP]Search per activity and free and paid filters. 2018-01-09 17:15:48 +01:00
Fabien Bourgeois 4e97801780 [i18n]Update french translation : from member to "usager" 2017-06-28 17:29:19 +02:00
Fabien Bourgeois 1b389a3670 [i18n]Tags renamed to categories, for contacts and partners 2017-06-28 17:29:19 +02:00
Fabien Bourgeois a6b65dfa53 [FIX]Season member number generation : avoid useless loop when default season is changed 2017-06-28 16:25:00 +02:00
Fabien Bourgeois 13a7785fe5 [FIX]GOLEM Number config : now correcly handling only for new 2017-06-28 15:38:36 +02:00
Fabien Bourgeois dcefa1dda6 [IMP]Activity duplication : copy category too 2017-06-20 16:41:22 +02:00
Fabien Bourgeois a77b38b74e [FIX]Member problem on onchange parent_id, because member_id is one2many, not many2one : replace member widget on contact form by button 2017-06-20 16:38:24 +02:00
Fabien Bourgeois 444bc1fbf6 [FIX]Security access fixes 2017-06-20 16:37:40 +02:00
Fabien Bourgeois 7421b88b1e [FIX]GOLEM Member Number generation : fix for apply_config without whole recomputing 2017-06-20 08:23:32 +02:00
Fabien Bourgeois 112902d82e [FIX]GOLEM Member : numbers where not correcly fixed as empty when per season 2017-06-20 08:05:11 +02:00
Fabien Bourgeois 1fbfbb24ac [IMP]GOLEM Season tests update to v10 2017-06-20 07:35:02 +02:00
Fabien Bourgeois 58f71503e5 [QUA]Fix tests for activity places (bad import) 2017-06-19 18:14:18 +02:00
Fabien Bourgeois 9660aba19e [FIX]Payment occurence fix : bad loop 2017-06-19 18:14:00 +02:00
Fabien Bourgeois 94dcc2aa7d [FIX]GOLEM Payment : default rights for models 2017-06-15 05:23:58 +02:00
Fabien Bourgeois d37b6c3147 [i18n]French translations updated 2017-06-15 01:22:21 +02:00
Fabien Bourgeois 0b3c3297da [ADD]Registration state : wizard to create invoice and payment, functional state (but not complete ;)) 2017-06-15 01:14:20 +02:00
Fabien Bourgeois 8a1f8dcc48 [ADD][WIP]Registration state : wizrd to create invoice and payments, according to selected schedule 2017-06-14 23:50:35 +02:00
Fabien Bourgeois b51dbb2df7 [ADD]GOLEM Payment, now just with payment schedules 2017-06-14 23:48:18 +02:00
Fabien Bourgeois 97d7702e2d [IMP]Registration view of total on member tree 2017-06-14 23:47:55 +02:00
Fabien Bourgeois 415fcbf64c [IMP]Activity registration : add base price, not invoice on default tree 2017-06-14 22:36:38 +02:00
Fabien Bourgeois 7dfb07b48c [MIG][IMP]GOLEM Membership to v3 2017-06-14 09:06:47 +02:00
Fabien Bourgeois 2925c26369 [IMP]GOLEM Activity : add accounting tab 2017-06-14 08:16:17 +02:00
Fabien Bourgeois 96dce9d261 [IMP]GOLEM Activity registrations : add group by season + improve member acitvities listing 2017-06-07 16:44:32 +02:00
Fabien Bourgeois c6cc973489 [FIX]GOLEM Activity : default category is gone, do not context it on activity list 2017-06-05 18:05:28 +02:00
Fabien Bourgeois 67c428d4dd [FIX]Minor filters should be separated from default season 2017-06-05 17:47:07 +02:00
Fabien Bourgeois 775fef939b [CHG]Major menu reworking for all modules 2017-06-05 17:30:30 +02:00
Fabien Bourgeois 30e0e4fa31 [FIX]Security : base GOLEM user should be able to write on products too (for activities) 2017-06-05 16:29:30 +02:00
Fabien Bourgeois 3ef8132f3d [FIX]Security : base GOLEM user should be partner manager too 2017-06-05 16:00:59 +02:00
Fabien Bourgeois 4d99cd527f [ADD]GOLEM Member number : ability to fix number from 2017-06-05 15:55:50 +02:00
Fabien Bourgeois 203e6434aa [MIG]GOLEM Family Minor glue to v10 2017-06-05 14:57:15 +02:00
Fabien Bourgeois 193c24e2b7 [MIG]GOLEM Family to v10 2017-06-05 12:08:57 +02:00
Fabien Bourgeois 068c327efd [IMP]Activity : best data set for bootstrap categories 2017-06-05 11:27:44 +02:00
Fabien Bourgeois 438ec5ccac [IMP]GOLEM Activity : type are now dynamics and configurables 2017-06-05 11:22:34 +02:00
Fabien Bourgeois 11b8643d21 [ADD]Member : image permission as new field 2017-06-05 10:30:02 +02:00
Fabien Bourgeois 49c5c7481a [IMP]State id according to country id on GOLEM Member + [FIX]number_name field should be empty on creation 2017-06-05 10:02:38 +02:00
Fabien Bourgeois 698efaea53 [FIX][WIP]Avoid merging of member ids by preventing member merge 2017-06-05 09:48:01 +02:00
Fabien Bourgeois 5c6d11526e [i18n]Rename french company to more abstract term 2017-06-05 08:53:10 +02:00
Fabien Bourgeois ad2afa09dc [IMP][UI]Member : add name compsoed with number and name, for form view 2017-06-05 08:46:41 +02:00
Fabien Bourgeois 5ddb5a91e7 [QUA]Minor enhancement for Member class 2017-06-05 08:37:41 +02:00
Fabien Bourgeois e0f517fb45 [FIX]CSS missing for avatar 2017-06-05 08:37:16 +02:00
Fabien Bourgeois f89074e257 [IMP][UI]Add Kanban green box for GOLEM members 2017-06-04 19:03:34 +02:00
Fabien Bourgeois ec9b16c1eb [FIX][UI]Member kanban avatar is now correct sized 2017-06-04 18:14:17 +02:00
Fabien Bourgeois 7f6920b78b [IMP]Member and contact UI form differenciation 2017-06-04 18:03:42 +02:00
Fabien Bourgeois 6c2cd40020 [ADD]Partner merger spinoff when not using CRM module 2017-06-04 17:23:55 +02:00
Fabien BOURGEOIS dd2802da24 [FIX]GOLEM fix default season button (recmputing all is_current) 2017-05-02 01:31:45 +02:00
Fabien BOURGEOIS 4a9cec73c9 [MIG][IMP]GOLEM activity registration place migration to v10, and better guidelines 2017-05-02 00:37:22 +02:00
Fabien BOURGEOIS a955633375 [IMP]Activity registration used place computing : as used by external module, should not be private method 2017-05-01 23:44:36 +02:00
Fabien BOURGEOIS c4d8c5f334 [MIG][IMP]GOLEM activity registration state migration to v10, and better guidelines 2017-05-01 23:43:59 +02:00
Fabien BOURGEOIS 9e7fc9b1a3 [FIX]GOLEM activity form : use name, not only string for <page> field 2017-05-01 23:21:32 +02:00
Fabien BOURGEOIS 96822910a1 [MIG][IMP]GOLEM activity registration migration to v10, and better guidelines 2017-05-01 23:20:04 +02:00
Fabien BOURGEOIS bccf22aa3f [MIG][IMP]GOLEM member skils migration to v10, and better guidelines 2017-05-01 23:19:44 +02:00
Fabien BOURGEOIS 4162f2c259 [MIG][IMP]GOLEM member family quotient migration to v10, and better guidelines 2017-05-01 22:56:16 +02:00
Fabien BOURGEOIS 657a3da259 [i18n]GOLEM Member Skills french translation updated 2017-05-01 22:52:00 +02:00
Fabien BOURGEOIS 13f1db24d9 [FIX]Member kanban view : need image_small field 2017-05-01 22:34:14 +02:00
Fabien BOURGEOIS 4072ae829e [MIG][IMP]GOLEM member minor migration to v10, and better guidelines 2017-05-01 22:18:00 +02:00
Fabien BOURGEOIS 756017a697 [FIX]Member number config default prefix when not fixed 2017-05-01 22:14:29 +02:00
Fabien BOURGEOIS cbec4b22a6 [MIG][IMP]GOLEM member migration to v10, and better guidelines 2017-05-01 19:17:53 +02:00
Fabien BOURGEOIS be30d16435 [MIG][IMP]GOLEM Activity migration to v10, and better guidelines 2017-05-01 17:49:21 +02:00
Fabien BOURGEOIS d8f05b2b11 [TYPO] 2017-05-01 17:23:57 +02:00
Fabien BOURGEOIS 48c081d16f [MIG][IMP]GOLEM Season migration to v10, and better guidelines 2017-05-01 16:27:16 +02:00
Fabien BOURGEOIS 8efabe7ec8 [MIG][IMP]GOLEM Base migration to v10, and better guidelines 2017-05-01 16:26:51 +02:00
Fabien Bourgeois e87e69f951 [REM]useless __init__.py file on top package 2017-04-29 09:17:00 +02:00
Fabien Bourgeois d21083f808 [WIP][CHG]GOLEM migration to v10 2017-04-29 09:16:41 +02:00
Fabien Bourgeois 1b1609687f [IMP]GOLEM Activity Registration : default access 2016-12-04 18:31:43 +01:00
Fabien Bourgeois 8245c63761 [IMP]Activity : form hour_end to more coherent hour_stop 2016-10-26 09:40:38 +02:00
Fabien Bourgeois 2a0d7abc6a [FIX]Remove docstring from manifest files : causing odoo to strangely crash at launch 2016-10-26 08:38:09 +02:00
Fabien Bourgeois 176a8ec377 [REF]Better module version numbering + pylint fixes 2016-10-25 15:14:24 +02:00
Fabien Bourgeois 69f970b115 [QUA]GOLEM Member model Pylint 2016-10-25 15:14:24 +02:00
Fabien Bourgeois 5eccb41829 [IMP]GOLEM Activity Registration Export french translation 2016-10-16 19:16:10 +02:00
Fabien Bourgeois 368d11b23e [FIX]GOLEM Activity Registration Export quick fix for display 2016-10-16 19:16:10 +02:00
Fabien Bourgeois 1101211d7a [ADD]GOLEM Activity Registration Export : basic CSV export for activity members 2016-10-16 18:01:48 +02:00
Fabien Bourgeois 2df15cae29 [IMP]GOLEM Activity Registration State french translation 2016-10-16 11:47:07 +02:00
Fabien Bourgeois 1328a5b303 [FIX]GOLEM Activity Registration State tree view fix 2016-10-16 11:47:07 +02:00
Fabien Bourgeois c98e9331db [FIX][TYPO]GOLEM Activity Registration fr i18n fix 2016-10-16 11:47:01 +02:00
Fabien Bourgeois 4fdbfb8638 [MIG]GOLEM Activity Session Registration State migration withtout sessions... #2 2016-10-16 11:11:14 +02:00
Fabien Bourgeois 986c445080 [MIG]GOLEM Activity Session Registration State migration withtout sessions... 2016-10-16 11:09:29 +02:00
Fabien Bourgeois 90967da7de [IMP]GOLEM Activity : updated french translation 2016-10-16 10:55:28 +02:00
Fabien Bourgeois dcab17ebaa [IMP]GOLEM Activities with default as services, need special data because of property company dependent fields... 2016-10-10 19:57:00 +02:00
Fabien Bourgeois 0958c7777f [IMP]GOLEM Activity Places Extended migration from sessions to new pure activities : end 2016-10-10 18:28:53 +02:00
Fabien Bourgeois 053f58891e [IMP]GOLEM Activity better naming for last tab + renaming of registration places 2016-10-10 18:19:39 +02:00
Fabien Bourgeois c9820c38d8 [IMP]GOLEM Activity Registration french translation adaptations 2016-10-10 18:15:01 +02:00
Fabien Bourgeois 527bbfd01e [IMP]GOLEM Activity Session Registration renaming : last session names in files 2016-10-10 18:08:39 +02:00
Fabien Bourgeois dc37909b19 [IMP][WIP][IMP]GOLEM Activity Places Extended migration from sessions to new pure activities : renaming 2016-10-10 18:08:07 +02:00
Fabien Bourgeois d1db9ae3b6 [IMP]GOLEM Activity Registrations migration from sessions to new pure activities 2016-10-10 17:57:42 +02:00
Fabien Bourgeois 22d3f91e0c [FIX]GOLEM Activity default date_stop to date_end for season 2016-10-10 16:53:00 +02:00
Fabien Bourgeois 56721a1008 [IMP]GOLEM Activity simplification translation 2016-10-10 16:48:38 +02:00
Fabien Bourgeois 6925575c30 [IMP]GOLEM Activity : merge session with main activity and reform views 2016-10-10 16:25:55 +02:00
Fabien Bourgeois bd9b795c4f [ADD][WIP]GOLEM Activity Session Registration States management 2016-10-10 11:28:28 +02:00
Fabien Bourgeois 9dc2228bc4 [IMP]GOLEM Activity Session Registrations : no state and not yet invoicing so no invoice mentions needed ATM 2016-10-10 11:21:39 +02:00
Fabien Bourgeois 30ddbbccc2 [IMP]GOLEM Activity Session Registrations simplification : no state handling per default 2016-10-10 11:09:57 +02:00
Fabien Bourgeois d13f19aed9 [IMP]GOLEM Session Activity Registration : let removal of already canceled registrations happen 2016-10-09 12:47:08 +02:00
Fabien Bourgeois ba7aa76952 [FIX]GOLEM Session Activity Registration : correct handling of places used and remaining according to registration state 2016-10-09 12:43:23 +02:00
Fabien Bourgeois fea7494efc [IMP]GOLEM Activity Session Registration form for members : readonly when member is not yet created 2016-10-09 12:37:09 +02:00
Fabien Bourgeois c2d2b0481e [IMP]GOLEM Activity Session Registration handling of cancelations 2016-10-09 11:01:09 +02:00
Fabien Bourgeois 150dcec468 [IMP]GOLEM Base : adapt base dependencies 2016-10-09 11:00:43 +02:00
Fabien Bourgeois ebe3c9bde5 [IMP]GOLEM Activity Session Registration state validation from draft to confirmed 2016-09-22 17:15:14 +02:00
Fabien Bourgeois eb062cae35 [IMP]GOLEM Activity Session Registration state field for validation 2016-09-22 14:55:57 +02:00
Fabien Bourgeois 3485948978 [IMP]GOLEM Activity Session Registration add the capacity to create new registrations from tree 2016-09-22 14:08:52 +02:00
Fabien Bourgeois 2cef0be513 [IMP]GOLEM Activity Session Registration : translations up-to-date 2016-09-22 14:00:01 +02:00
Fabien Bourgeois a36c88a113 [IMP]GOLEM Activity Session Registration : use SQL constraint when possible, forbids duplicates 2016-09-22 13:53:33 +02:00
Fabien Bourgeois 7ea95dbac8 [IMP][FIX][WIP]GOLEM Activity Session Registration constraints for avoid duplicates or bad season subscription 2016-09-22 11:08:03 +02:00
Fabien Bourgeois 65898e80b7 [IMP]GOLEM Activity Session Registration : usage of existing related is_current instead of reocmputed default_season + fixes on registrations from activities 2016-09-22 10:24:28 +02:00
Fabien Bourgeois 5b233e19ee [IMP]GOLEM Activity Session Registrations filters and searches 2016-09-22 10:15:02 +02:00
Fabien Bourgeois 0608acf109 [ADD]GOLEM Activity Session Registrations French Translation 2016-09-22 10:13:15 +02:00
Fabien Bourgeois f29c78aa71 [IMP]GOLEM Registration from Activity Session Form 2016-09-22 09:06:13 +02:00
Fabien Bourgeois 2359854ba8 [ADD]GOLEM Activity Session Registrations : adapt session view and move all places management to new paradigm 2016-09-21 18:22:01 +02:00
Fabien Bourgeois 419feb58c5 [IMP]GOLEM Activity Session : 20 places per default, not 0 2016-09-19 05:35:44 +02:00
Fabien Bourgeois 93d9b235e5 [FIX]GOLEM Activity Session Place : do not replace full search view but inherit from it ! 2016-09-16 11:12:47 +02:00
Fabien Bourgeois aa11f6d09f [ADD]GOLEM Session Registration subscription form member view to new system ok 2016-09-16 08:41:41 +02:00
Fabien Bourgeois c1568a15af [IMP]GOLEM Activity Session list : show default season per default 2016-09-15 17:56:48 +02:00
Fabien Bourgeois 30a3da45dc [FIX][MINOR]Bad filename 2016-09-15 17:24:22 +02:00
Fabien Bourgeois 6091683c75 [TMP][ADD]GOLEM Activity Session Registration and link to invoice 2016-09-15 16:28:27 +02:00
Fabien Bourgeois a292fd13b0 [IMP]GOLEM Activity Session on GOLEM Member view : explain only current seasons are shown 2016-09-09 16:11:54 +02:00
Fabien Bourgeois d135d09661 [FIX]GOLEM Activity Session : default_code belong to product template, not session 2016-09-09 16:01:20 +02:00
Fabien Bourgeois 082b450b19 [IMP]GOLEM family : translation improvements 2016-09-09 11:08:37 +02:00
Fabien Bourgeois 5950846e1e [ADD]GOLEM Family KANBAN view 2016-09-08 12:45:35 +02:00
Fabien Bourgeois b62da94ded [FIX]Add one2many kanban contribution and fix by serpentcs 2016-09-08 12:45:35 +02:00
Fabien Bourgeois f891024ce0 [ADD]GOLEM Member Kanban view 2016-09-08 12:45:35 +02:00
165 changed files with 10610 additions and 4425 deletions

View File

@ -18,15 +18,14 @@
{
'name': 'GOLEM activities',
'summary': 'Extends Odoo products for multi-activity',
'description': 'Multi-activities management',
'version': '0.1',
'version': '10.0.2.1.0',
'category': 'GOLEM',
'author': 'Fabien Bourgeois',
'author': 'Fabien Bourgeois, Michel Dessenne',
'license': 'AGPL-3',
'application': True,
'installable': True,
'depends': ['product', 'golem_base', 'golem_season'],
'depends': ['product', 'account', 'golem_base', 'golem_season'],
'data': ['security/ir.model.access.csv',
'data/golem_activity_data.xml',
'views/golem_activity_view.xml']
'views/golem_activity_views.xml']
}

View File

@ -17,30 +17,62 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<openerp>
<odoo>
<data noupdate="1">
<!-- Base data for activities -->
<record model="product.category" id="golem_product_category_activities">
<field name="name">Activités</field>
<field name="property_account_income_categ"
search="[('code', '=', '706000')]" />
<field name="property_account_expense_categ"
search="[('code', '=', '604000')]" />
<!-- Good default for product categories -->
<record id="property_account_expense_categ_id" model="ir.property">
<field name="name">property_account_expense_categ_id</field>
<field name="fields_id" search="[('model','=','product.category'),('name','=','property_account_expense_categ_id')]"/>
<field name="value">account.account,610</field>
<field name="company_id" ref="base.main_company"/>
</record>
<record id="property_account_income_categ_id" model="ir.property">
<field name="name">property_account_income_categ_id</field>
<field name="fields_id" search="[('model','=','product.category'),('name','=','property_account_income_categ_id')]"/>
<field name="value">account.account,854</field>
<field name="company_id" ref="base.main_company"/>
</record>
<!-- Base data for activities -->
<record model="golem.activity.type" id="golem_activity_type_activity">
<field name="name">Activity</field>
<field name="is_recurrent">1</field>
</record>
<record model="golem.activity.type" id="golem_activity_type_workshop">
<field name="name">Workshop</field>
<field name="is_recurrent">0</field>
</record>
<record model="golem.activity.type" id="golem_activity_type_training">
<field name="name">Training</field>
<field name="is_recurrent">0</field>
</record>
<record model="product.category" id="golem_product_category_wellbeing">
<field name="name">Bien-Être</field>
<field name="parent_id"
eval="ref('golem_activity.golem_product_category_activities')" />
eval="ref('product.product_category_all')" />
<field name="property_account_income_categ_id"
search="[('code', '=', '706000')]" />
<field name="property_account_expense_categ_id"
search="[('code', '=', '604000')]" />
</record>
<record model="product.category" id="golem_product_category_martial">
<field name="name">Arts martiaux</field>
<field name="parent_id"
eval="ref('golem_activity.golem_product_category_activities')" />
eval="ref('product.product_category_all')" />
<field name="property_account_income_categ_id"
search="[('code', '=', '706000')]" />
<field name="property_account_expense_categ_id"
search="[('code', '=', '604000')]" />
</record>
<record model="product.category" id="golem_product_category_dance">
<field name="name">Danse</field>
<field name="parent_id"
eval="ref('golem_activity.golem_product_category_activities')" />
eval="ref('product.product_category_all')" />
<field name="property_account_income_categ_id"
search="[('code', '=', '706000')]" />
<field name="property_account_expense_categ_id"
search="[('code', '=', '604000')]" />
</record>
</data>
</openerp>
</odoo>

View File

@ -4,10 +4,10 @@
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-06-28 03:15+0000\n"
"PO-Revision-Date: 2016-06-28 03:15+0000\n"
"POT-Creation-Date: 2018-02-01 16:28+0000\n"
"PO-Revision-Date: 2018-02-01 16:28+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@ -17,214 +17,282 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: golem_activity
#: field:golem.activity,product_variant_count:0
msgid "# of Product Variants"
msgstr "# de variantes d'articles"
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_product_variant_count
msgid "# Product Variants"
msgstr "# Variantes d'articles"
#. module: golem_activity
#: help:golem.activity,description_sale:0
#: model:ir.model.fields,help:golem_activity.field_golem_activity_description_sale
msgid "A description of the Product that you want to communicate to your customers. This description will be copied to every Sale Order, Delivery Order and Customer Invoice/Refund"
msgstr "Une description de l'article que vous voulez communiquer à vos utilisateurs. Cette description sera utilisée dans chaque bon de commande, bon de livraison et facture client ou avoir."
msgstr "La description transmise à vos clients. Elle apparaîtra sur chacun des bons de commande, bons de livraison et factures/avoirs destinés à vos clients."
#. module: golem_activity
#: help:golem.activity,description_purchase:0
msgid "A description of the Product that you want to communicate to your suppliers. This description will be copied to every Purchase Order, Receipt and Supplier Invoice/Refund."
msgstr "Une description de l'article que vous voulez communiquer à vos utilisateurs. Cette description sera utilisée dans chaque bon de commande, bon de livraison et facture client ou avoir."
#: model:ir.model.fields,help:golem_activity.field_golem_activity_description_purchase
msgid "A description of the Product that you want to communicate to your vendors. This description will be copied to every Purchase Order, Receipt and Vendor Bill/Refund."
msgstr "La description du produit communiquée à vos fournisseurs. Elle sera copiée dans chaque bon de commande, réception et facture/avoir destinés à vos fournisseur."
#. module: golem_activity
#: help:golem.activity,description:0
#: model:ir.model.fields,help:golem_activity.field_golem_activity_description
msgid "A precise description of the Product, used only for internal information purposes."
msgstr "Une description précise de l'article, utilisée seulement pour de l'information interne (hors factures)."
msgstr "Une description précise du produit uniquement utilisée en interne."
#. module: golem_activity
#: field:golem.activity,active:0
#: model:ir.model.fields,help:golem_activity.field_golem_activity_type
msgid "A stockable product is a product for which you manage stock. The \"Inventory\" app has to be installed.\n"
"A consumable product, on the other hand, is a product for which stock is not managed.\n"
"A service is a non-material product you provide.\n"
"A digital content is a non-material product you sell online. The files attached to the products are the one that are sold on the e-commerce such as e-books, music, pictures,... The \"Digital Product\" module has to be installed."
msgstr "Un produit « stockable » est un produit pour lequel vous désirez gérer le stock. L'application « Inventaire » doit être installée.\n"
"Un produit « consommable », en revanche, est un produit non géré en stock.\n"
"Un service est un bien immatériel que vous fournissez ou achetez.\n"
"Un contenu numérique est un bien immatériel que vous vendez en ligne. Les fichier liés aux produits sont ceux vendu sur la boutique en ligne (livres électronique, musique, photos, …). Le module « Produits numériques » doit être installé."
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_active
msgid "Active"
msgstr "Actif"
#. module: golem_activity
#: model:ir.ui.menu,name:golem_activity.activity_menu
#: model:ir.ui.menu,name:golem_activity.golem_activity_menu
#: model:ir.ui.menu,name:golem_activity.golem_activity_menu_list
msgid "Activities"
msgstr "Activités"
#. module: golem_activity
#: model:ir.actions.act_window,name:golem_activity.category_action
#: model:ir.actions.act_window,name:golem_activity.product_category_action
msgid "Activities Categories"
msgstr "Catégories d'activités"
#. module: golem_activity
#: view:golem.activity:golem_activity.view_form
#: model:golem.activity.type,name:golem_activity.golem_activity_type_activity
msgid "Activity"
msgstr "Activité"
#. module: golem_activity
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_form
msgid "Activity Name"
msgstr "Nom de l'activité"
#. module: golem_activity
#: model:product.category,name:golem_activity.golem_product_category_activities
msgid "Activités"
msgstr "Activités"
#: model:ir.ui.menu,name:golem_activity.golem_activity_type_menu_list
msgid "Activity Types"
msgstr "Types d'activité"
#. module: golem_activity
#: field:golem.activity,animator_id:0
#: code:addons/golem_activity/models/golem_activity.py:120
#, python-format
msgid "Activity end date can not be set after linked season end."
msgstr "La date de fin ne peut pas être apprêt la date de fin de la saison."
#. module: golem_activity
#: code:addons/golem_activity/models/golem_activity.py:116
#, python-format
msgid "Activity start date can not be set before linked season start."
msgstr "La date de début ne peut pas être avant la date de début de la saison."
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_type_name
msgid "Activity type"
msgstr "Type d'activité"
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_animator_id
msgid "Animator"
msgstr "Intervenant"
#. module: golem_activity
#: model:product.category,name:golem_activity.golem_product_category_workshops
msgid "Ateliers"
msgstr "Ateliers"
#: model:product.category,name:golem_activity.golem_product_category_martial
msgid "Arts martiaux"
msgstr "Arts martiaux"
#. module: golem_activity
#: field:golem.activity,product_id:0
msgid "Automatically created field to link to parent product.template"
msgstr "Champ créé automatiquement pour lier l'article parent"
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_barcode
msgid "Barcode"
msgstr "Code Barre"
#. module: golem_activity
#: help:golem.activity,list_price:0
#: model:ir.model.fields,help:golem_activity.field_golem_activity_list_price
#: model:ir.model.fields,help:golem_activity.field_golem_activity_lst_price
msgid "Base price to compute the customer price. Sometimes called the catalog price."
msgstr "Prix de base pour le client."
msgstr "Prix de base pour calculer le prix client. Parfois appelé prix catalogue."
#. module: golem_activity
#: view:golem.activity:golem_activity.view_filter
#: model:product.category,name:golem_activity.golem_product_category_wellbeing
msgid "Bien-Être"
msgstr "Bien-Être"
#. module: golem_activity
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_search
msgid "By animator"
msgstr "Par intervenant"
#. module: golem_activity
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_search
msgid "By category"
msgstr "Par catégorie"
#. module: golem_activity
#: field:golem.activity,rental:0
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_search
msgid "By type"
msgstr "Par type"
#. module: golem_activity
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_search
msgid "By weekday"
msgstr "Par jour"
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_purchase_ok
msgid "Can be Purchased"
msgstr "Peut être acheté"
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_rental
msgid "Can be Rent"
msgstr "Peut être loué"
#. module: golem_activity
#: field:golem.activity,sale_ok:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_sale_ok
msgid "Can be Sold"
msgstr "Peut être vendu"
#. module: golem_activity
#: model:ir.ui.menu,name:golem_activity.activity_categ
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_categ_id
msgid "Categ id"
msgstr "Catégorie"
#. module: golem_activity
#: model:ir.ui.menu,name:golem_activity.product_category_menu
msgid "Categories"
msgstr "Catégories"
#. module: golem_activity
#: help:golem.activity,membership:0
#: model:ir.model.fields,help:golem_activity.field_golem_activity_membership
msgid "Check if the product is eligible for membership."
msgstr "Check if the product is eligible for membership."
msgstr "Cochez si l'article est éligible pour l'adhésion"
#. module: golem_activity
#: help:golem.activity,uos_coeff:0
msgid "Coefficient to convert default Unit of Measure to Unit of Sale\n"
" uos = uom * coeff"
msgstr "Coefficient to convert default Unit of Measure to Unit of Sale\n"
" uos = uom * coeff"
#. module: golem_activity
#: field:golem.activity,color:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_color
msgid "Color Index"
msgstr "Color Index"
msgstr "Couleur"
#. module: golem_activity
#: field:golem.activity,company_id:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_company_id
msgid "Company"
msgstr "Société"
#. module: golem_activity
#: help:golem.activity,type:0
msgid "Consumable are product where you don't manage stock, a service is a non-material product provided by a company or an individual."
msgstr "Consumable are product where you don't manage stock, a service is a non-material product provided by a company or an individual."
#: model:ir.ui.menu,name:golem_activity.golem_activity_menu_configuration
msgid "Configuration"
msgstr "Configuration"
#. module: golem_activity
#: field:golem.activity,standard_price:0
msgid "Cost Price"
msgstr "Prix de revient"
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_standard_price
msgid "Cost"
msgstr "Coût"
#. module: golem_activity
#: help:golem.activity,standard_price:0
msgid "Cost price of the product template used for standard stock valuation in accounting and used as a base price on purchase orders. Expressed in the default unit of measure of the product."
msgstr "Cost price of the product template used for standard stock valuation in accounting and used as a base price on purchase orders. Expressed in the default unit of measure of the product."
#: model:ir.model.fields,help:golem_activity.field_golem_activity_standard_price
msgid "Cost of the product, in the default unit of measure of the product."
msgstr "Le prix de revient calculé est exprimé dans l'unité de mesure par défaut de l'article."
#. module: golem_activity
#: field:golem.activity,create_uid:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_create_uid
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_type_create_uid
msgid "Created by"
msgstr "Créé par"
#. module: golem_activity
#: field:golem.activity,create_date:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_create_date
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_type_create_date
msgid "Created on"
msgstr "Créé le"
#. module: golem_activity
#: field:golem.activity,is_current:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_currency_id
msgid "Currency"
msgstr "Devise"
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_is_current
msgid "Current season?"
msgstr "Saison en cours?"
#. module: golem_activity
#: field:golem.activity,taxes_id:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_taxes_id
msgid "Customer Taxes"
msgstr "Taxes"
msgstr "Taxes à la vente"
#. module: golem_activity
#: help:golem.activity,membership_date_from:0
#: model:product.category,name:golem_activity.golem_product_category_dance
msgid "Danse"
msgstr "Danse"
#. module: golem_activity
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_tree
msgid "Date"
msgstr "Date "
#. module: golem_activity
#: model:ir.model.fields,help:golem_activity.field_golem_activity_membership_date_from
msgid "Date from which membership becomes active."
msgstr "Date from which membership becomes active."
msgstr "Date à partir de laquelle l'adhésion devient active."
#. module: golem_activity
#: help:golem.activity,message_last_post:0
msgid "Date of the last message posted on the record."
msgstr "Date of the last message posted on the record."
#. module: golem_activity
#: help:golem.activity,membership_date_to:0
#: model:ir.model.fields,help:golem_activity.field_golem_activity_membership_date_to
msgid "Date until which membership remains active."
msgstr "Date until which membership remains active."
msgstr "Date jusqu'à laquelle l'adhésion reste active."
#. module: golem_activity
#: help:golem.activity,uom_id:0
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_tree
msgid "Day"
msgstr "Jour"
#. module: golem_activity
#: model:ir.model.fields,help:golem_activity.field_golem_activity_uom_id
msgid "Default Unit of Measure used for all stock operation."
msgstr "Default Unit of Measure used for all stock operation."
msgstr "Unité de mesure par défaut utilisée pour toutes les opérations de stock"
#. module: golem_activity
#: help:golem.activity,uom_po_id:0
#: model:ir.model.fields,help:golem_activity.field_golem_activity_uom_po_id
msgid "Default Unit of Measure used for purchase orders. It must be in the same category than the default unit of measure."
msgstr "Default Unit of Measure used for purchase orders. It must be in the same category than the default unit of measure."
msgstr "Unité de mesure par défaut pour les ordres d'achat. Elle doit appartenir à la même catégorie que l'unité de mesure par défaut."
#. module: golem_activity
#: view:golem.activity:golem_activity.view_filter
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_search
msgid "Default season"
msgstr "Saison par défaut"
#. module: golem_activity
#: field:golem.activity,description:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_description
msgid "Description"
msgstr "Description"
#. module: golem_activity
#: view:golem.activity:golem_activity.view_form
msgid "Details"
msgstr "Détails"
#. module: golem_activity
#: field:golem.activity,display_name:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_display_name
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_type_display_name
msgid "Display Name"
msgstr "Nom affiché"
#. module: golem_activity
#: field:golem.activity,ean13:0
msgid "EAN13 Barcode"
msgstr "Code-barres EAN13"
#. module: golem_activity
#: field:golem.activity,date_end:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_date_stop
msgid "End date"
msgstr "Date de fin"
#. module: golem_activity
#: field:golem.activity,property_account_expense:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_property_account_expense_id
msgid "Expense Account"
msgstr "Compte de dépense"
msgstr "Compte de dépenses"
#. module: golem_activity
#: field:golem.activity,message_follower_ids:0
msgid "Followers"
msgstr "Abonnés"
#: code:addons/golem_activity/models/golem_activity.py:138
#: selection:golem.activity,weekday:0
#, python-format
msgid "Friday"
msgstr "Vendredi"
#. module: golem_activity
#: model:ir.actions.act_window,name:golem_activity.action
#: model:ir.actions.act_window,name:golem_activity.golem_activity_action
msgid "GOLEM Activities"
msgstr "Activités"
@ -234,190 +302,167 @@ msgid "GOLEM Activity"
msgstr "Activité"
#. module: golem_activity
#: help:golem.activity,packaging_ids:0
#: model:ir.model,name:golem_activity.model_golem_activity_type
msgid "GOLEM Activity Type"
msgstr "GOLEM Activity Type"
#. module: golem_activity
#: model:ir.actions.act_window,name:golem_activity.golem_activity_type_action
msgid "GOLEM Activity Types"
msgstr "GOLEM Activity Types"
#. module: golem_activity
#: model:ir.model.fields,help:golem_activity.field_golem_activity_packaging_ids
msgid "Gives the different ways to package the same product. This has no impact on the picking order and is mainly used if you use the EDI module."
msgstr "Gives the different ways to package the same product. This has no impact on the picking order and is mainly used if you use the EDI module."
msgstr "Indique les différentes façons d'emballer un même article. Ceci n'a pas d'impact sur les ordres de préparation, et sert principalement si vous activez le module d'EDI."
#. module: golem_activity
#: field:golem.activity,weight:0
msgid "Gross Weight"
msgstr "Gross Weight"
#: model:ir.model.fields,help:golem_activity.field_golem_activity_sequence
msgid "Gives the sequence order when displaying a product list"
msgstr "Indique l'ordre d'affichage lorsqu'une liste d'articles est affichée."
#. module: golem_activity
#: view:golem.activity:golem_activity.view_filter
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_search
msgid "Group By"
msgstr "Grouper par"
#. module: golem_activity
#: help:golem.activity,message_summary:0
msgid "Holds the Chatter summary (number of messages, ...). This summary is directly in html format in order to be inserted in kanban views."
msgstr "Holds the Chatter summary (number of messages, ...). This summary is directly in html format in order to be inserted in kanban views."
#. module: golem_activity
#: field:golem.activity,id:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_id
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_type_id
msgid "ID"
msgstr "ID"
#. module: golem_activity
#: help:golem.activity,message_unread:0
msgid "If checked new messages require your attention."
msgstr "If checked new messages require your attention."
#. module: golem_activity
#: help:golem.activity,active:0
#: model:ir.model.fields,help:golem_activity.field_golem_activity_active
msgid "If unchecked, it will allow you to hide the product without removing it."
msgstr "If unchecked, it will allow you to hide the product without removing it."
msgstr "En décochant cette case, il est possible de masquer l'article sans le supprimer."
#. module: golem_activity
#: field:golem.activity,image:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_image
msgid "Image"
msgstr "Image"
#. module: golem_activity
#: field:golem.activity,property_account_income:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_property_account_income_id
msgid "Income Account"
msgstr "Income Account"
msgstr "Compte de revenus"
#. module: golem_activity
#: view:golem.activity:golem_activity.view_form
msgid "Information"
msgstr "Information"
#. module: golem_activity
#: field:golem.activity,categ_id:0
msgid "Internal Category"
msgstr "Catégorie"
#. module: golem_activity
#: field:golem.activity,default_code:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_default_code
msgid "Internal Reference"
msgstr "Référence"
msgstr "Référence interne"
#. module: golem_activity
#: field:golem.activity,message_is_follower:0
msgid "Is a Follower"
msgstr "Is a Follower"
#: model:ir.model.fields,help:golem_activity.field_golem_activity_barcode
msgid "International Article Number used for product identification."
msgstr "Numéro d'article international (IAN) utilisé pour identifier cet article."
#. module: golem_activity
#: field:golem.activity,is_product_variant:0
msgid "Is product variant"
msgstr "Is product variant"
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_form
msgid "Invoicing"
msgstr "Facturation"
#. module: golem_activity
#: field:golem.activity,message_last_post:0
msgid "Last Message Date"
msgstr "Date du dernier message"
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_is_fullseason
msgid "Is full season?"
msgstr "Est sur toute la saison ?"
#. module: golem_activity
#: field:golem.activity,__last_update:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_is_recurrent
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_type_is_recurrent
msgid "Is recurrent?"
msgstr "Est récurrent ?"
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity___last_update
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_type___last_update
msgid "Last Modified on"
msgstr "Dernière modification le"
msgstr "Dernière Modification le"
#. module: golem_activity
#: field:golem.activity,write_uid:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_type_write_uid
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_write_uid
msgid "Last Updated by"
msgstr "Dernière modification par"
msgstr "Dernière mise à jour par"
#. module: golem_activity
#: field:golem.activity,write_date:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_type_write_date
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_write_date
msgid "Last Updated on"
msgstr "Dernière modification le"
msgstr "Dernière mise à jour le"
#. module: golem_activity
#: model:ir.ui.menu,name:golem_activity.activity_list
msgid "List"
msgstr "Liste"
#. module: golem_activity
#: field:golem.activity,packaging_ids:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_packaging_ids
msgid "Logistical Units"
msgstr "Logistical Units"
msgstr "Unités logistique"
#. module: golem_activity
#: field:golem.activity,seller_id:0
msgid "Main Supplier"
msgstr "Main Supplier"
#. module: golem_activity
#: help:golem.activity,seller_id:0
msgid "Main Supplier who has highest priority in Supplier List."
msgstr "Main Supplier who has highest priority in Supplier List."
#. module: golem_activity
#: field:golem.activity,mes_type:0
msgid "Measure Type"
msgstr "Measure Type"
#. module: golem_activity
#: field:golem.activity,image_medium:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_image_medium
msgid "Medium-sized image"
msgstr "Medium-sized image"
msgstr "Image de taille moyenne"
#. module: golem_activity
#: help:golem.activity,image_medium:0
#: model:ir.model.fields,help:golem_activity.field_golem_activity_image_medium
msgid "Medium-sized image of the product. It is automatically resized as a 128x128px image, with aspect ratio preserved, only when the image exceeds one of those sizes. Use this field in form views or some kanban views."
msgstr "Medium-sized image of the product. It is automatically resized as a 128x128px image, with aspect ratio preserved, only when the image exceeds one of those sizes. Use this field in form views or some kanban views."
msgstr "Image de taille moyenne de l'article. Elle sera automatiquement redimensionnée à 128 x 128 px, en préservent le rapport hauteur/largeur, si l'image dépasse une de ces dimensions. Utilisez ce champ dans les vues formulaire ou certaines vues kanban."
#. module: golem_activity
#: field:golem.activity,membership:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_membership
msgid "Membership"
msgstr "Adhésion"
#. module: golem_activity
#: field:golem.activity,membership_date_to:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_membership_date_to
msgid "Membership End Date"
msgstr "Fin de l'adhésion"
msgstr "Date de fin d'adhésion"
#. module: golem_activity
#: field:golem.activity,membership_date_from:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_membership_date_from
msgid "Membership Start Date"
msgstr "Début de l'adhésion"
msgstr "Date de début d'adhésion"
#. module: golem_activity
#: field:golem.activity,message_ids:0
msgid "Messages"
msgstr "Messages"
#: code:addons/golem_activity/models/golem_activity.py:134
#: selection:golem.activity,weekday:0
#, python-format
msgid "Monday"
msgstr "Lundi"
#. module: golem_activity
#: help:golem.activity,message_ids:0
msgid "Messages and communication history"
msgstr "Messages and communication history"
#. module: golem_activity
#: field:golem.activity,activity_name:0
#: field:golem.activity,name:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_full_name
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_name
msgid "Name"
msgstr "Nom"
#. module: golem_activity
#: field:golem.activity,weight_net:0
msgid "Net Weight"
msgstr "Net Weight"
#. module: golem_activity
#: view:golem.activity:golem_activity.view_form
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_form
msgid "Others"
msgstr "Autres"
#. module: golem_activity
#: field:golem.activity,price:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_price
msgid "Price"
msgstr "Prix"
#. module: golem_activity
#: field:golem.activity,pricelist_id:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_pricelist_id
msgid "Pricelist"
msgstr "Liste de prix"
#. module: golem_activity
#: field:golem.activity,attribute_line_ids:0
msgid "Product Attributes"
msgstr "Product Attributes"
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_item_ids
msgid "Pricelist Items"
msgstr "Éléments de la liste de prix"
#. module: golem_activity
#: field:golem.activity,product_manager:0
msgid "Product Manager"
msgstr "Product Manager"
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_product_variant_id
msgid "Product"
msgstr "Article"
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_attribute_line_ids
msgid "Product Attributes"
msgstr "Caractéristiques d'articles"
#. module: golem_activity
#: model:ir.model,name:golem_activity.model_product_template
@ -425,193 +470,230 @@ msgid "Product Template"
msgstr "Modèle d'article"
#. module: golem_activity
#: field:golem.activity,type:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_type
msgid "Product Type"
msgstr "Type d'article"
#. module: golem_activity
#: field:golem.activity,product_variant_ids:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_product_id
msgid "Product id"
msgstr "Article"
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_product_variant_ids
msgid "Products"
msgstr "Articles"
#. module: golem_activity
#: field:golem.activity,lst_price:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_lst_price
msgid "Public Price"
msgstr "Prix public"
#. module: golem_activity
#: field:golem.activity,description_purchase:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_description_purchase
msgid "Purchase Description"
msgstr "Purchase Description"
msgstr "Description achat"
#. module: golem_activity
#: field:golem.activity,uom_po_id:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_uom_po_id
msgid "Purchase Unit of Measure"
msgstr "Purchase Unit of Measure"
msgstr "Unité de mesure d'achat"
#. module: golem_activity
#: field:golem.activity,description_sale:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_description_sale
msgid "Sale Description"
msgstr "Description de vente"
msgstr "Description vente"
#. module: golem_activity
#: field:golem.activity,list_price:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_list_price
msgid "Sale Price"
msgstr "Prix de vente"
#. module: golem_activity
#: field:golem.activity,season_id:0
#: code:addons/golem_activity/models/golem_activity.py:139
#: selection:golem.activity,weekday:0
#, python-format
msgid "Saturday"
msgstr "Samedi"
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_season_id
msgid "Season"
msgstr "Saison"
#. module: golem_activity
#: help:golem.activity,categ_id:0
msgid "Select category for the current product"
msgstr "Select category for the current product"
#: model:ir.model.fields,help:golem_activity.field_golem_activity_categ_id
msgid "Select category for the current activity"
msgstr "Sélectionnez la catégorie pour l'activité"
#. module: golem_activity
#: field:golem.activity,image_small:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_sequence
msgid "Sequence"
msgstr "Séquence"
#. module: golem_activity
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_form
msgid "Session"
msgstr "Session"
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_image_small
msgid "Small-sized image"
msgstr "Small-sized image"
msgstr "Image de petite taille"
#. module: golem_activity
#: help:golem.activity,image_small:0
#: model:ir.model.fields,help:golem_activity.field_golem_activity_image_small
msgid "Small-sized image of the product. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required."
msgstr "Small-sized image of the product. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required."
msgstr "Vignette de l'article. Elle sera automatiquement redimensionnée à 64 x 64 px, en préservent le rapport hauteur/largeur. Utilisez ce champ partout où une petite image est nécessaire."
#. module: golem_activity
#: help:golem.activity,uos_id:0
msgid "Specify a unit of measure here if invoicing is made in another unit of measure than inventory. Keep empty to use the default unit of measure."
msgstr "Specify a unit of measure here if invoicing is made in another unit of measure than inventory. Keep empty to use the default unit of measure."
#. module: golem_activity
#: help:golem.activity,sale_ok:0
#: model:ir.model.fields,help:golem_activity.field_golem_activity_sale_ok
msgid "Specify if the product can be selected in a sales order line."
msgstr "Specify if the product can be selected in a sales order line."
msgstr "Indique si l'article peut être mis dans une ligne de commande de vente."
#. module: golem_activity
#: model:product.category,name:golem_activity.golem_product_category_trainings
msgid "Stages"
msgstr "Stages"
#. module: golem_activity
#: field:golem.activity,date_start:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_date_start
msgid "Start date"
msgstr "Date de début"
#. module: golem_activity
#: code:addons/golem_activity/models/golem_activity.py:47
#: code:addons/golem_activity/models/golem_activity.py:113
#: code:addons/golem_activity/models/golem_activity.py:156
#, python-format
msgid "Start of the period cannot be after end of the period."
msgstr "Le début de la période ne peut être antérieure à sa fin"
#. module: golem_activity
#: field:golem.activity,state:0
msgid "Status"
msgstr "Statut"
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_hour_start
msgid "Start time"
msgstr "Heure de début"
#. module: golem_activity
#: field:golem.activity,message_summary:0
msgid "Summary"
msgstr "Résumé"
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_hour_stop
msgid "Stop time"
msgstr "Heure de fin"
#. module: golem_activity
#: field:golem.activity,seller_ids:0
msgid "Supplier"
msgstr "Supplier"
#: code:addons/golem_activity/models/golem_activity.py:140
#: selection:golem.activity,weekday:0
#, python-format
msgid "Sunday"
msgstr "Dimanche"
#. module: golem_activity
#: field:golem.activity,seller_delay:0
msgid "Supplier Lead Time"
msgstr "Supplier Lead Time"
#: model:ir.model.fields,help:golem_activity.field_golem_activity_pricelist_id
msgid "Technical field. Used for searching on pricelists, not stored in database."
msgstr "Champ technique. Utilisé pour la recherche sur les listes de prix, non stocké en base de données."
#. module: golem_activity
#: field:golem.activity,seller_qty:0
msgid "Supplier Quantity"
msgstr "Supplier Quantity"
#. module: golem_activity
#: field:golem.activity,supplier_taxes_id:0
msgid "Supplier Taxes"
msgstr "Supplier Taxes"
#. module: golem_activity
#: help:golem.activity,weight:0
msgid "The gross weight in Kg."
msgstr "The gross weight in Kg."
#. module: golem_activity
#: help:golem.activity,weight_net:0
msgid "The net weight in Kg."
msgstr "The net weight in Kg."
#. module: golem_activity
#: help:golem.activity,volume:0
#: model:ir.model.fields,help:golem_activity.field_golem_activity_volume
msgid "The volume in m3."
msgstr "The volume in m3."
msgstr "Le volume en m³"
#. module: golem_activity
#: help:golem.activity,property_account_expense:0
#: model:ir.model.fields,help:golem_activity.field_golem_activity_weight
msgid "The weight of the contents in Kg, not including any packaging, etc."
msgstr "Le poids du contenu en kilogrammes, sans compter tout emballage, etc."
#. module: golem_activity
#: model:ir.model.fields,help:golem_activity.field_golem_activity_property_account_expense_id
msgid "This account will be used for invoices instead of the default one to value expenses for the current product."
msgstr "This account will be used for invoices instead of the default one to value expenses for the current product."
msgstr "Ce compte sera utilisé au lieu de celui par défaut pour les factures pour comptabiliser les achats pour le produit en cours."
#. module: golem_activity
#: help:golem.activity,property_account_income:0
#: model:ir.model.fields,help:golem_activity.field_golem_activity_property_account_income_id
msgid "This account will be used for invoices instead of the default one to value sales for the current product."
msgstr "This account will be used for invoices instead of the default one to value sales for the current product."
msgstr "Ce compte sera utilisé au lieu de celui par défaut pour les factures pour comptabiliser les ventes pour le produit en cours."
#. module: golem_activity
#: help:golem.activity,image:0
msgid "This field holds the image used as image for the product, limited to 1024x1024px."
msgstr "This field holds the image used as image for the product, limited to 1024x1024px."
#: code:addons/golem_activity/models/golem_activity.py:28
#: sql_constraint:golem.activity.type:0
#, python-format
msgid "This activity type name has already been used."
msgstr "Ce nom pour un type d'activité a déjà été utilisé."
#. module: golem_activity
#: help:golem.activity,seller_qty:0
msgid "This is minimum quantity to purchase from Main Supplier."
msgstr "This is minimum quantity to purchase from Main Supplier."
#: model:ir.model.fields,help:golem_activity.field_golem_activity_image
msgid "This field holds the image used as image for the activity."
msgstr "This field holds the image used as image for the activity."
#. module: golem_activity
#: help:golem.activity,seller_delay:0
msgid "This is the average delay in days between the purchase order confirmation and the receipts for this product and for the default supplier. It is used by the scheduler to order requests based on reordering delays."
msgstr "This is the average delay in days between the purchase order confirmation and the receipts for this product and for the default supplier. It is used by the scheduler to order requests based on reordering delays."
#: code:addons/golem_activity/models/golem_activity.py:137
#: selection:golem.activity,weekday:0
#, python-format
msgid "Thursday"
msgstr "Jeudi"
#. module: golem_activity
#: model:product.category,name:golem_activity.golem_product_category_all_activities
msgid "Toutes les activités"
msgstr "Toutes les activités"
#: model:golem.activity.type,name:golem_activity.golem_activity_type_training
msgid "Training"
msgstr "Stage"
#. module: golem_activity
#: field:golem.activity,uom_id:0
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_tree
msgid "True"
msgstr "True"
#. module: golem_activity
#: code:addons/golem_activity/models/golem_activity.py:135
#: selection:golem.activity,weekday:0
#, python-format
msgid "Tuesday"
msgstr "Mardi"
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_type_id_3891
msgid "Type"
msgstr "Type"
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_uom_id
msgid "Unit of Measure"
msgstr "Unit of Measure"
msgstr "Unité de mesure"
#. module: golem_activity
#: field:golem.activity,uos_coeff:0
msgid "Unit of Measure -> UOS Coeff"
msgstr "Unit of Measure -> UOS Coeff"
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_supplier_taxes_id
msgid "Vendor Taxes"
msgstr "Taxes fournisseur"
#. module: golem_activity
#: field:golem.activity,uos_id:0
msgid "Unit of Sale"
msgstr "Unit of Sale"
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_seller_ids
msgid "Vendors"
msgstr "Fournisseurs"
#. module: golem_activity
#: field:golem.activity,message_unread:0
msgid "Unread Messages"
msgstr "Messages non lus"
#. module: golem_activity
#: field:golem.activity,volume:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_volume
msgid "Volume"
msgstr "Volume"
#. module: golem_activity
#: field:golem.activity,warranty:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_warranty
msgid "Warranty"
msgstr "Garantie"
#. module: golem_activity
#: view:golem.activity:golem_activity.view_form
msgid "describe the activity characteristics..."
msgstr "Décrivez les caractéristiques de l'activité..."
#: code:addons/golem_activity/models/golem_activity.py:136
#: selection:golem.activity,weekday:0
#, python-format
msgid "Wednesday"
msgstr "Mercredi"
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_weekday
msgid "Weekday"
msgstr "Jour"
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_weight
msgid "Weight"
msgstr "Poids"
#. module: golem_activity
#: model:golem.activity.type,name:golem_activity.golem_activity_type_workshop
msgid "Workshop"
msgstr "Atelier"
#. module: golem_activity
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_form
msgid "describe the activity characteristics..."
msgstr "Décrivez ici les caractéristiques de l'activité..."

View File

@ -4,10 +4,10 @@
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-07-11 10:05+0000\n"
"PO-Revision-Date: 2016-07-11 10:05+0000\n"
"POT-Creation-Date: 2018-02-01 16:28+0000\n"
"PO-Revision-Date: 2018-02-01 16:28+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@ -16,78 +16,279 @@ msgstr ""
"Plural-Forms: \n"
#. module: golem_activity
#: model:ir.ui.menu,name:golem_activity.activity_menu
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_product_variant_count
msgid "# Product Variants"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,help:golem_activity.field_golem_activity_description_sale
msgid "A description of the Product that you want to communicate to your customers. This description will be copied to every Sale Order, Delivery Order and Customer Invoice/Refund"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,help:golem_activity.field_golem_activity_description_purchase
msgid "A description of the Product that you want to communicate to your vendors. This description will be copied to every Purchase Order, Receipt and Vendor Bill/Refund."
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,help:golem_activity.field_golem_activity_description
msgid "A precise description of the Product, used only for internal information purposes."
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,help:golem_activity.field_golem_activity_type
msgid "A stockable product is a product for which you manage stock. The \"Inventory\" app has to be installed.\n"
"A consumable product, on the other hand, is a product for which stock is not managed.\n"
"A service is a non-material product you provide.\n"
"A digital content is a non-material product you sell online. The files attached to the products are the one that are sold on the e-commerce such as e-books, music, pictures,... The \"Digital Product\" module has to be installed."
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_active
msgid "Active"
msgstr ""
#. module: golem_activity
#: model:ir.ui.menu,name:golem_activity.golem_activity_menu
#: model:ir.ui.menu,name:golem_activity.golem_activity_menu_list
msgid "Activities"
msgstr ""
#. module: golem_activity
#: view:golem.activity:golem_activity.view_form
#: model:ir.actions.act_window,name:golem_activity.product_category_action
msgid "Activities Categories"
msgstr ""
#. module: golem_activity
#: model:golem.activity.type,name:golem_activity.golem_activity_type_activity
msgid "Activity"
msgstr ""
#. module: golem_activity
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_form
msgid "Activity Name"
msgstr ""
#. module: golem_activity
#: model:product.category,name:golem_activity.golem_product_category_activities
msgid "Activités"
#: model:ir.ui.menu,name:golem_activity.golem_activity_type_menu_list
msgid "Activity Types"
msgstr ""
#. module: golem_activity
#: field:golem.activity,animator_id:0
#: code:addons/golem_activity/models/golem_activity.py:120
#, python-format
msgid "Activity end date can not be set after linked season start."
msgstr ""
#. module: golem_activity
#: code:addons/golem_activity/models/golem_activity.py:116
#, python-format
msgid "Activity start date can not be set before linked season start."
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_type_name
msgid "Activity type"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_animator_id
msgid "Animator"
msgstr ""
#. module: golem_activity
#: model:product.category,name:golem_activity.golem_product_category_workshops
msgid "Ateliers"
#: model:product.category,name:golem_activity.golem_product_category_martial
msgid "Arts martiaux"
msgstr ""
#. module: golem_activity
#: field:golem.activity,create_uid:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_barcode
msgid "Barcode"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,help:golem_activity.field_golem_activity_list_price
#: model:ir.model.fields,help:golem_activity.field_golem_activity_lst_price
msgid "Base price to compute the customer price. Sometimes called the catalog price."
msgstr ""
#. module: golem_activity
#: model:product.category,name:golem_activity.golem_product_category_wellbeing
msgid "Bien-Être"
msgstr ""
#. module: golem_activity
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_search
msgid "By animator"
msgstr ""
#. module: golem_activity
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_search
msgid "By category"
msgstr ""
#. module: golem_activity
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_search
msgid "By type"
msgstr ""
#. module: golem_activity
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_search
msgid "By weekday"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_purchase_ok
msgid "Can be Purchased"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_rental
msgid "Can be Rent"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_sale_ok
msgid "Can be Sold"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_categ_id
msgid "Categ id"
msgstr ""
#. module: golem_activity
#: model:ir.ui.menu,name:golem_activity.product_category_menu
msgid "Categories"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,help:golem_activity.field_golem_activity_membership
msgid "Check if the product is eligible for membership."
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_color
msgid "Color Index"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_company_id
msgid "Company"
msgstr ""
#. module: golem_activity
#: model:ir.ui.menu,name:golem_activity.golem_activity_menu_configuration
msgid "Configuration"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_standard_price
msgid "Cost"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,help:golem_activity.field_golem_activity_standard_price
msgid "Cost of the product, in the default unit of measure of the product."
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_create_uid
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_type_create_uid
msgid "Created by"
msgstr ""
#. module: golem_activity
#: field:golem.activity,create_date:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_create_date
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_type_create_date
msgid "Created on"
msgstr ""
#. module: golem_activity
#: field:golem.activity,is_current:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_currency_id
msgid "Currency"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_is_current
msgid "Current season?"
msgstr ""
#. module: golem_activity
#: help:golem.activity,message_last_post:0
msgid "Date of the last message posted on the record."
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_taxes_id
msgid "Customer Taxes"
msgstr ""
#. module: golem_activity
#: view:golem.activity:golem_activity.view_filter
#: model:product.category,name:golem_activity.golem_product_category_dance
msgid "Danse"
msgstr ""
#. module: golem_activity
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_tree
msgid "Date"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,help:golem_activity.field_golem_activity_membership_date_from
msgid "Date from which membership becomes active."
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,help:golem_activity.field_golem_activity_membership_date_to
msgid "Date until which membership remains active."
msgstr ""
#. module: golem_activity
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_tree
msgid "Day"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,help:golem_activity.field_golem_activity_uom_id
msgid "Default Unit of Measure used for all stock operation."
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,help:golem_activity.field_golem_activity_uom_po_id
msgid "Default Unit of Measure used for purchase orders. It must be in the same category than the default unit of measure."
msgstr ""
#. module: golem_activity
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_search
msgid "Default season"
msgstr ""
#. module: golem_activity
#: view:golem.activity:golem_activity.view_form
msgid "Details"
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_description
msgid "Description"
msgstr ""
#. module: golem_activity
#: field:golem.activity,display_name:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_display_name
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_type_display_name
msgid "Display Name"
msgstr ""
#. module: golem_activity
#: field:golem.activity,date_end:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_date_stop
msgid "End date"
msgstr ""
#. module: golem_activity
#: field:golem.activity,message_follower_ids:0
msgid "Followers"
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_property_account_expense_id
msgid "Expense Account"
msgstr ""
#. module: golem_activity
#: view:golem.activity:golem_activity.view_tree
#: model:ir.actions.act_window,name:golem_activity.action
#: code:addons/golem_activity/models/golem_activity.py:138
#: selection:golem.activity,weekday:0
#, python-format
msgid "Friday"
msgstr ""
#. module: golem_activity
#: model:ir.actions.act_window,name:golem_activity.golem_activity_action
msgid "GOLEM Activities"
msgstr ""
@ -97,83 +298,166 @@ msgid "GOLEM Activity"
msgstr ""
#. module: golem_activity
#: help:golem.activity,message_summary:0
msgid "Holds the Chatter summary (number of messages, ...). This summary is directly in html format in order to be inserted in kanban views."
#: model:ir.model,name:golem_activity.model_golem_activity_type
msgid "GOLEM Activity Type"
msgstr ""
#. module: golem_activity
#: field:golem.activity,id:0
#: model:ir.actions.act_window,name:golem_activity.golem_activity_type_action
msgid "GOLEM Activity Types"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,help:golem_activity.field_golem_activity_packaging_ids
msgid "Gives the different ways to package the same product. This has no impact on the picking order and is mainly used if you use the EDI module."
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,help:golem_activity.field_golem_activity_sequence
msgid "Gives the sequence order when displaying a product list"
msgstr ""
#. module: golem_activity
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_search
msgid "Group By"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_id
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_type_id
msgid "ID"
msgstr ""
#. module: golem_activity
#: help:golem.activity,message_unread:0
msgid "If checked new messages require your attention."
#: model:ir.model.fields,help:golem_activity.field_golem_activity_active
msgid "If unchecked, it will allow you to hide the product without removing it."
msgstr ""
#. module: golem_activity
#: field:golem.activity,image:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_image
msgid "Image"
msgstr ""
#. module: golem_activity
#: view:golem.activity:golem_activity.view_form
msgid "Information"
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_property_account_income_id
msgid "Income Account"
msgstr ""
#. module: golem_activity
#: field:golem.activity,categ_id:0
msgid "Internal Category"
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_default_code
msgid "Internal Reference"
msgstr ""
#. module: golem_activity
#: field:golem.activity,message_is_follower:0
msgid "Is a Follower"
#: model:ir.model.fields,help:golem_activity.field_golem_activity_barcode
msgid "International Article Number used for product identification."
msgstr ""
#. module: golem_activity
#: field:golem.activity,message_last_post:0
msgid "Last Message Date"
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_form
msgid "Invoicing"
msgstr ""
#. module: golem_activity
#: field:golem.activity,__last_update:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_is_fullseason
msgid "Is full season?"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_is_recurrent
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_type_is_recurrent
msgid "Is recurrent?"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity___last_update
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_type___last_update
msgid "Last Modified on"
msgstr ""
#. module: golem_activity
#: field:golem.activity,write_uid:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_type_write_uid
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_write_uid
msgid "Last Updated by"
msgstr ""
#. module: golem_activity
#: field:golem.activity,write_date:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_type_write_date
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_write_date
msgid "Last Updated on"
msgstr ""
#. module: golem_activity
#: model:ir.ui.menu,name:golem_activity.activity_list
msgid "List"
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_packaging_ids
msgid "Logistical Units"
msgstr ""
#. module: golem_activity
#: field:golem.activity,message_ids:0
msgid "Messages"
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_image_medium
msgid "Medium-sized image"
msgstr ""
#. module: golem_activity
#: help:golem.activity,message_ids:0
msgid "Messages and communication history"
#: model:ir.model.fields,help:golem_activity.field_golem_activity_image_medium
msgid "Medium-sized image of the product. It is automatically resized as a 128x128px image, with aspect ratio preserved, only when the image exceeds one of those sizes. Use this field in form views or some kanban views."
msgstr ""
#. module: golem_activity
#: field:golem.activity,name:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_membership
msgid "Membership"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_membership_date_to
msgid "Membership End Date"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_membership_date_from
msgid "Membership Start Date"
msgstr ""
#. module: golem_activity
#: code:addons/golem_activity/models/golem_activity.py:134
#: selection:golem.activity,weekday:0
#, python-format
msgid "Monday"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_full_name
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_name
msgid "Name"
msgstr ""
#. module: golem_activity
#: field:golem.activity,note:0
msgid "Note"
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_form
msgid "Others"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_price
msgid "Price"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_pricelist_id
msgid "Pricelist"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_item_ids
msgid "Pricelist Items"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_product_variant_id
msgid "Product"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_attribute_line_ids
msgid "Product Attributes"
msgstr ""
#. module: golem_activity
@ -182,53 +466,231 @@ msgid "Product Template"
msgstr ""
#. module: golem_activity
#: field:golem.activity,season_id:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_type
msgid "Product Type"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_product_id
msgid "Product id"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_product_variant_ids
msgid "Products"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_lst_price
msgid "Public Price"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_description_purchase
msgid "Purchase Description"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_uom_po_id
msgid "Purchase Unit of Measure"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_description_sale
msgid "Sale Description"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_list_price
msgid "Sale Price"
msgstr ""
#. module: golem_activity
#: code:addons/golem_activity/models/golem_activity.py:139
#: selection:golem.activity,weekday:0
#, python-format
msgid "Saturday"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_season_id
msgid "Season"
msgstr ""
#. module: golem_activity
#: help:golem.activity,categ_id:0
#: model:ir.model.fields,help:golem_activity.field_golem_activity_categ_id
msgid "Select category for the current activity"
msgstr ""
#. module: golem_activity
#: model:product.category,name:golem_activity.golem_product_category_trainings
msgid "Stages"
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_sequence
msgid "Sequence"
msgstr ""
#. module: golem_activity
#: field:golem.activity,date_start:0
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_form
msgid "Session"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_image_small
msgid "Small-sized image"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,help:golem_activity.field_golem_activity_image_small
msgid "Small-sized image of the product. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required."
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,help:golem_activity.field_golem_activity_sale_ok
msgid "Specify if the product can be selected in a sales order line."
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_date_start
msgid "Start date"
msgstr ""
#. module: golem_activity
#: code:addons/golem_activity/models/golem_activity.py:53
#: code:addons/golem_activity/models/golem_activity.py:113
#: code:addons/golem_activity/models/golem_activity.py:156
#, python-format
msgid "Start of the period cannot be after end of the period."
msgstr ""
#. module: golem_activity
#: field:golem.activity,message_summary:0
msgid "Summary"
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_hour_start
msgid "Start time"
msgstr ""
#. module: golem_activity
#: help:golem.activity,image:0
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_hour_stop
msgid "Stop time"
msgstr ""
#. module: golem_activity
#: code:addons/golem_activity/models/golem_activity.py:140
#: selection:golem.activity,weekday:0
#, python-format
msgid "Sunday"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,help:golem_activity.field_golem_activity_pricelist_id
msgid "Technical field. Used for searching on pricelists, not stored in database."
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,help:golem_activity.field_golem_activity_volume
msgid "The volume in m3."
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,help:golem_activity.field_golem_activity_weight
msgid "The weight of the contents in Kg, not including any packaging, etc."
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,help:golem_activity.field_golem_activity_property_account_expense_id
msgid "This account will be used for invoices instead of the default one to value expenses for the current product."
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,help:golem_activity.field_golem_activity_property_account_income_id
msgid "This account will be used for invoices instead of the default one to value sales for the current product."
msgstr ""
#. module: golem_activity
#: code:addons/golem_activity/models/golem_activity.py:28
#: sql_constraint:golem.activity.type:0
#, python-format
msgid "This activity type name has already been used."
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,help:golem_activity.field_golem_activity_image
msgid "This field holds the image used as image for the activity."
msgstr ""
#. module: golem_activity
#: model:product.category,name:golem_activity.golem_product_category_all_activities
msgid "Toutes les activités"
#: code:addons/golem_activity/models/golem_activity.py:137
#: selection:golem.activity,weekday:0
#, python-format
msgid "Thursday"
msgstr ""
#. module: golem_activity
#: field:golem.activity,message_unread:0
msgid "Unread Messages"
#: model:golem.activity.type,name:golem_activity.golem_activity_type_training
msgid "Training"
msgstr ""
#. module: golem_activity
#: view:golem.activity:golem_activity.view_form
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_tree
msgid "True"
msgstr ""
#. module: golem_activity
#: code:addons/golem_activity/models/golem_activity.py:135
#: selection:golem.activity,weekday:0
#, python-format
msgid "Tuesday"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_type_id_3891
msgid "Type"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_uom_id
msgid "Unit of Measure"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_supplier_taxes_id
msgid "Vendor Taxes"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_seller_ids
msgid "Vendors"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_volume
msgid "Volume"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_warranty
msgid "Warranty"
msgstr ""
#. module: golem_activity
#: code:addons/golem_activity/models/golem_activity.py:136
#: selection:golem.activity,weekday:0
#, python-format
msgid "Wednesday"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_weekday
msgid "Weekday"
msgstr ""
#. module: golem_activity
#: model:ir.model.fields,field_description:golem_activity.field_golem_activity_weight
msgid "Weight"
msgstr ""
#. module: golem_activity
#: model:golem.activity.type,name:golem_activity.golem_activity_type_workshop
msgid "Workshop"
msgstr ""
#. module: golem_activity
#: model:ir.ui.view,arch_db:golem_activity.golem_activity_form
msgid "describe the activity characteristics..."
msgstr ""

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Fabien Bourgeois <fabien@yaltik.com>
# Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@ -15,19 +15,57 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from openerp import models, fields, api, _
""" GOLEM activities related models """
from odoo import models, fields, api, _
class GolemActivityType(models.Model):
""" GOLEM Activity Type """
_name = 'golem.activity.type'
_description = 'GOLEM Activity Type'
_sql_constraints = [('golem_activity_type_name_uniq', 'UNIQUE (name)',
_('This activity type name has already been used.'))]
name = fields.Char('Activity type', required=True, translate=True)
is_recurrent = fields.Boolean('Is recurrent?')
class GolemActivity(models.Model):
""" GOLEM Activity """
_name = 'golem.activity'
_description = 'GOLEM Activity'
_inherit = 'mail.thread'
_inherits = {'product.template': 'product_id'}
_rec_name = 'full_name'
name = fields.Char('Name', index=True, required=True)
default_code = fields.Char('Internal Reference', index=True)
image = fields.Binary('Image', help='This field holds the image used as '
'image for the activity.')
note = fields.Text('Note')
product_id = fields.Many2one('product.template', required=True,
ondelete='cascade')
image = fields.Binary(help='This field holds the image used as image for '
'the activity.')
full_name = fields.Char('Name', compute='_compute_full_name', store=True,
index=True)
is_fullseason = fields.Boolean('Is full season?',
compute='_compute_is_full_season')
@api.depends('date_start', 'date_stop')
def _compute_is_full_season(self):
""" Display date for is full season """
for activity in self:
if activity.date_start == activity.season_id.date_start and \
activity.date_stop == activity.season_id.date_end:
activity.is_fullseason = True
@api.depends('name', 'default_code')
def _compute_full_name(self):
""" Provide a better displayed name """
for activity in self:
full_name = unicode(activity.name)
if activity.default_code:
full_name = u'[{}] {}'.format(activity.default_code, full_name)
activity.full_name = full_name
@api.model
def _default_season(self):
@ -38,38 +76,91 @@ class GolemActivity(models.Model):
season_id = fields.Many2one('golem.season', string='Season', copy=False,
required=True, default=_default_season,
ondelete='restrict')
is_current = fields.Boolean('Current season?', store=True, default=False,
compute='compute_is_current')
@api.depends('season_id')
def compute_is_current(self):
""" Checks if activity is active for current season """
default_season = self._default_season()
for activity in self:
activity.is_current = (default_season == activity.season_id)
animator_id = fields.Many2one('res.partner', string='Animator',
domain=[('is_company', '=', False)])
categ_id = fields.Many2one('product.category', 'Internal Category',
required=True,
categ_id = fields.Many2one('product.category',
help='Select category for the current activity')
type_id = fields.Many2one('golem.activity.type', required=True, index=True,
string='Type')
is_recurrent = fields.Boolean(related='type_id.is_recurrent')
date_start = fields.Date('Start date', copy=False)
date_end = fields.Date('End date', copy=False)
date_stop = fields.Date('End date', copy=False)
@api.constrains('date_start', 'date_end')
@api.onchange('date_start')
def _onchange_date_start(self):
""" Sets end date to start date if no start date """
for activity in self:
if not activity.date_stop:
activity.date_stop = activity.date_start
@api.constrains('date_start', 'date_stop')
def _check_period(self):
""" Check if end date if after start date """
for a in self:
if a.date_start and a.date_end and a.date_start > a.date_end:
""" Checks if end date if after start date """
for activity in self:
if activity.date_start and activity.date_stop and \
activity.date_start > activity.date_stop:
raise models.ValidationError(_('Start of the period cannot be '
'after end of the period.'))
if activity.season_id.date_start > activity.date_start:
msg = _(u'Activity start date can not be set before '
'linked season start.')
raise models.ValidationError(msg)
if activity.season_id.date_end < activity.date_stop:
msg = _(u'Activity end date can not be set after '
'linked season end.')
raise models.ValidationError(msg)
@api.onchange('season_id')
def _onchange_season_dates(self):
""" Sets defaults dates according to season """
for activity in self:
if activity.season_id:
if not activity.date_start:
activity.date_start = activity.season_id.date_start
if not activity.date_stop:
activity.date_stop = activity.season_id.date_end
weekday = fields.Selection([('mon', _('Monday')),
('tue', _('Tuesday')),
('wed', _('Wednesday')),
('thu', _('Thursday')),
('fri', _('Friday')),
('sat', _('Saturday')),
('sun', _('Sunday'))], copy=False)
hour_start = fields.Float('Start time', copy=False)
hour_stop = fields.Float('Stop time', copy=False)
@api.onchange('hour_start')
def _onchange_hour_start(self):
""" Sets end hour to start hour if no start hour """
for activity in self:
if activity.hour_start and not activity.hour_stop:
activity.hour_stop = activity.hour_start + 1
@api.constrains('hour_start', 'hour_stop')
def _check_hour_period(self):
""" Check if end hour if after start hour """
for activity in self:
if activity.hour_start > activity.hour_stop:
raise models.ValidationError(_('Start of the period cannot be '
'after end of the period.'))
@api.onchange('season_id')
def onchange_season_dates(self):
""" Sets defaults dates according to season """
for a in self:
if a.season_id:
if not a.date_start:
a.date_start = a.season_id.date_start
if not a.date_end:
a.date_end = a.season_id.date_end
is_current = fields.Boolean('Current season?', store=True, default=False,
compute='_compute_is_current')
class ProductTemplate(models.Model):
""" GOLEM Activity Product adaptations """
_inherit = 'product.template'
@api.one
@api.depends('season_id')
def _compute_is_current(self):
""" Checks if activity is active for current season """
default_season = self._default_season()
self.is_current = (default_season == self.season_id)
type = fields.Selection(default='service')
default_code = fields.Char(copy=True)
categ_id = fields.Many2one(copy=True)

View File

@ -1,3 +1,13 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_product_template_user,Access Product Template User,product.model_product_template,golem_base.group_golem_user,1,1,1,0
access_product_template_manager,Access Product Template Manager,product.model_product_template,golem_base.group_golem_manager,1,1,1,1
access_product_product_user,Access Product Product User,product.model_product_product,golem_base.group_golem_user,1,1,1,0
access_product_product_manager,Access Product Product Manager,product.model_product_product,golem_base.group_golem_manager,1,1,1,1
access_product_price_history_user,Access Product Price History User,product.model_product_price_history,golem_base.group_golem_user,1,1,1,0
access_product_price_history_manager,Access Product Price History Manager,product.model_product_price_history,golem_base.group_golem_manager,1,1,1,1
access_product_category_user,Access Product Category User,product.model_product_category,golem_base.group_golem_user,1,0,0,0
access_product_category_manager,Access Product Category Manager,product.model_product_category,golem_base.group_golem_manager,1,1,1,1
access_golem_activity_user,Access GOLEM Activity User,model_golem_activity,golem_base.group_golem_user,1,1,1,0
access_golem_activity_manager,Access GOLEM Activity Manager,model_golem_activity,golem_base.group_golem_manager,1,1,1,1
access_golem_activity_type_user,Access GOLEM Activity Type User,model_golem_activity_type,golem_base.group_golem_user,1,1,1,0
access_golem_activity_type_manager,Access GOLEM Activity Type Manager,model_golem_activity_type,golem_base.group_golem_manager,1,1,1,1

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_product_template_user Access Product Template User product.model_product_template golem_base.group_golem_user 1 1 1 0
3 access_product_template_manager Access Product Template Manager product.model_product_template golem_base.group_golem_manager 1 1 1 1
4 access_product_product_user Access Product Product User product.model_product_product golem_base.group_golem_user 1 1 1 0
5 access_product_product_manager Access Product Product Manager product.model_product_product golem_base.group_golem_manager 1 1 1 1
6 access_product_price_history_user Access Product Price History User product.model_product_price_history golem_base.group_golem_user 1 1 1 0
7 access_product_price_history_manager Access Product Price History Manager product.model_product_price_history golem_base.group_golem_manager 1 1 1 1
8 access_product_category_user Access Product Category User product.model_product_category golem_base.group_golem_user 1 0 0 0
9 access_product_category_manager Access Product Category Manager product.model_product_category golem_base.group_golem_manager 1 1 1 1
10 access_golem_activity_user Access GOLEM Activity User model_golem_activity golem_base.group_golem_user 1 1 1 0
11 access_golem_activity_manager Access GOLEM Activity Manager model_golem_activity golem_base.group_golem_manager 1 1 1 1
12 access_golem_activity_type_user Access GOLEM Activity Type User model_golem_activity_type golem_base.group_golem_user 1 1 1 0
13 access_golem_activity_type_manager Access GOLEM Activity Type Manager model_golem_activity_type golem_base.group_golem_manager 1 1 1 1

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -15,8 +15,8 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from openerp.tests.common import TransactionCase
from openerp.models import ValidationError
from odoo.tests.common import TransactionCase
from odoo.models import ValidationError
class GolemActivityTestCase(TransactionCase):

View File

@ -1,108 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2016 Fabien Bourgeois <fabien@yaltik.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<openerp>
<data>
<!-- Forms -->
<record id="view_form" model="ir.ui.view">
<field name="name">GOLEM Activity Form</field>
<field name="model">golem.activity</field>
<field name="arch" type="xml">
<form>
<sheet>
<div class="oe_right oe_button_box" style="width: 300px;"
name="buttons"></div>
<div class="oe_left" style="width: 500px;">
<field name="image" widget="image" class="oe_avatar oe_left"/>
<div class="oe_title" style="width: 390px;">
<label class="oe_edit_only" for="name" string="Activity Name"/>
<h1><field name="name" class="oe_inline"/></h1>
</div>
</div>
<group>
<field name="season_id" />
<field name="default_code" />
</group>
<group string="Details">
<group>
<field name="categ_id" />
<field name="animator_id" />
</group>
<group>
<field name="date_start" />
<field name="date_end" />
</group>
</group>
<notebook>
<page name="activity_info" string="Information">
<group>
<field name="note"
placeholder="describe the activity characteristics..."/>
</group>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers" />
<field name="message_ids" widget="mail_thread" />
</div>
</form>
</field>
</record>
<!-- Trees -->
<record model="ir.ui.view" id="view_tree">
<field name="name">GOLEM Activity Tree/List</field>
<field name="model">golem.activity</field>
<field name="arch" type="xml">
<tree string="GOLEM Activities">
<field name="season_id" />
<field name="name" />
<field name="animator_id" />
</tree>
</field>
</record>
<!-- Searches -->
<record id="view_filter" model="ir.ui.view">
<field name="name">GOLEM Activity Filters</field>
<field name="model">golem.activity</field>
<field name="arch" type="xml">
<search>
<field name="name" />
<field name="season_id" widget="many2one" />
<filter name="season_default" string="Default season"
domain="[('is_current', '=', True)]" />
</search>
</field>
</record>
<!-- Actions -->
<act_window id="action" name="GOLEM Activities" res_model="golem.activity"
context="{'search_default_season_default': True, 'default_categ_id': ref('golem_activity.golem_product_category_activities')}" />
<!-- Menus -->
<menuitem id="activity_menu" name="Activities"
parent="base.menu_association" sequence="5"
groups="golem_base.group_golem_user" />
<menuitem id="activity_list" name="List"
groups="golem_base.group_golem_user"
parent="activity_menu" sequence="0" action="action" />
</data>
</openerp>

View File

@ -0,0 +1,207 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<odoo>
<data>
<!-- Forms -->
<record id="golem_activity_form" model="ir.ui.view">
<field name="name">GOLEM Activity Form</field>
<field name="model">golem.activity</field>
<field name="arch" type="xml">
<form>
<header />
<sheet>
<div class="oe_clear oe_right oe_button_box"
style="width: 300px;"
name="buttons"></div>
<div class="oe_left" style="width: 500px;">
<field name="image" widget="image" class="oe_avatar oe_left"/>
<div class="oe_title" style="width: 390px;">
<label class="oe_edit_only" for="name" string="Activity Name"/>
<h1><field name="name" required="True" class="oe_inline"/></h1>
</div>
</div>
<group>
<group>
<field name="season_id" required="True" />
<field name="animator_id" />
<field name="type_id" required="True" />
</group>
<group>
<field name="categ_id" required="True" />
<field name="default_code" />
<field name="list_price" />
</group>
</group>
<notebook>
<page name="session" string="Session">
<group>
<group name="dates">
<field name="is_recurrent" />
<field name="weekday"
attrs="{'invisible': [('is_recurrent', '=', False)]}" />
<field name="hour_start" widget="float_time"
attrs="{'invisible': [('is_recurrent', '=', False)]}" />
<field name="hour_stop" widget="float_time"
attrs="{'invisible': [('is_recurrent', '=', False)]}" />
<field name="is_fullseason" readonly="False"
attrs="{'invisible':[('is_recurrent', '=', False)]}" />
<field name="date_start"
attrs="{'invisible':[('is_recurrent', '=', True),
('is_fullseason', '=', True)]}" />
<field name="date_stop"
attrs="{'invisible':[('is_recurrent', '=', True),
('is_fullseason', '=', True)]}" />
</group>
<group name="places">
</group>
</group>
</page>
<page string="Invoicing" name="invoicing"
groups="account.group_account_invoice">
<group name="properties">
<field name="property_account_income_id"
domain="[('internal_type','=','other'),('deprecated','=',False)]"
groups="account.group_account_user"/>
<field name="taxes_id" widget="many2many_tags"/>
<field name="property_account_expense_id"
domain="[('internal_type','=','other'),('deprecated','=',False)]"
groups="account.group_account_user"/>
<field name="supplier_taxes_id" widget="many2many_tags"/>
</group>
</page>
<page name="activity_others" string="Others">
<group>
<field name="description"
placeholder="describe the activity characteristics..." />
<field name="active" />
</group>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers" />
<field name="message_ids" widget="mail_thread" />
</div>
</form>
</field>
</record>
<!-- Trees -->
<record model="ir.ui.view" id="golem_activity_tree">
<field name="name">GOLEM Activity Tree/List</field>
<field name="model">golem.activity</field>
<field name="arch" type="xml">
<tree>
<field name="is_recurrent" invisible="True" />
<field name="season_id" />
<field name="type_id" />
<field name="full_name" />
<field name="animator_id" />
<field name="weekday" string="Day"
attrs="{'invisible': [('is_recurrent', '=', False)]}" />
<field name="date_start" string="Date" />
<field name="list_price" sum="True" />
</tree>
</field>
</record>
<record model="ir.ui.view" id="golem_activity_type_tree">
<field name="name">GOLEM Activity Type Tree/List</field>
<field name="model">golem.activity.type</field>
<field name="arch" type="xml">
<tree editable="top">
<field name="name" />
<field name="is_recurrent" />
</tree>
</field>
</record>
<!-- Calendars -->
<record id="golem_activity_calendar" model="ir.ui.view">
<field name="name">Activity calendar view</field>
<field name="model">golem.activity</field>
<field name="arch" type="xml">
<calendar date_start="date_start" date_stop="date_stop"
color="categ_id" display="[name]">
<field name="name" />
</calendar>
</field>
</record>
<!-- Searches -->
<record id="golem_activity_search" model="ir.ui.view">
<field name="name">GOLEM Activity Filters</field>
<field name="model">golem.activity</field>
<field name="arch" type="xml">
<search>
<field name="full_name" />
<field name="animator_id" />
<field name="type_id" />
<field name="categ_id" />
<field name="season_id" />
<filter name="season_default" string="Default season"
domain="[('is_current', '=', True)]" />
<group string="Group By">
<filter name="group_type_id" string="By type"
context="{'group_by': 'type_id'}" />
<filter name="group_category" string="By category"
context="{'group_by': 'categ_id'}"/>
<filter name="group_weekday" string="By weekday"
context="{'group_by': 'weekday'}" />
<filter name="group_animator" string="By animator"
context="{'group_by': 'animator_id'}" />
</group>
</search>
</field>
</record>
<!-- Actions -->
<act_window id="golem_activity_action" name="GOLEM Activities"
res_model="golem.activity" view_mode="tree,form,calendar"
context="{'search_default_season_default': True}" />
<act_window id="golem_activity_type_action" name="GOLEM Activity Types"
res_model="golem.activity.type" view_mode="tree" />
<record id="product_category_action" model="ir.actions.act_window">
<field name="name">Activities Categories</field>
<field name="res_model">product.category</field>
<field name="view_type">form</field>
<field name="view_id" ref="product.product_category_list_view" />
</record>
<!-- Menus -->
<menuitem id="golem_activity_menu" name="Activities" sequence="30"
groups="golem_base.group_golem_user"
web_icon="golem_activity,static/description/icon.png" />
<menuitem id="golem_activity_menu_list" name="Activities"
groups="golem_base.group_golem_user"
parent="golem_activity_menu" sequence="1" action="golem_activity_action" />
<menuitem id="golem_activity_menu_configuration" name="Configuration"
parent="golem_activity_menu" sequence="90"
groups="golem_base.group_golem_manager" />
<menuitem id="golem_activity_type_menu_list" name="Activity Types"
groups="golem_base.group_golem_manager"
parent="golem_activity_menu_configuration" sequence="5"
action="golem_activity_type_action" />
<menuitem id="product_category_menu" name="Categories"
parent="golem_activity_menu_configuration" sequence="10"
groups="golem_base.group_golem_manager"
action="product_category_action" />
</data>
</odoo>

View File

@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
# Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
{
'name': 'GOLEM Activity Places',
'summary': 'GOLEM Activity avdanced places management',
'version': '10.0.2.0.0',
'category': 'GOLEM',
'author': 'Fabien Bourgeois',
'license': 'AGPL-3',
'application': False,
'installable': True,
'auto_install': False,
'depends': ['golem_activity_registration'],
'data': ['views/golem_activity_views.xml']
}

View File

@ -0,0 +1,53 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * golem_activity_place
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-05-01 22:35+0000\n"
"PO-Revision-Date: 2017-05-01 22:35+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: golem_activity_place
#: model:ir.model.fields,field_description:golem_activity_place.field_golem_activity_is_overbooked
msgid "Allow overbook?"
msgstr "Autoriser la surcharge ?"
#. module: golem_activity_place
#: model:ir.model,name:golem_activity_place.model_golem_activity
msgid "GOLEM Activity"
msgstr "Activité"
#. module: golem_activity_place
#: model:ir.model.fields,field_description:golem_activity_place.field_golem_activity_places_min
msgid "Minimum places"
msgstr "Places minimum"
#. module: golem_activity_place
#: model:ir.model.fields,help:golem_activity_place.field_golem_activity_places_min
msgid "Minimum places to maintain the activity"
msgstr "Nombre de places minimales pour maintenir l'activité"
#. module: golem_activity_place
#: code:addons/golem_activity_place/models/golem_activity.py:57
#, python-format
msgid "Number of places cannot be negative."
msgstr "Le nombre de places ne peut pas être négatif"
#. module: golem_activity_place
#: code:addons/golem_activity_place/models/golem_activity.py:61
#, python-format
msgid "Overbooked places cannot be inferior than places"
msgstr "Le nombre de places avec surcharge ne peut être inférieur aux places"
#. module: golem_activity_place
#: model:ir.model.fields,field_description:golem_activity_place.field_golem_activity_places_overbooked
msgid "Places with overbook"
msgstr "Places avec surcharge"

View File

@ -0,0 +1,54 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * golem_activity_place
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-05-01 22:34+0000\n"
"PO-Revision-Date: 2017-05-01 22:34+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: golem_activity_place
#: model:ir.model.fields,field_description:golem_activity_place.field_golem_activity_is_overbooked
msgid "Allow overbook?"
msgstr ""
#. module: golem_activity_place
#: model:ir.model,name:golem_activity_place.model_golem_activity
msgid "GOLEM Activity"
msgstr ""
#. module: golem_activity_place
#: model:ir.model.fields,field_description:golem_activity_place.field_golem_activity_places_min
msgid "Minimum places"
msgstr ""
#. module: golem_activity_place
#: model:ir.model.fields,help:golem_activity_place.field_golem_activity_places_min
msgid "Minimum places to maintain the activity"
msgstr ""
#. module: golem_activity_place
#: code:addons/golem_activity_place/models/golem_activity.py:57
#, python-format
msgid "Number of places cannot be negative."
msgstr ""
#. module: golem_activity_place
#: code:addons/golem_activity_place/models/golem_activity.py:61
#, python-format
msgid "Overbooked places cannot be inferior than places"
msgstr ""
#. module: golem_activity_place
#: model:ir.model.fields,field_description:golem_activity_place.field_golem_activity_places_overbooked
msgid "Places with overbook"
msgstr ""

View File

@ -15,4 +15,4 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from . import golem_activity_session
from . import golem_activity

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# copyright 2016 fabien bourgeois <fabien@yaltik.com>
# copyright 2017 fabien bourgeois <fabien@yaltik.com>
#
# this program is free software: you can redistribute it and/or modify
# it under the terms of the gnu affero general public license as
@ -15,42 +15,48 @@
# you should have received a copy of the gnu affero general public license
# along with this program. if not, see <http://www.gnu.org/licenses/>.
from openerp import models, fields, api, _
""" GOLEM Activity Advanced Places management """
from odoo import models, fields, api, _
class GolemActivitySession(models.Model):
_inherit = 'golem.activity.session'
class GolemActivity(models.Model):
""" GOLEM Activity Advanced Places management """
_inherit = 'golem.activity'
places_min = fields.Integer('Minimum places', default=0,
help='Minimum places to maintain the session')
help='Minimum places to maintain the activity')
is_overbooked = fields.Boolean('Allow overbook?', default=False)
places_overbooked = fields.Integer('Places with overbook', default=0)
@api.one
@api.depends('places', 'is_overbooked', 'places_overbooked', 'member_ids')
@api.multi
@api.depends('places', 'is_overbooked', 'places_overbooked', 'places_used')
def _compute_places_remain(self):
used = len(self.member_ids)
if not self.is_overbooked:
self.places_remain = self.places - used
else:
self.places_remain = self.places_overbooked - used
""" Overwrite : computes remaining places """
for activity in self:
if not activity.is_overbooked:
activity.places_remain = activity.places - activity.places_used
else:
activity.places_remain = activity.places_overbooked - activity.places_used
@api.onchange('is_overbooked', 'places')
def onchange_is_overbooked(self):
for s in self:
if s.places and s.is_overbooked:
if not s.places_overbooked or (s.places_overbooked < s.places):
s.places_overbooked = s.places + 1
""" Realtime display for places and overbooked """
for activity in self:
if activity.places and activity.is_overbooked:
if not activity.places_overbooked or \
(activity.places_overbooked < activity.places):
activity.places_overbooked = activity.places + 1
@api.constrains('places', 'places_overbooked')
def _check_places(self):
""" Check integers are signed and overbooked to be superior than
normal places """
for v in self:
for f in ['places', 'places_overbooked']:
if v[f] < 0:
for activity in self:
for field in ['places', 'places_overbooked']:
if activity[field] < 0:
emsg = _('Number of places cannot be negative.')
raise models.ValidationError(emsg)
if v.is_overbooked and (v.places_overbooked <= v.places):
if activity.is_overbooked and \
(activity.places_overbooked <= activity.places):
emsg = _('Overbooked places cannot be inferior than places')
raise models.ValidationError(emsg)

View File

@ -15,4 +15,4 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from . import golem_activity_session
from . import test_golem_activity

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Fabien Bourgeois <fabien@yaltik.com>
# Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@ -15,11 +15,14 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from openerp.tests.common import TransactionCase
from openerp.models import ValidationError
""" GOLEM Activity Places Tests """
from odoo.tests.common import TransactionCase
from odoo.models import ValidationError
class GolemActivitySessionTestCase(TransactionCase):
""" GOLEM Activity Places Tests """
def setUp(self):
super(GolemActivitySessionTestCase, self).setUp()

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2016 Fabien Bourgeois <fabien@yaltik.com>
Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
@ -15,14 +15,15 @@ GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<openerp>
<odoo>
<data>
<!-- Form -->
<record id="view_form" model="ir.ui.view">
<field name="name">GOLEM Activity Sessions Places Form additions</field>
<field name="model">golem.activity.session</field>
<field name="inherit_id" ref="golem_activity_session.view_form" />
<record id="golem_activity_registration_form_inherit_place" model="ir.ui.view">
<field name="name">GOLEM Activity Places Form additions</field>
<field name="model">golem.activity</field>
<field name="inherit_id"
ref="golem_activity_registration.golem_activity_form_inherit_registration" />
<field name="arch" type="xml">
<field name="places" position="after">
<field name="places_min" />
@ -34,10 +35,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
</record>
<!-- Tree -->
<record id="session_tree" model="ir.ui.view">
<field name="name">Session list places adaptations</field>
<field name="model">golem.activity.session</field>
<field name="inherit_id" ref="golem_activity_session.session_tree" />
<record id="golem_activity_registration_tree_inherit_place" model="ir.ui.view">
<field name="name">Activity list places adaptations</field>
<field name="model">golem.activity</field>
<field name="inherit_id"
ref="golem_activity_registration.golem_activity_tree_inherit_registration" />
<field name="arch" type="xml">
<tree position="attributes">
<attribute name="colors">darkgrey: places_used &lt; places_min; red: places_remain == 0; orange: places_remain &lt;= 4;</attribute>
@ -49,17 +51,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
</field>
</record>
<!-- Searches -->
<record id="searches" model="ir.ui.view">
<field name="name">GOLEM Activity Sessions Searches</field>
<field name="model">golem.activity.session</field>
<field name="arch" type="xml">
<search>
<filter name="full_session" string="Full"
domain="[('places_remain', '=', 0)]" />
</search>
</field>
</record>
</data>
</openerp>
</odoo>

View File

@ -0,0 +1,31 @@
# -*- coding: utf-8 -*-
# Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
{
'name': 'GOLEM Activity Member Registrations',
'summary': 'GOLEM Activities Member Registrations management',
'version': '10.0.1.1.0',
'category': 'GOLEM',
'author': 'Fabien Bourgeois, Michel Dessenne',
'license': 'AGPL-3',
'application': False,
'installable': True,
'depends': ['golem_activity', 'golem_member'],
'data': ['views/golem_activity_registration_views.xml',
'views/golem_member_views.xml', 'views/golem_activity_views.xml',
'security/ir.model.access.csv']
}

View File

@ -0,0 +1,205 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * golem_activity_registration
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-06-14 23:16+0000\n"
"PO-Revision-Date: 2017-06-28 17:30+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: golem_activity_registration
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_form_inherit_golem_activity_registration
msgid "Activities"
msgstr "Activités"
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_registration_activity_id
msgid "Activity"
msgstr "Activité"
#. module: golem_activity_registration
#: model:ir.ui.menu,name:golem_activity_registration.golem_activity_registration_menu
msgid "Activity registrations"
msgstr "Inscriptions"
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_member_activity_registration_all_ids
msgid "All activities"
msgstr "Toutes les activités"
#. module: golem_activity_registration
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_form_inherit_golem_activity_registration
msgid "Base price"
msgstr "Prix de base"
#. module: golem_activity_registration
#: model:ir.model.fields,help:golem_activity_registration.field_golem_activity_registration_activity_price
msgid "Base price to compute the customer price. Sometimes called the catalog price."
msgstr "Prix de base pour calculer le prix usager. Parfois appelé prix catalogue."
#. module: golem_activity_registration
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_activity_registration_search
msgid "By season"
msgstr "Par saison"
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_registration_create_uid
msgid "Created by"
msgstr "Créé par"
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_registration_create_date
msgid "Created on"
msgstr "Créé le"
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_member_activity_registration_ids
msgid "Current activities"
msgstr "Activités de la saison affichée par défaut"
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_registration_is_current
msgid "Current season?"
msgstr "Saison en cours?"
#. module: golem_activity_registration
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_activity_registration_search
msgid "Default season"
msgstr "Saison par défaut"
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_registration_display_name
msgid "Display Name"
msgstr "Nom affiché"
#. module: golem_activity_registration
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_activity_search_inherit_registration
msgid "Full"
msgstr "Plein"
#. module: golem_activity_registration
#: model:ir.model,name:golem_activity_registration.model_golem_activity
msgid "GOLEM Activity"
msgstr "Activité"
#. module: golem_activity_registration
#: model:ir.model,name:golem_activity_registration.model_golem_activity_registration
msgid "GOLEM Activity Registration"
msgstr "Inscription à l'activité"
#. module: golem_activity_registration
#: model:ir.actions.act_window,name:golem_activity_registration.golem_activity_registration_action
msgid "GOLEM Activity Registration List"
msgstr "Liste des inscriptions aux activités"
#. module: golem_activity_registration
#: model:ir.model,name:golem_activity_registration.model_golem_member
msgid "GOLEM Member"
msgstr "Adhérent"
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_registration_id
msgid "ID"
msgstr "ID"
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_registration___last_update
msgid "Last Modified on"
msgstr "Dernière Modification le"
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_registration_write_uid
msgid "Last Updated by"
msgstr "Dernière mise à jour par"
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_registration_write_date
msgid "Last Updated on"
msgstr "Dernière mise à jour le"
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_registration_member_id
msgid "Member"
msgstr "Adhérent"
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_activity_registration_ids
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_activity_form_inherit_registration
msgid "Members"
msgstr "Adhérents"
#. module: golem_activity_registration
#: code:addons/golem_activity_registration/models/golem_activity_registration.py:38
#: sql_constraint:golem.activity:0
#, python-format
msgid "Number of places cannot be negative."
msgstr "Le nombre de places ne peut pas être négatif"
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_places
msgid "Places"
msgstr "Places"
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_places_used
msgid "Places used"
msgstr "Places prises"
#. module: golem_activity_registration
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_activity_tree_inherit_registration
msgid "Remain"
msgstr "Reste"
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_places_remain
msgid "Remaining places"
msgstr "Places restantes"
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_registration_activity_price
msgid "Sale Price"
msgstr "Prix de vente"
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_registration_season_id
msgid "Season"
msgstr "Saison"
#. module: golem_activity_registration
#: code:addons/golem_activity_registration/models/golem_activity_registration.py:69
#, python-format
msgid "Sorry, there is no more place !"
msgstr "Désolé, il n'y a plus de place disponible !"
#. module: golem_activity_registration
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_activity_registration_form
msgid "Subscription"
msgstr "Inscription"
#. module: golem_activity_registration
#: code:addons/golem_activity_registration/models/golem_activity_registration.py:98
#, python-format
msgid "Subscription can not be executed : the targeted member is not on the same season as the activity."
msgstr "L'inscription n'a pas pu être enregistrée : l'usager visé n'est pas ahdérant pour la même saison que celle pendant laquelle se déroule l'activité."
#. module: golem_activity_registration
#: code:addons/golem_activity_registration/models/golem_activity_registration.py:90
#: sql_constraint:golem.activity.registration:0
#, python-format
msgid "This member has already been registered for this activity."
msgstr "L'usager a déjà été inscrit à cette activité."
#. module: golem_activity_registration
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_form_inherit_golem_activity_registration
msgid "Total"
msgstr "Total"

View File

@ -0,0 +1,204 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * golem_activity_registration
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-01-09 15:14+0000\n"
"PO-Revision-Date: 2018-01-09 15:14+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: golem_activity_registration
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_form_inherit_golem_activity_registration
msgid "Activities"
msgstr ""
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_registration_activity_id
msgid "Activity"
msgstr ""
#. module: golem_activity_registration
#: model:ir.ui.menu,name:golem_activity_registration.golem_activity_registration_menu
msgid "Activity registrations"
msgstr ""
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_member_activity_registration_all_ids
msgid "All activities"
msgstr ""
#. module: golem_activity_registration
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_form_inherit_golem_activity_registration
msgid "Base price"
msgstr ""
#. module: golem_activity_registration
#: model:ir.model.fields,help:golem_activity_registration.field_golem_activity_registration_activity_price
msgid "Base price to compute the customer price. Sometimes called the catalog price."
msgstr ""
#. module: golem_activity_registration
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_activity_registration_search
msgid "By season"
msgstr ""
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_registration_create_uid
msgid "Created by"
msgstr ""
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_registration_create_date
msgid "Created on"
msgstr ""
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_member_activity_registration_ids
msgid "Current activities"
msgstr ""
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_registration_is_current
msgid "Current season?"
msgstr ""
#. module: golem_activity_registration
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_activity_registration_search
msgid "Default season"
msgstr ""
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_registration_display_name
msgid "Display Name"
msgstr ""
#. module: golem_activity_registration
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_activity_search_inherit_registration
msgid "Full"
msgstr ""
#. module: golem_activity_registration
#: model:ir.model,name:golem_activity_registration.model_golem_activity
msgid "GOLEM Activity"
msgstr ""
#. module: golem_activity_registration
#: model:ir.model,name:golem_activity_registration.model_golem_activity_registration
msgid "GOLEM Activity Registration"
msgstr ""
#. module: golem_activity_registration
#: model:ir.actions.act_window,name:golem_activity_registration.golem_activity_registration_action
msgid "GOLEM Activity Registration List"
msgstr ""
#. module: golem_activity_registration
#: model:ir.model,name:golem_activity_registration.model_golem_member
msgid "GOLEM Member"
msgstr ""
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_registration_id
msgid "ID"
msgstr ""
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_registration___last_update
msgid "Last Modified on"
msgstr ""
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_registration_write_uid
msgid "Last Updated by"
msgstr ""
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_registration_write_date
msgid "Last Updated on"
msgstr ""
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_registration_member_id
msgid "Member"
msgstr ""
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_activity_registration_ids
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_activity_form_inherit_registration
msgid "Members"
msgstr ""
#. module: golem_activity_registration
#: code:addons/golem_activity_registration/models/golem_activity_registration.py:38
#: sql_constraint:golem.activity:0
#, python-format
msgid "Number of places cannot be negative."
msgstr ""
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_places
msgid "Places"
msgstr ""
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_places_used
msgid "Places used"
msgstr ""
#. module: golem_activity_registration
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_activity_tree_inherit_registration
msgid "Remain"
msgstr ""
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_places_remain
msgid "Remaining places"
msgstr ""
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_registration_activity_price
msgid "Sale Price"
msgstr ""
#. module: golem_activity_registration
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_registration_season_id
msgid "Season"
msgstr ""
#. module: golem_activity_registration
#: code:addons/golem_activity_registration/models/golem_activity_registration.py:69
#, python-format
msgid "Sorry, there is no more place !"
msgstr ""
#. module: golem_activity_registration
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_activity_registration_form
msgid "Subscription"
msgstr ""
#. module: golem_activity_registration
#: code:addons/golem_activity_registration/models/golem_activity_registration.py:98
#, python-format
msgid "Subscription can not be executed : the targeted member is not on the same season as the activity."
msgstr ""
#. module: golem_activity_registration
#: code:addons/golem_activity_registration/models/golem_activity_registration.py:90
#: sql_constraint:golem.activity.registration:0
#, python-format
msgid "This member has already been registered for this activity."
msgstr ""
#. module: golem_activity_registration
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_form_inherit_golem_activity_registration
msgid "Total"
msgstr ""

View File

@ -15,4 +15,4 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from . import test_golem_activity_session
from . import golem_activity_registration

View File

@ -0,0 +1,101 @@
# -*- coding: utf-8 -*-
# copyright 2017 fabien bourgeois <fabien@yaltik.com>
#
# this program is free software: you can redistribute it and/or modify
# it under the terms of the gnu affero general public license as
# published by the free software foundation, either version 3 of the
# license, or (at your option) any later version.
#
# this program is distributed in the hope that it will be useful,
# but without any warranty; without even the implied warranty of
# merchantability or fitness for a particular purpose. see the
# gnu affero general public license for more details.
#
# you should have received a copy of the gnu affero general public license
# along with this program. if not, see <http://www.gnu.org/licenses/>.
""" GOLEM Activity Registration """
from odoo import models, fields, api, _
class GolemMember(models.Model):
""" GOLEM Member adaptations """
_inherit = 'golem.member'
activity_registration_ids = fields.One2many('golem.activity.registration',
'member_id', 'Current activities',
domain=[('is_current', '=', True)])
activity_registration_all_ids = fields.One2many('golem.activity.registration',
'member_id', 'All activities')
class GolemActivity(models.Model):
""" GOLEM Activity adaptations """
_inherit = 'golem.activity'
_sql_constraints = [('golem_activity_places_signed',
'CHECK (places >= 0)',
_('Number of places cannot be negative.'))]
activity_registration_ids = fields.One2many('golem.activity.registration',
'activity_id', 'Members',
index=True)
places_used = fields.Integer('Places used', compute='compute_places_used',
store=True)
@api.multi
@api.depends('activity_registration_ids')
def compute_places_used(self):
""" Computes used places """
for activity in self:
activity.places_used = len(activity.activity_registration_ids)
places = fields.Integer('Places', default=20)
places_remain = fields.Integer('Remaining places', store=True,
compute='_compute_places_remain')
@api.multi
@api.depends('places', 'places_used')
def _compute_places_remain(self):
""" Computes remaining places """
for activity in self:
activity.places_remain = activity.places - activity.places_used
@api.constrains('places_remain')
def _check_remaining_places(self):
""" Forbid inscription when there is no more place """
for activity in self:
if activity.places_remain < 0:
emsg = _('Sorry, there is no more place !')
raise models.ValidationError(emsg)
class GolemActivityRegistration(models.Model):
""" GOLEM Activity Registration """
_name = 'golem.activity.registration'
_description = 'GOLEM Activity Registration'
_rec_name ='activity_id'
member_id = fields.Many2one('golem.member', string='Member', required=True,
ondelete='cascade', index=True)
activity_id = fields.Many2one('golem.activity', required=True, index=True,
string='Activity', ondelete='cascade')
activity_price = fields.Float(related='activity_id.list_price')
season_id = fields.Many2one(string='Season',
related='activity_id.season_id', store=True)
is_current = fields.Boolean('Current season?',
related='activity_id.is_current', store=True)
_sql_constraints = [
('registration_uniq', 'UNIQUE (member_id, activity_id)',
_('This member has already been registered for this activity.'))]
@api.constrains('member_id', 'activity_id')
def _check_season_reliability(self):
""" Forbid registration when member season if not coherent with
activity season or are duplicates """
for reg in self:
if reg.activity_id.season_id not in reg.member_id.season_ids:
emsg = _('Subscription can not be executed : the targeted '
'member is not on the same season as the activity.')
raise models.ValidationError(emsg)

View File

@ -0,0 +1,3 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_golem_activity_registration_user,Access GOLEM Activity Registration User,model_golem_activity_registration,golem_base.group_golem_user,1,1,1,1
access_golem_activity_registration_manager,Access GOLEM Activity Registration Manager,model_golem_activity_registration,golem_base.group_golem_manager,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_golem_activity_registration_user Access GOLEM Activity Registration User model_golem_activity_registration golem_base.group_golem_user 1 1 1 1
3 access_golem_activity_registration_manager Access GOLEM Activity Registration Manager model_golem_activity_registration golem_base.group_golem_manager 1 1 1 1

View File

@ -0,0 +1,86 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<odoo>
<data>
<!-- Form -->
<record id="golem_activity_registration_form" model="ir.ui.view">
<field name="name">Activity registration form</field>
<field name="model">golem.activity.registration</field>
<field name="arch" type="xml">
<form>
<sheet>
<group string="Subscription">
<field name="member_id" invisible="1" />
<field name="activity_id" />
<field name="season_id" />
</group>
</sheet>
</form>
</field>
</record>
<!-- Tree -->
<record id="golem_activity_registration_tree" model="ir.ui.view">
<field name="name">Activity registration list</field>
<field name="model">golem.activity.registration</field>
<field name="arch" type="xml">
<tree create="true" edit="false" delete="false" editable="top">
<field name="season_id" readonly="1" />
<field name="member_id" domain="[('is_current', '=', True)]" />
<field name="activity_id" domain="[('is_current', '=', True)]" />
</tree>
</field>
</record>
<!-- Search -->
<record id="golem_activity_registration_search" model="ir.ui.view">
<field name="name">GOLEM Activity Registration searches</field>
<field name="model">golem.activity.registration</field>
<field name="arch" type="xml">
<search>
<field name="season_id" widget="many2one" />
<field name="member_id" widget="many2one" />
<field name="activity_id" widget="many2one" />
<filter name="season_default" string="Default season"
domain="[('is_current', '=', True)]" />
<filter name="group_season" string="By season"
context="{'group_by': 'season_id'}"/>
</search>
</field>
</record>
<!-- Action -->
<record id="golem_activity_registration_action" model="ir.actions.act_window">
<field name="name">GOLEM Activity Registration List</field>
<field name="res_model">golem.activity.registration</field>
<field name="view_mode">tree</field>
<field name="context">{'search_default_season_default': True}</field>
</record>
<!-- Menu -->
<menuitem id="golem_activity_registration_menu" name="Activity registrations"
parent="golem_activity.golem_activity_menu"
action="golem_activity_registration_action"
groups="golem_base.group_golem_user"
sequence="20" />
</data>
</odoo>

View File

@ -0,0 +1,81 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<odoo>
<data>
<!-- Form -->
<record id="golem_activity_form_inherit_registration"
model="ir.ui.view">
<field name="name">Activity Registrations and Places</field>
<field name="model">golem.activity</field>
<field name="inherit_id" ref="golem_activity.golem_activity_form" />
<field name="arch" type="xml">
<group name="places" position="inside">
<field name="places" />
</group>
<page name="session" position="after">
<page string="Members">
<group>
<field name="places_remain" readonly="True" />
<field name="activity_registration_ids"
context="{'default_activity_id': active_id}">
<tree editable="top">
<field name="member_id"
domain="[('season_ids', '=', season_id)]" />
<field name="activity_id" readonly="1" />
<field name="season_id" readonly="1" />
</tree>
</field>
</group>
</page>
</page>
</field>
</record>
<!-- Tree -->
<record id="golem_activity_tree_inherit_registration" model="ir.ui.view">
<field name="name">Activity Tree registrations additions</field>
<field name="model">golem.activity</field>
<field name="inherit_id" ref="golem_activity.golem_activity_tree" />
<field name="arch" type="xml">
<tree position="attributes">
<attribute name="colors">red: places_remain == 0;orange: places_remain &lt;= 4;</attribute>
</tree>
<field name="date_start" position="after">
<field name="places" invisible="True" />
<field name="places_remain" string="Remain" />
</field>
</field>
</record>
<!-- Search -->
<record id="golem_activity_search_inherit_registration" model="ir.ui.view">
<field name="name">Activity Search registrations additions</field>
<field name="model">golem.activity</field>
<field name="inherit_id" ref="golem_activity.golem_activity_search" />
<field name="arch" type="xml">
<filter name="season_default" position="after">
<filter name="full_activity" string="Full"
domain="[('places_remain', '=', 0)]" />
</filter>
</field>
</record>
</data>
</odoo>

View File

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<odoo>
<data>
<!-- Form -->
<record id="golem_member_form_inherit_golem_activity_registration"
model="ir.ui.view">
<field name="name">Add activities registrations to member form</field>
<field name="model">golem.member</field>
<field name="inherit_id" ref="golem_member.golem_member_form" />
<field name="arch" type="xml">
<page name="other_page" position="before">
<page name="activities" string="Activities">
<field name="id" invisible="1" />
<group>
<field name="activity_registration_ids"
attrs="{'readonly': [('id', '=', False)]}"
context="{'default_member_id': active_id}">
<tree editable="top">
<field name="activity_id"
domain="[('is_current', '=', True)]" />
<field name="season_id" readonly="1" />
<field name="member_id" readonly="1" invisible="1" />
<field name="activity_price" string="Base price" sum="Total" />
</tree>
</field>
<field name="activity_registration_all_ids" readonly="1">
<tree>
<field name="activity_id" />
<field name="season_id" />
</tree>
</field>
</group>
</page>
</page>
</field>
</record>
<!-- Searches -->
<record id="golem_member_searches_inherit_golem_activity_registration"
model="ir.ui.view">
<field name="name">Add activities registrations to member searches</field>
<field name="model">golem.member</field>
<field name="inherit_id" ref="golem_member.golem_member_search" />
<field name="arch" type="xml">
<field name="number" position="before">
<field name="activity_registration_all_ids" widget="many2one"/>
</field>
</field>
</record>
</data>
</odoo>

View File

@ -15,4 +15,4 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from . import test_golem_activity_session
from . import controllers, models

View File

@ -16,17 +16,14 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
{
'name': 'GOLEM Activity Sessions Places',
'summary': 'GOLEM Activities Session avdanced places management',
'description': ''' Management of minimum places, overbook and max
overbook... ''',
'version': '0.1',
'name': 'GOLEM Activity Member Registrations CSV exports',
'summary': 'GOLEM Activities Member Registration CSV exports',
'version': '10.0.1.0.0',
'category': 'GOLEM',
'author': 'Fabien Bourgeois',
'license': 'AGPL-3',
'application': False,
'installable': True,
'auto_install': False,
'depends': ['golem_activity_session'],
'installable': False,
'depends': ['golem_activity_registration'],
'data': ['views/golem_activity_view.xml']
}

View File

@ -14,3 +14,5 @@
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from . import controllers

View File

@ -0,0 +1,47 @@
# -*- coding: utf-8 -*-
# copyright 2016 fabien bourgeois <fabien@yaltik.com>
#
# this program is free software: you can redistribute it and/or modify
# it under the terms of the gnu affero general public license as
# published by the free software foundation, either version 3 of the
# license, or (at your option) any later version.
#
# this program is distributed in the hope that it will be useful,
# but without any warranty; without even the implied warranty of
# merchantability or fitness for a particular purpose. see the
# gnu affero general public license for more details.
#
# you should have received a copy of the gnu affero general public license
# along with this program. if not, see <http://www.gnu.org/licenses/>.
import json
import odoo.http as http
from odoo.http import request
from odoo.addons.web.controllers.main import CSVExport
class ExportGolemActivityMembers(CSVExport):
@http.route('/web/export/golem/activity_members', type='http', auth='user')
def export_csv_view(self, data):
data = json.loads(data)
FIELDS = ['number', 'lastname', 'firstname', 'street', 'zip', 'city',
'birthdate_date', 'email', 'phone', 'mobile']
aid = data.get('activity_id')
a_model = request.env['golem.activity']
activity = a_model.browse([aid])
registrations = activity.activity_registration_ids
rows = []
for r in registrations:
row = []
for f in FIELDS:
value = r.member_id.__getattribute__(f)
row.append(value)
rows.append(row)
return request.make_response(
self.from_data(FIELDS, rows),
headers=[('Content-Disposition', 'attachment; filename="%s"'
% self.filename('gollem.activity')),
('Content-Type', self.content_type)])

View File

@ -0,0 +1,28 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * golem_activity_registration_export
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-16 16:20+0000\n"
"PO-Revision-Date: 2016-10-16 16:20+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: golem_activity_registration_export
#: view:golem.activity:golem_activity_registration_export.export_activity_form
msgid "Export members to CSV file"
msgstr "Exporter les adhérents vers un fichier tableur"
#. module: golem_activity_registration_export
#: model:ir.model,name:golem_activity_registration_export.model_golem_activity
msgid "GOLEM Activity"
msgstr "Activité"

View File

@ -0,0 +1,27 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * golem_activity_registration_export
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-16 16:20+0000\n"
"PO-Revision-Date: 2016-10-16 16:20+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: golem_activity_registration_export
#: view:golem.activity:golem_activity_registration_export.export_activity_form
msgid "Export members to CSV file"
msgstr ""
#. module: golem_activity_registration_export
#: model:ir.model,name:golem_activity_registration_export.model_golem_activity
msgid "GOLEM Activity"
msgstr ""

View File

@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Fabien Bourgeois <fabien@yaltik.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from . import golem_activity_registration_export

View File

@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
# copyright 2016 fabien bourgeois <fabien@yaltik.com>
#
# this program is free software: you can redistribute it and/or modify
# it under the terms of the gnu affero general public license as
# published by the free software foundation, either version 3 of the
# license, or (at your option) any later version.
#
# this program is distributed in the hope that it will be useful,
# but without any warranty; without even the implied warranty of
# merchantability or fitness for a particular purpose. see the
# gnu affero general public license for more details.
#
# you should have received a copy of the gnu affero general public license
# along with this program. if not, see <http://www.gnu.org/licenses/>.
from json import dumps
from odoo import models, api
class GolemActivity(models.Model):
_inherit = 'golem.activity'
@api.multi
def do_export_csv(self):
""" Export basic data about members of the current activity to CSV """
self.ensure_one()
data = dumps({'activity_id': self.id})
url = '/web/export/golem/activity_members?data={}'.format(data)
print url
return {'type': 'ir.actions.act_url', 'url': url, 'target': 'self'}

View File

@ -15,23 +15,24 @@ GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<openerp>
<odoo>
<data>
<!-- Form -->
<record model="ir.ui.view" id="sessions_inscription">
<field name="name">Add sessions inscriptions to member form</field>
<field name="model">golem.member</field>
<field name="inherit_id" ref="golem_member.view_form" />
<record id="export_activity_form" model="ir.ui.view">
<field name="name">Activity Registrations CSV Export</field>
<field name="model">golem.activity</field>
<field name="inherit_id"
ref="golem_activity.view_form" />
<field name="arch" type="xml">
<page name="other_page" position="before">
<page name="sessions" string="Activities">
<field name="activity_session_ids"
context="{'search_default_season_default': True}" />
</page>
</page>
<header position="inside">
<div style="min-height: 30px;">
<button name="do_export_csv" type="object" class="oe_button"
string="Export members to CSV file" />
</div>
</header>
</field>
</record>
</data>
</openerp>
</odoo>

View File

@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
# Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from . import models, wizard

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Fabien Bourgeois <fabien@yaltik.com>
# Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@ -16,17 +16,16 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
{
'name': 'GOLEM Activity Sessions',
'summary': 'GOLEM Activities Session management',
'description': ''' Non-profit french MJC activies session management ''',
'version': '0.1',
'name': 'GOLEM Activity Session Member Registrations States',
'summary': 'GOLEM Activities Session Member Registration states',
'version': '10.0.1.0.0',
'category': 'GOLEM',
'author': 'Fabien Bourgeois',
'license': 'AGPL-3',
'application': False,
'installable': True,
'auto_install': True,
'depends': ['product', 'mail', 'golem_activity', 'golem_member'],
'data': ['security/ir.model.access.csv',
'views/golem_activity_view.xml', 'views/golem_member_view.xml']
'depends': ['golem_activity_registration', 'golem_payment'],
'data': ['views/golem_activity_registration_views.xml',
'views/golem_member_views.xml', 'views/golem_activity_views.xml',
'wizard/golem_activity_registration_invoicing.xml']
}

View File

@ -0,0 +1,217 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * golem_activity_registration_state
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-06-14 23:16+0000\n"
"PO-Revision-Date: 2017-06-14 23:16+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_line_ids
msgid "Activities"
msgstr "Activités"
#. module: golem_activity_registration_state
#: model:ir.ui.view,arch_db:golem_activity_registration_state.invoicing_form
msgid "Activities and Prices"
msgstr "Activities and Prices"
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_line_activity_id
msgid "Activity id"
msgstr "Activité"
#. module: golem_activity_registration_state
#: model:ir.ui.view,arch_db:golem_activity_registration_state.invoicing_form
msgid "Cancel"
msgstr "Annuler"
#. module: golem_activity_registration_state
#: selection:golem.activity.registration,state:0
msgid "Canceled"
msgstr "Annulé"
#. module: golem_activity_registration_state
#: selection:golem.activity.registration,state:0
msgid "Confirmed"
msgstr "Confirmé"
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_create_uid
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_line_create_uid
msgid "Created by"
msgstr "Créé par"
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_create_date
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_line_create_date
msgid "Created on"
msgstr "Créé le"
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_display_name
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_line_display_name
msgid "Display Name"
msgstr "Nom affiché"
#. module: golem_activity_registration_state
#: selection:golem.activity.registration,state:0
msgid "Draft"
msgstr "Brouillon"
#. module: golem_activity_registration_state
#: model:ir.model,name:golem_activity_registration_state.model_golem_activity
msgid "GOLEM Activity"
msgstr "Activité"
#. module: golem_activity_registration_state
#: model:ir.model,name:golem_activity_registration_state.model_golem_activity_registration
msgid "GOLEM Activity Registration"
msgstr "Inscription à l'activité"
#. module: golem_activity_registration_state
#: model:ir.model,name:golem_activity_registration_state.model_golem_activity_registration_invoicing
msgid "GOLEM Activity Registration Invoicing Wizard"
msgstr "GOLEM Activity Registration Invoicing Wizard"
#. module: golem_activity_registration_state
#: model:ir.model,name:golem_activity_registration_state.model_golem_member
msgid "GOLEM Member"
msgstr "Adhérent"
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_member_has_draft_registrations
msgid "Has draft registrations ?"
msgstr "A des inscriptions non validées ?"
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_id
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_line_id
msgid "ID"
msgstr "ID"
#. module: golem_activity_registration_state
#: model:ir.model.fields,help:golem_activity_registration_state.field_golem_activity_registration_invoicing_schedule_id
msgid "If no schedule is selected, only the invoice will be create. Otherwise, draft payments will be generated."
msgstr "Si aucun échéancier n'est sélectionné, seule la facture sera créée. Sinon, des brouillons de paiements seront générés."
#. module: golem_activity_registration_state
#: model:ir.ui.view,arch_db:golem_activity_registration_state.golem_member_form_inherit_registration_state
msgid "If you validate draft registration, they will be seen as confirmed. Then, an invoice will be created for the current member."
msgstr "Si vous validez les inscriptions, elles seront vues comme confirmées. Ensuite, une facture sera créée pour l'adhérent."
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoice_id
msgid "Invoice Reference"
msgstr "Référence de la facture"
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoice_line_id
msgid "Invoice line"
msgstr "Ligne de facturation"
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_line_invoicing_id
msgid "Invoicing id"
msgstr "Invoicing id"
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_journal_id
msgid "Journal"
msgstr "Journal"
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing___last_update
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_line___last_update
msgid "Last Modified on"
msgstr "Dernière Modification le"
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_line_write_uid
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_write_uid
msgid "Last Updated by"
msgstr "Dernière mise à jour par"
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_line_write_date
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_write_date
msgid "Last Updated on"
msgstr "Dernière mise à jour le"
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_member_id
msgid "Member"
msgstr "Adhérent"
#. module: golem_activity_registration_state
#: model:ir.ui.view,arch_db:golem_activity_registration_state.golem_member_form_inherit_registration_state
msgid "Note that you can't register activities if the member is new and not yet saved into the database."
msgstr "Notez que vous ne devez d'abord enregistrer la fiche d'un nouvel adhérent avant de pouvoir saisie ses activités."
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_schedule_id
msgid "Payment schedule"
msgstr "Échéancier de paiement"
#. module: golem_activity_registration_state
#: model:ir.ui.view,arch_db:golem_activity_registration_state.invoicing_form
msgid "Please confirm activity prices and choose a payment schedule if needed."
msgstr "Merci de confirmer les coûts des activités et de choisir, si souhaité, un échéancier de paiement."
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_line_price
msgid "Price"
msgstr "Prix"
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_line_registration_id
msgid "Registration id"
msgstr "Registration id"
#. module: golem_activity_registration_state
#: code:addons/golem_activity_registration_state/models/golem_activity_registration.py:58
#: model:ir.ui.view,arch_db:golem_activity_registration_state.invoicing_form
#, python-format
msgid "Registration invoicing"
msgstr "Registration invoicing"
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_season_id
msgid "Season"
msgstr "Saison"
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_state
msgid "State"
msgstr "État"
#. module: golem_activity_registration_state
#: model:ir.ui.view,arch_db:golem_activity_registration_state.invoicing_form
msgid "Total"
msgstr "Total"
#. module: golem_activity_registration_state
#: model:ir.ui.view,arch_db:golem_activity_registration_state.invoicing_form
msgid "Validate"
msgstr "Valider"
#. module: golem_activity_registration_state
#: model:ir.ui.view,arch_db:golem_activity_registration_state.golem_member_form_inherit_registration_state
msgid "Validate all draft registrations"
msgstr "Valider toutes les inscriptions"
#. module: golem_activity_registration_state
#: model:ir.model,name:golem_activity_registration_state.model_golem_activity_registration_invoicing_line
msgid "golem.activity.registration.invoicing.line"
msgstr "golem.activity.registration.invoicing.line"

View File

@ -0,0 +1,216 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * golem_activity_registration_state
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-06-14 23:16+0000\n"
"PO-Revision-Date: 2017-06-14 23:16+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_line_ids
msgid "Activities"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.ui.view,arch_db:golem_activity_registration_state.invoicing_form
msgid "Activities and Prices"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_line_activity_id
msgid "Activity id"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.ui.view,arch_db:golem_activity_registration_state.invoicing_form
msgid "Cancel"
msgstr ""
#. module: golem_activity_registration_state
#: selection:golem.activity.registration,state:0
msgid "Canceled"
msgstr ""
#. module: golem_activity_registration_state
#: selection:golem.activity.registration,state:0
msgid "Confirmed"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_create_uid
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_line_create_uid
msgid "Created by"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_create_date
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_line_create_date
msgid "Created on"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_display_name
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_line_display_name
msgid "Display Name"
msgstr ""
#. module: golem_activity_registration_state
#: selection:golem.activity.registration,state:0
msgid "Draft"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.model,name:golem_activity_registration_state.model_golem_activity
msgid "GOLEM Activity"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.model,name:golem_activity_registration_state.model_golem_activity_registration
msgid "GOLEM Activity Registration"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.model,name:golem_activity_registration_state.model_golem_activity_registration_invoicing
msgid "GOLEM Activity Registration Invoicing Wizard"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.model,name:golem_activity_registration_state.model_golem_member
msgid "GOLEM Member"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_member_has_draft_registrations
msgid "Has draft registrations ?"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_id
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_line_id
msgid "ID"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.model.fields,help:golem_activity_registration_state.field_golem_activity_registration_invoicing_schedule_id
msgid "If no schedule is selected, only the invoice will be create. Otherwise, draft payments will be generated."
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.ui.view,arch_db:golem_activity_registration_state.golem_member_form_inherit_registration_state
msgid "If you validate draft registration, they will be seen as confirmed. Then, an invoice will be created for the current member."
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoice_id
msgid "Invoice Reference"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoice_line_id
msgid "Invoice line"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_line_invoicing_id
msgid "Invoicing id"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_journal_id
msgid "Journal"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing___last_update
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_line___last_update
msgid "Last Modified on"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_line_write_uid
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_write_uid
msgid "Last Updated by"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_line_write_date
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_write_date
msgid "Last Updated on"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_member_id
msgid "Member"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.ui.view,arch_db:golem_activity_registration_state.golem_member_form_inherit_registration_state
msgid "Note that you can't register activities if the member is new and not yet saved into the database."
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_schedule_id
msgid "Payment schedule"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.ui.view,arch_db:golem_activity_registration_state.invoicing_form
msgid "Please confirm activity prices and choose a payment schedule if needed."
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_line_price
msgid "Price"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_line_registration_id
msgid "Registration id"
msgstr ""
#. module: golem_activity_registration_state
#: code:addons/golem_activity_registration_state/models/golem_activity_registration.py:58
#: model:ir.ui.view,arch_db:golem_activity_registration_state.invoicing_form
#, python-format
msgid "Registration invoicing"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_invoicing_season_id
msgid "Season"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.model.fields,field_description:golem_activity_registration_state.field_golem_activity_registration_state
msgid "State"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.ui.view,arch_db:golem_activity_registration_state.invoicing_form
msgid "Total"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.ui.view,arch_db:golem_activity_registration_state.invoicing_form
msgid "Validate"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.ui.view,arch_db:golem_activity_registration_state.golem_member_form_inherit_registration_state
msgid "Validate all draft registrations"
msgstr ""
#. module: golem_activity_registration_state
#: model:ir.model,name:golem_activity_registration_state.model_golem_activity_registration_invoicing_line
msgid "golem.activity.registration.invoicing.line"
msgstr ""

View File

@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Fabien Bourgeois <fabien@yaltik.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from . import golem_activity_registration

View File

@ -0,0 +1,120 @@
# -*- coding: utf-8 -*-
# copyright 2017 fabien bourgeois <fabien@yaltik.com>
#
# this program is free software: you can redistribute it and/or modify
# it under the terms of the gnu affero general public license as
# published by the free software foundation, either version 3 of the
# license, or (at your option) any later version.
#
# this program is distributed in the hope that it will be useful,
# but without any warranty; without even the implied warranty of
# merchantability or fitness for a particular purpose. see the
# gnu affero general public license for more details.
#
# you should have received a copy of the gnu affero general public license
# along with this program. if not, see <http://www.gnu.org/licenses/>.
""" GOLEM Activity Registration State """
from odoo import models, fields, api, _
class GolemMember(models.Model):
""" GOLEM Member adaptations """
_inherit = 'golem.member'
has_draft_registrations = fields.Boolean(
'Has draft registrations ?',
compute='_compute_has_draft_reg')
@api.depends('activity_registration_ids')
def _compute_has_draft_reg(self):
""" Check if there are draft states in member activities """
for member in self:
for reg in member.activity_registration_ids:
if reg.state == 'draft':
member.has_draft_registrations = True
return
member.has_draft_registrations = False
@api.multi
def do_validate_registrations(self):
""" Validate all draft registrations """
self.ensure_one()
member = self[0]
draft_registrations = member.activity_registration_ids.filtered(
lambda r: r.state == 'draft')
if draft_registrations:
invoicing = self.env['golem.activity.registration.invoicing'].create({
'member_id' : member.id,
'season_id': draft_registrations[0].activity_id.season_id.id
})
line_obj = self.env['golem.activity.registration.invoicing.line']
for reg in draft_registrations:
line_obj.create({'invoicing_id': invoicing.id,
'registration_id': reg.id,
'activity_id': reg.activity_id.id,
'price': reg.activity_id.list_price})
return {'name': _('Registration invoicing'),
'type': 'ir.actions.act_window',
'res_model': 'golem.activity.registration.invoicing',
'view_mode': 'form',
'res_id': invoicing.id,
'target': 'new'}
@api.multi
def write(self, values):
""" Handle removed activities to be canceled """
if 'activity_registration_ids' in values:
rids = values['activity_registration_ids']
r_keep, r_removed = [], []
for rid in rids: # == 2 is removal case
if rid[0] == 2:
r_removed.append(rid)
else:
r_keep.append(rid)
reg_obj = self.env['golem.activity.registration']
for rem in r_removed:
reg = reg_obj.browse([rem[1]])
# if already canceled, let it be removed, else cancel it
if reg.state != 'canceled':
reg.state = 'canceled'
else:
r_keep.append(rem)
values['activity_registration_ids'] = r_keep
return super(GolemMember, self).write(values)
class GolemActivity(models.Model):
""" GOLEM Activity adaptations """
_inherit = 'golem.activity'
@api.multi
@api.depends('activity_registration_ids')
def compute_places_used(self):
""" Computes used places """
for activity in self:
rids = activity.activity_registration_ids
activity.places_used = len(rids.filtered(lambda r: r.state == 'confirmed'))
class GolemActivityRegistration(models.Model):
""" GOLEM Activity Registration adaptations """
_inherit = 'golem.activity.registration'
state = fields.Selection([('draft', 'Draft'), ('confirmed', 'Confirmed'),
('canceled', 'Canceled')], required=True,
default='draft')
invoice_line_id = fields.Many2one('account.invoice.line',
string='Invoice line',
ondelete='set null')
invoice_id = fields.Many2one(related='invoice_line_id.invoice_id')
@api.multi
def write(self, values):
""" Recomputes values linked to registrations when state change """
res = super(GolemActivityRegistration, self).write(values)
if values.get('state'):
for registration in self:
registration.activity_id.compute_places_used()
return res

View File

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2016 Fabien Bourgeois <fabien@yaltik.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<odoo>
<data>
<!-- Tree -->
<record id="golem_activity_registration_tree_inherit_state"
model="ir.ui.view">
<field name="name">Session registration list</field>
<field name="model">golem.activity.registration</field>
<field name="inherit_id"
ref="golem_activity_registration.golem_activity_registration_tree" />
<field name="arch" type="xml">
<tree position="attributes">
<attribute name="colors">red: state == 'canceled';darkgrey: state == 'draft';</attribute>
</tree>
<tree position="inside">
<field name="state" invisible="1" />
</tree>
<field name="activity_id" position="after">
<field name="invoice_id" readonly="1" />
<field name="invoice_line_id" readonly="1" />
</field>
</field>
</record>
<!-- Search -->
<record id="golem_activity_registration_search_inherit_state"
model="ir.ui.view">
<field name="name">Registration state specific searches</field>
<field name="model">golem.activity.registration</field>
<field name="inherit_id"
ref="golem_activity_registration.golem_activity_registration_search" />
<field name="arch" type="xml">
<field name="activity_id" position="after">
<field name="invoice_id" widget="many2one" />
</field>
</field>
</record>
</data>
</odoo>

View File

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<odoo>
<data>
<!-- Form -->
<record id="golem_activity_form_inherit_registration_state"
model="ir.ui.view">
<field name="name">Activity Registrations States</field>
<field name="model">golem.activity</field>
<field name="inherit_id"
ref="golem_activity_registration.golem_activity_form_inherit_registration" />
<field name="arch" type="xml">
<tree position="replace">
<tree editable="top"
colors="red: state == 'canceled';darkgrey: state == 'draft';">
<field name="state" invisible="1" />
<field name="member_id"
domain="[('season_ids', '=', season_id)]" />
<field name="activity_id" readonly="1" />
<field name="season_id" readonly="1" />
<field name="invoice_id" readonly="1" />
</tree>
</tree>
</field>
</record>
</data>
</odoo>

View File

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<odoo>
<data>
<!-- Form -->
<record model="ir.ui.view" id="golem_member_form_inherit_registration_state">
<field name="name">Add state for registrations</field>
<field name="model">golem.member</field>
<field name="inherit_id"
ref="golem_activity_registration.golem_member_form_inherit_golem_activity_registration" />
<field name="arch" type="xml">
<field name="id" position="after">
<p attrs="{'invisible': [('id', '!=', False)]}" style="color:red;}"
colspan="2">
Note that you can't register activities if the member is new and not yet saved into the database.
</p>
<p colspan="2">
<field name="has_draft_registrations" invisible="1" />
<button name="do_validate_registrations" type="object"
string="Validate all draft registrations"
class="oe_highlight"
help="If you validate draft registration, they will be seen as confirmed. Then, an invoice will be created for the current member."
attrs="{'invisible': [('has_draft_registrations', '=', False)]}" />
</p>
</field>
<!-- TODO : one by one cancelation -->
<!-- TODO : do not allow removal if confirmed -->
<tree position="attributes">
<attribute name="colors">red: state == 'canceled';darkgrey: state == 'draft';</attribute>
</tree>
<tree position="inside">
<field name="state" invisible="1" />
</tree>
</field>
</record>
</data>
</odoo>

View File

@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
# Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from . import golem_activity_registration_invoicing

View File

@ -0,0 +1,108 @@
# -*- coding: utf-8 -*-
# copyright 2017 fabien bourgeois <fabien@yaltik.com>
#
# this program is free software: you can redistribute it and/or modify
# it under the terms of the gnu affero general public license as
# published by the free software foundation, either version 3 of the
# license, or (at your option) any later version.
#
# this program is distributed in the hope that it will be useful,
# but without any warranty; without even the implied warranty of
# merchantability or fitness for a particular purpose. see the
# gnu affero general public license for more details.
#
# you should have received a copy of the gnu affero general public license
# along with this program. if not, see <http://www.gnu.org/licenses/>.
""" GOLEM Activity Registration Invoicing Wizard """
import logging
from odoo import models, fields, api
_LOGGER = logging.getLogger(__name__)
class GolemActivityRegistrationInvoicingLine(models.TransientModel):
""" GOLEM Activity Registration Invoicing Lines """
_name = 'golem.activity.registration.invoicing.line'
description = 'GOLEM Activity Registration Invoicing Lines'
invoicing_id = fields.Many2one('golem.activity.registration.invoicing',
required=True)
registration_id = fields.Many2one('golem.activity.registration', required=True)
activity_id = fields.Many2one('golem.activity', required=True, readonly=True)
price = fields.Float('Price')
class GolemActivityRegistrationInvoicing(models.TransientModel):
""" GOLEM Activity Registration Invoicing Wizard """
_name = 'golem.activity.registration.invoicing'
_description = 'GOLEM Activity Registration Invoicing Wizard'
season_id = fields.Many2one('golem.season', 'Season', required=True)
member_id = fields.Many2one('golem.member', 'Member', required=True)
line_ids = fields.One2many('golem.activity.registration.invoicing.line',
'invoicing_id', string='Activities')
schedule_id = fields.Many2one('golem.payment.schedule', 'Payment schedule',
domain='[("season_id", "=", season_id)]',
help='If no schedule is selected, only the '
'invoice will be create. Otherwise, draft '
'payments will be generated.')
journal_id = fields.Many2one('account.journal', 'Journal',
domain=[('type', 'in', ('bank', 'cash'))])
@api.multi
def _create_invoice(self):
""" Create invoice and lines """
self.ensure_one()
partner = self.member_id.partner_id
invoice = self.env['account.invoice'].create({
'partner_id': partner.id,
'account_id': partner.property_account_receivable_id.id,
'fiscal_position_id': partner.property_account_position_id.id
})
for line in self.line_ids:
product = line.activity_id.product_id
# Handling of invoice lines : needs cache record for onchange, then
# real writing...
invoice_line = self.env['account.invoice.line'].new({
'product_id': product.id,
'invoice_id': invoice.id
})
invoice_line._onchange_product_id()
line_values = dict(invoice_line._cache)
line_values['price_unit'] = line.price
invoice_line = self.env['account.invoice.line'].create(line_values)
invoice.compute_taxes()
line.registration_id.invoice_line_id = invoice_line.id
return invoice
@api.multi
def _create_payments(self, invoice):
""" Create payment if schedule has been chosen """
self.ensure_one()
if self.schedule_id and self.schedule_id.occurences > 0:
# TODO: make more intelligent price cut
amount = invoice.amount_total
amount_per_occurence = amount / self.schedule_id.occurences
for day in self.schedule_id.day_ids:
payment = self.env['account.payment'].new({
'payment_type': 'inbound',
'partner_type': 'customer',
'partner_id': self.member_id.partner_id.id,
'amount': amount_per_occurence,
'payment_date': day.day,
'journal_id': self.journal_id.id,
})
payment._onchange_journal()
payment_values = dict(payment._cache)
payment = self.env['account.payment'].create(payment_values)
payment.invoice_ids = [(4, invoice.id, False)]
@api.multi
def validate(self):
""" Validate and create invoice and payments """
self.ensure_one()
draft_registrations = self.member_id.activity_registration_ids.filtered(
lambda r: r.state == 'draft')
draft_registrations.write({'state': 'confirmed'})
invoice = self._create_invoice()
self._create_payments(invoice)

View File

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<odoo>
<data>
<!-- Form -->
<record id="invoicing_form" model="ir.ui.view">
<field name="name">GOLEM Activity Registration Invoicing Form</field>
<field name="model">golem.activity.registration.invoicing</field>
<field name="arch" type="xml">
<form string="Registration invoicing">
<p class="oe_grey">Please confirm activity prices and choose a payment schedule if needed.</p>
<group>
<field name="season_id" readonly="1" />
<field name="member_id" readonly="1" />
<field name="line_ids" string="Activities and Prices">
<tree delete="false" create="false" edit="true" editable="bottom">
<field name="activity_id" readonly="1" />
<field name="price" sum="Total" />
</tree>
</field>
<field name="schedule_id" />
<field name="journal_id"
attrs="{'invisible': [('schedule_id', '=', False)],
'required': [('schedule_id', '!=', False)]}" />
</group>
<footer>
<button name="validate" string="Validate" type="object"
class="oe_highlight" />
<button string="Cancel" class="oe_link" special="cancel" />
</footer>
</form>
</field>
</record>
</data>
</odoo>

View File

@ -1,831 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * golem_activity_session
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-08-03 15:20+0000\n"
"PO-Revision-Date: 2016-08-03 15:20+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: golem_activity_session
#: field:golem.activity.session,product_variant_count:0
msgid "# of Product Variants"
msgstr "# de variantes d'articles"
#. module: golem_activity_session
#: help:golem.activity.session,description_sale:0
msgid "A description of the Product that you want to communicate to your customers. This description will be copied to every Sale Order, Delivery Order and Customer Invoice/Refund"
msgstr "Une description de l'article que vous voulez communiquer à vos utilisateurs. Cette description sera utilisée dans chaque bon de commande, bon de livraison et facture client ou avoir."
#. module: golem_activity_session
#: help:golem.activity.session,description_purchase:0
msgid "A description of the Product that you want to communicate to your suppliers. This description will be copied to every Purchase Order, Receipt and Supplier Invoice/Refund."
msgstr "Une description de l'article que vous voulez communiquer à vos utilisateurs. Cette description sera utilisée dans chaque bon de commande, bon de livraison et facture client ou avoir."
#. module: golem_activity_session
#: help:golem.activity.session,description:0
msgid "A precise description of the Product, used only for internal information purposes."
msgstr "Une description précise de l'article, utilisée seulement pour de l'information interne (hors factures)."
#. module: golem_activity_session
#: field:golem.activity.session,active:0
msgid "Active"
msgstr "Actif"
#. module: golem_activity_session
#: view:golem.member:golem_activity_session.sessions_inscription
#: field:golem.member,activity_session_ids:0
msgid "Activities"
msgstr "Activités"
#. module: golem_activity_session
#: model:ir.actions.act_window,name:golem_activity_session.category_action
msgid "Activities Categories"
msgstr "Catégories d'activités"
#. module: golem_activity_session
#: model:ir.ui.menu,name:golem_activity_session.session_menu_list
msgid "Activities sessions"
msgstr "Séances des activités"
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:93
#: view:golem.activity.session:golem_activity_session.searches
#: field:golem.activity.session,activity_id:0
#: selection:golem.activity.session,type_of:0
#, python-format
msgid "Activity"
msgstr "Activité"
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:43
#, python-format
msgid "Activity Sessions"
msgstr "Séances de l'activité"
#. module: golem_activity_session
#: field:golem.activity.session,is_overbooked:0
msgid "Allow overbook?"
msgstr "Autoriser la surcharge?"
#. module: golem_activity_session
#: field:golem.activity.session,animator_id:0
msgid "Animator"
msgstr "Intervenant"
#. module: golem_activity_session
#: help:golem.activity.session,list_price:0
msgid "Base price to compute the customer price. Sometimes called the catalog price."
msgstr "Prix de base pour calculer le prix client."
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.searches
msgid "By animator"
msgstr "Par intervenant"
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.searches
msgid "By category"
msgstr "Par catégorie"
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.searches
msgid "By type"
msgstr "Par type"
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.searches
msgid "By weekday"
msgstr "Par jour de la semaine"
#. module: golem_activity_session
#: field:golem.activity.session,rental:0
msgid "Can be Rent"
msgstr "Peut être loué"
#. module: golem_activity_session
#: field:golem.activity.session,sale_ok:0
msgid "Can be Sold"
msgstr "Peut être vendu"
#. module: golem_activity_session
#: model:ir.ui.menu,name:golem_activity_session.activity_categ
msgid "Categories"
msgstr "Categories"
#. module: golem_activity_session
#: help:golem.activity.session,membership:0
msgid "Check if the product is eligible for membership."
msgstr "Check if the product is eligible for membership."
#. module: golem_activity_session
#: help:golem.activity.session,uos_coeff:0
msgid "Coefficient to convert default Unit of Measure to Unit of Sale\n"
" uos = uom * coeff"
msgstr "Coefficient to convert default Unit of Measure to Unit of Sale\n"
" uos = uom * coeff"
#. module: golem_activity_session
#: field:golem.activity.session,color:0
msgid "Color Index"
msgstr "Color Index"
#. module: golem_activity_session
#: field:golem.activity.session,company_id:0
msgid "Company"
msgstr "Company"
#. module: golem_activity_session
#: help:golem.activity.session,type:0
msgid "Consumable are product where you don't manage stock, a service is a non-material product provided by a company or an individual."
msgstr "Consumable are product where you don't manage stock, a service is a non-material product provided by a company or an individual."
#. module: golem_activity_session
#: field:golem.activity.session,standard_price:0
msgid "Cost Price"
msgstr "Cost Price"
#. module: golem_activity_session
#: help:golem.activity.session,standard_price:0
msgid "Cost price of the product template used for standard stock valuation in accounting and used as a base price on purchase orders. Expressed in the default unit of measure of the product."
msgstr "Cost price of the product template used for standard stock valuation in accounting and used as a base price on purchase orders. Expressed in the default unit of measure of the product."
#. module: golem_activity_session
#: field:golem.activity.session,create_uid:0
msgid "Created by"
msgstr "Créé par"
#. module: golem_activity_session
#: field:golem.activity.session,create_date:0
msgid "Created on"
msgstr "Créé le"
#. module: golem_activity_session
#: field:golem.activity.session,is_current:0
msgid "Current season?"
msgstr "Saison en cours?"
#. module: golem_activity_session
#: field:golem.activity.session,taxes_id:0
msgid "Customer Taxes"
msgstr "Taxes"
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.session_tree
msgid "Date"
msgstr "Date"
#. module: golem_activity_session
#: help:golem.activity.session,membership_date_from:0
msgid "Date from which membership becomes active."
msgstr "Date à partir de laquelle l'adhésion est devenu active."
#. module: golem_activity_session
#: help:golem.activity.session,message_last_post:0
msgid "Date of the last message posted on the record."
msgstr "Date du dernier message sur l'enregistrement."
#. module: golem_activity_session
#: help:golem.activity.session,membership_date_to:0
msgid "Date until which membership remains active."
msgstr "Date à laquelle l'adhésion reste active."
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.session_tree
msgid "Day"
msgstr "Jour"
#. module: golem_activity_session
#: help:golem.activity.session,uom_id:0
msgid "Default Unit of Measure used for all stock operation."
msgstr "Default Unit of Measure used for all stock operation."
#. module: golem_activity_session
#: help:golem.activity.session,uom_po_id:0
msgid "Default Unit of Measure used for purchase orders. It must be in the same category than the default unit of measure."
msgstr "Default Unit of Measure used for purchase orders. It must be in the same category than the default unit of measure."
#. module: golem_activity_session
#: field:golem.activity.session,default_code:0
msgid "Default code"
msgstr "Référence"
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.searches
msgid "Default season"
msgstr "Saison par défaut"
#. module: golem_activity_session
#: field:golem.activity.session,description:0
msgid "Description"
msgstr "Description"
#. module: golem_activity_session
#: field:golem.activity.session,display_name:0
msgid "Display Name"
msgstr "Nom affiché"
#. module: golem_activity_session
#: field:golem.activity.session,ean13:0
msgid "EAN13 Barcode"
msgstr "Code-barres EAN13"
#. module: golem_activity_session
#: field:golem.activity.session,date_end:0
msgid "End date"
msgstr "Date de fin"
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:161
#, python-format
msgid "End of the session cannot be after the end of activity date"
msgstr "La fin de la séance ne peut être après la fin de l'activité"
#. module: golem_activity_session
#: field:golem.activity.session,hour_end:0
msgid "End time"
msgstr "Heure de fin"
#. module: golem_activity_session
#: field:golem.activity.session,property_account_expense:0
msgid "Expense Account"
msgstr "Compte de dépense"
#. module: golem_activity_session
#: field:golem.activity.session,message_follower_ids:0
msgid "Followers"
msgstr "Abonnés"
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:169
#: selection:golem.activity.session,weekday:0
#, python-format
msgid "Friday"
msgstr "Vendredi"
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.searches
msgid "Full"
msgstr "Plein"
#. module: golem_activity_session
#: model:ir.model,name:golem_activity_session.model_golem_activity_session
msgid "GOLEM Activities Sessions"
msgstr "Séances des activités"
#. module: golem_activity_session
#: model:ir.actions.act_window,name:golem_activity_session.session_action_list
msgid "GOLEM Activities Sessions List"
msgstr "Liste des séances"
#. module: golem_activity_session
#: model:ir.model,name:golem_activity_session.model_golem_activity
msgid "GOLEM Activity"
msgstr "Activité"
#. module: golem_activity_session
#: model:ir.model,name:golem_activity_session.model_golem_member
msgid "GOLEM Member"
msgstr "Adhérent"
#. module: golem_activity_session
#: help:golem.activity.session,packaging_ids:0
msgid "Gives the different ways to package the same product. This has no impact on the picking order and is mainly used if you use the EDI module."
msgstr "Gives the different ways to package the same product. This has no impact on the picking order and is mainly used if you use the EDI module."
#. module: golem_activity_session
#: field:golem.activity.session,weight:0
msgid "Gross Weight"
msgstr "Gross Weight"
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.searches
msgid "Group By"
msgstr "Grouper par"
#. module: golem_activity_session
#: help:golem.activity.session,message_summary:0
msgid "Holds the Chatter summary (number of messages, ...). This summary is directly in html format in order to be inserted in kanban views."
msgstr "Holds the Chatter summary (number of messages, ...). This summary is directly in html format in order to be inserted in kanban views."
#. module: golem_activity_session
#: field:golem.activity.session,id:0
msgid "ID"
msgstr "ID"
#. module: golem_activity_session
#: help:golem.activity.session,message_unread:0
msgid "If checked new messages require your attention."
msgstr "If checked new messages require your attention."
#. module: golem_activity_session
#: help:golem.activity.session,active:0
msgid "If unchecked, it will allow you to hide the product without removing it."
msgstr "If unchecked, it will allow you to hide the product without removing it."
#. module: golem_activity_session
#: field:golem.activity.session,image:0
msgid "Image"
msgstr "Image"
#. module: golem_activity_session
#: field:golem.activity.session,property_account_income:0
msgid "Income Account"
msgstr "Income Account"
#. module: golem_activity_session
#: field:golem.activity.session,categ_id:0
msgid "Internal Category"
msgstr "Catégorie"
#. module: golem_activity_session
#: field:golem.activity.session,message_is_follower:0
msgid "Is a Follower"
msgstr "Is a Follower"
#. module: golem_activity_session
#: field:golem.activity.session,is_product_variant:0
msgid "Is product variant"
msgstr "Is product variant"
#. module: golem_activity_session
#: field:golem.activity.session,is_recurrent:0
msgid "Is recurrent ?"
msgstr "Est récurrent ?"
#. module: golem_activity_session
#: field:golem.activity.session,message_last_post:0
msgid "Last Message Date"
msgstr "Date du dernier message"
#. module: golem_activity_session
#: field:golem.activity.session,__last_update:0
msgid "Last Modified on"
msgstr "Dernière modification le"
#. module: golem_activity_session
#: field:golem.activity.session,write_uid:0
msgid "Last Updated by"
msgstr "Dernière modification par"
#. module: golem_activity_session
#: field:golem.activity.session,write_date:0
msgid "Last Updated on"
msgstr "Dernière modification le"
#. module: golem_activity_session
#: field:golem.activity.session,packaging_ids:0
msgid "Logistical Units"
msgstr "Logistical Units"
#. module: golem_activity_session
#: field:golem.activity.session,seller_id:0
msgid "Main Supplier"
msgstr "Main Supplier"
#. module: golem_activity_session
#: help:golem.activity.session,seller_id:0
msgid "Main Supplier who has highest priority in Supplier List."
msgstr "Main Supplier who has highest priority in Supplier List."
#. module: golem_activity_session
#: field:golem.activity.session,mes_type:0
msgid "Measure Type"
msgstr "Measure Type"
#. module: golem_activity_session
#: field:golem.activity.session,image_medium:0
msgid "Medium-sized image"
msgstr "Medium-sized image"
#. module: golem_activity_session
#: help:golem.activity.session,image_medium:0
msgid "Medium-sized image of the product. It is automatically resized as a 128x128px image, with aspect ratio preserved, only when the image exceeds one of those sizes. Use this field in form views or some kanban views."
msgstr "Medium-sized image of the product. It is automatically resized as a 128x128px image, with aspect ratio preserved, only when the image exceeds one of those sizes. Use this field in form views or some kanban views."
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.view_form
#: field:golem.activity.session,member_ids:0
msgid "Members"
msgstr "Adhérents"
#. module: golem_activity_session
#: field:golem.activity.session,membership:0
msgid "Membership"
msgstr "Adhésion"
#. module: golem_activity_session
#: field:golem.activity.session,membership_date_to:0
msgid "Membership End Date"
msgstr "Fin de l'adhésion"
#. module: golem_activity_session
#: field:golem.activity.session,membership_date_from:0
msgid "Membership Start Date"
msgstr "Début de l'adhésion"
#. module: golem_activity_session
#: field:golem.activity.session,message_ids:0
msgid "Messages"
msgstr "Messages"
#. module: golem_activity_session
#: help:golem.activity.session,message_ids:0
msgid "Messages and communication history"
msgstr "Messages et historique des échanges"
#. module: golem_activity_session
#: field:golem.activity.session,places_min:0
msgid "Minimum places"
msgstr "Places minimum"
#. module: golem_activity_session
#: help:golem.activity.session,places_min:0
msgid "Minimum places to maintain the session"
msgstr "Nombre de places minimum pour maintenir la session"
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:165
#: selection:golem.activity.session,weekday:0
#, python-format
msgid "Monday"
msgstr "Lundi"
#. module: golem_activity_session
#: field:golem.activity.session,name:0
#: field:golem.activity.session,session_name:0
msgid "Name"
msgstr "Nom"
#. module: golem_activity_session
#: field:golem.activity.session,weight_net:0
msgid "Net Weight"
msgstr "Net Weight"
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:215
#, python-format
msgid "Number of places cannot be negative."
msgstr "Le nombre de places ne peut pas être négatif"
#. module: golem_activity_session
#: field:golem.activity.session,places:0
msgid "Places"
msgstr "Places"
#. module: golem_activity_session
#: field:golem.activity.session,places_used:0
msgid "Places used"
msgstr "Places prises"
#. module: golem_activity_session
#: field:golem.activity.session,places_overbooked:0
msgid "Places with overbook"
msgstr "Places avec surcharge"
#. module: golem_activity_session
#: field:golem.activity.session,price:0
msgid "Price"
msgstr "Prix"
#. module: golem_activity_session
#: field:golem.activity.session,pricelist_id:0
msgid "Pricelist"
msgstr "Liste de prix"
#. module: golem_activity_session
#: field:golem.activity.session,attribute_line_ids:0
msgid "Product Attributes"
msgstr "Product Attributes"
#. module: golem_activity_session
#: field:golem.activity.session,product_manager:0
msgid "Product Manager"
msgstr "Product Manager"
#. module: golem_activity_session
#: model:ir.model,name:golem_activity_session.model_product_template
msgid "Product Template"
msgstr "Modèle d'article"
#. module: golem_activity_session
#: field:golem.activity.session,type:0
msgid "Product Type"
msgstr "Type d'article"
#. module: golem_activity_session
#: field:golem.activity.session,product_id:0
msgid "Product id"
msgstr "Product id"
#. module: golem_activity_session
#: field:golem.activity.session,product_variant_ids:0
msgid "Products"
msgstr "Articles"
#. module: golem_activity_session
#: field:golem.activity.session,lst_price:0
msgid "Public Price"
msgstr "Prix public"
#. module: golem_activity_session
#: field:golem.activity.session,description_purchase:0
msgid "Purchase Description"
msgstr "Purchase Description"
#. module: golem_activity_session
#: field:golem.activity.session,uom_po_id:0
msgid "Purchase Unit of Measure"
msgstr "Purchase Unit of Measure"
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.session_tree
msgid "Remain"
msgstr "Reste"
#. module: golem_activity_session
#: field:golem.activity.session,places_remain:0
msgid "Remaining places"
msgstr "Places restantes"
#. module: golem_activity_session
#: field:golem.activity.session,description_sale:0
msgid "Sale Description"
msgstr "Description de vente"
#. module: golem_activity_session
#: field:golem.activity.session,list_price:0
msgid "Sale Price"
msgstr "Prix de vente"
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:170
#: selection:golem.activity.session,weekday:0
#, python-format
msgid "Saturday"
msgstr "Samedi"
#. module: golem_activity_session
#: field:golem.activity.session,season_id:0
msgid "Season"
msgstr "Saison"
#. module: golem_activity_session
#: help:golem.activity.session,categ_id:0
msgid "Select category for the current activity"
msgstr "Select category for the current activity"
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.view_form
msgid "Service"
msgstr "Service"
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.view_form
msgid "Session"
msgstr "Session"
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.view_form
msgid "Session Name"
msgstr "Nom de la séance"
#. module: golem_activity_session
#: view:golem.activity:golem_activity_session.session_smart
#: field:golem.activity,session_count:0
msgid "Sessions"
msgstr "Séances"
#. module: golem_activity_session
#: field:golem.activity.session,image_small:0
msgid "Small-sized image"
msgstr "Small-sized image"
#. module: golem_activity_session
#: help:golem.activity.session,image_small:0
msgid "Small-sized image of the product. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required."
msgstr "Small-sized image of the product. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required."
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:205
#, python-format
msgid "Sorry, there is no more place !"
msgstr "Désolé mais il n'y a plus de place disponible !"
#. module: golem_activity_session
#: help:golem.activity.session,uos_id:0
msgid "Specify a unit of measure here if invoicing is made in another unit of measure than inventory. Keep empty to use the default unit of measure."
msgstr "Specify a unit of measure here if invoicing is made in another unit of measure than inventory. Keep empty to use the default unit of measure."
#. module: golem_activity_session
#: help:golem.activity.session,sale_ok:0
msgid "Specify if the product can be selected in a sales order line."
msgstr "Specify if the product can be selected in a sales order line."
#. module: golem_activity_session
#: field:golem.activity.session,date_start:0
msgid "Start date"
msgstr "Date de début"
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:187
#, python-format
msgid "Start of the period cannot be after end of the period."
msgstr "Le début de la période ne peut être antérieure à sa fin"
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:153
#, python-format
msgid "Start of the session cannot be after end of the session."
msgstr "Le début de la séance ne peut être après sa fin"
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:157
#, python-format
msgid "Start of the session cannot be before the start of activity date"
msgstr "Le début de la séance ne peut être fixé avant le début de l'activité"
#. module: golem_activity_session
#: field:golem.activity.session,hour_start:0
msgid "Start time"
msgstr "Heure de début"
#. module: golem_activity_session
#: field:golem.activity.session,state:0
msgid "Status"
msgstr "Statut"
#. module: golem_activity_session
#: field:golem.activity.session,message_summary:0
msgid "Summary"
msgstr "Résumé"
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:171
#: selection:golem.activity.session,weekday:0
#, python-format
msgid "Sunday"
msgstr "Dimanche"
#. module: golem_activity_session
#: field:golem.activity.session,seller_ids:0
msgid "Supplier"
msgstr "Supplier"
#. module: golem_activity_session
#: field:golem.activity.session,seller_delay:0
msgid "Supplier Lead Time"
msgstr "Supplier Lead Time"
#. module: golem_activity_session
#: field:golem.activity.session,seller_qty:0
msgid "Supplier Quantity"
msgstr "Supplier Quantity"
#. module: golem_activity_session
#: field:golem.activity.session,supplier_taxes_id:0
msgid "Supplier Taxes"
msgstr "Supplier Taxes"
#. module: golem_activity_session
#: help:golem.activity.session,weight:0
msgid "The gross weight in Kg."
msgstr "The gross weight in Kg."
#. module: golem_activity_session
#: help:golem.activity.session,weight_net:0
msgid "The net weight in Kg."
msgstr "The net weight in Kg."
#. module: golem_activity_session
#: help:golem.activity.session,volume:0
msgid "The volume in m3."
msgstr "The volume in m3."
#. module: golem_activity_session
#: help:golem.activity.session,property_account_expense:0
msgid "This account will be used for invoices instead of the default one to value expenses for the current product."
msgstr "This account will be used for invoices instead of the default one to value expenses for the current product."
#. module: golem_activity_session
#: help:golem.activity.session,property_account_income:0
msgid "This account will be used for invoices instead of the default one to value sales for the current product."
msgstr "This account will be used for invoices instead of the default one to value sales for the current product."
#. module: golem_activity_session
#: help:golem.activity.session,image:0
msgid "This field holds the image used as image for the activity."
msgstr "This field holds the image used as image for the activity."
#. module: golem_activity_session
#: help:golem.activity.session,seller_qty:0
msgid "This is minimum quantity to purchase from Main Supplier."
msgstr "This is minimum quantity to purchase from Main Supplier."
#. module: golem_activity_session
#: help:golem.activity.session,seller_delay:0
msgid "This is the average delay in days between the purchase order confirmation and the receipts for this product and for the default supplier. It is used by the scheduler to order requests based on reordering delays."
msgstr "This is the average delay in days between the purchase order confirmation and the receipts for this product and for the default supplier. It is used by the scheduler to order requests based on reordering delays."
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:168
#: selection:golem.activity.session,weekday:0
#, python-format
msgid "Thursday"
msgstr "Jeudi"
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:95
#: view:golem.activity.session:golem_activity_session.searches
#: selection:golem.activity.session,type_of:0
#, python-format
msgid "Training"
msgstr "Stage"
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.session_tree
msgid "True"
msgstr "Vrai"
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:166
#: selection:golem.activity.session,weekday:0
#, python-format
msgid "Tuesday"
msgstr "Mardi"
#. module: golem_activity_session
#: field:golem.activity.session,type_of:0
msgid "Type"
msgstr "Type"
#. module: golem_activity_session
#: field:golem.activity.session,uom_id:0
msgid "Unit of Measure"
msgstr "Unit of Measure"
#. module: golem_activity_session
#: field:golem.activity.session,uos_coeff:0
msgid "Unit of Measure -> UOS Coeff"
msgstr "Unit of Measure -> UOS Coeff"
#. module: golem_activity_session
#: field:golem.activity.session,uos_id:0
msgid "Unit of Sale"
msgstr "Unit of Sale"
#. module: golem_activity_session
#: field:golem.activity.session,message_unread:0
msgid "Unread Messages"
msgstr "Messages non lus"
#. module: golem_activity_session
#: field:golem.activity.session,volume:0
msgid "Volume"
msgstr "Volume"
#. module: golem_activity_session
#: field:golem.activity.session,warranty:0
msgid "Warranty"
msgstr "Garantie"
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:167
#: selection:golem.activity.session,weekday:0
#, python-format
msgid "Wednesday"
msgstr "Mercredi"
#. module: golem_activity_session
#: field:golem.activity.session,weekday:0
msgid "Weekday"
msgstr "Jour de la semaine"
#. module: golem_activity_session
#: help:golem.activity.session,is_recurrent:0
msgid "Work in progress"
msgstr "Travail en cours"
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:94
#: view:golem.activity.session:golem_activity_session.searches
#: selection:golem.activity.session,type_of:0
#, python-format
msgid "Workshop"
msgstr "Atelier"
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.view_form
msgid "describe the activity characteristics..."
msgstr "describe the activity characteristics..."

View File

@ -1,828 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * golem_activity_session
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-08-03 15:20+0000\n"
"PO-Revision-Date: 2016-08-03 15:20+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: golem_activity_session
#: field:golem.activity.session,product_variant_count:0
msgid "# of Product Variants"
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,description_sale:0
msgid "A description of the Product that you want to communicate to your customers. This description will be copied to every Sale Order, Delivery Order and Customer Invoice/Refund"
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,description_purchase:0
msgid "A description of the Product that you want to communicate to your suppliers. This description will be copied to every Purchase Order, Receipt and Supplier Invoice/Refund."
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,description:0
msgid "A precise description of the Product, used only for internal information purposes."
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,active:0
msgid "Active"
msgstr ""
#. module: golem_activity_session
#: view:golem.member:golem_activity_session.sessions_inscription
#: field:golem.member,activity_session_ids:0
msgid "Activities"
msgstr ""
#. module: golem_activity_session
#: model:ir.actions.act_window,name:golem_activity_session.category_action
msgid "Activities Categories"
msgstr ""
#. module: golem_activity_session
#: model:ir.ui.menu,name:golem_activity_session.session_menu_list
msgid "Activities sessions"
msgstr ""
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:93
#: view:golem.activity.session:golem_activity_session.searches
#: field:golem.activity.session,activity_id:0
#: selection:golem.activity.session,type_of:0
#, python-format
msgid "Activity"
msgstr ""
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:43
#, python-format
msgid "Activity Sessions"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,is_overbooked:0
msgid "Allow overbook?"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,animator_id:0
msgid "Animator"
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,list_price:0
msgid "Base price to compute the customer price. Sometimes called the catalog price."
msgstr ""
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.searches
msgid "By animator"
msgstr ""
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.searches
msgid "By category"
msgstr ""
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.searches
msgid "By type"
msgstr ""
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.searches
msgid "By weekday"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,rental:0
msgid "Can be Rent"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,sale_ok:0
msgid "Can be Sold"
msgstr ""
#. module: golem_activity_session
#: model:ir.ui.menu,name:golem_activity_session.activity_categ
msgid "Categories"
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,membership:0
msgid "Check if the product is eligible for membership."
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,uos_coeff:0
msgid "Coefficient to convert default Unit of Measure to Unit of Sale\n"
" uos = uom * coeff"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,color:0
msgid "Color Index"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,company_id:0
msgid "Company"
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,type:0
msgid "Consumable are product where you don't manage stock, a service is a non-material product provided by a company or an individual."
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,standard_price:0
msgid "Cost Price"
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,standard_price:0
msgid "Cost price of the product template used for standard stock valuation in accounting and used as a base price on purchase orders. Expressed in the default unit of measure of the product."
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,create_uid:0
msgid "Created by"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,create_date:0
msgid "Created on"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,is_current:0
msgid "Current season?"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,taxes_id:0
msgid "Customer Taxes"
msgstr ""
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.session_tree
msgid "Date"
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,membership_date_from:0
msgid "Date from which membership becomes active."
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,message_last_post:0
msgid "Date of the last message posted on the record."
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,membership_date_to:0
msgid "Date until which membership remains active."
msgstr ""
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.session_tree
msgid "Day"
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,uom_id:0
msgid "Default Unit of Measure used for all stock operation."
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,uom_po_id:0
msgid "Default Unit of Measure used for purchase orders. It must be in the same category than the default unit of measure."
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,default_code:0
msgid "Default code"
msgstr ""
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.searches
msgid "Default season"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,description:0
msgid "Description"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,display_name:0
msgid "Display Name"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,ean13:0
msgid "EAN13 Barcode"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,date_end:0
msgid "End date"
msgstr ""
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:161
#, python-format
msgid "End of the session cannot be after the end of activity date"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,hour_end:0
msgid "End time"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,property_account_expense:0
msgid "Expense Account"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,message_follower_ids:0
msgid "Followers"
msgstr ""
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:169
#: selection:golem.activity.session,weekday:0
#, python-format
msgid "Friday"
msgstr ""
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.searches
msgid "Full"
msgstr ""
#. module: golem_activity_session
#: model:ir.model,name:golem_activity_session.model_golem_activity_session
msgid "GOLEM Activities Sessions"
msgstr ""
#. module: golem_activity_session
#: model:ir.actions.act_window,name:golem_activity_session.session_action_list
msgid "GOLEM Activities Sessions List"
msgstr ""
#. module: golem_activity_session
#: model:ir.model,name:golem_activity_session.model_golem_activity
msgid "GOLEM Activity"
msgstr ""
#. module: golem_activity_session
#: model:ir.model,name:golem_activity_session.model_golem_member
msgid "GOLEM Member"
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,packaging_ids:0
msgid "Gives the different ways to package the same product. This has no impact on the picking order and is mainly used if you use the EDI module."
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,weight:0
msgid "Gross Weight"
msgstr ""
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.searches
msgid "Group By"
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,message_summary:0
msgid "Holds the Chatter summary (number of messages, ...). This summary is directly in html format in order to be inserted in kanban views."
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,id:0
msgid "ID"
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,message_unread:0
msgid "If checked new messages require your attention."
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,active:0
msgid "If unchecked, it will allow you to hide the product without removing it."
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,image:0
msgid "Image"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,property_account_income:0
msgid "Income Account"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,categ_id:0
msgid "Internal Category"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,message_is_follower:0
msgid "Is a Follower"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,is_product_variant:0
msgid "Is product variant"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,is_recurrent:0
msgid "Is recurrent ?"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,message_last_post:0
msgid "Last Message Date"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,__last_update:0
msgid "Last Modified on"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,write_uid:0
msgid "Last Updated by"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,write_date:0
msgid "Last Updated on"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,packaging_ids:0
msgid "Logistical Units"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,seller_id:0
msgid "Main Supplier"
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,seller_id:0
msgid "Main Supplier who has highest priority in Supplier List."
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,mes_type:0
msgid "Measure Type"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,image_medium:0
msgid "Medium-sized image"
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,image_medium:0
msgid "Medium-sized image of the product. It is automatically resized as a 128x128px image, with aspect ratio preserved, only when the image exceeds one of those sizes. Use this field in form views or some kanban views."
msgstr ""
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.view_form
#: field:golem.activity.session,member_ids:0
msgid "Members"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,membership:0
msgid "Membership"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,membership_date_to:0
msgid "Membership End Date"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,membership_date_from:0
msgid "Membership Start Date"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,message_ids:0
msgid "Messages"
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,message_ids:0
msgid "Messages and communication history"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,places_min:0
msgid "Minimum places"
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,places_min:0
msgid "Minimum places to maintain the session"
msgstr ""
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:165
#: selection:golem.activity.session,weekday:0
#, python-format
msgid "Monday"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,name:0
#: field:golem.activity.session,session_name:0
msgid "Name"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,weight_net:0
msgid "Net Weight"
msgstr ""
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:215
#, python-format
msgid "Number of places cannot be negative."
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,places:0
msgid "Places"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,places_used:0
msgid "Places used"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,places_overbooked:0
msgid "Places with overbook"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,price:0
msgid "Price"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,pricelist_id:0
msgid "Pricelist"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,attribute_line_ids:0
msgid "Product Attributes"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,product_manager:0
msgid "Product Manager"
msgstr ""
#. module: golem_activity_session
#: model:ir.model,name:golem_activity_session.model_product_template
msgid "Product Template"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,type:0
msgid "Product Type"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,product_id:0
msgid "Product id"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,product_variant_ids:0
msgid "Products"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,lst_price:0
msgid "Public Price"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,description_purchase:0
msgid "Purchase Description"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,uom_po_id:0
msgid "Purchase Unit of Measure"
msgstr ""
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.session_tree
msgid "Remain"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,places_remain:0
msgid "Remaining places"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,description_sale:0
msgid "Sale Description"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,list_price:0
msgid "Sale Price"
msgstr ""
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:170
#: selection:golem.activity.session,weekday:0
#, python-format
msgid "Saturday"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,season_id:0
msgid "Season"
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,categ_id:0
msgid "Select category for the current activity"
msgstr ""
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.view_form
msgid "Service"
msgstr ""
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.view_form
msgid "Session"
msgstr ""
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.view_form
msgid "Session Name"
msgstr ""
#. module: golem_activity_session
#: view:golem.activity:golem_activity_session.session_smart
#: field:golem.activity,session_count:0
msgid "Sessions"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,image_small:0
msgid "Small-sized image"
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,image_small:0
msgid "Small-sized image of the product. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required."
msgstr ""
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:205
#, python-format
msgid "Sorry, there is no more place !"
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,uos_id:0
msgid "Specify a unit of measure here if invoicing is made in another unit of measure than inventory. Keep empty to use the default unit of measure."
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,sale_ok:0
msgid "Specify if the product can be selected in a sales order line."
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,date_start:0
msgid "Start date"
msgstr ""
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:187
#, python-format
msgid "Start of the period cannot be after end of the period."
msgstr ""
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:153
#, python-format
msgid "Start of the session cannot be after end of the session."
msgstr ""
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:157
#, python-format
msgid "Start of the session cannot be before the start of activity date"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,hour_start:0
msgid "Start time"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,state:0
msgid "Status"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,message_summary:0
msgid "Summary"
msgstr ""
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:171
#: selection:golem.activity.session,weekday:0
#, python-format
msgid "Sunday"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,seller_ids:0
msgid "Supplier"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,seller_delay:0
msgid "Supplier Lead Time"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,seller_qty:0
msgid "Supplier Quantity"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,supplier_taxes_id:0
msgid "Supplier Taxes"
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,weight:0
msgid "The gross weight in Kg."
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,weight_net:0
msgid "The net weight in Kg."
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,volume:0
msgid "The volume in m3."
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,property_account_expense:0
msgid "This account will be used for invoices instead of the default one to value expenses for the current product."
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,property_account_income:0
msgid "This account will be used for invoices instead of the default one to value sales for the current product."
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,image:0
msgid "This field holds the image used as image for the activity."
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,seller_qty:0
msgid "This is minimum quantity to purchase from Main Supplier."
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,seller_delay:0
msgid "This is the average delay in days between the purchase order confirmation and the receipts for this product and for the default supplier. It is used by the scheduler to order requests based on reordering delays."
msgstr ""
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:168
#: selection:golem.activity.session,weekday:0
#, python-format
msgid "Thursday"
msgstr ""
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:95
#: view:golem.activity.session:golem_activity_session.searches
#: selection:golem.activity.session,type_of:0
#, python-format
msgid "Training"
msgstr ""
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.session_tree
msgid "True"
msgstr ""
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:166
#: selection:golem.activity.session,weekday:0
#, python-format
msgid "Tuesday"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,type_of:0
msgid "Type"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,uom_id:0
msgid "Unit of Measure"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,uos_coeff:0
msgid "Unit of Measure -> UOS Coeff"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,uos_id:0
msgid "Unit of Sale"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,message_unread:0
msgid "Unread Messages"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,volume:0
msgid "Volume"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,warranty:0
msgid "Warranty"
msgstr ""
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:167
#: selection:golem.activity.session,weekday:0
#, python-format
msgid "Wednesday"
msgstr ""
#. module: golem_activity_session
#: field:golem.activity.session,weekday:0
msgid "Weekday"
msgstr ""
#. module: golem_activity_session
#: help:golem.activity.session,is_recurrent:0
msgid "Work in progress"
msgstr ""
#. module: golem_activity_session
#: code:addons/golem_activity_session/models/golem_activity_session.py:94
#: view:golem.activity.session:golem_activity_session.searches
#: selection:golem.activity.session,type_of:0
#, python-format
msgid "Workshop"
msgstr ""
#. module: golem_activity_session
#: view:golem.activity.session:golem_activity_session.view_form
msgid "describe the activity characteristics..."
msgstr ""

View File

@ -1,210 +0,0 @@
# -*- coding: utf-8 -*-
# copyright 2016 fabien bourgeois <fabien@yaltik.com>
#
# this program is free software: you can redistribute it and/or modify
# it under the terms of the gnu affero general public license as
# published by the free software foundation, either version 3 of the
# license, or (at your option) any later version.
#
# this program is distributed in the hope that it will be useful,
# but without any warranty; without even the implied warranty of
# merchantability or fitness for a particular purpose. see the
# gnu affero general public license for more details.
#
# you should have received a copy of the gnu affero general public license
# along with this program. if not, see <http://www.gnu.org/licenses/>.
from openerp import models, fields, api, _
class GolemMember(models.Model):
_inherit = 'golem.member'
activity_session_ids = fields.Many2many('golem.activity.session',
string='Activities')
class GolemActivity(models.Model):
_inherit = 'golem.activity'
session_count = fields.Integer('Sessions',
compute='_compute_session_count')
@api.one
def _compute_session_count(self):
dmn = [('activity_id', '=', self.id)]
cnt = self.env['golem.activity.session'].search_count(dmn)
self.session_count = cnt
@api.multi
def button_session(self):
self.ensure_one()
return {'name': _('Activity Sessions'),
'type': 'ir.actions.act_window',
'res_model': 'golem.activity.session',
'view_mode': 'tree,form',
'context': {'default_activity_id': self.id,
'default_animator_id': self.animator_id.id},
'domain': [('activity_id', '=', self.id)]}
class ProductTemplate(models.Model):
_inherit = 'product.template'
# Make default service for type
type = fields.Selection(default='service')
class GolemActivitySession(models.Model):
_name = 'golem.activity.session'
_description = 'GOLEM Activities Sessions'
_inherit = 'mail.thread'
_inherits = {'product.template': 'product_id'}
_rec_name = 'session_name'
_sql_constraints = [('golem_activity_session_places_signed',
'CHECK (places >= 0)',
_('Number of places cannot be negative.'))]
product_id = fields.Many2one('product.template', required=True,
ondelete='cascade')
default_code = fields.Char(copy=True) # Copy the default code
@api.model
def _default_name(self):
""" Default name to activity name """
d_aid = self.env.context.get('default_activity_id')
aobj = self.env['golem.activity']
return aobj.browse([d_aid]).name if d_aid else None
image = fields.Binary(related='activity_id.image')
categ_id = fields.Many2one(related='activity_id.categ_id', readonly=True)
session_name = fields.Char('Name', compute='_compute_full_name',
store=True, index=True)
@api.one
@api.depends('name', 'default_code')
def _compute_full_name(self):
""" Provide a better displayed name """
session_name = unicode(self.name)
if self.default_code:
session_name = u'[{}] {}'.format(self.default_code, session_name)
self.session_name = session_name
member_ids = fields.Many2many('golem.member', string='Members')
type_of = fields.Selection([('activity', _('Activity')),
('workshop', _('Workshop')),
('training', _('Training'))],
default='activity', index=True, string='Type')
@api.onchange('type_of')
def onchange_type_of(self):
for s in self:
if s.type_of != 'activity':
s.is_recurrent = False
else:
s.is_recurrent = True
places_used = fields.Integer('Places used', compute='_compute_places_used')
@api.one
@api.depends('member_ids')
def _compute_places_used(self):
self.places_used = len(self.member_ids)
# TODO: to link with calendar.event
activity_id = fields.Many2one('golem.activity', string='Activity',
required=True)
animator_id = fields.Many2one('res.partner', string='Animator')
is_current = fields.Boolean('Current season?',
related='activity_id.is_current')
season_id = fields.Many2one(string='Season',
related='activity_id.season_id')
@api.onchange('activity_id')
def onchange_activity_id(self):
""" Sets session name and animator as activity's one if empty """
for s in self:
if not s.name:
s.name = s.activity_id.name
if not s.default_code:
s.default_code = s.activity_id.default_code
if not s.animator_id:
s.animator_id = s.activity_id.animator_id
is_recurrent = fields.Boolean('Is recurrent ?', default=True,
help='Work in progress')
date_start = fields.Datetime('Start date')
date_end = fields.Datetime('End date')
@api.onchange('date_start')
def onchange_date_start(self):
""" Sets end date to start date if no start date """
for s in self:
if not s.date_end:
s.date_end = s.date_start
@api.constrains('date_start', 'date_end')
def _check_date_period(self):
""" Check if end date if after start date and if dates are included
into main activity period"""
for s in self:
if not s.is_recurrent:
if s.date_start > s.date_end:
emsg = _('Start of the session cannot be after end of the '
'session.')
raise models.ValidationError(emsg)
if s.date_start < s.activity_id.date_start:
emsg = _('Start of the session cannot be before the start '
'of activity date')
raise models.ValidationError(emsg)
if s.date_end > s.activity_id.date_end:
emsg = _('End of the session cannot be after the end of '
'activity date')
raise models.ValidationError(emsg)
weekday = fields.Selection([('mon', _('Monday')),
('tue', _('Tuesday')),
('wed', _('Wednesday')),
('thu', _('Thursday')),
('fri', _('Friday')),
('sat', _('Saturday')),
('sun', _('Sunday'))])
hour_start = fields.Float('Start time')
hour_end = fields.Float('End time')
@api.onchange('hour_start')
def onchange_hour_start(self):
""" Sets end hour to start hour if no start hour """
for s in self:
if s.hour_start and not s.hour_end:
s.hour_end = s.hour_start + 1
@api.constrains('hour_start', 'hour_end')
def _check_hour_period(self):
""" Check if end hour if after start hour """
for s in self:
if s.hour_start > s.hour_end:
raise models.ValidationError(_('Start of the period cannot be '
'after end of the period.'))
places = fields.Integer('Places', default=0)
places_remain = fields.Integer('Remaining places', store=True,
compute='_compute_places_remain')
@api.one
@api.depends('places', 'member_ids')
def _compute_places_remain(self):
used = len(self.member_ids)
self.places_remain = self.places - used
@api.constrains('places_remain')
def _check_remaining_places(self):
""" Forbid inscription when there is no more place """
for s in self:
if s.places_remain < 0:
emsg = _('Sorry, there is no more place !')
raise models.ValidationError(emsg)

View File

@ -1,5 +0,0 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_golem_activity_session_user,Access GOLEM Activity Session User,model_golem_activity_session,golem_base.group_golem_user,1,1,1,1
access_golem_product_template_user,Access GOLEM Product Template User,model_product_template,golem_base.group_golem_user,1,1,1,1
access_golem_product_product_user,Access GOLEM Product Product User,product.model_product_product,golem_base.group_golem_user,1,1,1,1
access_golem_product_pricehist_user,Access GOLEM Product Price History User,product.model_product_price_history,golem_base.group_golem_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_golem_activity_session_user Access GOLEM Activity Session User model_golem_activity_session golem_base.group_golem_user 1 1 1 1
3 access_golem_product_template_user Access GOLEM Product Template User model_product_template golem_base.group_golem_user 1 1 1 1
4 access_golem_product_product_user Access GOLEM Product Product User product.model_product_product golem_base.group_golem_user 1 1 1 1
5 access_golem_product_pricehist_user Access GOLEM Product Price History User product.model_product_price_history golem_base.group_golem_user 1 1 1 1

View File

@ -1,85 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Fabien Bourgeois <fabien@yaltik.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from openerp.tests.common import TransactionCase
from openerp.models import ValidationError
from psycopg2 import IntegrityError
class GolemActivitySessionTestCase(TransactionCase):
def setUp(self):
super(GolemActivitySessionTestCase, self).setUp()
season_model = self.env['golem.season'].sudo()
season_data = {'name': u'Current', 'date_start': '2010-01-01',
'date_end': '2010-12-31'}
season1 = season_model.create(season_data)
activity_model = self.env['golem.activity'].sudo()
categ = self.ref('golem_activity.golem_product_category_activities')
self.activity1 = activity_model.create({'name': 'activity1',
'default_code': 'A1',
'categ_id': categ,
'season_id': season1.id})
self.activity1.onchange_season_dates()
self.session_model = self.env['golem.activity.session'].sudo()
sdata = {'name': 's1', 'activity_id': self.activity1.id}
self.session1 = self.session_model.create(sdata)
self.session1.onchange_activity_id()
self.member_model = self.env['golem.member'].sudo()
def test_session_name(self):
""" Test activity session name computing """
self.assertEqual(self.session1.default_code,
self.activity1.default_code)
self.assertEqual(self.session1.session_name, u'[A1] s1')
def test_check_period(self):
""" Test periods constraints """
self.session1.write({'is_recurrent': False, 'date_start': '2010-01-10',
'date_end': '2010-01-31'})
# Start after end
with self.assertRaises(ValidationError):
self.session1.date_start = '2011-01-15'
# Start before activity start
with self.assertRaises(ValidationError):
self.session1.date_start = '2009-01-15'
# End after activity end
with self.assertRaises(ValidationError):
self.session1.date_end = '2012-01-15'
def test_session_places_constraint(self):
""" Test that you cannot fix negative places """
try:
self.session1.places = -2
except IntegrityError as e:
self.assertIn('violates check constraint', e.args[0])
self.cr.rollback()
def test_session_places(self):
""" Test computed places fields """
self.session1.places = 1
self.assertEqual(self.session1.places_remain, 1)
self.assertEqual(self.session1.places_used, 0)
m1 = self.member_model.create({'lastname': 'DOE', 'firstname': 'Joe'})
m2 = self.member_model.create({'lastname': 'DOE', 'firstname': 'Jen'})
# Member subscription
self.session1.member_ids = [m1.id]
self.assertEqual(self.session1.places_remain, 0)
self.assertEqual(self.session1.places_used, 1)
# No place anymore
with self.assertRaises(ValidationError):
self.session1.member_ids = [m1.id, m2.id]

View File

@ -1,195 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2016 Fabien Bourgeois <fabien@yaltik.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<openerp>
<data>
<!-- Form -->
<record model="ir.ui.view" id="session_smart">
<field name="name">Add sessions management into smart button</field>
<field name="model">golem.activity</field>
<field name="inherit_id" ref="golem_activity.view_form" />
<field name="arch" type="xml">
<div name="buttons" position="inside">
<button class="oe_inline oe_stat_button" type="object"
name="button_session" icon="fa-list">
<field string="Sessions" name="session_count"
widget="statinfo" />
</button>
</div>
</field>
</record>
<record id="view_form" model="ir.ui.view">
<field name="name">GOLEM Activity Sessions Form</field>
<field name="model">golem.activity.session</field>
<field name="arch" type="xml">
<form>
<sheet>
<div class="oe_title" style="width: 390px;">
<label class="oe_edit_only" for="name" string="Session Name"/>
<h1><field name="name" class="oe_inline"/></h1>
</div>
<group string="Session">
<group>
<field name="activity_id" />
<field name="animator_id" />
<field name="type_of" />
<field name="places" />
</group>
<group>
<field name="is_recurrent" />
<field name="weekday"
attrs="{'invisible': [('is_recurrent', '=', False)]}" />
<field name="hour_start" widget="float_time"
attrs="{'invisible': [('is_recurrent', '=', False)]}" />
<field name="hour_end" widget="float_time"
attrs="{'invisible': [('is_recurrent', '=', False)]}" />
<field name="date_start"
attrs="{'invisible': [('is_recurrent', '=', True)]}" />
<field name="date_end"
attrs="{'invisible': [('is_recurrent', '=', True)]}" />
</group>
</group>
<notebook>
<page string="Members">
<group>
<field name="places_remain" readonly="True" />
<field name="member_ids"
context="{'search_default_season_default': True}" />
</group>
</page>
<page string="Service">
<group>
<group>
<field name="default_code" />
<field name="list_price" />
<field name="description"
placeholder="describe the activity characteristics..."/>
</group>
<group>
<field name="type" />
<field name="categ_id" />
<field name="active" />
</group>
</group>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers" />
<field name="message_ids" widget="mail_thread" />
</div>
</form>
</field>
</record>
<!-- Tree -->
<record id="session_tree" model="ir.ui.view">
<field name="name">Session list</field>
<field name="model">golem.activity.session</field>
<field name="arch" type="xml">
<tree colors="red: places_remain == 0;
orange: places_remain &lt;= 4;">
<field name="is_recurrent" invisible="True" />
<field name="season_id" />
<field name="type_of" />
<field name="session_name" />
<field name="weekday" string="Day"
attrs="{'invisible': [('is_recurrent', '=', False)]}" />
<field name="date_start" string="Date"
attrs="{'invisible': [('is_recurrent', '=', True)]}" />
<field name="places" invisible="True" />
<field name="places_remain" string="Remain" />
<field name="list_price" sum="True" />
</tree>
</field>
</record>
<!-- Calendars -->
<record id="calendar" model="ir.ui.view">
<field name="name">Activity sessions calendar view</field>
<field name="model">golem.activity.session</field>
<field name="arch" type="xml">
<calendar date_start="date_start" date_end="date_end"
color="categ_id" display="[name]">
<field name="name" />
</calendar>
</field>
</record>
<!-- Searches -->
<record id="searches" model="ir.ui.view">
<field name="name">GOLEM Activity Sessions Searches</field>
<field name="model">golem.activity.session</field>
<field name="arch" type="xml">
<search>
<field name="session_name" />
<field name="activity_id" widget="many2one" />
<field name="animator_id" widget="many2one" />
<field name="categ_id" widget="many2one" />
<field name="season_id" widget="many2one" />
<filter name="season_default" string="Default season"
domain="[('is_current', '=', True)]" />
<filter name="full_session" string="Full"
domain="[('places_remain', '=', 0)]" />
<filter name="type_of_activity" string="Activity"
domain="[('type_of', '=', 'activity')]" />
<filter name="type_of_workshop" string="Workshop"
domain="[('type_of', '=', 'workshop')]" />
<filter name="type_of_training" string="Training"
domain="[('type_of', '=', 'training')]" />
<group string="Group By">
<filter name="group_type_of" string="By type"
context="{'group_by': 'type_of'}" />
<filter name="group_category" string="By category"
context="{'group_by': 'categ_id'}"/>
<filter name="group_weekday" string="By weekday"
context="{'group_by': 'weekday'}" />
<filter name="group_animator" string="By animator"
context="{'group_by': 'animator_id'}" />
</group>
</search>
</field>
</record>
<!-- Actions -->
<record id="session_action_list" model="ir.actions.act_window">
<field name="name">GOLEM Activities Sessions List</field>
<field name="res_model">golem.activity.session</field>
<field name="view_mode">tree,form,calendar</field>
<!--<field name="view_id" ref="product.product_template_kanban_view"/>-->
</record>
<record id="category_action" model="ir.actions.act_window">
<field name="name">Activities Categories</field>
<field name="res_model">product.category</field>
<field name="view_type">form</field>
<field name="view_id" ref="product.product_category_list_view" />
</record>
<!-- Menus -->
<menuitem id="session_menu_list" name="Activities sessions"
parent="golem_activity.activity_menu" action="session_action_list"
groups="golem_base.group_golem_user"
sequence="10" />
<menuitem id="activity_categ" name="Categories"
parent="golem_activity.activity_menu" sequence="10"
groups="golem_base.group_golem_manager"
action="category_action" />
</data>
</openerp>

View File

@ -1,39 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * golem_activity_session_place
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-08-03 15:21+0000\n"
"PO-Revision-Date: 2016-08-03 15:21+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: golem_activity_session_place
#: view:golem.activity.session:golem_activity_session_place.searches
msgid "Full"
msgstr "Plein"
#. module: golem_activity_session_place
#: model:ir.model,name:golem_activity_session_place.model_golem_activity_session
msgid "GOLEM Activities Sessions"
msgstr "Séances des activités"
#. module: golem_activity_session_place
#: code:addons/golem_activity_session_place/models/golem_activity_session.py:52
#, python-format
msgid "Number of places cannot be negative."
msgstr "Le nombre de places ne peut pas être négatif"
#. module: golem_activity_session_place
#: code:addons/golem_activity_session_place/models/golem_activity_session.py:55
#, python-format
msgid "Overbooked places cannot be inferior than places"
msgstr "Le nombre de places avec surcharge ne peut être inférieur aux places"

View File

@ -1,39 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * golem_activity_session_place
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-08-03 15:20+0000\n"
"PO-Revision-Date: 2016-08-03 15:20+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: golem_activity_session_place
#: view:golem.activity.session:golem_activity_session_place.searches
msgid "Full"
msgstr ""
#. module: golem_activity_session_place
#: model:ir.model,name:golem_activity_session_place.model_golem_activity_session
msgid "GOLEM Activities Sessions"
msgstr ""
#. module: golem_activity_session_place
#: code:addons/golem_activity_session_place/models/golem_activity_session.py:52
#, python-format
msgid "Number of places cannot be negative."
msgstr ""
#. module: golem_activity_session_place
#: code:addons/golem_activity_session_place/models/golem_activity_session.py:55
#, python-format
msgid "Overbooked places cannot be inferior than places"
msgstr ""

View File

@ -18,7 +18,7 @@
{
'name': 'GOLEM base module for global dependencies',
'summary': 'GOLEM base installs base and shared dependencies for GOLEM',
'version': '0.1',
'version': '10.0.1.0.0',
'category': 'GOLEM',
'author': 'Fabien Bourgeois',
'license': 'AGPL-3',
@ -26,10 +26,12 @@
'installable': True,
'depends': ['membership', 'contacts', 'mail', 'account_voucher',
'partner_firstname', 'partner_contact_birthdate',
'partner_contact_gender', 'partner_contact_nationality',
'l10n_fr_state', 'l10n_fr_department', 'l10n_fr_tax_sale_ttc',
'partner_contact_gender',
'l10n_fr', 'l10n_fr_state', 'l10n_fr_department',
'l10n_fr_siret',
'web_widget_phone_check_fr', 'web_widget_email_check',
'web_widget_url_check'],
'data': ['security/golem_security.xml']
'web_widget_url_check',
# 'web_one2many_kanban',
'web_responsive'],
'data': ['security/golem_security.xml', 'views/menus.xml']
}

View File

@ -4,10 +4,10 @@
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-07-21 13:17+0000\n"
"PO-Revision-Date: 2016-07-21 13:17+0000\n"
"POT-Creation-Date: 2017-05-01 14:19+0000\n"
"PO-Revision-Date: 2017-06-28 17:30+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@ -26,3 +26,188 @@ msgstr "Administrateur"
msgid "GOLEM user"
msgstr "Utilisateur"
#. module: golem_base
#: model:ir.ui.menu,name:golem_base.membership_products_menu
msgid "Membership Products"
msgstr "Types d'adhésions"
#. module: base
#: model:ir.actions.act_window,name:base.action_res_company_form
#: model:ir.actions.act_window,name:base.company_normal_action_tree
#: model:ir.model,name:base.model_res_company
#: model:ir.model.fields,field_description:base.field_res_users_company_ids
#: model:ir.ui.menu,name:base.menu_action_res_company_form
#: model:ir.ui.view,arch_db:base.view_company_tree
#: model:ir.ui.view,arch_db:base.view_res_partner_filter
msgid "Companies"
msgstr "Personnes morales"
#. module: base
#: model:ir.ui.view,arch_db:base.view_users_form
msgid "Companies count"
msgstr "Nombre de personnes morales"
#. module: base
#: model:ir.model.fields,field_description:base.field_ir_attachment_company_id
#: model:ir.model.fields,field_description:base.field_ir_property_company_id
#: model:ir.model.fields,field_description:base.field_ir_sequence_company_id
#: model:ir.model.fields,field_description:base.field_ir_values_company_id
#: model:ir.model.fields,field_description:base.field_res_currency_rate_company_id
#: model:ir.model.fields,field_description:base.field_res_partner_bank_company_id
#: model:ir.model.fields,field_description:base.field_res_partner_company_id
#: model:ir.model.fields,field_description:base.field_res_users_company_id
#: model:ir.ui.view,arch_db:base.view_attachment_search
#: model:ir.ui.view,arch_db:base.view_company_form
#: model:ir.ui.view,arch_db:base.view_partner_form
#: model:ir.ui.view,arch_db:base.view_partner_simple_form
#: model:ir.ui.view,arch_db:base.view_res_partner_filter
#: model:ir.ui.view,arch_db:base.view_users_search
#: selection:res.partner,company_type:0
msgid "Company"
msgstr "Personne morale"
#. module: base
#: model:res.partner.category,name:base.res_partner_category_17
msgid "Company Contact"
msgstr "Contact de la personne morale"
#. module: base
#: model:ir.model.fields,field_description:base.field_res_company_name
#: model:ir.model.fields,field_description:base.field_res_partner_company_name
#: model:ir.model.fields,field_description:base.field_res_users_company_name
msgid "Company Name"
msgstr "Nom de la personne morale"
#. module: base
#: model:ir.model.fields,field_description:base.field_res_partner_commercial_company_name
#: model:ir.model.fields,field_description:base.field_res_users_commercial_company_name
msgid "Company Name Entity"
msgstr "Nom commercial de la personne morale"
#. module: base
#: model:ir.actions.act_window,name:base.ir_property_form
#: model:ir.ui.menu,name:base.menu_ir_property_form_all
msgid "Company Properties"
msgstr "Propriétés de la personne morale"
#. module: base
#: model:ir.model.fields,field_description:base.field_res_company_rml_header1
msgid "Company Tagline"
msgstr "Slogan de la personne morale"
#. module: base
#: model:ir.model.fields,field_description:base.field_res_partner_company_type
#: model:ir.model.fields,field_description:base.field_res_users_company_type
msgid "Company Type"
msgstr "Type de personne morale"
#. module: base
#: model:ir.ui.view,arch_db:base.view_users_form
msgid "Current Company"
msgstr "Personne morale Courante"
#. module: base
#: model:ir.ui.view,arch_db:base.view_partner_form
msgid "Create company"
msgstr "Créer une personne morale"
#. module: base
#: model:ir.ui.view,arch_db:base.view_users_form
#: model:res.groups,name:base.group_multi_company
msgid "Multi Companies"
msgstr "Multi Personnes Morales"
#. module: base
#: model:ir.model.fields,field_description:base.field_res_users_companies_count
msgid "Number of Companies"
msgstr "Nombe de personnes morales"
#. module: base
#: model:ir.model.fields,field_description:base.field_res_company_parent_id
msgid "Parent Company"
msgstr "Personne morale mère"
#. module: base
#: model:ir.model.fields,field_description:base.field_res_partner_parent_id
#: model:ir.model.fields,field_description:base.field_res_users_parent_id
msgid "Related Company"
msgstr "Personne morale liée"
#. module: base
#: model:ir.model.fields,help:base.field_res_users_company_id
msgid "The company this user is currently working for."
msgstr "La personne morale pour laquelle l'utilisateur travaille actuellement."
#. module: base
#: model:ir.model.fields,help:base.field_ir_act_client_tag
msgid ""
"An arbitrary string, interpreted by the client according to its own needs "
"and wishes. There is no central tag repository across clients."
msgstr ""
"Une chaîne de caractères arbitraire, interprétée par le contact en fonction "
"de ses besoins et de ses souhaits. Il n'y a pas de centralisation des "
"catégories attribuées aux contacts."
#. module: base
#: model:ir.model.fields,field_description:base.field_res_partner_category_child_ids
msgid "Child Tags"
msgstr "Catégories filles"
#. module: base
#: model:ir.actions.act_window,help:base.action_partner_category_form
msgid "Click to create a new partner tag."
msgstr "Cliquer pour créer une nouvelle catégorie de partenaire."
#. module: base
#: model:ir.ui.view,arch_db:base.view_partner_category_form
msgid "Contact Tag"
msgstr "Catégorie de contact"
#. module: base
#: model:ir.actions.act_window,name:base.action_partner_category_form
#: model:ir.ui.view,arch_db:base.view_partner_category_list
msgid "Contact Tags"
msgstr "Catégories de contact"
#. module: base
#: code:addons/base/res/res_partner.py:87
#, python-format
msgid "Error ! You can not create recursive tags."
msgstr "Erreur ! On ne peut pas créer de catégories récursives."
#. module: base
#: model:ir.actions.act_window,help:base.action_partner_category_form
msgid ""
"Manage partner tags to better classify them for tracking and analysis purposes.\n"
" A partner may have several categories and categories have a hierarchical structure: a partner with a category has also the parent category."
msgstr ""
"Gère les catégories de tiers afin de mieux les classer à des fins de suivi et d'analyse.\n"
"Un partenaire peut avoir plusieurs catégories et les catégories ont une structure hiérarchique : un partenaire avec une catégories a également les catégories parentes."
#. module: base
#: model:ir.model,name:base.model_res_partner_category
msgid "Partner Tags"
msgstr "Catégories du contact"
#. module: base
#: model:ir.ui.view,arch_db:base.view_res_partner_filter
msgid "Tag"
msgstr "Catégorie"
#. module: base
#: model:ir.model.fields,field_description:base.field_res_partner_category_name
msgid "Tag Name"
msgstr "Nom de la catégorie"
#. module: base
#: model:ir.model.fields,field_description:base.field_res_partner_category_id_970
#: model:ir.model.fields,field_description:base.field_res_users_category_id
msgid "Tags"
msgstr "Catégories"
#. module: base
#: model:ir.ui.view,arch_db:base.view_partner_form
msgid "Tags..."
msgstr "Catégories..."

View File

@ -4,10 +4,10 @@
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-07-21 13:17+0000\n"
"PO-Revision-Date: 2016-07-21 13:17+0000\n"
"POT-Creation-Date: 2017-05-01 14:19+0000\n"
"PO-Revision-Date: 2017-05-01 14:19+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@ -25,3 +25,8 @@ msgstr ""
msgid "GOLEM user"
msgstr ""
#. module: golem_base
#: model:ir.ui.menu,name:golem_base.membership_products_menu
msgid "Membership Products"
msgstr ""

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2016 Fabien Bourgeois <fabien@yaltik.com>
Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
@ -17,7 +17,7 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<openerp>
<odoo>
<data noupdate="0">
<!-- Groups -->
<record id="group_golem_user" model="res.groups">
@ -26,7 +26,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
ref="base.module_category_golem"/>
<field name="implied_ids"
eval="[(4,
[ref('base.group_user'), ref('account.group_account_invoice')])]"/>
[ref('base.group_user'),
ref('base.group_partner_manager'),
ref('account.group_account_invoice')])]"/>
</record>
<record id="group_golem_manager" model="res.groups">
<field name="name">GOLEM Manager</field>
@ -34,20 +36,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<field name="implied_ids" eval="[(4, ref('group_golem_user'))]"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<!-- Hide Default Articles Menu for all except root -->
<record id="account.menu_finance_payables" model="ir.ui.menu">
<field name="groups_id"
eval="[(6, 0, [ref('base.group_erp_manager')])]" />
</record>
<!-- Membership products only for managers -->
<record id="membership.menu_membership_products" model="ir.ui.menu">
<field name="groups_id"
eval="[(4, ref('golem_base.group_golem_manager'))]" />
</record>
<!-- Members Analysis for managers only -->
<record id="membership.menu_report_membership" model="ir.ui.menu">
<field name="groups_id"
eval="[(6, 0, [ref('golem_base.group_golem_manager')])]" />
</record>
</data>
</openerp>
<!-- Adapt base security access -->
<record id="ir_filters_golem_manager_all_rights_rule" model="ir.rule">
<field name="name">ir.filters.golem.manager.all.rights</field>
<field name="model_id" ref="base.model_ir_filters"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('golem_base.group_golem_manager'))]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_unlink" eval="True"/>
</record>
</odoo>

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<odoo>
<data noupdate="0">
<!-- Membership products only for managers -->
<menuitem name="Configuration"
id="membership.menu_marketing_config_association"
parent="membership.menu_association" sequence="100" />
<menuitem id="membership_products_menu"
action="membership.action_membership_products"
parent="membership.menu_marketing_config_association" sequence="20"
groups="golem_base.group_golem_manager" />
<!-- Members Analysis for managers only -->
<record id="membership.menu_report_membership" model="ir.ui.menu">
<field name="groups_id"
eval="[(6, 0, [ref('golem_base.group_golem_manager')])]" />
</record>
</data>
</odoo>

View File

@ -18,14 +18,13 @@
{
'name': 'GOLEM families',
'summary': 'GOLEM Members Families',
'description': ''' Non-profit french MJC members families management ''',
'version': '0.2',
'version': '10.0.2.1.1',
'category': 'GOLEM',
'author': 'Fabien Bourgeois',
'license': 'AGPL-3',
'application': False,
'installable': True,
'depends': ['golem_member'],
'data': ['security/ir.model.access.csv', 'views/golem_family_view.xml',
'views/golem_member_view.xml', 'views/res_partner_view.xml']
'data': ['security/ir.model.access.csv', 'views/golem_family_views.xml',
'views/golem_member_views.xml', 'views/res_partner_views.xml']
}

View File

@ -4,240 +4,219 @@
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-07-11 18:06+0000\n"
"PO-Revision-Date: 2016-07-11 18:06+0000\n"
"POT-Creation-Date: 2018-01-29 14:59+0000\n"
"PO-Revision-Date: 2018-01-29 14:59+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"Plural-Forms: \n"
#. module: golem_family
#: view:golem.family:golem_family.family_tree
#: model:ir.ui.view,arch_db:golem_family.golem_family_tree
msgid "# Members"
msgstr "# de membres"
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
msgid "0000000000"
msgstr "0000000000"
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
msgid "Address"
msgstr "Addresse"
msgstr "Adresse"
#. module: golem_family
#: view:golem.family:golem_family.view_filter
#: model:ir.ui.view,arch_db:golem_family.golem_family_search
msgid "By city"
msgstr "Par ville"
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: field:golem.family,city:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_city
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_city
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_city
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_city
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
msgid "City"
msgstr "Ville"
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
msgid "Communication"
msgstr "Communication"
#. module: golem_family
#: field:golem.family,count:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_count
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_count
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_count
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_count
msgid "Count"
msgstr "Nombre"
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: field:golem.family,country_id:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_country_id
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_country_id
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_country_id
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_country_id
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
msgid "Country"
msgstr "Pays"
#. module: golem_family
#: field:golem.family,create_uid:0
#: field:golem.family.role,create_uid:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_create_uid
#: model:ir.model.fields,field_description:golem_family.field_golem_family_role_create_uid
msgid "Created by"
msgstr "Créé par"
#. module: golem_family
#: field:golem.family,create_date:0
#: field:golem.family.role,create_date:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_create_date
#: model:ir.model.fields,field_description:golem_family.field_golem_family_role_create_date
msgid "Created on"
msgstr "Créé le"
#. module: golem_family
#: help:golem.family,message_last_post:0
msgid "Date of the last message posted on the record."
msgstr "Date du dernier message posté sur l'enregistrement."
#. module: golem_family
#: field:golem.family,display_name:0
#: field:golem.family.role,display_name:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_display_name
#: model:ir.model.fields,field_description:golem_family.field_golem_family_role_display_name
msgid "Display Name"
msgstr "Nom affiché"
#. module: golem_family
#: field:golem.family,email:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_email
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_email
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_email
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_email
msgid "Email"
msgstr "Email"
msgstr "Courriel"
#. module: golem_family
#: model:ir.ui.menu,name:golem_family.family_menu_list
#: model:ir.ui.menu,name:golem_family.golem_family_menu
#: model:ir.ui.menu,name:golem_family.golem_family_menu_list
msgid "Families"
msgstr "Familles"
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: field:golem.member,family_id:0
#: field:res.partner,family_id:0
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_id
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_id
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_id
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
msgid "Family"
msgstr "Famille"
#. module: golem_family
#: field:golem.member,family_count:0
#: field:res.partner,family_count:0
msgid "Family Count"
msgstr "Somme des membres de la famille"
#. module: golem_family
#: code:addons/golem_family/models/golem_family.py:33
#: code:addons/golem_family/models/golem_family.py:46
#: code:addons/golem_family/models/golem_family.py:48
#: code:addons/golem_family/models/golem_family.py:82
#, python-format
msgid "Family Members"
msgstr "Membres de la famille"
#. module: golem_family
#: model:ir.ui.menu,name:golem_family.family_role_menu_list
msgid "Family Roles"
msgstr "Rôles familiaux"
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
msgid "Family form"
msgstr "Family form"
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
msgid "Family members"
msgstr "Membres de la famille"
msgstr "Famille"
#. module: golem_family
#: sql_constraint:golem.family.role:0
msgid "Family role must be unique."
msgstr "Les rôles familiaux doivent être uniques."
#. module: golem_family
#: field:golem.family,message_follower_ids:0
msgid "Followers"
msgstr "Abonnés"
#. module: golem_family
#: model:ir.model,name:golem_family.model_golem_family
msgid "GOLEM Family Entity"
msgstr "GOLEM : famille"
msgstr "Famille"
#. module: golem_family
#: model:ir.actions.act_window,name:golem_family.family_action_list
#: model:ir.actions.act_window,name:golem_family.golem_family_action_list
msgid "GOLEM Family List"
msgstr "GOLEM : liste des familles"
msgstr "Liste des familles"
#. module: golem_family
#: model:ir.actions.act_window,name:golem_family.family_role_action
#: model:ir.model,name:golem_family.model_golem_family_role
msgid "GOLEM Family Role"
msgstr "Rôle dans la famille"
#. module: golem_family
#: model:ir.actions.act_window,name:golem_family.golem_family_role_action
msgid "GOLEM Family Role List"
msgstr "GOLEM : liste des rôles familiaux"
msgstr "Liste des rôles familiaux"
#. module: golem_family
#: model:ir.model,name:golem_family.model_golem_member
msgid "GOLEM Member"
msgstr "GOLEM : Adhérent"
msgstr "Adhérent"
#. module: golem_family
#: model:ir.model,name:golem_family.model_golem_family_role
msgid "GOLEM Member Family Role"
msgstr "GOLEM : rôle du membre de la famille"
#. module: golem_family
#: view:golem.family:golem_family.view_filter
#: model:ir.ui.view,arch_db:golem_family.golem_family_search
msgid "Group By"
msgstr "Grouper par"
#. module: golem_family
#: help:golem.family,message_summary:0
msgid "Holds the Chatter summary (number of messages, ...). This summary is directly in html format in order to be inserted in kanban views."
msgstr "Contient le résumé des discussions (nombre de message...). Ce résumé peut être directement inséré dans les vues par cartes."
#. module: golem_family
#: field:golem.family,id:0
#: field:golem.family.role,id:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_id
#: model:ir.model.fields,field_description:golem_family.field_golem_family_role_id
msgid "ID"
msgstr "ID"
#. module: golem_family
#: help:golem.family,message_unread:0
msgid "If checked new messages require your attention."
msgstr "Si coché, les nouveaux messages vous seront notifiés."
#. module: golem_family
#: field:golem.family,message_is_follower:0
msgid "Is a Follower"
msgstr "Is a Follower"
#. module: golem_family
#: field:golem.family,message_last_post:0
msgid "Last Message Date"
msgstr "Last Message Date"
#. module: golem_family
#: field:golem.family,__last_update:0
#: field:golem.family.role,__last_update:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family___last_update
#: model:ir.model.fields,field_description:golem_family.field_golem_family_role___last_update
msgid "Last Modified on"
msgstr "Dernière modification le"
msgstr "Dernière Modification le"
#. module: golem_family
#: field:golem.family,write_uid:0
#: field:golem.family.role,write_uid:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_role_write_uid
#: model:ir.model.fields,field_description:golem_family.field_golem_family_write_uid
msgid "Last Updated by"
msgstr "Dernière modification par"
msgstr "Dernière mise à jour par"
#. module: golem_family
#: field:golem.family,write_date:0
#: field:golem.family.role,write_date:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_role_write_date
#: model:ir.model.fields,field_description:golem_family.field_golem_family_write_date
msgid "Last Updated on"
msgstr "Dernière modification le"
msgstr "Dernière mise à jour le"
#. module: golem_family
#: field:golem.family,member_ids:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_member_ids
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_member_ids
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_member_ids
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_member_ids
msgid "Members"
msgstr "Adhérents"
#. module: golem_family
#: field:golem.family,message_ids:0
msgid "Messages"
msgstr "Messages"
#. module: golem_family
#: help:golem.family,message_ids:0
msgid "Messages and communication history"
msgstr "Messages historique des communications"
#. module: golem_family
#: field:golem.family,mobile:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_mobile
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_mobile
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_mobile
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_mobile
msgid "Mobile"
msgstr "Mobile"
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: field:golem.family,name:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_name
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
msgid "Name"
msgstr "Nom"
#. module: golem_family
#: field:golem.family,note:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_note
msgid "Note"
msgstr "Note"
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
msgid "Others"
msgstr "Autres"
@ -247,81 +226,108 @@ msgid "Partner"
msgstr "Partenaire"
#. module: golem_family
#: field:golem.family,phone:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_phone
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_phone
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_phone
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_phone
msgid "Phone"
msgstr "Téléphone"
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
msgid "Please save new member before assigning a family."
msgstr "Merci de sauvegarder la fiche du nouveau membre avant de pouvoir lui assigner une famille."
#. module: golem_family
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
msgid "Put an internal note..."
msgstr "Rédigez une note interne..."
msgstr "Écrivez une note interne..."
#. module: golem_family
#: field:golem.member,family_role:0
#: field:golem.family.role,name:0
#: field:res.partner,family_role:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_role_name
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_role
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_role
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_role
msgid "Role"
msgstr "Rôle"
msgstr "Role"
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: field:golem.family,state_id:0
#: model:ir.ui.menu,name:golem_family.golem_family_role_menu
msgid "Roles"
msgstr "Roles"
#. module: golem_family
#: model:ir.model.fields,field_description:golem_family.field_golem_family_state_id
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_state_id
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_state_id
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_state_id
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
msgid "State"
msgstr "Région"
#. module: golem_family
#: field:golem.family,street:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_street
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_street
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_street
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_street
msgid "Street"
msgstr "Rue"
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
msgid "Street..."
msgstr "Rue..."
#. module: golem_family
#: field:golem.family,street2:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_street2
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_street2
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_street2
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_street2
msgid "Street2"
msgstr "Complément de rue"
#. module: golem_family
#: field:golem.family,message_summary:0
msgid "Summary"
msgstr "Résumé"
#. module: golem_family
#: field:golem.family,message_unread:0
msgid "Unread Messages"
msgstr "Messages non lus"
#. module: golem_family
#: field:golem.family,website:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_website
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_website
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_website
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_website
msgid "Website"
msgstr "Site Web"
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
msgid "ZIP"
msgstr "Code postal"
#. module: golem_family
#: field:golem.family,zip:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_zip
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_zip
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_zip
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_zip
msgid "Zip"
msgstr "Code postal"
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
msgid "e.g. www.odoo.com"
msgstr "par exemple www.yaltik.com"
msgstr "e.g. www.yaltik.com"
#. module: golem_family
#: view:golem.member:golem_family.golem_member_family_smartbtn_add
#: view:res.partner:golem_family.res_partner_family_smartbtn_add
#: model:ir.ui.view,arch_db:golem_family.res_partner_form_inherit_golem_family
msgid "family members"
msgstr "famille"
msgstr "Famille"
#. module: golem_family
#: view:golem.family:golem_family.view_form
msgid "name@example.org"
msgstr "nom@exemple.ext"
#: model:ir.ui.view,arch_db:golem_family.golem_family_kanban
msgid "members"
msgstr "membres"
#. module: golem_family
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
msgid "name@example.org"
msgstr "name@example.org"

View File

@ -4,10 +4,10 @@
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-07-11 18:06+0000\n"
"PO-Revision-Date: 2016-07-11 18:06+0000\n"
"POT-Creation-Date: 2018-01-29 09:03+0000\n"
"PO-Revision-Date: 2018-01-29 09:03+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@ -16,107 +16,124 @@ msgstr ""
"Plural-Forms: \n"
#. module: golem_family
#: view:golem.family:golem_family.family_tree
#: model:ir.ui.view,arch_db:golem_family.golem_family_tree
msgid "# Members"
msgstr ""
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
msgid "0000000000"
msgstr ""
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
msgid "Address"
msgstr ""
#. module: golem_family
#: view:golem.family:golem_family.view_filter
#: model:ir.ui.view,arch_db:golem_family.golem_family_search
msgid "By city"
msgstr ""
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: field:golem.family,city:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_city
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_city
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_city
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_city
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
msgid "City"
msgstr ""
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
msgid "Communication"
msgstr ""
#. module: golem_family
#: field:golem.family,count:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_count
msgid "Count"
msgstr ""
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: field:golem.family,country_id:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_country_id
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_country_id
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_country_id
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_country_id
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
msgid "Country"
msgstr ""
#. module: golem_family
#: field:golem.family,create_uid:0
#: field:golem.family.role,create_uid:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_create_uid
#: model:ir.model.fields,field_description:golem_family.field_golem_family_role_create_uid
msgid "Created by"
msgstr ""
#. module: golem_family
#: field:golem.family,create_date:0
#: field:golem.family.role,create_date:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_create_date
#: model:ir.model.fields,field_description:golem_family.field_golem_family_role_create_date
msgid "Created on"
msgstr ""
#. module: golem_family
#: help:golem.family,message_last_post:0
msgid "Date of the last message posted on the record."
msgstr ""
#. module: golem_family
#: field:golem.family,display_name:0
#: field:golem.family.role,display_name:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_display_name
#: model:ir.model.fields,field_description:golem_family.field_golem_family_role_display_name
msgid "Display Name"
msgstr ""
#. module: golem_family
#: field:golem.family,email:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_email
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_email
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_email
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_email
msgid "Email"
msgstr ""
#. module: golem_family
#: model:ir.ui.menu,name:golem_family.family_menu_list
#: model:ir.ui.menu,name:golem_family.golem_family_menu
#: model:ir.ui.menu,name:golem_family.golem_family_menu_list
msgid "Families"
msgstr ""
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: field:golem.member,family_id:0
#: field:res.partner,family_id:0
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_id
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_member
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_id
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_member
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_id
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_member
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
#: model:ir.ui.view,arch_db:golem_family.golem_family_search_inherit_golem_membership
msgid "Family"
msgstr ""
#. module: golem_family
#: field:golem.member,family_count:0
#: field:res.partner,family_count:0
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_count
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_count
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_count
msgid "Family Count"
msgstr ""
#. module: golem_family
#: code:addons/golem_family/models/golem_family.py:33
#: code:addons/golem_family/models/golem_family.py:46
#: code:addons/golem_family/models/golem_family.py:49
#: code:addons/golem_family/models/golem_family.py:84
#, python-format
msgid "Family Members"
msgstr ""
#. module: golem_family
#: model:ir.ui.menu,name:golem_family.family_role_menu_list
msgid "Family Roles"
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
msgid "Family form"
msgstr ""
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
msgid "Family members"
msgstr ""
@ -125,23 +142,23 @@ msgstr ""
msgid "Family role must be unique."
msgstr ""
#. module: golem_family
#: field:golem.family,message_follower_ids:0
msgid "Followers"
msgstr ""
#. module: golem_family
#: model:ir.model,name:golem_family.model_golem_family
msgid "GOLEM Family Entity"
msgstr ""
#. module: golem_family
#: model:ir.actions.act_window,name:golem_family.family_action_list
#: model:ir.actions.act_window,name:golem_family.golem_family_action_list
msgid "GOLEM Family List"
msgstr ""
#. module: golem_family
#: model:ir.actions.act_window,name:golem_family.family_role_action
#: model:ir.model,name:golem_family.model_golem_family_role
msgid "GOLEM Family Role"
msgstr ""
#. module: golem_family
#: model:ir.actions.act_window,name:golem_family.golem_family_role_action
msgid "GOLEM Family Role List"
msgstr ""
@ -151,92 +168,62 @@ msgid "GOLEM Member"
msgstr ""
#. module: golem_family
#: model:ir.model,name:golem_family.model_golem_family_role
msgid "GOLEM Member Family Role"
msgstr ""
#. module: golem_family
#: view:golem.family:golem_family.view_filter
#: model:ir.ui.view,arch_db:golem_family.golem_family_search
msgid "Group By"
msgstr ""
#. module: golem_family
#: help:golem.family,message_summary:0
msgid "Holds the Chatter summary (number of messages, ...). This summary is directly in html format in order to be inserted in kanban views."
msgstr ""
#. module: golem_family
#: field:golem.family,id:0
#: field:golem.family.role,id:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_id
#: model:ir.model.fields,field_description:golem_family.field_golem_family_role_id
msgid "ID"
msgstr ""
#. module: golem_family
#: help:golem.family,message_unread:0
msgid "If checked new messages require your attention."
msgstr ""
#. module: golem_family
#: field:golem.family,message_is_follower:0
msgid "Is a Follower"
msgstr ""
#. module: golem_family
#: field:golem.family,message_last_post:0
msgid "Last Message Date"
msgstr ""
#. module: golem_family
#: field:golem.family,__last_update:0
#: field:golem.family.role,__last_update:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family___last_update
#: model:ir.model.fields,field_description:golem_family.field_golem_family_role___last_update
msgid "Last Modified on"
msgstr ""
#. module: golem_family
#: field:golem.family,write_uid:0
#: field:golem.family.role,write_uid:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_role_write_uid
#: model:ir.model.fields,field_description:golem_family.field_golem_family_write_uid
msgid "Last Updated by"
msgstr ""
#. module: golem_family
#: field:golem.family,write_date:0
#: field:golem.family.role,write_date:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_role_write_date
#: model:ir.model.fields,field_description:golem_family.field_golem_family_write_date
msgid "Last Updated on"
msgstr ""
#. module: golem_family
#: field:golem.family,member_ids:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_member_ids
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_member_ids
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_member_ids
msgid "Members"
msgstr ""
#. module: golem_family
#: field:golem.family,message_ids:0
msgid "Messages"
msgstr ""
#. module: golem_family
#: help:golem.family,message_ids:0
msgid "Messages and communication history"
msgstr ""
#. module: golem_family
#: field:golem.family,mobile:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_mobile
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_mobile
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_mobile
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_mobile
msgid "Mobile"
msgstr ""
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: field:golem.family,name:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_name
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
msgid "Name"
msgstr ""
#. module: golem_family
#: field:golem.family,note:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_note
msgid "Note"
msgstr ""
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
msgid "Others"
msgstr ""
@ -246,81 +233,104 @@ msgid "Partner"
msgstr ""
#. module: golem_family
#: field:golem.family,phone:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_phone
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_phone
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_phone
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_phone
msgid "Phone"
msgstr ""
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
msgid "Put an internal note..."
msgstr ""
#. module: golem_family
#: field:golem.member,family_role:0
#: field:golem.family.role,name:0
#: field:res.partner,family_role:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_role_name
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_role
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_role
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_role
msgid "Role"
msgstr ""
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: field:golem.family,state_id:0
#: model:ir.ui.menu,name:golem_family.golem_family_role_menu
msgid "Roles"
msgstr ""
#. module: golem_family
#: model:ir.model.fields,field_description:golem_family.field_golem_family_state_id
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_state_id
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_state_id
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_state_id
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
msgid "State"
msgstr ""
#. module: golem_family
#: field:golem.family,street:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_street
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_street
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_street
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_street
msgid "Street"
msgstr ""
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
msgid "Street..."
msgstr ""
#. module: golem_family
#: field:golem.family,street2:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_street2
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_street2
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_street2
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_street2
msgid "Street2"
msgstr ""
#. module: golem_family
#: field:golem.family,message_summary:0
msgid "Summary"
msgstr ""
#. module: golem_family
#: field:golem.family,message_unread:0
msgid "Unread Messages"
msgstr ""
#. module: golem_family
#: field:golem.family,website:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_website
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_website
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_website
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_website
msgid "Website"
msgstr ""
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
msgid "ZIP"
msgstr ""
#. module: golem_family
#: field:golem.family,zip:0
#: model:ir.model.fields,field_description:golem_family.field_golem_family_zip
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_zip
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_zip
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_zip
msgid "Zip"
msgstr ""
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
msgid "e.g. www.odoo.com"
msgstr ""
#. module: golem_family
#: view:golem.member:golem_family.golem_member_family_smartbtn_add
#: view:res.partner:golem_family.res_partner_family_smartbtn_add
#: model:ir.ui.view,arch_db:golem_family.res_partner_form_inherit_golem_family
msgid "family members"
msgstr ""
#. module: golem_family
#: view:golem.family:golem_family.view_form
#: model:ir.ui.view,arch_db:golem_family.golem_family_kanban
msgid "members"
msgstr ""
#. module: golem_family
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
msgid "name@example.org"
msgstr ""

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Fabien Bourgeois <fabien@yaltik.com>
# Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@ -15,20 +15,35 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from openerp import models, fields, api, _
""" GOLEM Families """
from odoo import models, fields, api, _
class ResPartner(models.Model):
""" Partner adaptations """
_inherit = 'res.partner'
_description = 'GOLEM Partner Family'
family_member_ids = fields.One2many(related='family_id.member_ids')
family_street = fields.Char(related='family_id.street')
family_street2 = fields.Char(related='family_id.street2')
family_zip = fields.Char(related='family_id.zip')
family_city = fields.Char(related='family_id.city')
family_state_id = fields.Many2one(related='family_id.state_id')
family_country_id = fields.Many2one(related='family_id.country_id')
family_phone = fields.Char(related='family_id.phone')
family_mobile = fields.Char(related='family_id.mobile')
family_email = fields.Char(related='family_id.email')
family_website = fields.Char(related='family_id.website')
family_id = fields.Many2one('golem.family', string='Family', index=True)
family_role = fields.Many2one('golem.family.role', string='Role',
index=True)
family_count = fields.Integer('Family Count', related='family_id.count')
family_count = fields.Integer(related='family_id.count')
@api.multi
def button_family_members(self):
""" Go to family view, from partner """
self.ensure_one()
return {'name': _('Family Members'),
'type': 'ir.actions.act_window',
@ -36,28 +51,43 @@ class ResPartner(models.Model):
'view_mode': 'form',
'res_id': self.family_id.id}
@api.onchange('family_id')
def onchange_family(self):
""" Sets as family address if there was no precedence """
for member in self:
if member.family_id and not any((member.lastname, member.street, \
member.street2, member.zip, member.city)):
member.update({'lastname': member.family_id.name,
'street': member.family_id.street,
'street2': member.family_id.street2,
'zip': member.family_id.zip,
'city': member.family_id.city})
class GolemMember(models.Model):
""" Member adaptations """
_inherit = 'golem.member'
@api.onchange('family_id')
def onchange_family(self):
""" Sets lastname as family name if there was no precedence """
for p in self:
if not p.lastname:
p.lastname = self.family_id.name
for member in self:
if not member.lastname:
member.lastname = member.family_id.name
@api.multi
def button_family_members(self):
""" Go to family view, from member """
self.ensure_one()
member = self[0]
return {'name': _('Family Members'),
'type': 'ir.actions.act_window',
'res_model': 'golem.family',
'view_mode': 'form',
'res_id': self.family_id.id}
'res_id': member.family_id.id}
class GolemFamily(models.Model):
""" GOLEM Family Entity """
_name = 'golem.family'
_description = 'GOLEM Family Entity'
_inherit = 'mail.thread'
@ -66,33 +96,44 @@ class GolemFamily(models.Model):
def _get_default_nationality_id(self):
return self.env.ref('base.main_company').country_id
name = fields.Char('Name', index=True, required=True)
street = fields.Char('Street')
street2 = fields.Char('Street2')
zip = fields.Char('Zip')
city = fields.Char('City')
name = fields.Char(index=True, required=True)
street = fields.Char()
street2 = fields.Char()
zip = fields.Char()
city = fields.Char()
state_id = fields.Many2one('res.country.state', 'State',
ondelete='restrict')
country_id = fields.Many2one('res.country', 'Country',
ondelete='restrict',
default=_get_default_nationality_id)
phone = fields.Char('Phone')
mobile = fields.Char('Mobile')
email = fields.Char('Email')
website = fields.Char('Website')
phone = fields.Char()
mobile = fields.Char()
email = fields.Char()
website = fields.Char()
member_ids = fields.One2many('res.partner', 'family_id', 'Members',
domain=[('is_company', '=', False)])
note = fields.Text('Note')
count = fields.Integer('Count', compute='_compute_count', store=True)
note = fields.Text()
count = fields.Integer(compute='_compute_count', store=True)
@api.one
@api.depends('member_ids')
def _compute_count(self):
self.count = len(self.member_ids)
for family in self:
family.count = len(family.member_ids)
@api.onchange('member_ids')
def onchange_members(self):
""" Sets as member address if there was no precedence """
for family in self:
if family.member_ids and not any((family.street, family.street2,\
family.zip, family.city)):
family.update({'street': family.member_ids[0].street,
'street2': family.member_ids[0].street2,
'zip': family.member_ids[0].zip,
'city': family.member_ids[0].city})
class GolemFamilyRole(models.Model):
""" GOLEM Family Role """
_name = 'golem.family.role'
_description = 'GOLEM Family Role'
_sql_constraints = [('golem_family_role_name_uniq',

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2016 Fabien Bourgeois <fabien@yaltik.com>
Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
@ -17,19 +17,21 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<openerp>
<odoo>
<data>
<!-- Forms -->
<record id="view_form" model="ir.ui.view">
<record id="golem_family_form" model="ir.ui.view">
<field name="name">GOLEM Family Form</field>
<field name="model">golem.family</field>
<field name="arch" type="xml">
<form>
<sheet>
<div colspan="2"
style="background-color: #ccc; color: #fff; font-size: 150%; font-weight: bold; padding: 0.5%; text-align: center; margin-bottom: 1%;">Family form</div>
<group>
<div class="oe_title">
<h1>
<label for="name" string="Family" />
<label for="name" string="Family" class="oe_edit_only" />
<field name="name" class="oe_inline" placeholder="Name" />
</h1>
</div>
@ -64,8 +66,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
</group>
<notebook>
<page string="Family members">
<field name="member_ids" widget="many2many">
<tree>
<field name="member_ids" context="{'default_family_id': active_id}">
<tree delete="false">
<field name="name" />
<field name="family_role" />
<field name="phone" />
@ -89,8 +91,67 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
</field>
</record>
<!-- Kanban -->
<record model="ir.ui.view" id="golem_family_kanban">
<field name="name">GOLEM Family Kanban view</field>
<field name="model">golem.family</field>
<field name="arch" type="xml">
<kanban>
<field name="count" />
<field name="name" />
<field name="email" />
<field name="phone" />
<field name="mobile" />
<field name="city" />
<field name="country_id" />
<field name="member_ids" />
<templates>
<t t-name="kanban-box">
<div class="oe_kanban_vignette oe_semantic_html_override">
<div class="oe_kanban_details">
<h4 class="oe_partner_heading">
<a type="open"><field name="name" /></a>
</h4>
<div class="oe_kanban_partner_links" />
<ul>
<li t-if="record.city.raw_value and !record.country_id.raw_value">
<field name="city" />
</li>
<li t-if="!record.city.raw_value and record.country_id.raw_value">
<field name="country_id" />
</li>
<li t-if="record.city.raw_value and record.country_id.raw_value">
<field name="city" />, <field name="country_id" />
</li>
<li t-if="record.phone.raw_value or record.mobile.raw_value">
<a t-attf-href="tel:#{record.phone.raw_value}">
<field name="phone" />
</a>
<a t-attf-href="tel:#{record.mobile.raw_value}">
<field name="mobile" />
</a>
</li>
<li t-if="record.email.raw_value">
<a t-attf-href="mailto:#{record.email.raw_value}">
<field name="email" />
</a>
</li>
</ul>
<field name="count" /> members <span t-if="record.count != 0"> :
<t t-foreach="record.member_ids.raw_value" t-as="member">
<t t-esc="member.name" />
</t>
</span>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<!-- Trees -->
<record id="family_tree" model="ir.ui.view">
<record id="golem_family_tree" model="ir.ui.view">
<field name="name">Family list</field>
<field name="model">golem.family</field>
<field name="arch" type="xml">
@ -103,7 +164,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
</tree>
</field>
</record>
<record id="family_role_tree" model="ir.ui.view">
<record id="golem_family_role_tree" model="ir.ui.view">
<field name="name">Family Role List</field>
<field name="model">golem.family.role</field>
<field name="arch" type="xml">
@ -114,7 +175,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
</record>
<!-- Searches -->
<record id="view_filter" model="ir.ui.view">
<record id="golem_family_search" model="ir.ui.view">
<field name="name">GOLEM Family Filters</field>
<field name="model">golem.family</field>
<field name="arch" type="xml">
@ -134,18 +195,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
</record>
<!-- Actions -->
<act_window id="family_action_list" name="GOLEM Family List"
res_model="golem.family" view_mode="tree,form" />
<act_window id="family_role_action" name="GOLEM Family Role List"
<act_window id="golem_family_action_list" name="GOLEM Family List"
res_model="golem.family" view_mode="kanban,tree,form" />
<act_window id="golem_family_role_action" name="GOLEM Family Role List"
res_model="golem.family.role" view_mode="tree" />
<!-- Menus -->
<menuitem id="family_menu_list" name="Families"
parent="membership.menu_membership" action="family_action_list"
sequence="10" groups="golem_base.group_golem_user" />
<menuitem id="family_role_menu_list" name="Family Roles"
parent="base.menu_marketing_config_association"
action="family_role_action" sequence="3"
<menuitem id="golem_family_menu" name="Families"
sequence="17" groups="golem_base.group_golem_user"
web_icon="golem_family,static/description/icon.png" />
<menuitem id="golem_family_menu_list" name="Families"
parent="golem_family_menu" action="golem_family_action_list" sequence="1"
groups="golem_base.group_golem_user" />
<menuitem id="golem_family_role_menu" name="Roles"
parent="golem_family_menu" action="golem_family_role_action" sequence="5"
groups="golem_base.group_golem_manager" />
</data>
</openerp>
</odoo>

View File

@ -1,44 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2016 Fabien Bourgeois <fabien@yaltik.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<openerp>
<data>
<!-- Form -->
<record model="ir.ui.view" id="golem_member_family_smartbtn_add">
<field name="name">Add family management smart button</field>
<field name="model">golem.member</field>
<field name="inherit_id" ref="golem_member.view_form" />
<field name="arch" type="xml">
<div name="buttons" position="inside">
<button class="oe_inline oe_stat_button" type="object"
name="button_family_members" icon="fa-users"
attrs="{'invisible': [('family_id', '=', False)]}">
<field string="family members" name="family_count"
widget="statinfo" />
</button>
</div>
<field name="lastname" position="before">
<field name="family_id" />
<field name="family_role" />
</field>
</field>
</record>
</data>
</openerp>

View File

@ -0,0 +1,104 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<odoo>
<data>
<!-- Form -->
<record model="ir.ui.view" id="golem_member_form_inherit_golem_family">
<field name="name">Member form adaptations</field>
<field name="model">golem.member</field>
<field name="inherit_id" ref="golem_member.golem_member_form" />
<field name="arch" type="xml">
<field name="lastname" position="before">
<field name="id" invisible="1" />
<field name="partner_id" invisible="1" />
<p class="oe_grey" colspan="2"
attrs="{'invisible': [('id', '!=', False)]}">
Please save new member before assigning a family.
</p>
<field name="family_id"
attrs="{'readonly': [('id', '=', False)]}"
context="{'default_member_ids': [(4, partner_id, False)]}" />
<field name="family_role"
attrs="{'readonly': [('id', '=', False)]}" />
</field>
<page name="other_page" position="before">
<page string="Family"
attrs="{'invisible': [('family_id', '=', False)]}">
<group>
<group string="Address">
<group>
<field name="family_street" placeholder="Street..." />
<field name="family_street2" />
<field name="family_zip" placeholder="ZIP" />
<field name="family_city" placeholder="City" />
</group>
<group>
<field name="family_state_id" class="oe_no_button"
placeholder="State" />
<field name="family_country_id" placeholder="Country"
class="oe_no_button" />
</group>
</group>
</group>
<group>
<group string="Communication">
<group>
<field name="family_phone" placeholder="0000000000"
widget="phonefr" />
<field name="family_mobile" placeholder="0000000000"
widget="phonefr" />
</group>
<group>
<field name="family_email" widget="email"
placeholder="name@example.org" />
<field name="family_website" widget="url"
placeholder="e.g. www.odoo.com"/>
</group>
</group>
</group>
<field name="family_member_ids"
context="{'default_family_id': active_id}">
<tree delete="false">
<field name="name" />
<field name="family_role" />
<field name="phone" />
<field name="mobile" />
<field name="email" widget="email" />
</tree>
</field>
</page>
</page>
</field>
</record>
<!-- Searches -->
<record model="ir.ui.view" id="golem_member_search_inherit_golem_family">
<field name="name">GOLEM Member search adaptations</field>
<field name="model">golem.member</field>
<field name="inherit_id" ref="golem_member.golem_member_search" />
<field name="arch" type="xml">
<field name="name" position="after">
<field name="family_id" />
</field>
</field>
</record>
</data>
</odoo>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2016 Fabien Bourgeois <fabien@yaltik.com>
Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
@ -17,15 +17,15 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<openerp>
<odoo>
<data>
<!-- Form -->
<record model="ir.ui.view" id="res_partner_family_smartbtn_add">
<field name="name">Add family management smart button</field>
<record model="ir.ui.view" id="res_partner_form_inherit_golem_family">
<field name="name">Partner form adaptations</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form" />
<field name="arch" type="xml">
<div name="buttons" position="inside">
<div name="button_box" position="inside">
<button class="oe_inline oe_stat_button" type="object"
name="button_family_members" icon="fa-users"
attrs="{'invisible': [('family_id', '=', False)]}">
@ -36,8 +36,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
</field>
</record>
<record model="ir.ui.view" id="res_partner_family_role_add">
<field name="name">Add family role into res.partner form</field>
<record model="ir.ui.view" id="partner_firstname_inherit_golem_family_role">
<field name="name">Partner form adaptations</field>
<field name="model">res.partner</field>
<field name="inherit_id"
ref="partner_firstname.view_partner_form_firstname" />
@ -52,4 +52,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
</record>
</data>
</openerp>
</odoo>

View File

@ -18,9 +18,7 @@
{
'name': 'GOLEM members minor and family',
'summary': 'GOLEM non-profit members family + minor management',
'description': 'Non-profit french MJC members family update to minor '
'management',
'version': '0.1',
'version': '10.0.1.0.0',
'category': 'GOLEM',
'author': 'Fabien Bourgeois',
'license': 'AGPL-3',

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Fabien Bourgeois <fabien@yaltik.com>
# Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@ -15,12 +15,15 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from openerp import models, fields
""" GOLEM Family Minor glue module"""
from odoo import models, fields
LEGAL_DMN = "['&', ('family_id', '=', family_id), ('id', '!=', partner_id)]"
class GolemMember(models.Model):
""" Member adaptations """
_inherit = 'golem.member'
legal_guardian_ids = fields.Many2many(domain=LEGAL_DMN)

View File

@ -18,15 +18,17 @@
{
'name': 'GOLEM non-profit members',
'summary': 'Extends Odoo contacts for MJC',
'description': 'Non-profit french MJC members management',
'version': '0.1',
'version': '10.0.1.0.0',
'category': 'GOLEM',
'author': 'Fabien Bourgeois',
'license': 'AGPL-3',
'application': True,
'installable': True,
'depends': ['golem_base', 'golem_activity', 'golem_season'],
'data': ['views/golem_member_view.xml', 'views/members_menu.xml',
'views/res_partner_view.xml', 'views/number_config.xml',
'data/number_config.xml', 'security/ir.model.access.csv']
'depends': ['golem_base', 'golem_activity', 'golem_season',
'odoo_partner_merge'],
'data': ['views/golem_member_views.xml',
'views/res_partner_views.xml',
'views/golem_member_numberconfig_views.xml',
'data/golem_member_numberconfig_data.xml',
'security/ir.model.access.csv']
}

View File

@ -17,15 +17,17 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<openerp>
<odoo>
<data noupdate="1">
<function model="ir.config_parameter" name="set_param"
eval="('golem_numberconfig_isautomatic', '1')" />
<function model="ir.config_parameter" name="set_param"
eval="('golem_numberconfig_isperseason', '1')" />
<function model="ir.config_parameter" name="set_param"
eval="('golem_numberconfig_isfornewmembersonly', '0')" />
<function model="ir.config_parameter" name="set_param"
eval="('golem_numberconfig_prefix', '')" />
<function model="ir.config_parameter" name="set_param"
eval="('golem_number_counter', '0')" />
</data>
</openerp>
</odoo>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
#
# Copyright 2016 Fabien Bourgeois <fabien@yaltik.com>
#
# This program is free software: you can redistribute it and/or modify
@ -15,17 +15,24 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from openerp import models, fields, api, _
""" GOLEM Members """
import logging
from odoo import models, fields, api, _
from odoo.exceptions import UserError
_LOGGER = logging.getLogger(__name__)
class ResPartner(models.Model):
""" GOLEM Member partner adaptations """
_inherit = 'res.partner'
@api.model
def _get_default_nationality_id(self):
return self.env.ref('base.main_company').country_id
nationality_id = fields.Many2one(default=_get_default_nationality_id)
nationality_id = fields.Many2one('res.country', 'Nationality',
default=_get_default_nationality_id)
country_id = fields.Many2one(default=_get_default_nationality_id)
# Gender overwriting : no need for 'other' choice
@ -33,31 +40,53 @@ class ResPartner(models.Model):
member_id = fields.One2many('golem.member', 'partner_id', 'GOLEM Member',
readonly=True)
is_member = fields.Boolean('Is member', compute='_compute_is_member')
member_number = fields.Char('Member number', related='member_id.number')
@api.depends('member_id')
def _compute_is_member(self):
""" Computes is member """
for partner in self:
partner.is_member = len(partner.member_id) > 0
@api.multi
def view_member(self):
""" Go to member form """
self.ensure_one()
if self[0].member_id:
return {'type': 'ir.actions.act_window',
'res_model': 'golem.member',
'view_mode': 'form',
'res_id': self[0].member_id.id}
@api.multi
def create_golem_member(self):
""" Member creation from partner form """
self.ensure_one()
gm = self.env['golem.member']
gm.create({'partner_id': self.id})
return True
gm_obj = self.env['golem.member']
gm_obj.create({'partner_id': self[0].id})
class GolemMember(models.Model):
""" GOLEM Member model """
_name = 'golem.member'
_description = 'GOLEM Member'
_inherit = 'mail.thread'
_inherits = {'res.partner': 'partner_id'}
_sql_constraints = [('golem_member_number_manual_uniq',
'UNIQUE (number_manual)',
_('This member number has already been used.'))]
partner_id = fields.Many2one('res.partner', required=True,
partner_id = fields.Many2one('res.partner', required=True, index=True,
ondelete='cascade')
@api.model
def _default_season(self):
""" Get default season """
domain = [('is_default', '=', True)]
return self.env['golem.season'].search(domain)
return self.env['golem.season'].search(domain, limit=1)
number_name = fields.Char('Member computed name', compute='_compute_number_name')
number = fields.Char('Member number', store=True, readonly=True)
number_manual = fields.Char('Manual number', size=50, index=True,
help='Manual number overwriting automatic '
@ -70,104 +99,125 @@ class GolemMember(models.Model):
required=True, default=_default_season,
ondelete='restrict')
is_current = fields.Boolean('Current user?', default=False, readonly=True,
store=True, compute='_compute_is_current')
store=True, compute='compute_is_current')
is_number_manual = fields.Boolean('Is number manual?', store=False,
compute='_compute_is_number_manual')
image_permission = fields.Boolean('Image permission?', default=True)
_sql_constraints = [('golem_member_number_manual_uniq',
'UNIQUE (number_manual)',
_('This member number has already been used.'))]
@api.onchange('country_id')
def _onchange_country_id(self):
member = self[0]
if member.country_id:
return {
'domain': {'state_id': [('country_id', '=', member.country_id.id)]}
}
else:
return {'domain': {'state_id': []}}
@api.one
@api.depends('number', 'name')
def _compute_number_name(self):
""" Computes a name composed with number and name """
for member in self:
if member.name:
member.number_name = u'{} - {}'.format(member.number, member.name)
else:
member.number_name = u''
@api.multi
@api.depends('season_ids')
def _compute_is_current(self):
def compute_is_current(self):
""" Computes is current according to seasons """
default_s = self._default_season()
self.is_current = default_s in self.season_ids
for member in self:
member.is_current = default_s in member.season_ids
@api.one
@api.multi
@api.depends('number')
def _compute_is_number_manual(self):
conf = self.env['ir.config_parameter']
is_num_man = (conf.get_param('golem_numberconfig_isautomatic') == '0')
self.is_number_manual = is_num_man
self.write({'is_number_manual': is_num_man})
@api.one
def _generate_number_perseason(self):
@api.multi
def generate_number_perseason(self):
""" Number generation in case of per season configuration """
res = None
conf = self.env['ir.config_parameter']
member_number_obj = self.env['golem.member.number']
for member in self:
for s in member.season_ids:
for season in member.season_ids:
domain = ['&',
('member_id', '=', member.id),
('season_id', '=', s.id)]
member_num = self.env['golem.member.number']
mn = member_num.search(domain)
if not mn:
s.member_counter += 1
s.write({'member_counter': s.member_counter})
('season_id', '=', season.id)]
member_num = member_number_obj.search(domain)
if not member_num:
season.write({'member_counter': season.member_counter})
pkey = 'golem_numberconfig_prefix'
pfx = conf.get_param(pkey)
number = pfx + str(s.member_counter)
pfx = conf.get_param(pkey, '')
number = u'{}{}'.format(pfx, unicode(season.member_counter))
data = {'member_id': member.id,
'season_id': s.id,
'season_id': season.id,
'number': number}
mn = member_num.create(data)
if s.is_default:
res = mn.number
member_num = member_number_obj.create(data)
season.member_counter += 1
if season.is_default:
res = member_num.number
return res
@api.one
def _generate_number_global(self):
@api.multi
def generate_number_global(self):
""" Number generation in case of global configuration """
self.ensure_one()
conf = self.env['ir.config_parameter']
domain = ['&',
('member_id', '=', self.id),
('member_id', '=', self[0].id),
('season_id', '=', None)]
member_num = self.env['golem.member.number']
mn = member_num.search(domain)
if not mn:
last = int(conf.get_param('golem_number_counter', 0))
last += 1
conf.set_param('golem_number_counter', str(last))
pfx = conf.get_param('golem_numberconfig_prefix')
member_number_obj = self.env['golem.member.number']
member_num = member_number_obj.search(domain)
if not member_num:
last = int(conf.get_param('golem_number_counter', 1))
pfx = conf.get_param('golem_numberconfig_prefix', '')
number = pfx + str(last)
data = {'member_id': self.id,
data = {'member_id': self[0].id,
'season_id': None,
'number': number}
mn = member_num.create(data)
return mn.number
member_num = member_number_obj.create(data)
last += 1
conf.set_param('golem_number_counter', str(last))
else:
member_num = member_num[0]
return member_num.number
@api.one
def _generate_number(self):
@api.multi
def generate_number(self):
""" Computes number according to pre-existing number and chosen
seasons """
self.ensure_one()
conf = self.env['ir.config_parameter']
if conf.get_param('golem_numberconfig_isautomatic') == '0':
self.number = self.number_manual
else:
if conf.get_param('golem_numberconfig_isperseason') == '1':
mn = self._generate_number_perseason()
isauto = conf.get_param('golem_numberconfig_isautomatic') == '1'
isperseason = conf.get_param('golem_numberconfig_isperseason') == '1'
isfornew = conf.get_param('golem_numberconfig_isfornewmembersonly') == '1'
for member in self:
if not isauto or (isfornew and member.number_manual):
member.number = member.number_manual
else:
mn = self._generate_number_global()
if mn:
self.number = mn[0]
if isperseason:
member.number = member.generate_number_perseason()
else:
member.number = member.generate_number_global()
@api.model
@api.returns('self', lambda rec: rec.id)
def create(self, values):
""" Number generation after creation """
new_member = super(GolemMember, self).create(values)
new_member._generate_number()
new_member.generate_number()
return new_member
@api.multi
def write(self, values):
""" Number generation after updates """
res = super(GolemMember, self).write(values)
if 'season_ids' in values or 'number_manual' in values:
self._generate_number()
self.generate_number()
return res
@ -184,10 +234,11 @@ class GolemMemberNumber(models.Model):
auto_join=True)
number = fields.Char('Number', index=True, readonly=True)
@api.one
@api.multi
@api.depends('season_id')
def _compute_name(self):
self.name = self.season_id.name
for number in self:
number.name = number.season_id.name
class GolemNumberConfig(models.TransientModel):
@ -217,21 +268,56 @@ class GolemNumberConfig(models.TransientModel):
string='Per season number?',
default=_default_is_per_season)
prefix = fields.Char('Optional prefix', default=_default_prefix)
number_from = fields.Integer('First number', default=1,
help='Number starting from, default to 1')
@api.multi
def apply_config(self):
""" Apply new configuration """
self.ensure_one()
conf = self.env['ir.config_parameter']
conf.set_param('golem_numberconfig_isautomatic', self.is_automatic)
conf.set_param('golem_numberconfig_isperseason', self.is_per_season)
conf.set_param('golem_numberconfig_prefix', self.prefix or '')
if self.number_from:
_LOGGER.warning('New number_from %s', self.number_from)
conf.set_param('golem_number_counter', unicode(self.number_from))
self.env['golem.season'].search([]).write({
'member_counter': self.number_from
})
@api.multi
def apply_recompute(self):
def apply_nocompute(self):
""" Apply new configuration only for new members (keep old numbers) """
self.ensure_one()
self.apply_config()
conf = self.env['ir.config_parameter']
conf.set_param('golem_number_counter', '0')
conf.set_param('golem_numberconfig_isfornewmembersonly', '1')
@api.multi
def apply_recompute(self):
""" Recomputes all member numbers according to new configuration """
self.ensure_one()
self.apply_config()
conf = self.env['ir.config_parameter']
conf.set_param('golem_numberconfig_isfornewmembersonly', '0')
self.env['golem.member.number'].search([]).unlink()
self.env['golem.season'].search([]).write({'member_counter': 0})
self.env['golem.member'].search([])._generate_number()
self.env['golem.season'].search([]).write({
'member_counter': int(self.number_from)
})
self.env['golem.member'].search([]).generate_number()
class MergePartnerAutomatic(models.TransientModel):
""" Merge Partner Automatic adaptations """
_inherit = 'base.partner.merge.automatic.wizard'
@api.multi
def action_merge(self):
""" Merge adaptations : warn if there is a member """
for merge in self:
for partner in merge.partner_ids:
if partner.member_id:
emsg = _('GOLEM Members merge has not been implemented yet. '
'Please only merge partners, not members, or delete '
'GOLEM Members manually before merging.')
raise UserError(emsg)
return super(MergePartnerAutomatic, self).action_merge()

View File

@ -1,3 +1,4 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_golem_member_user,Access GOLEM Member User,model_golem_member,golem_base.group_golem_user,1,1,1,1
access_golem_member_season_user,Access GOLEM Member Season User,model_golem_member_number,golem_base.group_golem_user,1,1,1,1
access_ir_config_parameter_manager,Access IR Config Parameter Manager,base.model_ir_config_parameter,golem_base.group_golem_manager,1,1,1,1

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_golem_member_user Access GOLEM Member User model_golem_member golem_base.group_golem_user 1 1 1 1
3 access_golem_member_season_user Access GOLEM Member Season User model_golem_member_number golem_base.group_golem_user 1 1 1 1
4 access_ir_config_parameter_manager Access IR Config Parameter Manager base.model_ir_config_parameter golem_base.group_golem_manager 1 1 1 1

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Fabien Bourgeois <fabien@yaltik.com>
# Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@ -15,15 +15,19 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from openerp import exceptions
from openerp.tests.common import TransactionCase
""" GOLEM member testing """
from odoo import exceptions
from odoo.tests.common import TransactionCase
# from psycopg2 import IntegrityError
class GolemMemberTestCase(TransactionCase):
""" GOLEM member testing """
def setUp(self):
super(GolemMemberTestCase, self).setUp()
def setUp(self, *args, **kwargs):
""" Bootstrap season and members """
super(GolemMemberTestCase, self).setUp(*args, **kwargs)
self.member_numberconfig_model = self.env['golem.member.numberconfig']
season_mdl = self.env['golem.season'].sudo()
self.season_current = season_mdl.create({'name': u'Current'})
@ -37,10 +41,10 @@ class GolemMemberTestCase(TransactionCase):
def test_member_creation_noname(self):
""" Test creation of member without needed parameters """
with self.assertRaises(exceptions.ValidationError) as cm:
with self.assertRaises(exceptions.ValidationError) as exc_cm:
self.member_model.create({})
self.assertIn('Error(s) with partner', cm.exception.args[0])
self.assertEqual('No name is set.', cm.exception.args[1])
self.assertIn('Error(s) with partner', exc_cm.exception.args[0])
self.assertEqual('No name is set.', exc_cm.exception.args[1])
def test_current_season(self):
""" Test if default season if fixed according to setUp and if users
@ -66,7 +70,7 @@ class GolemMemberTestCase(TransactionCase):
# self.assertIn('duplicate key value violates unique constraint',
# cm.exception.args[0])
def test_member_numbers_auto_perseason(self):
def test_member_numbers_auto_season(self):
""" Tests per season automatic member number generation + prefix """
conf = self.member_numberconfig_model.create({'is_automatic': '1',
'is_per_season': '1',
@ -74,10 +78,31 @@ class GolemMemberTestCase(TransactionCase):
conf.apply_recompute()
self.assertEqual(self.member1.number, u'M1')
self.assertEqual(self.member2.number, u'M2')
self.member2.season_ids += self.season_next
self.assertEqual(self.member2.number, u'M2')
self.season_next.do_default_season()
self.assertTrue(self.member2.is_current)
self.assertEqual(self.member2.number, u'M1')
self.assertFalse(self.member1.is_current)
self.assertFalse(self.member1.number)
def test_mnumbers_auto_season_from(self):
""" Tests per season automatic member number + number_from """
conf = self.member_numberconfig_model.create({'is_automatic': '1',
'is_per_season': '1',
'prefix': False,
'number_from': 100})
conf.apply_recompute()
self.assertEqual(self.member1.number, u'100')
self.assertEqual(self.member2.number, u'101')
self.member2.season_ids += self.season_next
self.assertEqual(self.member2.number, u'101')
self.season_next.do_default_season()
self.assertTrue(self.member2.is_current)
self.assertEqual(self.member2.number, u'100')
self.assertFalse(self.member1.is_current)
self.assertFalse(self.member1.number)
def test_member_numbers_auto_global(self):
@ -91,3 +116,65 @@ class GolemMemberTestCase(TransactionCase):
'firstname': 'Buddy',
'season_ids': [self.season_next]})
self.assertEqual(new_m.number, u'3')
def test_mnumbers_auto_global_from(self):
""" Tests global automatic member number generation + number_from """
conf = self.member_numberconfig_model.create({'is_automatic': '1',
'is_per_season': '0',
'number_from': 50})
conf.apply_recompute()
self.assertEqual(self.member1.number, u'50')
self.assertEqual(self.member2.number, u'51')
new_m = self.member_model.create({'lastname': 'NEW',
'firstname': 'Buddy',
'season_ids': [self.season_next]})
self.assertEqual(new_m.number, u'52')
def test_mnumbers_manual_to_auto(self):
""" Tests generation change withtout whole recompute """
conf = self.member_numberconfig_model.create({'is_automatic': '0'})
conf.apply_recompute()
self.assertFalse(self.member1.number)
self.member1.number_manual = u'M01'
self.assertEqual(self.member1.number_manual, self.member1.number)
# Without number_from
conf = self.member_numberconfig_model.create({'is_automatic': '1',
'is_per_season': '0',
'prefix': False})
conf.apply_nocompute()
self.assertEqual(self.member1.number, u'M01')
new_m = self.member_model.create({'lastname': 'NEW',
'firstname': 'Dewie',
'season_ids': [self.season_current]})
new_m2 = self.member_model.create({'lastname': 'NEW',
'firstname': 'Dowa',
'season_ids': [self.season_current]})
self.assertEqual(new_m.number, u'1')
self.assertEqual(new_m2.number, u'2')
# With number_from
conf = self.member_numberconfig_model.create({'is_automatic': '1',
'is_per_season': '0',
'prefix': False,
'number_from': 50})
conf.apply_nocompute()
self.assertEqual(self.member1.number, u'M01')
new_m = self.member_model.create({'lastname': 'NEW',
'firstname': 'Buddy',
'season_ids': [self.season_current]})
new_m2 = self.member_model.create({'lastname': 'NEW',
'firstname': 'Bobby',
'season_ids': [self.season_current]})
self.assertEqual(new_m.number, u'50')
self.assertEqual(new_m2.number, u'51')
# After season changing
self.season_next.do_default_season()
self.assertEqual(self.member1.number, u'M01')
self.assertEqual(new_m.number, u'50')
self.member1.season_ids += self.season_next
self.assertEqual(self.member1.number, u'M01')
new_m3 = self.member_model.create({'lastname': 'NEW',
'firstname': 'Barny',
'season_ids': [self.season_current]})
self.assertEqual(new_m3.number, u'52')

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2016 Fabien Bourgeois <fabien@yaltik.com>
Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
@ -17,11 +17,11 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<openerp>
<odoo>
<data>
<!-- Forms -->
<record id="numberconfig_form" model="ir.ui.view">
<record id="golem_member_numberconfig_form" model="ir.ui.view">
<field name="name">GOLEM Member number configuration</field>
<field name="model">golem.member.numberconfig</field>
<field name="arch" type="xml">
@ -33,10 +33,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
attrs="{'invisible': [('is_automatic', '=', '0')]}"/>
<field name="prefix"
attrs="{'invisible': [('is_automatic', '=', '0')]}"/>
<field name="number_from"
attrs="{'invisible': [('is_automatic', '=', '0')]}"/>
</group>
</sheet>
<footer>
<button type="object" name="apply_config"
<button type="object" name="apply_nocompute"
string="Apply for new members" />
<button type="object" name="apply_recompute"
string="Apply and recompute all member numbers"
@ -50,13 +52,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
</record>
<!-- Actions -->
<act_window id="numberconfig_action"
<act_window id="golem_member_numberconfig_action"
name="GOLEM Member Number Config" res_model="golem.member.numberconfig"
view_mode="form" target="new" />
<!-- Menus -->
<menuitem
id="numberconfig_menu" action="numberconfig_action"
parent="base.menu_marketing_config_association" sequence="3"
id="golem_member_numberconfig_menu"
action="golem_member_numberconfig_action"
parent="membership.menu_marketing_config_association" sequence="1"
groups="golem_base.group_golem_manager" />
</data>
</openerp>
</odoo>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2016 Fabien Bourgeois <fabien@yaltik.com>
Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
@ -17,21 +17,24 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<openerp>
<odoo>
<data>
<!-- Forms -->
<record id="view_form" model="ir.ui.view">
<record id="golem_member_form" model="ir.ui.view">
<field name="name">GOLEM Member Form</field>
<field name="model">golem.member</field>
<field name="arch" type="xml">
<form>
<sheet>
<div colspan="2"
style="background-color: #ccc; color: #fff; font-size: 150%; font-weight: bold; padding: 0.5%; text-align: center; margin-bottom: 1%;">Member form</div>
<group>
<div class="oe_title">
<h1>
<field name="image" widget="image" class="oe_left oe_avatar"
options="{'preview_image': 'image_medium', 'size': [90, 90]}" />
<field name="name" class="oe_inline" readonly="True" />
<field name="number_name" class="oe_inline" readonly="True"
style="margin-left: 2%" />
</h1>
</div>
<div class="oe_right oe_button_box" name="buttons" />
@ -81,15 +84,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<field name="mobile" placeholder="0000000000"
widget="phonefr" />
<field name="pictures_agreement"/>
</group>
<group>
<field name="opt_out_sms" />
<field name="email" widget="email"
placeholder="name@example.org" />
<label for="opt_out" string="Out of mailings?" />
<field name="opt_out" nolabel="1" />
<field name="opt_out_sms" />
</group>
<group>
<field name="website" widget="url"
placeholder="e.g. www.odoo.com"/>
<field name="image_permission" />
</group>
</group>
</page>
@ -108,8 +112,80 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
</field>
</record>
<!-- Kanban -->
<record model="ir.ui.view" id="golem_member_kanban">
<field name="name">GOLEM Member Kanban view</field>
<field name="model">golem.member</field>
<field name="arch" type="xml">
<kanban>
<field name="is_company" />
<field name="image" />
<field name="color" />
<field name="display_name" />
<field name="title" />
<field name="email" />
<field name="phone" />
<field name="mobile" />
<field name="city" />
<field name="country_id" />
<field name="number" />
<field name="season_ids" />
<field name="category_id"/>
<templates>
<t t-name="kanban-box">
<div class="oe_kanban_vignette oe_semantic_html_override">
<div class="o_kanban_image">
<img t-if="record.image.raw_value"
t-att-src="'data:image/png;base64,'+ record.image.raw_value"/>
<t t-if="!record.image.raw_value">
<img t-if="record.is_company.raw_value === true"
t-att-src='_s + "/base/static/src/img/company_image.png"'/>
<img t-if="record.is_company.raw_value === false"
t-att-src='_s + "/base/static/src/img/avatar.png"'/>
</t>
</div>
<div class="oe_kanban_details">
<h4 class="oe_partner_heading">
<a type="open"><field name="display_name" /></a>
(N° <field name="number" />)
</h4>
<div class="oe_kanban_partner_categories" />
<div class="oe_kanban_partner_links" />
<field name="season_ids" />
<ul>
<li t-if="record.city.raw_value and !record.country_id.raw_value">
<field name="city" />
</li>
<li t-if="!record.city.raw_value and record.country_id.raw_value">
<field name="country_id" />
</li>
<li t-if="record.city.raw_value and record.country_id.raw_value">
<field name="city" />, <field name="country_id" />
</li>
<li t-if="record.phone.raw_value or record.mobile.raw_value">
<a t-attf-href="tel:#{record.phone.raw_value}">
<field name="phone" />
</a>
<a t-attf-href="tel:#{record.mobile.raw_value}">
<field name="mobile" />
</a>
</li>
<li t-if="record.email.raw_value">
<a t-attf-href="mailto:#{record.email.raw_value}">
<field name="email" />
</a>
</li>
</ul>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<!-- Trees -->
<record model="ir.ui.view" id="view_tree">
<record model="ir.ui.view" id="golem_member_tree">
<field name="name">GOLEM Member Tree/List</field>
<field name="model">golem.member</field>
<field name="arch" type="xml">
@ -126,7 +202,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
</record>
<!-- Searches -->
<record id="view_filter" model="ir.ui.view">
<record id="golem_member_search" model="ir.ui.view">
<field name="name">GOLEM Member Filters</field>
<field name="model">golem.member</field>
<field name="arch" type="xml">
@ -155,7 +231,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
</record>
<!-- Graphs -->
<record model="ir.ui.view" id="view_graph_golem_member">
<record model="ir.ui.view" id="golem_member_graph">
<field name="name">GOLEM Member Graph</field>
<field name="model">golem.member</field>
<field name="arch" type="xml">
@ -166,29 +242,26 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
</record>
<!-- Actions -->
<act_window id="action"
<act_window id="golem_member_action"
name="GOLEM Members"
res_model="golem.member"
view_mode="kanban,tree,form,graph"
context="{'search_default_season_default': True}" />
<record model="ir.actions.act_window.view"
id="view_kanban">
<field name="view_mode">kanban</field>
<field name="view_id" ref="base.res_partner_kanban_view"/>
<field name="act_window_id" ref="action"/>
</record>
<act_window id="tags_action_list" name="GOLEM Members Tags"
<act_window id="res_partner_category_action" name="GOLEM Members Tags"
res_model="res.partner.category" view_mode="tree,form" />
<!-- Menu items -->
<menuitem id="golem_members_menu" name="GOLEM Members"
parent="membership.menu_membership" sequence="5"
action="action" groups="golem_base.group_golem_user" />
<menuitem id="golem_members_contacts" name="Contacts"
parent="membership.menu_membership" sequence="20"
action="contacts.action_contacts" groups="golem_base.group_golem_user" />
<menuitem id="golem_members_menu_tags" name="Member Tags"
parent="base.menu_marketing_config_association" sequence="10"
action="tags_action_list" groups="golem_base.group_golem_manager" />
<!-- Deactivate classic membership list -->
<record id="membership.menu_membership" model="ir.ui.menu">
<field name="active">0</field>
</record>
<!-- Add new menu items -->
<menuitem id="golem_members_menu" name="Members"
parent="membership.menu_association" sequence="5"
action="golem_member_action" groups="golem_base.group_golem_user" />
<menuitem id="res_partner_category_menu" name="Member Tags"
parent="membership.menu_marketing_config_association" sequence="10"
action="res_partner_category_action"
groups="golem_base.group_golem_manager" />
</data>
</openerp>
</odoo>

View File

@ -1,24 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2016 Fabien Bourgeois <fabien@yaltik.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<openerp>
<data noupdate="1">
<delete id="membership.menu_members" model="ir.ui.menu" />
</data>
</openerp>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2016 Fabien Bourgeois <fabien@yaltik.com>
Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
@ -17,19 +17,26 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<openerp>
<odoo>
<data>
<!-- Forms -->
<record model="ir.ui.view" id="member_add">
<record model="ir.ui.view" id="res_partner_form_inherit_golem_member">
<field name="name">Add information on linked member or member creation into main form</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form" />
<field name="arch" type="xml">
<div name="button_box" position="before">
<div colspan="2"
style="background-color: #ccc; color: #fff; font-size: 150%; font-weight: bold; padding: 0.5%; text-align: center; margin-bottom: 1%;">Contact form</div>
</div>
<h1 position="after">
<label for="member_id"
attrs="{'invisible': ['|', ('is_company', '=', True),
('member_id', '=', False)]}" />
<field name="member_id" widget="many2one" readonly="True"
<field name="member_id" invisible="1" />
<button name="view_member" string="Go to member form" type="object"
class="oe_link"
attrs="{'invisible': ['|', ('is_company', '=', True),
('member_id', '=', False)]}" />
<button type="object" name="create_golem_member"
@ -40,8 +47,25 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
</field>
</record>
<!-- Kanban -->
<record model="ir.ui.view" id="res_partner_kanban_inherit_golem_member">
<field name="name">Partner Kanban adaptations</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.res_partner_kanban_view" />
<field name="arch" type="xml">
<field name="type" position="after">
<field name="is_member" />
</field>
<xpath expr="//div[@class='oe_kanban_global_click o_res_partner_kanban']"
position="inside">
<hr style="clear: both; background-color: #ecffe2; height: 10%; margin: 2% 0 0 0;"
title="Is member" t-if="!!record.is_member.raw_value" />
</xpath>
</field>
</record>
<!-- Trees -->
<record model="ir.ui.view" id="member_tree">
<record model="ir.ui.view" id="res_partner_tree_inherit_golem_member">
<field name="name">Add member number to tree</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_tree" />
@ -53,7 +77,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
</record>
<!-- Searches -->
<record model="ir.ui.view" id="member_number_search">
<record model="ir.ui.view" id="res_partner_search_inherit_golem_member">
<field name="name">Partner GOLEM Member Number search</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_res_partner_filter" />
@ -65,4 +89,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
</record>
</data>
</openerp>
</odoo>

View File

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Michel Dessenne <michel@yaltik.com>
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from . import models

View File

@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Michel Dessenne <michel@yaltik.com>
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
{
'name': 'GOLEM members account',
'summary': 'GOLEM non-profit members account',
'version': '10.0.1.0.1',
'category': 'GOLEM',
'author': 'Fabien Bourgeois, Michel Dessenne',
'license': 'AGPL-3',
'application': False,
'installable': True,
'depends': ['account', 'golem_member'],
'data': ['views/golem_member_views.xml']
}

View File

@ -0,0 +1,51 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * golem_member_account
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-02-12 17:49+0000\n"
"PO-Revision-Date: 2018-02-12 17:49+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: golem_member_account
#: model:ir.ui.view,arch_db:golem_member_account.golem_member_form_inherit_golem_member_account
msgid "<span class=\"o_stat_text\">Invoiced</span>"
msgstr "<span class=\"o_stat_text\">Facturé</span>"
#. module: golem_member_account
#: selection:golem.member,last_payment_state:0
msgid "Checked"
msgstr "Validé"
#. module: golem_member_account
#: selection:golem.member,last_payment_state:0
msgid "Draft"
msgstr "Brouillon"
#. module: golem_member_account
#: model:ir.model,name:golem_member_account.model_golem_member
msgid "GOLEM Member"
msgstr "Adhérent"
#. module: golem_member_account
#: model:ir.model.fields,field_description:golem_member_account.field_golem_member_last_payment_state
msgid "Last payment state"
msgstr "État du dernier paiement"
#. module: golem_member_account
#: selection:golem.member,last_payment_state:0
msgid "Posted"
msgstr "Comptabilisé"
#. module: golem_member_account
#: selection:golem.member,last_payment_state:0
msgid "Reconciled"
msgstr "Lettré"

View File

@ -0,0 +1,52 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * golem_member_account
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-02-12 17:50+0000\n"
"PO-Revision-Date: 2018-02-12 17:50+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: golem_member_account
#: model:ir.ui.view,arch_db:golem_member_account.golem_member_form_inherit_golem_member_account
msgid "<span class=\"o_stat_text\">Invoiced</span>"
msgstr ""
#. module: golem_member_account
#: selection:golem.member,last_payment_state:0
msgid "Checked"
msgstr ""
#. module: golem_member_account
#: selection:golem.member,last_payment_state:0
msgid "Draft"
msgstr ""
#. module: golem_member_account
#: model:ir.model,name:golem_member_account.model_golem_member
msgid "GOLEM Member"
msgstr ""
#. module: golem_member_account
#: model:ir.model.fields,field_description:golem_member_account.field_golem_member_last_payment_state
msgid "Last payment state"
msgstr ""
#. module: golem_member_account
#: selection:golem.member,last_payment_state:0
msgid "Posted"
msgstr ""
#. module: golem_member_account
#: selection:golem.member,last_payment_state:0
msgid "Reconciled"
msgstr ""

View File

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Michel Dessenne <michel@yaltik.com>
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from . import golem_member

View File

@ -0,0 +1,65 @@
# -*- coding: utf-8 -*-
#
# Copyright 2018 Michel Dessenne <michel@yaltik.com>
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
""" GOLEM Member adaptations """
from odoo import models, fields, api
class GolemMember(models.Model):
""" GOLEM Member adaptations """
_inherit = 'golem.member'
last_payment_state = fields.Selection([('draft', 'Draft'),
('posted', 'Posted'),
('checked', 'Checked'),
('reconciled', 'Reconciled')],
compute='_compute_last_payment_state')
@api.multi
def open_partner_invoices(self):
""" Open member invoices """
self.ensure_one()
return {'type': 'ir.actions.act_window',
'name': 'Invoices',
'res_model': 'account.invoice',
'view_mode': 'tree,form',
'context': {'search_default_partner_id': self[0].partner_id.id,
'default_partner_id': self[0].partner_id.id}}
@api.depends('invoice_ids')
def _compute_last_payment_state(self):
""" Computes last invoice payment state : check last invoice, then more
recent payment and retrieve its state """
for member in self:
if member.invoice_ids:
invoice_ids = member.invoice_ids.filtered(lambda inv: inv.state in ('open', 'paid'))
invoice_ids = invoice_ids.sorted(key=lambda r: r.date_invoice, reverse=True)
payment_ids = invoice_ids[0].payment_ids if invoice_ids else False
if payment_ids:
payment_ids = payment_ids.sorted(lambda r: r.payment_date, reverse=True)
today = fields.Date.today()
last_payment_id = None
for payment in payment_ids:
if payment.payment_date < today:
last_payment_id = payment
break
if last_payment_id:
member.last_payment_state = last_payment_id.state
return
member.state_last_invoice = False

View File

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2018 Michel Dessenne <michel@yaltik.com>
Copyright 2018 Fabien Bourgeois <fabien@yaltik.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<odoo>
<data>
<!-- Forms -->
<record model="ir.ui.view" id="golem_member_form_inherit_golem_member_account">
<field name="name">GOLEM Member Form adaptations</field>
<field name="model">golem.member</field>
<field name="inherit_id" ref="golem_member.golem_member_form" />
<field name="arch" type="xml">
<div name="buttons" position="inside">
<button type="object" class="oe_stat_button" id="invoice_button"
icon="fa-pencil-square-o" name="open_partner_invoices"
context="{'default_partner_id': active_id}">
<div class="o_form_field o_stat_info">
<span class="o_stat_value">
<field name="total_invoiced" widget='monetary'
options="{'currency_field': 'currency_id'}"/>
</span>
<span class="o_stat_text">Invoiced</span>
</div>
</button>
</div>
<field name="comment" position="before">
<field name="last_payment_state" />
<field name="currency_id" invisible="1" />
</field>
</field>
</record>
</data>
</odoo>

View File

@ -15,4 +15,4 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from . import golem_member
from . import models

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Fabien Bourgeois <fabien@yaltik.com>
# Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@ -18,13 +18,12 @@
{
'name': 'GOLEM Member Family Quotient',
'summary': 'GOLEM Members Family Quotients',
'description': ''' Non-profit french MJC members family quotient ''',
'version': '0.1',
'version': '10.0.1.0.0',
'category': 'GOLEM',
'author': 'Fabien Bourgeois',
'license': 'AGPL-3',
'application': False,
'installable': True,
'depends': ['golem_member'],
'data': ['golem_member_view.xml']
'data': ['views/golem_member_views.xml']
}

View File

@ -4,10 +4,10 @@
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-07-07 10:35+0000\n"
"PO-Revision-Date: 2016-07-07 10:35+0000\n"
"POT-Creation-Date: 2017-05-01 20:55+0000\n"
"PO-Revision-Date: 2017-05-01 20:55+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@ -17,17 +17,17 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: golem_member_familyquotient
#: field:golem.member,caf_number:0
#: model:ir.model.fields,field_description:golem_member_familyquotient.field_golem_member_caf_number
msgid "CAF Number"
msgstr "Numéro CAF"
#. module: golem_member_familyquotient
#: field:golem.member,qf:0
#: model:ir.model.fields,field_description:golem_member_familyquotient.field_golem_member_qf
msgid "Family Quotient"
msgstr "Quotient familial"
#. module: golem_member_familyquotient
#: model:ir.model,name:golem_member_familyquotient.model_golem_member
msgid "GOLEM Member"
msgstr "GOLEM : adhérent"
msgstr "Adhérent"

View File

@ -4,10 +4,10 @@
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-07-07 10:34+0000\n"
"PO-Revision-Date: 2016-07-07 10:34+0000\n"
"POT-Creation-Date: 2017-05-01 20:54+0000\n"
"PO-Revision-Date: 2017-05-01 20:54+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@ -16,12 +16,12 @@ msgstr ""
"Plural-Forms: \n"
#. module: golem_member_familyquotient
#: field:golem.member,caf_number:0
#: model:ir.model.fields,field_description:golem_member_familyquotient.field_golem_member_caf_number
msgid "CAF Number"
msgstr ""
#. module: golem_member_familyquotient
#: field:golem.member,qf:0
#: model:ir.model.fields,field_description:golem_member_familyquotient.field_golem_member_qf
msgid "Family Quotient"
msgstr ""

View File

@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
# Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from . import golem_member

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Fabien Bourgeois <fabien@yaltik.com>
# Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@ -15,10 +15,12 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from openerp import models, fields
""" GOLEM Member Family Quotient """
from odoo import models, fields
class GolemMember(models.Model):
""" GOLEM Member adaptations """
_inherit = 'golem.member'
caf_number = fields.Char('CAF Number')

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2016 Fabien Bourgeois <fabien@yaltik.com>
Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
@ -17,13 +17,14 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<openerp>
<odoo>
<data>
<!-- Form -->
<record model="ir.ui.view" id="qf_form">
<record model="ir.ui.view" id="golem_member_form_inherit_familyquotient">
<field name="name">Add QF to main form</field>
<field name="model">golem.member</field>
<field name="inherit_id" ref="golem_member.view_form" />
<field name="inherit_id" ref="golem_member.golem_member_form" />
<field name="arch" type="xml">
<field name="number" position="after">
<field name="caf_number" />
@ -33,10 +34,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
</record>
<!-- Searches -->
<record model="ir.ui.view" id="skills_search">
<record model="ir.ui.view" id="golem_member_search_inherit_familyquotient">
<field name="name">Add Skills Search and Filter</field>
<field name="model">golem.member</field>
<field name="inherit_id" ref="golem_member.view_filter" />
<field name="inherit_id" ref="golem_member.golem_member_search" />
<field name="arch" type="xml">
<field name="email" position="after">
<field name="caf_number" />
@ -45,4 +46,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
</record>
</data>
</openerp>
</odoo>

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Fabien Bourgeois <fabien@yaltik.com>
# Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@ -15,4 +15,4 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from . import golem_member
from . import models

Some files were not shown because too many files have changed in this diff Show More