Merge lp:~synerpgy/openobject-addons/hr_payroll_french_localization into lp:openobject-addons

Proposed by YannickB (YOLO consulting)
Status: Merged
Merged at revision: 6797
Proposed branch: lp:~synerpgy/openobject-addons/hr_payroll_french_localization
Merge into: lp:openobject-addons
Diff against target: 2122 lines (+2055/-1)
11 files modified
l10n_fr/__openerp__.py (+1/-0)
l10n_fr/l10n_fr.py (+14/-1)
l10n_fr/l10n_fr_view.xml (+22/-0)
l10n_fr_hr_payroll/__init__.py (+24/-0)
l10n_fr_hr_payroll/__openerp__.py (+51/-0)
l10n_fr_hr_payroll/l10n_fr_hr_payroll.py (+57/-0)
l10n_fr_hr_payroll/l10n_fr_hr_payroll_data.xml (+1264/-0)
l10n_fr_hr_payroll/l10n_fr_hr_payroll_view.xml (+70/-0)
l10n_fr_hr_payroll/report/__init__.py (+27/-0)
l10n_fr_hr_payroll/report/fiche_paye.py (+76/-0)
l10n_fr_hr_payroll/report/fiche_paye.rml (+449/-0)
To merge this branch: bzr merge lp:~synerpgy/openobject-addons/hr_payroll_french_localization
Reviewer Review Type Date Requested Status
YannickB (YOLO consulting) (community) Needs Resubmitting
qdp (OpenERP) Needs Fixing
Fabien (Open ERP) Pending
Review via email: mp+83908@code.launchpad.net

This proposal supersedes a proposal from 2011-11-17.

Description of the change

Hi everyone,

I think the time has come to try a first merge. I still want to add holidays management soon but before I think a first merge is a good idea for seeing if all this could be accepted.

I tried as much as possible to keep my change in l10n_fr_hr_payroll but I also needed to make some change in hr_payroll. Trust me, these changes was necessary and I hope you'll accept them.

Well, just tell what do you think.

Yannick.

To post a comment you must log in.
Revision history for this message
Fabien (Open ERP) (fp-tinyerp) wrote : Posted in a previous version of this proposal

IMHO, This can be implemented by a simple rule, I don't think we need to develop specific code for this. The current rule engine is able to handle this.

The employer contribution should just be a rule that is not part of the deductions.

If it's not clear, can you describe what you intend to do exactly ?

review: Disapprove
Revision history for this message
YannickB (YOLO consulting) (yannick-buron) wrote : Posted in a previous version of this proposal

Hi Fabien,

I knew you would say something like that. You proclaim on twitter some weeks ago that hr_payroll could handle any localization and I was very optimistic when I finally found the time to try it.

For me, the best news was the release of l10n_be_hr_payroll. I think we really needed an example of what it was possible to do with hr_payroll and l10n_be_hr_payroll provide it perfectly.

Thanks to that, I now perfectly understand the power of the Python code field. You did a really nice job by allowing to use contract, payslip, worked_days, input and categories objects directly into the computation of the amount. Thanks to that, I am quite confident in the fact I can even configure the extremely complicated payroll we use in France.
One example : 3% employee contribution for basic 0-2000€n then 7,7% for the 2000€+ part of the salary, I am sure I could manage it with the powerful basic management you implement in hr_payroll.

But still, something is missing. For one contribution you have generally two amount, employee deduction and employer deduction. You suggest to make two lines in the payslip but I say that in my payslip report I need to show these two amount in only one line.
For this we need a link between the employee and the employer deductions. Here with the code I propose we can make it very simply, by making good use of the payroll framework you developed.

Let me also remark that you didn't declare the employer deductions in l10n_be_hr_payroll, and yet some Google research show me that you have theses in Belgium.

If after that you're still confident with your module, just respond to this question :

Let's assume I am currently developing the module l10n_fr_hr_payroll. What I want to do in this module is just :
       -Declare the contributions of course, and the rest of the configuration needed.
       -Create a new payslip report (sorry the actually is terrible, but no problem I think this report is the work of the localization)
       -Eventually create some gross total / net total function field in the payslip for using them in the report. Since I plan to hard-link them to the corresponding rule, I prefer create them in the localization module.

Let's also assume the goal of all this is to create EXACTLY this report : http://www.logiciel-gestion.org/images/ciel-paye-tepa-4-4-bulletin.jpg .

How the hell I can do to display the employer contribution like in this report with the actual module? Also I need that the user can easily modify the employer contribution from the payslip, and the most ergonomic way for that is to display the field in the same line that the employee contribution.

If you can find a way, and also a truly ergonomic way for the users to implement my need, then I'll just do it. If not, please consider implementing this feature which is probably the only last thing so we can managing payroll in OpenERP.

Of course I can also develop this feature in the localization module, but I think the employer contribution management is a general need and so I propose to merge it.

Regards,
Yannick.

review: Needs Resubmitting
Revision history for this message
Fabien (Open ERP) (fp-tinyerp) wrote : Posted in a previous version of this proposal
Download full text (3.2 KiB)

Hello Yannick,

Having a first POC of a l10n_fr_hr_payroll would be very good. We need localizations that can serve as an example for others countries. It also allows us to validate (or not) the payroll engine we developed.

> But still, something is missing. For one contribution you have generally two amount, employee
> deduction and employer deduction. You suggest to make two lines in the payslip but I say that in
> my payslip report I need to show these two amount in only one line.
> For this we need a link between the employee and the employer deductions. Here with the code I
> propose we can make it very simply, by making good use of the payroll framework you developed.

Why not using the hyerarchy in the rules for this ?

Have a look at the meal voucher rule in the l10n_be_hr_payroll, this may solve your issue. For a meal voucher of 6.00 EUR in Belgium, there is 1.09 paid by the employee (deduced from it's gross salary) and 4.81 paid by the company (to Accor for example). To manage this we do:
  - one rule (Meal Voucher)
       - Children 1: company contribution
       - Children 2: employee contribution

If the report requires to print both rule in one line, I think it's better to implement this at the report level, rather than changing.

Sorry if I look strict on this, but IMHO if something can be computed by the current payroll engine, it's better not to develop specific rules for specific cases. Payrolls are so complex that we could potentially add lots of fields and logic if we don't rely on a strong computation engine.

> Let me also remark that you didn't declare the employer deductions in l10n_be_hr_payroll, and yet
> some Google research show me that you have theses in Belgium.

What's the french translation of employer deduction ? (Charges patronales ? sociales?)

> Let's assume I am currently developing the module l10n_fr_hr_payroll.

Yes, that would be great.

> What I want to do in this module is just :
> -Declare the contributions of course, and the rest of the configuration needed.

> -Create a new payslip report

If you create a better, and generic, report I think it's better to merge it directly in the hr_payroll module in replacement to the Payslip Details report. All countries will need it. The example you took from ciel seems to be generic, we just need to identify some salary rule categories code that have a special meaning, like NET.

The whole structure in the columns of your document seems generic (salaire de base, salaire brut, total retenues, ...). If I am not wrong, the left column Mt. Sal contains all rules having "Appears on Payslip" checked whereas the right column Mt.PAT is all not having 'Appears on payslip" checked. Is some rule belong to the same parent, they should be on the same line.
    --> this makes me wonder if "Appears on Payslip" is the right label?

> Of course I can also develop this feature in the localization module, but I think the employer
> contribution management is a general need and so I propose to merge it.

No, we need a payroll engine that implements most scenario without having to develop (too much) in country specific modules. I prefer that we try improving the current engine t...

Read more...

Revision history for this message
Fabien (Open ERP) (fp-tinyerp) wrote : Posted in a previous version of this proposal

IT may look strange to use "Appears on PAyslip" to differenciate between Mt. Pat / Mt. Sal but it was or intention with this field as in Belgium, Mt. Pat stuff do not appear on the payslip.

Revision history for this message
YannickB (YOLO consulting) (yannick-buron) wrote : Posted in a previous version of this proposal
Download full text (4.1 KiB)

Thanks a lot for these explanations. I think I start to be agree with you.

> Why not using the hierarchy in the rules for this ?

> Have a look at the meal voucher rule in the l10n_be_hr_payroll, this may solve your issue. For a
> meal voucher of 6.00 EUR in Belgium, there is 1.09 paid by the employee (deduced from it's gross
> salary) and 4.81 paid by the company (to Accor for example). To manage this we do:
> - one rule (Meal Voucher)
> - Children 1: company contribution
> - Children 2: employee contribution

I suppose this happen but I feel a bit ashamed here... How I could missed that, you're totally right the rules hierarchy could totally handle the link. I still don't know if it'll be ergonomic enough for the users who will modify the employer contributions in the payslip but at least it worth a try.

> If the report requires to print both rule in one line, I think it's better to implement this at
> the report level, rather than changing.

> Sorry if I look strict on this, but IMHO if something can be computed by the current payroll
> engine, it's better not to develop specific rules for specific cases. Payrolls are so complex
> that we could potentially add lots of fields and logic if we don't rely on a strong computation
> engine.

Don't worry, I think this is the good way to do it, no change unless necessary. Even me was careful with the merge here to not make big changes.

> What's the french translation of employer deduction ? (Charges patronales ? sociales?)

The term is "Cotisations Patronales" but "Charges Patronales" is ok too. We have also "Cotisations Salariales" for the employee contribution.
The translation of theses terms is difficult, some research make me think that "employer contribution" and "employee contribution" is a good translation, rather than deduction, but well I'm not a linguist.

> If you create a better, and generic, report I think it's better to merge it directly in the
> hr_payroll module in replacement to the Payslip Details report. All countries will need it. The
> example you took from ciel seems to be generic, we just need to identify some salary rule
> categories code that have a special meaning, like NET.

Good news we are agree on this point. You can account on me to do it, but now I will before begin the l10n_fr_hr_payroll module for having some data test asap.

Just one point : I'm still unsure I'll not have to redefine the report in l10n_fr_hr_payroll because some France specific data appear (Like URSSAF, SIRET, "Plafond de sécurité sociale" etc...)

> The whole structure in the columns of your document seems generic (salaire de base, salaire brut,
> total retenues, ...). If I am not wrong, the left column Mt. Sal contains all rules having
> "Appears on Payslip" checked whereas the right column Mt.PAT is all not having 'Appears on
> payslip" checked. Is some rule belong to the same parent, they should be on the same line.
> --> this makes me wonder if "Appears on Payslip" is the right label?

Don't worry, I think the "Appears on Payslip is good and don't need to be change. We'll probably need that some lines which are not employer contribution doesn't appear ...

Read more...

review: Disapprove
Revision history for this message
Fabien (Open ERP) (fp-tinyerp) wrote : Posted in a previous version of this proposal

> If you create a better, and generic, report I think it's better to merge it directly in the
> hr_payroll module in replacement to the Payslip Details report. All countries will need it. The
> example you took from ciel seems to be generic, we just need to identify some salary rule
> categories code that have a special meaning, like NET.

> Just one point : I'm still unsure I'll not have to redefine the report in l10n_fr_hr_payroll because
> some France specific data appear (Like URSSAF, SIRET, "Plafond de sécurité sociale" etc...)

Yes, you may need this. But can you work in two steps: all generic stuff for hr_payroll, then a slight change on this report for l10n_fr specific fields.

> I suppose this happen but I feel a bit ashamed here... How I could missed that, you're totally right
> the rules hierarchy could totally handle the link. I still don't know if it'll be ergonomic
> enough for the users who will modify the employer contributions in the payslip but at least it
> worth a try.

Why would you change the employer contribution manually ? Isn't it computed by legal rules ?

If you need to change it from time to time, you can change directly in the tab "Salary Computation". But if you need to change the value at each payslip, the best is to add an "Input Data" that is defined and used by this rule (you can say if the input data is provided, I use it, otherwise not)

   -> you can test the 1% sales commission rule for this.

> I think a check-box "Employer contribution?" will be useful for identifying the child line which
> will be used as employer contribution.

Yes, seems good.

Revision history for this message
YannickB (YOLO consulting) (yannick-buron) wrote : Posted in a previous version of this proposal

> Yes, you may need this. But can you work in two steps: all generic stuff for hr_payroll, then a slight change on this report for l10n_fr specific fields.

I though there was no inheritance in the report feature, and I needed to completely redefine it if I want to make some changes?

> Why would you change the employer contribution manually ? Isn't it computed by legal rules ?

> If you need to change it from time to time, you can change directly in the tab "Salary
> Computation". But if you need to change the value at each payslip, the best is to add an "Input
> Data" that is defined and used by this rule (you can say if the input data is provided, I use it,
> otherwise not)

> -> you can test the 1% sales commission rule for this.

My point was I wanted the users can easily review the payslip created, without having to dig too much for finding the employer contributions. Again I'm not sure if the current hr_payroll is ergonomic enough, we'll see.

The work move forward, I hope I will make a first publication on my branch during the weekend (probably without the report through, I expect some work about it).

Revision history for this message
qdp (OpenERP) (qdp) wrote : Posted in a previous version of this proposal

Hello Yanick,

it's great to see you involved on the testing and enhancement of this new feature! If even more cool to see that you're confident and optimistic about it ^^

One comment about what you plan to do:
       -A checkbox "Employer contribution" in child rules for identifying the employer contribution rule.
=> i don't think it would be really generic having this because, i guess that, in some countries/cases we could have several rules computing the employer part (or the employer part would be divided into several contribution registers). So i feel like this checkbox would be a limitation more than a real improvement. Maybe this have to stay at the localization level...

       -Some many2one field "Basic" "Gross" "Net" in the configuration somewhere (company configuration?) which lead to Hr Salary Category object. Then I should be able to call the value of theses category on the report without make hard-link in the report itself.
=> mmh would it be a problem to search for the category having code=='BASIC'? Yes, it's a kind of hardcoded link but in the other hand, if someone change the code or delete this category the whole payroll engine will probably get down! And if it's on a function, localization modules can also override the function if they want to use something else.

       -Creation of a better payslip report. Although I still think I'll need to redefine it in l10n_fr_hr_payroll
=> this would be indeed a real nice improvement

Looking forward to see your proposal,
Quentin

Revision history for this message
Fabien (Open ERP) (fp-tinyerp) wrote : Posted in a previous version of this proposal

> -A checkbox "Employer contribution" in child rules for identifying the employer contribution rule.

Why not adding a "Report Section" selection field ?
It could be used by others reports later.

> -Some many2one field "Basic" "Gross" "Net" in the configuration somewhere
I agree with QDP on this, using keywords is simple.

Also having the computer NET field in the payslip would be interesting for the useability, may be a function field that search for the NET rule.

Revision history for this message
YannickB (YOLO consulting) (yannick-buron) wrote : Posted in a previous version of this proposal

Hi everyone, I have good news : I just made the first commit of l10n_fr_hr_payroll, you can find it on my branch.
A large part of the work is already done, all the rules are created (~60 rules) and I can already say that hr_payroll is really able to support french payroll.

Now there is still a lot of work :
    -Create the report
    -Make the accounting configuration, so the payslip can generate the good account move
    -The actual amounts are still false, but I want to work on the report before correcting it.
I only worked on the contributions, the really important point here, other rules like deductions or allowances will be done after a first release.

Some comments :

-We really need that the basic and the percentage are visible on the payslip lines. It is mandatory here so that hr manager can see right away if an amount is wrong, and I also need theses fields in the report. I'll modify hr_payroll for that when I'll develop the report.

-Some fields like SIRET or URSSAF number should be declare in l10n_fr module, I'll also modify it for the report.

-If you say to me that hr_payroll already use keywords, then I guess you're right. Let's go for hardlinking.

-About the "Employer contribution" checkbox... well I really don't know. The only things I'm pretty sure is that employer contributions appear everywhere in the world, but I'll let you the choice to use it on hr_payroll or not.
Until that, I'll create it on the localization module.

Stay tune, the report will be done as soon as possible.

Revision history for this message
Fabien (Open ERP) (fp-tinyerp) wrote : Posted in a previous version of this proposal

Hello,

Seems good, a few comments

> About the "Employer contribution" checkbox... well I really don't know.

Can you add, in hr_payroll module, a field called "Report Section" which is a selection box ['employee contribution', 'employer contribution', False]. You can use this field for improving the report.

> The only things I'm pretty sure is that employer contributions appear everywhere in the world

Yes, probably. But, for example, in Belgium in does not appear on the payslip because the employer contribution, called "Charges Patronales", does not appear on the payslip because it's directly paid by the company to the ONSS "Office National de la Sécurité Sociale" --> so for belgians, we manage this with a contribtion register "ONSS" and the checkbox "does not appear in the payslip".

> -Some fields like SIRET or URSSAF number should be declare in l10n_fr module

Yes, of course.

> Now there is still a lot of work: Make the accounting configuration, so the payslip can generate
> the good account move

This is the reason why we splitted hr_payroll and hr_payroll_account. You can do hr_payroll without implementing the accounting yet. In this case, your module must depend on hr_payroll and not hr_payroll_account.

Revision history for this message
YannickB (YOLO consulting) (yannick-buron) wrote : Posted in a previous version of this proposal

Well I'm afraid the work on the report take more time than planned... My skills is more on the functional part and I can't achieve to make the report working.
If you want to, maybe a little help could be useful. I already made a sxw (you can find it on l10n_fr_hr_payroll/report/fiche_paye_save.sxw), we just have to make it working.

If I have no other choice, I could certainly ask to my old developer to help me but not before the weekend.

As I can't anything else, I'll return working on the contributions declarations where I am way more efficient.

I also add a "type" field on hr.payroll.rule, which should work as your "Report Section"suggested. It can have as value : "normal", "employer" and "total"
     -A "normal" rule will work just like now. If it has a child rule with "employer" type, this child rule will be use for the employer part on the line of the report .
     -A "employer" rule, without being a child of an another rule, will only display his rate and amount field on the employer part on the report. The employee part will be leaved empty in that case.
     -A "Total" rule will be use in case we need to display a total line on the report. This kind of line should not have any impact on the total computed for the category, not like now. This is important as if I currently use total line the total computed for the category are all wrong.

Revision history for this message
YannickB (YOLO consulting) (yannick-buron) wrote : Posted in a previous version of this proposal

Hi everyone,

After some time, I finally manage to make the report working as I want.

Now I still have to :
   -Make some corrections, having sure that all result computed are correct.
   -Implement working day support, as l10n_be_hr_payroll.

Once this will be done, I think I'll try a first merge request.

Revision history for this message
qdp (OpenERP) (qdp) wrote :

Hi again Yannick,

i just had a quick look on your proposal (only seeing the diff, i didn't install yet) and i already and few things to say/ask :-)

1) i may have missed it: why did you remove the domain [(appears_on_payslip,=,True)] in the modified one2many field line_ids? Although i don't remember the reason why it's a one2many_mod and not a usual domain (but there must be one), this was intended in order to show on the form view of the payslip only the lines that will be printed. Others can still be found using the shortcut on the right column (below the reports), though it's less useful as it contains only data used for computation.

2) about your new field type: well, i wonder if what you want to say for the type=total is not the same as browsing the object 'categories'. For example if you use categories.ALLOWANCE in a rule, it will use the current sum of all the rules belonging to the category ALLOWANCE. Therefore, i don't think we need the type=total. Do we?

2bis) for the 'normal' and 'employer' choices, can't we say that if the rule has a contribution register then it's the employer part otherwise it's the employee part? Just a question..

2ter) i think it would be a good idea to do as Fabien proposed above: a report_section field where any localization would be able to add its own choices. This would be a doing the same as your current field type i guess (as far as i see, it's only using in the french payroll, which is good). I will enhance the code in hr_payroll in that way.

3) so far, it seems ok for me to return also the base and the rate and to put those informations in the payslip lines... as so i do for using a different accuracy for payroll and payroll rate. This doesn't mean that it's correct, but i agree on the principle. I need to test your merge proposal first.

4) it would have been better if the code inside l10n_fr_payroll would have been in english too (at least the field names and labels). I know that the french is the only national language in France but developping in English provides 2 benefits:
- it's more accessible to other developers that want to reuse or simply see your module as example (as the second module for the payroll, i guess it would be very useful for other developers)
- our indian teams can understand the module and do basic support on it.

5) Finally, your merge proposal is totally going in the good direction: only fields definition and xml in the french payroll module and (very) few proposals of modification in the generic engine. At a first glance it seems correctly designed! Congratulations ^^

I will test and review your proposal and your french payroll module as far as possible, i hope tomorrow.

Thanks for the contribution,
Quentin

review: Needs Information
Revision history for this message
qdp (OpenERP) (qdp) wrote :

hello Yannick,

i made few investigations, and i already integrated some of the modifications you were proposing in the generic payroll engine. Please have a look at the revision 6267 of the trunk addons: it's not exactly what you proposed but i guess it will do the trick.[1] But it also involves that your module have to be changed accordingly (for example, in your report you should probably use the total field instead of the amount in several places)

I already made my comments for the hr_payroll module, so here are my review of the
l10n_fr_hr_payroll module (and as i still agree with everything i wrote above, let me continue my numbering from there):

6) you shouldn't modify directly the base hr.payroll.structure. It's a bit dangerous because if another localization payroll module do the same, then your 2 modules won't be compatible. Could you instead create a new child of the one defined in hr_payroll?

7) It seems that your base structure contains quite a lot of rules. Is it normal or shouldn't some of them be grouped as children of a common parent?

8) the new fields you're adding should have some help tooltips (in english ^^). Maybe it's because i'm neither HR manager nor french but i don't have a clue about what they are for :-)

9) your rml header could be improved (filename, title, author):
+<document filename="test.pdf">
+ <template pageSize="(595.0,842.0)" title="Test" author="Martin Simon" allowSplitting="20">

10) the __openerp__.py file of your module should contain the state of Art of what it includes. Is it the whole french payroll? is it only for employees or also for workers (in belgium the 2 are distinct concepts)?

Well that's it so far. Let me put your merge proposal back to 'in progress' in order to remove it from our TODO list of merge proposal to process. Once you've adapted your code to my latest change of hr_payroll and answered/discussed the 10 above points, please set again its status back to 'needs review'.

Thanks,
Quentin

[1]: in short: the compute_rule function now returns the base amount, the qty and the rate separately. And it doesn't make any computation itself. The total (always computed as base amount * qty * rate) is now computed in a function field for each line (before it was a bit filthy as the amount was sometimes already computed as the total..).

review: Needs Fixing
Revision history for this message
YannickB (YOLO consulting) (yannick-buron) wrote :
Download full text (3.5 KiB)

Hi Quentin,

Thanks for taking time to review this module. Here's my answers :

1) This is my vision, but I do think that all lines must be displayed on the OpenERP interface, though only some on the report.
Why?
The OpenERP interface will be view only by the hr manager, while the report is for the employee. The first need all possible informations, the second only the necessary.
Example :
There is in my module some lines just for the computing, like "Plafond de securite sociale", "Plafond A" etc... This shouldn't be printed in the report, but these informations will be very useful for the hr manager eventually searching an error. A shortcut isn't enough and counter-ergonomic.
I honestly see no reason why not display theses informations to hr managers while they can be valuable.
On the other hand, I approve the existence of "appear_on_payslip" for the report.

2) For this one, I feel the month since my merge request :/, this is so much difficult to remember.
About "total", I think I finally didn't made so much use of him cause categories themselves wasn't so reliable and I had to find a workaround, so let's forget the "total" value for now.

2bis)No, contribution register will be useful for employee contributions and also employer contributions, so this not a way to recognize them.
What I exactly need is a way to know is this rule is employee/normal or employer. Since we forget the total value for now, maybe we can just make this field a checkbox. I'm open to suggestion, as long as I have a reliable way to identify an employer rule.

2ter) Well I'm prepared to do so, but I think that employee/employer differentiation is a need in many several country and I really think that it should be at core.

3) Really good we are agree, at least on the principle. Without these fields on the interface, I'm afraid the payslip lines would be unreadable for the hr manager, at least in France with our so-many percentage-based contributions.

4) It was a very VERY difficult decision for me. Of course I wanted to make it in english at first, but there are some terms that just make sense only in french.
For example "Securité sociale" make sense only in french, or "Prevoyance", or "Convention collective". And I speak here only for the added field (like you), of course it would be suicidal for the rules. I'm afraid if we try to translate them, even french people will not understand the code.
I can change my mind, you oppose very good arguments, I'd like to have your opinion.

5) Thank you very much, I'm quite proud of me since this is my first real contribution. In fact, since I'm not really a developer but a functional, I try to make as many change as possible which at the end is a good thing.

6) You're right, I didn't had in mind the fact that another localization would be installed. I'll review my code.

7) This is normal cause of the lot of mandatory contributions in France, but with your comment in 6 I should move them in an intermediary structure.

8) This is exactly what I mean by the translation problem. You have to be HR Manager AND French for understanding them. Tooltip will not help, you know or you don't know the term :/.
If you insist, I can add too...

Read more...

Revision history for this message
YannickB (YOLO consulting) (yannick-buron) wrote :

Ok! I finally had time to finish it.

There is no more change in official module, only in l10n_fr and l10n_fr_hr_payroll. I let you review it but I think we are almost ready to merge it.

review: Needs Resubmitting
Revision history for this message
qdp (OpenERP) (qdp) wrote :

it's merged :-)

thanks for the fantastic work, Yannick!

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'l10n_fr/__openerp__.py'
2--- l10n_fr/__openerp__.py 2012-01-31 13:36:57 +0000
3+++ l10n_fr/__openerp__.py 2012-04-21 16:28:20 +0000
4@@ -42,6 +42,7 @@
5 "update_xml" : [
6 "fr_report_demo.xml",
7 "plan_comptable_general_demo.xml",
8+ "l10n_fr_view.xml",
9 "l10n_fr_wizard.xml",
10 "fr_pcg_taxes_demo.xml",
11 "fr_tax_demo.xml",
12
13=== modified file 'l10n_fr/l10n_fr.py'
14--- l10n_fr/l10n_fr.py 2011-01-14 00:11:01 +0000
15+++ l10n_fr/l10n_fr.py 2012-04-21 16:28:20 +0000
16@@ -51,4 +51,17 @@
17
18 l10n_fr_line()
19
20-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
21\ No newline at end of file
22+class res_company(osv.osv):
23+ _inherit = 'res.company'
24+
25+ _columns = {
26+ 'siret': fields.char('SIRET', size=64),
27+ 'ape': fields.char('APE', size=64),
28+ }
29+
30+res_company()
31+
32+
33+
34+
35+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
36
37=== added file 'l10n_fr/l10n_fr_view.xml'
38--- l10n_fr/l10n_fr_view.xml 1970-01-01 00:00:00 +0000
39+++ l10n_fr/l10n_fr_view.xml 2012-04-21 16:28:20 +0000
40@@ -0,0 +1,22 @@
41+<?xml version="1.0" encoding="utf-8"?>
42+<openerp>
43+ <data>
44+
45+ <record id="res_company_form_l10n_fr" model="ir.ui.view">
46+ <field name="name">res.company.form.l10n.fr</field>
47+ <field name="model">res.company</field>
48+ <field name="type">form</field>
49+ <field name="priority">20</field>
50+ <field name="inherit_id" ref="base.view_company_form"/>
51+ <field name="arch" type="xml">
52+ <data>
53+ <xpath expr="/form/notebook/page[@string='General Information']/field[@name='company_registry']" position="after">
54+ <field name="siret"/>
55+ <field name="ape"/>
56+ </xpath>
57+ </data>
58+ </field>
59+ </record>
60+
61+ </data>
62+</openerp>
63
64=== added directory 'l10n_fr_hr_payroll'
65=== added file 'l10n_fr_hr_payroll/__init__.py'
66--- l10n_fr_hr_payroll/__init__.py 1970-01-01 00:00:00 +0000
67+++ l10n_fr_hr_payroll/__init__.py 2012-04-21 16:28:20 +0000
68@@ -0,0 +1,24 @@
69+# -*- encoding: utf-8 -*-
70+##############################################################################
71+#
72+# OpenERP, Open Source Management Solution
73+# Copyright (C) 2011 OpenERP SA (<http://openerp.com>).
74+#
75+# This program is free software: you can redistribute it and/or modify
76+# it under the terms of the GNU Affero General Public License as
77+# published by the Free Software Foundation, either version 3 of the
78+# License, or (at your option) any later version.
79+#
80+# This program is distributed in the hope that it will be useful,
81+# but WITHOUT ANY WARRANTY; without even the implied warranty of
82+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
83+# GNU Affero General Public License for more details.
84+#
85+# You should have received a copy of the GNU Affero General Public License
86+# along with this program. If not, see <http://www.gnu.org/licenses/>
87+#
88+##############################################################################
89+import l10n_fr_hr_payroll
90+import report
91+
92+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
93
94=== added file 'l10n_fr_hr_payroll/__openerp__.py'
95--- l10n_fr_hr_payroll/__openerp__.py 1970-01-01 00:00:00 +0000
96+++ l10n_fr_hr_payroll/__openerp__.py 2012-04-21 16:28:20 +0000
97@@ -0,0 +1,51 @@
98+# -*- encoding: utf-8 -*-
99+##############################################################################
100+#
101+# OpenERP, Open Source Management Solution
102+# Copyright (C) 2011 OpenERP SA (<http://openerp.com>).
103+#
104+# This program is free software: you can redistribute it and/or modify
105+# it under the terms of the GNU Affero General Public License as
106+# published by the Free Software Foundation, either version 3 of the
107+# License, or (at your option) any later version.
108+#
109+# This program is distributed in the hope that it will be useful,
110+# but WITHOUT ANY WARRANTY; without even the implied warranty of
111+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
112+# GNU Affero General Public License for more details.
113+#
114+# You should have received a copy of the GNU Affero General Public License
115+# along with this program. If not, see <http://www.gnu.org/licenses/>.
116+#
117+##############################################################################
118+{
119+ 'name': 'French Payroll',
120+ 'category': 'Localization/Payroll',
121+ 'author': 'Yannick Buron (SYNERPGY)',
122+ 'depends': ['hr_payroll', 'hr_payroll_account', 'l10n_fr'],
123+ 'version': '1.0',
124+ 'description': """
125+French Payroll Rules
126+=======================
127+
128+ -Configuration of hr_payroll for french localization
129+ -All main contributions rules for french payslip, for 'cadre' and 'non-cadre'
130+ -New payslip report
131+
132+ TODO :
133+ -Integration with holidays module for deduction and allowance
134+ -Integration with hr_payroll_account for the automatic account_move_line creation from the payslip
135+ -Continue to integrate the contribution. Only the main contribution are currently implemented
136+ -Remake the report under webkit
137+ -The payslip.line with appears_in_payslip = False should appears in the payslip interface, but not in the payslip report
138+ """,
139+
140+ 'active': False,
141+ 'update_xml':[
142+ 'l10n_fr_hr_payroll_view.xml',
143+ 'l10n_fr_hr_payroll_data.xml',
144+ ],
145+ 'installable': True
146+}
147+
148+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
149
150=== added file 'l10n_fr_hr_payroll/l10n_fr_hr_payroll.py'
151--- l10n_fr_hr_payroll/l10n_fr_hr_payroll.py 1970-01-01 00:00:00 +0000
152+++ l10n_fr_hr_payroll/l10n_fr_hr_payroll.py 2012-04-21 16:28:20 +0000
153@@ -0,0 +1,57 @@
154+#-*- coding:utf-8 -*-
155+##############################################################################
156+#
157+# OpenERP, Open Source Management Solution
158+# Copyright (C) 2011 OpenERP SA (<http://openerp.com>). All Rights Reserved
159+#
160+# This program is free software: you can redistribute it and/or modify
161+# it under the terms of the GNU Affero General Public License as published by
162+# the Free Software Foundation, either version 3 of the License, or
163+# (at your option) any later version.
164+#
165+# This program is distributed in the hope that it will be useful,
166+# but WITHOUT ANY WARRANTY; without even the implied warranty of
167+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
168+# GNU Affero General Public License for more details.
169+#
170+# You should have received a copy of the GNU Affero General Public License
171+# along with this program. If not, see <http://www.gnu.org/licenses/>.
172+#
173+##############################################################################
174+
175+from osv import fields, osv
176+import decimal_precision as dp
177+
178+
179+class res_company(osv.osv):
180+ _inherit = 'res.company'
181+
182+ _columns = {
183+ 'plafond_secu': fields.float('Plafond de la Securite Sociale', digits_compute=dp.get_precision('Payroll')),
184+ 'nombre_employes': fields.integer('Nombre d\'employes'),
185+ 'cotisation_prevoyance': fields.float('Cotisation Patronale Prevoyance', digits_compute=dp.get_precision('Payroll')),
186+ 'org_ss': fields.char('Organisme de securite sociale', size=64),
187+ 'conv_coll': fields.char('Convention collective', size=64),
188+ }
189+
190+res_company()
191+
192+class hr_contract(osv.osv):
193+ _inherit = 'hr.contract'
194+
195+ _columns = {
196+ 'qualif': fields.char('Qualification', size=64),
197+ 'niveau': fields.char('Niveau', size=64),
198+ 'coef': fields.char('Coefficient', size=64),
199+ }
200+hr_contract()
201+
202+class hr_payslip(osv.osv):
203+ _inherit = 'hr.payslip'
204+
205+ _columns = {
206+ 'payment_mode': fields.char('Mode de paiement', size=64),
207+ }
208+hr_payslip()
209+
210+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
211
212=== added file 'l10n_fr_hr_payroll/l10n_fr_hr_payroll_data.xml'
213--- l10n_fr_hr_payroll/l10n_fr_hr_payroll_data.xml 1970-01-01 00:00:00 +0000
214+++ l10n_fr_hr_payroll/l10n_fr_hr_payroll_data.xml 2012-04-21 16:28:20 +0000
215@@ -0,0 +1,1264 @@
216+<?xml version="1.0" encoding="utf-8"?>
217+<openerp>
218+ <data>
219+
220+<!-- Concernant la codification des contributions, si quelqu'un sait où trouver une codification officielle on migrera dessus. En attendant les code des cotisations sont mis au hasard -->
221+
222+
223+
224+<!-- Holidays Category -->
225+
226+ <record model="hr.holidays.status" id="holiday_status_heures_sup">
227+ <field name="name">Heures Supplementaires</field>
228+ <field name="limit">True</field>
229+ <field name="color_name">lightblue</field>
230+ </record>
231+
232+
233+
234+
235+
236+<!-- Rule Category -->
237+
238+ <record id="base.main_company" model="res.company">
239+ <field name="plafond_secu">2946</field>
240+ </record>
241+
242+
243+ <record id="TOTAL" model="hr.salary.rule.category">
244+ <field name="name">Cout total pour l'entreprise</field>
245+ <field name="code">TOTAL</field>
246+ <field name="parent_id" eval="False"/>
247+ </record>
248+
249+ <record id="hr_payroll.NET" model="hr.salary.rule.category">
250+ <field name="name">Salaire Net</field>
251+ <field name="code">NET</field>
252+ <field name="parent_id" eval="False"/>
253+ </record>
254+
255+ <record id="hr_payroll.GROSS" model="hr.salary.rule.category">
256+ <field name="name">Salaire Brut</field>
257+ <field name="code">BRUT</field>
258+ <field name="parent_id" eval="False"/>
259+ </record>
260+
261+ <record id="hr_payroll.BASIC" model="hr.salary.rule.category">
262+ <field name="name">Salaire de base</field>
263+ <field name="code">BASE</field>
264+ <field name="parent_id" eval="False"/>
265+ </record>
266+
267+ <record id="hr_payroll.ALW" model="hr.salary.rule.category">
268+ <field name="name">Indemnite</field>
269+ <field name="code">INDM</field>
270+ <field name="parent_id" eval="False"/>
271+ </record>
272+
273+ <record id="hr_payroll.DED" model="hr.salary.rule.category">
274+ <field name="name">Deduction</field>
275+ <field name="code">DED</field>
276+ <field name="parent_id" eval="False"/>
277+ </record>
278+
279+ <record id="C_IMP" model="hr.salary.rule.category">
280+ <field name="name">Cumul Imposable</field>
281+ <field name="code">C_IMP</field>
282+ <field name="parent_id" eval="False"/>
283+ </record>
284+
285+ <record id="RETENUES" model="hr.salary.rule.category">
286+ <field name="name">Total Retenues</field>
287+ <field name="code">RETENUES</field>
288+ <field name="parent_id" eval="False"/>
289+ </record>
290+
291+ <record id="SALC" model="hr.salary.rule.category">
292+ <field name="name">Total Charges Salariales</field>
293+ <field name="code">SALC</field>
294+ <field name="parent_id" ref="RETENUES"/>
295+ </record>
296+
297+ <record id="hr_payroll.COMP" model="hr.salary.rule.category">
298+ <field name="name">Cotisations Patronales</field>
299+ <field name="code">COMP</field>
300+ <field name="parent_id" eval="False"/>
301+ </record>
302+
303+ <record id="PREV" model="hr.salary.rule.category">
304+ <field name="name">Cotisations Prevoyance Patronales</field>
305+ <field name="code">PREV</field>
306+ <field name="parent_id" ref="hr_payroll.COMP"/>
307+ </record>
308+
309+ <record id="SECU" model="hr.salary.rule.category">
310+ <field name="name">Plafond de Securite Sociale</field>
311+ <field name="code">SECU</field>
312+ <field name="parent_id" eval="False"/>
313+ </record>
314+
315+
316+ <record id="other_totals" model="hr.salary.rule.category">
317+ <field name="name">Autres totaux</field>
318+ <field name="code">O_TOTALS</field>
319+ <field name="parent_id" eval="False"/>
320+ </record>
321+
322+
323+
324+
325+ <!-- Contribution Register -->
326+
327+ <record id="hr_urssaf_register" model="hr.contribution.register">
328+ <field name="name">URSSAF</field>
329+ </record>
330+
331+ <record id="hr_retraite_register" model="hr.contribution.register">
332+ <field name="name">Organisme de retraite complementaire</field>
333+ </record>
334+
335+ <record id="hr_cci_register" model="hr.contribution.register">
336+ <field name="name">Chambre du commerce et de l'industrie</field>
337+ </record>
338+
339+ <record id="hr_prevoyance_register" model="hr.contribution.register">
340+ <field name="name">Organisme de prevoyance</field>
341+ </record>
342+
343+
344+<!-- HR SALARY RULES-->
345+
346+
347+
348+ <record id="hr_payroll.hr_rule_basic" model="hr.salary.rule">
349+ <field name="name">Salaire de base</field>
350+ <field name="code">BASE</field>
351+ <field name="sequence">1</field>
352+ </record>
353+
354+ <record id="hr_payroll.hr_rule_taxable" model="hr.salary.rule">
355+ <field name="name">Salaire Brut</field>
356+ <field name="code">BRUT</field>
357+ <field name="sequence">1000</field>
358+ <field name="category_id" ref="hr_payroll.GROSS"/>
359+ <field name="amount_python_compute">result = categories.BASE + categories.INDM - categories.DED</field>
360+
361+ </record>
362+
363+ <record id="hr_rule_secu" model="hr.salary.rule">
364+ <field name="name">Plafond Securite Sociale</field>
365+ <field name="code">SECU</field>
366+ <field name="sequence">1010</field>
367+ <field name="category_id" ref="SECU"/>
368+ <field name="appears_on_payslip" eval="False"/>
369+ <field name="condition_select">none</field>
370+ <field name="amount_select">code</field>
371+ <field name="amount_python_compute">result = contract.employee_id.company_id.plafond_secu</field>
372+ </record>
373+
374+ <record id="hr_rule_tranche_a" model="hr.salary.rule">
375+ <field name="name">Plafond Tranche A</field>
376+ <field name="code">TA</field>
377+ <field name="sequence">1011</field>
378+ <field name="category_id" ref="other_totals"/>
379+ <field name="appears_on_payslip" eval="False"/>
380+ <field name="condition_select">none</field>
381+ <field name="amount_select">code</field>
382+ <field name="amount_python_compute">result = SECU</field>
383+ </record>
384+
385+ <record id="hr_rule_tranche_b" model="hr.salary.rule">
386+ <field name="name">Plafond Tranche B</field>
387+ <field name="code">TB</field>
388+ <field name="sequence">1012</field>
389+ <field name="category_id" ref="other_totals"/>
390+ <field name="appears_on_payslip" eval="False"/>
391+ <field name="condition_select">none</field>
392+ <field name="amount_select">code</field>
393+ <field name="amount_python_compute">result = SECU * 4</field>
394+ </record>
395+
396+ <record id="hr_rule_tranche_c" model="hr.salary.rule">
397+ <field name="name">Plafond Tranche C</field>
398+ <field name="code">TC</field>
399+ <field name="sequence">1013</field>
400+ <field name="category_id" ref="other_totals"/>
401+ <field name="appears_on_payslip" eval="False"/>
402+ <field name="condition_select">none</field>
403+ <field name="amount_select">code</field>
404+ <field name="amount_python_compute">result = SECU * 8</field>
405+ </record>
406+
407+ <record id="hr_rule_tranche_1" model="hr.salary.rule">
408+ <field name="name">Plafond Tranche 1</field>
409+ <field name="code">T1</field>
410+ <field name="sequence">1014</field>
411+ <field name="category_id" ref="other_totals"/>
412+ <field name="appears_on_payslip" eval="False"/>
413+ <field name="condition_select">none</field>
414+ <field name="amount_select">code</field>
415+ <field name="amount_python_compute">result = SECU</field>
416+ </record>
417+
418+ <record id="hr_rule_tranche_2" model="hr.salary.rule">
419+ <field name="name">Plafond Tranche 2</field>
420+ <field name="code">T2</field>
421+ <field name="sequence">1015</field>
422+ <field name="category_id" ref="other_totals"/>
423+ <field name="appears_on_payslip" eval="False"/>
424+ <field name="condition_select">none</field>
425+ <field name="amount_select">code</field>
426+ <field name="amount_python_compute">result = SECU * 3</field>
427+ </record>
428+
429+
430+ <record id="hr_rule_total_charges_salariales" model="hr.salary.rule">
431+ <field name="name">Total des charges salariales</field>
432+ <field name="sequence">2510</field>
433+ <field name="code">SALC</field>
434+ <field name="category_id" ref="other_totals"/>
435+ <field name="appears_on_payslip" eval="True"/>
436+ <field name="condition_select">none</field>
437+ <field name="amount_select">code</field>
438+ <field name="amount_python_compute">result = categories.SALC</field>
439+ </record>
440+
441+
442+ <record id="hr_rule_total_retenues" model="hr.salary.rule">
443+ <field name="name">Total Retenues</field>
444+ <field name="sequence">99999</field>
445+ <field name="category_id" ref="other_totals"/>
446+ <field name="code">RET</field>
447+ <field name="condition_select">none</field>
448+ <field name="amount_select">code</field>
449+ <field name="appears_on_payslip" eval="True"/>
450+ <field name="amount_python_compute">result = categories.RETENUES</field>
451+ </record>
452+
453+ <record id="hr_rule_cumul_imposable" model="hr.salary.rule">
454+ <field name="name">Cumul Imposable</field>
455+ <field name="sequence">99999</field>
456+ <field name="category_id" ref="C_IMP"/>
457+ <field name="code">C_IMP</field>
458+ <field name="condition_select">none</field>
459+ <field name="amount_select">code</field>
460+ <field name="appears_on_payslip" eval="False"/>
461+ <field name="amount_python_compute">result = BRUT - categories.SALC</field>
462+ </record>
463+
464+
465+ <record id="hr_payroll.hr_rule_net" model="hr.salary.rule">
466+ <field name="name">Net</field>
467+ <field name="sequence">100000</field>
468+ <field name="category_id" ref="hr_payroll.NET"/>
469+ <field name="amount_python_compute">result = BRUT - categories.RETENUES</field>
470+ </record>
471+
472+ <record id="hr_rule_total_charges_patronales" model="hr.salary.rule">
473+ <field name="name">Total Charges Patronales</field>
474+ <field name="sequence">150000</field>
475+ <field name="code">TCOMP</field>
476+ <field name="category_id" ref="other_totals"/>
477+ <field name="appears_on_payslip" eval="False"/>
478+ <field name="condition_select">none</field>
479+ <field name="amount_select">code</field>
480+ <field name="amount_python_compute">result = categories.COMP</field>
481+ </record>
482+
483+
484+ <record id="hr_rule_total" model="hr.salary.rule">
485+ <field name="name">Cout total pour l'entreprise</field>
486+ <field name="sequence">200000</field>
487+ <field name="code">TOTAL</field>
488+ <field name="category_id" ref="TOTAL"/>
489+ <field name="appears_on_payslip" eval="False"/>
490+ <field name="condition_select">none</field>
491+ <field name="amount_select">code</field>
492+ <field name="amount_python_compute">result = categories.BRUT + categories.COMP</field>
493+ </record>
494+
495+
496+
497+
498+
499+
500+ <record id="hr_payroll_rules_C1_employe" model="hr.salary.rule">
501+ <field name="category_id" ref="SALC"/>
502+ <field name="name">Assurance maladie, maternite, invalidite, deces, solidaritee des personnes agees et handicapees</field>
503+ <field name="code">C1</field>
504+ <field name="sequence">2040</field>
505+ <field name="condition_select">none</field>
506+ <field name="amount_select">percentage</field>
507+ <field name="amount_percentage">0.75</field>
508+ <field name="amount_percentage_base">categories.BRUT</field>
509+ <field name="appears_on_payslip" eval="True"/>
510+ <field name="register_id" ref="hr_urssaf_register"/>
511+ </record>
512+
513+ <record id="hr_payroll_rules_C1_employer" model="hr.salary.rule">
514+ <field name="category_id" ref="hr_payroll.COMP"/>
515+ <field name="parent_rule_id" ref="hr_payroll_rules_C1_employe"/>
516+ <field name="name">Assurance maladie, maternite, invalidite, deces, solidaritee des personnes agees et handicapees</field>
517+ <field name="code">C1P</field>
518+ <field name="sequence">2045</field>
519+ <field name="condition_select">none</field>
520+ <field name="amount_select">percentage</field>
521+ <field name="amount_percentage">13.10</field>
522+ <field name="amount_percentage_base">categories.BRUT</field>
523+ <field name="register_id" ref="hr_urssaf_register"/>
524+ </record>
525+
526+
527+
528+
529+ <record id="hr_payroll_rules_C2_employe" model="hr.salary.rule">
530+ <field name="category_id" ref="SALC"/>
531+ <field name="name">Vieillesse plafonnee</field>
532+ <field name="code">C2</field>
533+ <field name="sequence">2050</field>
534+ <field name="condition_select">none</field>
535+ <field name="amount_select">percentage</field>
536+ <field name="amount_percentage">6.65</field>
537+ <field name="amount_percentage_base">min(categories.BRUT,SECU)</field>
538+ <field name="appears_on_payslip" eval="True"/>
539+ <field name="register_id" ref="hr_urssaf_register"/>
540+ </record>
541+
542+ <record id="hr_payroll_rules_C2_employer" model="hr.salary.rule">
543+ <field name="category_id" ref="hr_payroll.COMP"/>
544+ <field name="parent_rule_id" ref="hr_payroll_rules_C2_employe"/>
545+ <field name="name">Vieillesse plafonnee</field>
546+ <field name="code">C2P</field>
547+ <field name="sequence">2055</field>
548+ <field name="condition_select">none</field>
549+ <field name="amount_select">percentage</field>
550+ <field name="amount_percentage">8.3</field>
551+ <field name="amount_percentage_base">min(categories.BRUT,SECU)</field>
552+ <field name="register_id" ref="hr_urssaf_register"/>
553+ </record>
554+
555+
556+
557+
558+ <record id="hr_payroll_rules_C3_employe" model="hr.salary.rule">
559+ <field name="category_id" ref="SALC"/>
560+ <field name="name">Vieillesse deplafonnee</field>
561+ <field name="code">C3</field>
562+ <field name="sequence">2060</field>
563+ <field name="condition_select">none</field>
564+ <field name="amount_select">percentage</field>
565+ <field name="amount_percentage">0.1</field>
566+ <field name="amount_percentage_base">categories.BRUT</field>
567+ <field name="appears_on_payslip" eval="True"/>
568+ <field name="register_id" ref="hr_urssaf_register"/>
569+ </record>
570+
571+ <record id="hr_payroll_rules_C3_employer" model="hr.salary.rule">
572+ <field name="category_id" ref="hr_payroll.COMP"/>
573+ <field name="parent_rule_id" ref="hr_payroll_rules_C3_employe"/>
574+ <field name="name">Vieillesse deplafonnee</field>
575+ <field name="code">C3P</field>
576+ <field name="sequence">2065</field>
577+ <field name="condition_select">none</field>
578+ <field name="amount_select">percentage</field>
579+ <field name="amount_percentage">1.6</field>
580+ <field name="amount_percentage_base">categories.BRUT</field>
581+ <field name="register_id" ref="hr_urssaf_register"/>
582+ </record>
583+
584+
585+
586+ <record id="hr_payroll_rules_C4_employe" model="hr.salary.rule">
587+ <field name="category_id" ref="SALC"/>
588+ <field name="name">Allocations familiales</field>
589+ <field name="code">C4</field>
590+ <field name="sequence">2070</field>
591+ <field name="condition_select">none</field>
592+ <field name="amount_select">percentage</field>
593+ <field name="amount_percentage">0</field>
594+ <field name="amount_percentage_base">categories.BRUT</field>
595+ <field name="appears_on_payslip" eval="True"/>
596+ <field name="register_id" ref="hr_urssaf_register"/>
597+ </record>
598+
599+ <record id="hr_payroll_rules_C4_employer" model="hr.salary.rule">
600+ <field name="category_id" ref="hr_payroll.COMP"/>
601+ <field name="parent_rule_id" ref="hr_payroll_rules_C4_employe"/>
602+ <field name="name">Allocations familiales</field>
603+ <field name="code">C4P</field>
604+ <field name="sequence">2075</field>
605+ <field name="condition_select">none</field>
606+ <field name="amount_select">percentage</field>
607+ <field name="amount_percentage">5.4</field>
608+ <field name="amount_percentage_base">categories.BRUT</field>
609+ <field name="register_id" ref="hr_urssaf_register"/>
610+ </record>
611+
612+
613+
614+
615+
616+
617+
618+ <record id="hr_payroll_rules_C10_employe" model="hr.salary.rule">
619+ <field name="category_id" ref="SALC"/>
620+ <field name="name">Assurance chomage</field>
621+ <field name="code">C10</field>
622+ <field name="sequence">2080</field>
623+ <field name="condition_select">none</field>
624+ <field name="amount_select">percentage</field>
625+ <field name="amount_percentage">2.40</field>
626+ <field name="amount_percentage_base">min(categories.BRUT,TB)</field>
627+ <field name="appears_on_payslip" eval="True"/>
628+ <field name="register_id" ref="hr_urssaf_register"/>
629+ </record>
630+
631+ <record id="hr_payroll_rules_C10_employer" model="hr.salary.rule">
632+ <field name="category_id" ref="hr_payroll.COMP"/>
633+ <field name="parent_rule_id" ref="hr_payroll_rules_C10_employe"/>
634+ <field name="name">Assurance chomage</field>
635+ <field name="code">C10P</field>
636+ <field name="sequence">2085</field>
637+ <field name="condition_select">none</field>
638+ <field name="amount_select">percentage</field>
639+ <field name="amount_percentage">4</field>
640+ <field name="amount_percentage_base">min(categories.BRUT,TB)</field>
641+ <field name="register_id" ref="hr_urssaf_register"/>
642+ </record>
643+
644+
645+
646+ <record id="hr_payroll_rules_C11_employe" model="hr.salary.rule">
647+ <field name="category_id" ref="SALC"/>
648+ <field name="name">AGS (FNGS)</field>
649+ <field name="code">C11</field>
650+ <field name="sequence">2090</field>
651+ <field name="condition_select">none</field>
652+ <field name="amount_select">percentage</field>
653+ <field name="amount_percentage">0</field>
654+ <field name="amount_percentage_base">min(categories.BRUT,TB)</field>
655+ <field name="appears_on_payslip" eval="True"/>
656+ <field name="register_id" ref="hr_urssaf_register"/>
657+ </record>
658+
659+ <record id="hr_payroll_rules_C11_employer" model="hr.salary.rule">
660+ <field name="category_id" ref="hr_payroll.COMP"/>
661+ <field name="parent_rule_id" ref="hr_payroll_rules_C11_employe"/>
662+ <field name="name">AGS (FNGS)</field>
663+ <field name="code">C11P</field>
664+ <field name="sequence">2095</field>
665+ <field name="condition_select">none</field>
666+ <field name="amount_select">percentage</field>
667+ <field name="amount_percentage">0.3</field>
668+ <field name="amount_percentage_base">min(categories.BRUT,TB)</field>
669+ <field name="register_id" ref="hr_urssaf_register"/>
670+ </record>
671+
672+
673+ <record id="hr_payroll_rules_C12_employe" model="hr.salary.rule">
674+ <field name="category_id" ref="SALC"/>
675+ <field name="name">ARRCO Non-cadre Tranche 1</field>
676+ <field name="code">C12</field>
677+ <field name="sequence">2100</field>
678+ <field name="condition_select">none</field>
679+ <field name="amount_select">percentage</field>
680+ <field name="amount_percentage">3</field>
681+ <field name="amount_percentage_base">min(categories.BRUT,T1)</field>
682+ <field name="appears_on_payslip" eval="True"/>
683+ <field name="register_id" ref="hr_retraite_register"/>
684+ </record>
685+
686+ <record id="hr_payroll_rules_C12_employer" model="hr.salary.rule">
687+ <field name="category_id" ref="hr_payroll.COMP"/>
688+ <field name="parent_rule_id" ref="hr_payroll_rules_C12_employe"/>
689+ <field name="name">ARRCO Non-cadre Tranche 1</field>
690+ <field name="code">C12P</field>
691+ <field name="sequence">2105</field>
692+ <field name="condition_select">none</field>
693+ <field name="amount_select">percentage</field>
694+ <field name="amount_percentage">4.5</field>
695+ <field name="amount_percentage_base">min(categories.BRUT,T1)</field>
696+ <field name="register_id" ref="hr_retraite_register"/>
697+ </record>
698+
699+
700+
701+
702+ <record id="hr_payroll_rules_C14_employe" model="hr.salary.rule">
703+ <field name="category_id" ref="SALC"/>
704+ <field name="name">ARRCO Non-cadre Tranche 2</field>
705+ <field name="code">C14</field>
706+ <field name="sequence">2110</field>
707+ <field name="condition_select">python</field>
708+ <field name="condition_python">result = categories.BRUT > T1</field>
709+ <field name="amount_select">percentage</field>
710+ <field name="amount_percentage">8</field>
711+ <field name="amount_percentage_base">min(categories.BRUT-T1,T2-T1)</field>
712+ <field name="appears_on_payslip" eval="True"/>
713+ <field name="register_id" ref="hr_retraite_register"/>
714+ </record>
715+
716+ <record id="hr_payroll_rules_C14_employer" model="hr.salary.rule">
717+ <field name="category_id" ref="hr_payroll.COMP"/>
718+ <field name="parent_rule_id" ref="hr_payroll_rules_C14_employe"/>
719+ <field name="name">ARRCO Non-cadre Tranche 2</field>
720+ <field name="code">C14P</field>
721+ <field name="sequence">2115</field>
722+ <field name="condition_select">python</field>
723+ <field name="condition_python">result = categories.BRUT > T1</field>
724+ <field name="amount_select">percentage</field>
725+ <field name="amount_percentage">12</field>
726+ <field name="amount_percentage_base">min(categories.BRUT-T1,T2-T1)</field>
727+ <field name="register_id" ref="hr_retraite_register"/>
728+ </record>
729+
730+
731+
732+
733+
734+ <record id="hr_payroll_rules_C13_employe" model="hr.salary.rule">
735+ <field name="category_id" ref="SALC"/>
736+ <field name="name">AGFF Non-cadre Tranche 1</field>
737+ <field name="code">C13</field>
738+ <field name="sequence">2120</field>
739+ <field name="condition_select">none</field>
740+ <field name="amount_select">percentage</field>
741+ <field name="amount_percentage">0.8</field>
742+ <field name="amount_percentage_base">min(categories.BRUT,T1)</field>
743+ <field name="appears_on_payslip" eval="True"/>
744+ <field name="register_id" ref="hr_retraite_register"/>
745+ </record>
746+
747+ <record id="hr_payroll_rules_C13_employer" model="hr.salary.rule">
748+ <field name="category_id" ref="hr_payroll.COMP"/>
749+ <field name="parent_rule_id" ref="hr_payroll_rules_C13_employe"/>
750+ <field name="name">AGFF Non-cadre Tranche 1</field>
751+ <field name="code">C13P</field>
752+ <field name="sequence">2125</field>
753+ <field name="condition_select">none</field>
754+ <field name="amount_select">percentage</field>
755+ <field name="amount_percentage">1.2</field>
756+ <field name="amount_percentage_base">min(categories.BRUT,T1)</field>
757+ <field name="register_id" ref="hr_retraite_register"/>
758+ </record>
759+
760+
761+
762+ <record id="hr_payroll_rules_C15_employe" model="hr.salary.rule">
763+ <field name="category_id" ref="SALC"/>
764+ <field name="name">AGFF Non-cadre Tranche 2</field>
765+ <field name="code">C15</field>
766+ <field name="sequence">2130</field>
767+ <field name="condition_select">python</field>
768+ <field name="condition_python">result = categories.BRUT > T1</field>
769+ <field name="amount_select">percentage</field>
770+ <field name="amount_percentage">0.9</field>
771+ <field name="amount_percentage_base">min(categories.BRUT-T1,T2-T1)</field>
772+ <field name="appears_on_payslip" eval="True"/>
773+ <field name="register_id" ref="hr_retraite_register"/>
774+ </record>
775+
776+ <record id="hr_payroll_rules_C15_employer" model="hr.salary.rule">
777+ <field name="category_id" ref="hr_payroll.COMP"/>
778+ <field name="parent_rule_id" ref="hr_payroll_rules_C15_employe"/>
779+ <field name="name">AGFF Non-cadre Tranche 2</field>
780+ <field name="code">C15P</field>
781+ <field name="sequence">2135</field>
782+ <field name="condition_select">python</field>
783+ <field name="condition_python">result = categories.BRUT > T1</field>
784+ <field name="amount_select">percentage</field>
785+ <field name="amount_percentage">1.3</field>
786+ <field name="amount_percentage_base">min(categories.BRUT-T1,T2-T1)</field>
787+ <field name="register_id" ref="hr_retraite_register"/>
788+ </record>
789+
790+
791+
792+
793+ <record id="hr_payroll_rules_C16_employe" model="hr.salary.rule">
794+ <field name="category_id" ref="SALC"/>
795+ <field name="name">ARRCO Cadre Tranche A</field>
796+ <field name="code">C16</field>
797+ <field name="sequence">2140</field>
798+ <field name="condition_select">none</field>
799+ <field name="amount_select">percentage</field>
800+ <field name="amount_percentage">3</field>
801+ <field name="amount_percentage_base">min(categories.BRUT,TA)</field>
802+ <field name="appears_on_payslip" eval="True"/>
803+ <field name="register_id" ref="hr_retraite_register"/>
804+ </record>
805+
806+ <record id="hr_payroll_rules_C16_employer" model="hr.salary.rule">
807+ <field name="category_id" ref="hr_payroll.COMP"/>
808+ <field name="parent_rule_id" ref="hr_payroll_rules_C16_employe"/>
809+ <field name="name">ARRCO Cadre Tranche A</field>
810+ <field name="code">C16P</field>
811+ <field name="sequence">2145</field>
812+ <field name="condition_select">none</field>
813+ <field name="amount_select">percentage</field>
814+ <field name="amount_percentage">4.5</field>
815+ <field name="amount_percentage_base">min(categories.BRUT,TA)</field>
816+ <field name="register_id" ref="hr_retraite_register"/>
817+ </record>
818+
819+
820+
821+
822+ <record id="hr_payroll_rules_C17_employe" model="hr.salary.rule">
823+ <field name="category_id" ref="SALC"/>
824+ <field name="name">AGIRC et GMP Cadre Tranche B</field>
825+ <field name="code">C17</field>
826+ <field name="sequence">2150</field>
827+ <field name="condition_select">python</field>
828+ <field name="condition_python">result = categories.BRUT > TA</field>
829+ <field name="amount_select">percentage</field>
830+ <field name="amount_percentage">7.7</field>
831+ <field name="amount_percentage_base">min(categories.BRUT-TA,TB-TA)</field>
832+ <field name="appears_on_payslip" eval="True"/>
833+ <field name="register_id" ref="hr_retraite_register"/>
834+ </record>
835+
836+ <record id="hr_payroll_rules_C17_employer" model="hr.salary.rule">
837+ <field name="category_id" ref="hr_payroll.COMP"/>
838+ <field name="parent_rule_id" ref="hr_payroll_rules_C17_employe"/>
839+ <field name="name">AGIRC et GMP Cadre Tranche B</field>
840+ <field name="code">C17P</field>
841+ <field name="sequence">2155</field>
842+ <field name="condition_select">python</field>
843+ <field name="condition_python">result = categories.BRUT > TA</field>
844+ <field name="amount_select">percentage</field>
845+ <field name="amount_percentage">12.6</field>
846+ <field name="amount_percentage_base">min(categories.BRUT-TA,TB-TA)</field>
847+ <field name="register_id" ref="hr_retraite_register"/>
848+ </record>
849+
850+<!-- TO DO : Ajouter input pour les taux -->
851+
852+ <record id="hr_payroll_rules_C38_employe" model="hr.salary.rule">
853+ <field name="category_id" ref="SALC"/>
854+ <field name="name">AGIRC Cadre Tranche C</field>
855+ <field name="code">C38</field>
856+ <field name="sequence">2160</field>
857+ <field name="condition_select">python</field>
858+ <field name="condition_python">result = categories.BRUT > TB</field>
859+ <field name="amount_select">percentage</field>
860+ <field name="amount_percentage">0</field>
861+ <field name="amount_percentage_base">min(categories.BRUT-TB,TC-TB)</field>
862+ <field name="appears_on_payslip" eval="True"/>
863+ <field name="register_id" ref="hr_retraite_register"/>
864+ </record>
865+
866+ <record id="hr_payroll_rules_C38_employer" model="hr.salary.rule">
867+ <field name="category_id" ref="hr_payroll.COMP"/>
868+ <field name="parent_rule_id" ref="hr_payroll_rules_C38_employe"/>
869+ <field name="name">AGIRC Cadre Tranche C</field>
870+ <field name="code">C38P</field>
871+ <field name="sequence">2165</field>
872+ <field name="condition_select">python</field>
873+ <field name="condition_python">result = categories.BRUT > TB</field>
874+ <field name="amount_select">percentage</field>
875+ <field name="amount_percentage">0</field>
876+ <field name="amount_percentage_base">min(categories.BRUT-TB,TC-TB)</field>
877+ <field name="register_id" ref="hr_retraite_register"/>
878+ </record>
879+
880+
881+
882+ <record id="hr_payroll_rules_C39_employe" model="hr.salary.rule">
883+ <field name="category_id" ref="SALC"/>
884+ <field name="name">AGFF Cadre Tranche A</field>
885+ <field name="code">C18</field>
886+ <field name="sequence">2170</field>
887+ <field name="condition_select">none</field>
888+ <field name="amount_select">percentage</field>
889+ <field name="amount_percentage">0.8</field>
890+ <field name="amount_percentage_base">min(categories.BRUT,TA)</field>
891+ <field name="appears_on_payslip" eval="True"/>
892+ <field name="register_id" ref="hr_retraite_register"/>
893+ </record>
894+
895+ <record id="hr_payroll_rules_C39_employer" model="hr.salary.rule">
896+ <field name="category_id" ref="hr_payroll.COMP"/>
897+ <field name="parent_rule_id" ref="hr_payroll_rules_C39_employe"/>
898+ <field name="name">AGFF Cadre Tranche A</field>
899+ <field name="code">C18P</field>
900+ <field name="sequence">2175</field>
901+ <field name="condition_select">none</field>
902+ <field name="amount_select">percentage</field>
903+ <field name="amount_percentage">1.2</field>
904+ <field name="amount_percentage_base">min(categories.BRUT,TA)</field>
905+ <field name="register_id" ref="hr_retraite_register"/>
906+ </record>
907+
908+
909+
910+ <record id="hr_payroll_rules_C18_employe" model="hr.salary.rule">
911+ <field name="category_id" ref="SALC"/>
912+ <field name="name">AGFF Non-cadre Tranche B</field>
913+ <field name="code">C18</field>
914+ <field name="sequence">2180</field>
915+ <field name="condition_select">python</field>
916+ <field name="condition_python">result = categories.BRUT > TA</field>
917+ <field name="amount_select">percentage</field>
918+ <field name="amount_percentage">0.9</field>
919+ <field name="amount_percentage_base">min(categories.BRUT-TA,TB-TA)</field>
920+ <field name="appears_on_payslip" eval="True"/>
921+ <field name="register_id" ref="hr_retraite_register"/>
922+ </record>
923+
924+ <record id="hr_payroll_rules_C18_employer" model="hr.salary.rule">
925+ <field name="category_id" ref="hr_payroll.COMP"/>
926+ <field name="parent_rule_id" ref="hr_payroll_rules_C18_employe"/>
927+ <field name="name">AGFF Cadre Tranche B</field>
928+ <field name="code">C18P</field>
929+ <field name="sequence">2185</field>
930+ <field name="condition_select">python</field>
931+ <field name="condition_python">result = categories.BRUT > TA</field>
932+ <field name="amount_select">percentage</field>
933+ <field name="amount_percentage">1.3</field>
934+ <field name="amount_percentage_base">min(categories.BRUT-TA,TB-TA)</field>
935+ <field name="register_id" ref="hr_retraite_register"/>
936+ </record>
937+
938+
939+ <record id="hr_payroll_rules_C19_employe" model="hr.salary.rule">
940+ <field name="category_id" ref="SALC"/>
941+ <field name="name">CET</field>
942+ <field name="code">C19</field>
943+ <field name="sequence">2190</field>
944+ <field name="condition_select">none</field>
945+ <field name="amount_select">percentage</field>
946+ <field name="amount_percentage">0.13</field>
947+ <field name="amount_percentage_base">min(categories.BRUT,TC)</field>
948+ <field name="appears_on_payslip" eval="True"/>
949+ <field name="register_id" ref="hr_retraite_register"/>
950+ </record>
951+
952+ <record id="hr_payroll_rules_C19_employer" model="hr.salary.rule">
953+ <field name="category_id" ref="hr_payroll.COMP"/>
954+ <field name="parent_rule_id" ref="hr_payroll_rules_C19_employe"/>
955+ <field name="name">CET</field>
956+ <field name="code">C19P</field>
957+ <field name="sequence">2195</field>
958+ <field name="condition_select">none</field>
959+ <field name="amount_select">percentage</field>
960+ <field name="amount_percentage">0.22</field>
961+ <field name="amount_percentage_base">min(categories.BRUT,TC)</field>
962+ <field name="register_id" ref="hr_retraite_register"/>
963+ </record>
964+
965+
966+ <record id="hr_payroll_rules_C20_employe" model="hr.salary.rule">
967+ <field name="category_id" ref="SALC"/>
968+ <field name="name">APEC</field>
969+ <field name="code">C20</field>
970+ <field name="sequence">2200</field>
971+ <field name="condition_select">none</field>
972+ <field name="amount_select">percentage</field>
973+ <field name="amount_percentage">0.024</field>
974+ <field name="amount_percentage_base">min(categories.BRUT,TB)</field>
975+ <field name="appears_on_payslip" eval="True"/>
976+ <field name="register_id" ref="hr_retraite_register"/>
977+ </record>
978+
979+ <record id="hr_payroll_rules_C20_employer" model="hr.salary.rule">
980+ <field name="category_id" ref="hr_payroll.COMP"/>
981+ <field name="parent_rule_id" ref="hr_payroll_rules_C20_employe"/>
982+ <field name="name">APEC</field>
983+ <field name="code">C20P</field>
984+ <field name="sequence">2205</field>
985+ <field name="condition_select">none</field>
986+ <field name="amount_select">percentage</field>
987+ <field name="amount_percentage">0.036</field>
988+ <field name="amount_percentage_base">min(categories.BRUT,TB)</field>
989+ <field name="register_id" ref="hr_retraite_register"/>
990+ </record>
991+
992+
993+
994+ <record id="hr_payroll_rules_C21_employe" model="hr.salary.rule">
995+ <field name="category_id" ref="SALC"/>
996+ <field name="name">Assurance deces cadres</field>
997+ <field name="code">C21</field>
998+ <field name="sequence">2210</field>
999+ <field name="condition_select">none</field>
1000+ <field name="amount_select">percentage</field>
1001+ <field name="amount_percentage">0</field>
1002+ <field name="amount_percentage_base">min(categories.BRUT,TA)</field>
1003+ <field name="appears_on_payslip" eval="True"/>
1004+ <field name="register_id" ref="hr_retraite_register"/>
1005+ </record>
1006+
1007+ <record id="hr_payroll_rules_C21_employer" model="hr.salary.rule">
1008+ <field name="category_id" ref="hr_payroll.COMP"/>
1009+ <field name="parent_rule_id" ref="hr_payroll_rules_C21_employe"/>
1010+ <field name="name">Assurance deces cadres</field>
1011+ <field name="code">C21P</field>
1012+ <field name="sequence">2215</field>
1013+ <field name="condition_select">none</field>
1014+ <field name="amount_select">percentage</field>
1015+ <field name="amount_percentage">1.5</field>
1016+ <field name="amount_percentage_base">min(categories.BRUT,TA)</field>
1017+ <field name="register_id" ref="hr_retraite_register"/>
1018+ </record>
1019+
1020+
1021+
1022+ <record id="hr_payroll_rules_C5_employe" model="hr.salary.rule">
1023+ <field name="category_id" ref="SALC"/>
1024+ <field name="name">Accident du travail</field>
1025+ <field name="code">C5</field>
1026+ <field name="sequence">2220</field>
1027+ <field name="condition_select">none</field>
1028+ <field name="amount_select">percentage</field>
1029+ <field name="amount_percentage">0</field>
1030+ <field name="amount_percentage_base">categories.BRUT</field>
1031+ <field name="appears_on_payslip" eval="True"/>
1032+ <field name="register_id" ref="hr_retraite_register"/>
1033+ </record>
1034+
1035+ <record id="hr_payroll_rules_C5_employer" model="hr.salary.rule">
1036+ <field name="category_id" ref="hr_payroll.COMP"/>
1037+ <field name="parent_rule_id" ref="hr_payroll_rules_C5_employe"/>
1038+ <field name="name">Accident du travail</field>
1039+ <field name="code">C5P</field>
1040+ <field name="sequence">2225</field>
1041+ <field name="condition_select">none</field>
1042+ <field name="amount_select">percentage</field>
1043+ <field name="amount_percentage_base">categories.BRUT</field>
1044+ <field name="register_id" ref="hr_urssaf_register"/>
1045+ </record>
1046+
1047+
1048+ <record id="hr_payroll_rules_C35_employe" model="hr.salary.rule">
1049+ <field name="category_id" ref="SALC"/>
1050+ <field name="name">Prevoyance Cadre TA</field>
1051+ <field name="code">C35</field>
1052+ <field name="sequence">2230</field>
1053+ <field name="condition_select">none</field>
1054+ <field name="amount_select">percentage</field>
1055+ <field name="amount_percentage_base">min(categories.BRUT,TA)</field>
1056+ <field name="register_id" ref="hr_prevoyance_register"/>
1057+ </record>
1058+
1059+ <record id="hr_payroll_rules_C35_employer" model="hr.salary.rule">
1060+ <field name="category_id" ref="PREV"/>
1061+ <field name="parent_rule_id" ref="hr_payroll_rules_C35_employe"/>
1062+ <field name="name">Prevoyance Cadre TA</field>
1063+ <field name="code">C35P</field>
1064+ <field name="sequence">2231</field>
1065+ <field name="condition_select">none</field>
1066+ <field name="amount_select">percentage</field>
1067+ <field name="amount_percentage_base">min(categories.BRUT,TA)</field>
1068+ <field name="register_id" ref="hr_prevoyance_register"/>
1069+ </record>
1070+
1071+ <record id="hr_payroll_rules_C36_employe" model="hr.salary.rule">
1072+ <field name="category_id" ref="SALC"/>
1073+ <field name="name">Prevoyance Cadre TB</field>
1074+ <field name="code">C36</field>
1075+ <field name="sequence">2232</field>
1076+ <field name="condition_select">python</field>
1077+ <field name="condition_python">result = categories.BRUT > TA</field>
1078+ <field name="amount_select">percentage</field>
1079+ <field name="amount_percentage_base">min(categories.BRUT-TA,TB-TA)</field>
1080+ <field name="register_id" ref="hr_prevoyance_register"/>
1081+ </record>
1082+
1083+ <record id="hr_payroll_rules_C36_employer" model="hr.salary.rule">
1084+ <field name="category_id" ref="PREV"/>
1085+ <field name="parent_rule_id" ref="hr_payroll_rules_C36_employe"/>
1086+ <field name="name">Prevoyance Cadre TB</field>
1087+ <field name="code">C36P</field>
1088+ <field name="sequence">2233</field>
1089+ <field name="condition_select">python</field>
1090+ <field name="condition_python">result = categories.BRUT > TA</field>
1091+ <field name="amount_select">percentage</field>
1092+ <field name="amount_percentage_base">min(categories.BRUT-TA,TB-TA)</field>
1093+ <field name="register_id" ref="hr_prevoyance_register"/>
1094+ </record>
1095+
1096+ <record id="hr_payroll_rules_C37_employe" model="hr.salary.rule">
1097+ <field name="category_id" ref="SALC"/>
1098+ <field name="name">Forfait Mutuelle</field>
1099+ <field name="code">C37</field>
1100+ <field name="sequence">2234</field>
1101+ <field name="condition_select">none</field>
1102+ <field name="amount_select">fix</field>
1103+ <field name="register_id" ref="hr_prevoyance_register"/>
1104+ </record>
1105+
1106+ <record id="hr_payroll_rules_C37_employer" model="hr.salary.rule">
1107+ <field name="category_id" ref="PREV"/>
1108+ <field name="parent_rule_id" ref="hr_payroll_rules_C37_employe"/>
1109+ <field name="name">Forfait Mutuelle</field>
1110+ <field name="code">C37P</field>
1111+ <field name="sequence">2235</field>
1112+ <field name="condition_select">none</field>
1113+ <field name="amount_select">fix</field>
1114+ <field name="register_id" ref="hr_prevoyance_register"/>
1115+ </record>
1116+
1117+
1118+ <record id="hr_payroll_rules_C40_employe" model="hr.salary.rule">
1119+ <field name="category_id" ref="SALC"/>
1120+ <field name="name">Taxe Prevoyance</field>
1121+ <field name="code">C40</field>
1122+ <field name="sequence">2238</field>
1123+ <field name="condition_select">python</field>
1124+ <field name="condition_python">result = categories.PREV != 0</field>
1125+ <field name="amount_select">percentage</field>
1126+ <field name="amount_percentage_base">categories.PREV</field>
1127+ <field name="register_id" ref="hr_prevoyance_register"/>
1128+ </record>
1129+
1130+ <record id="hr_payroll_rules_C40_employer" model="hr.salary.rule">
1131+ <field name="category_id" ref="hr_payroll.COMP"/>
1132+ <field name="parent_rule_id" ref="hr_payroll_rules_C40_employe"/>
1133+ <field name="name">Taxe Prevoyance</field>
1134+ <field name="code">C40P</field>
1135+ <field name="sequence">2239</field>
1136+ <field name="condition_select">python</field>
1137+ <field name="condition_python">result = categories.PREV != 0</field>
1138+ <field name="amount_select">percentage</field>
1139+ <field name="amount_percentage">8</field>
1140+ <field name="amount_percentage_base">categories.PREV</field>
1141+ <field name="register_id" ref="hr_urssaf_register"/>
1142+ </record>
1143+
1144+
1145+ <record id="hr_payroll_rules_C7_employe" model="hr.salary.rule">
1146+ <field name="category_id" ref="SALC"/>
1147+ <field name="name">FNAL -20 Employes</field>
1148+ <field name="code">C7</field>
1149+ <field name="sequence">2240</field>
1150+ <field name="condition_select">range</field>
1151+ <field name="condition_range">contract.employee_id.company_id.nombre_employes</field>
1152+ <field name="condition_range_max">19</field>
1153+ <field name="amount_select">percentage</field>
1154+ <field name="amount_percentage_base">min(categories.BRUT,SECU)</field>
1155+ <field name="register_id" ref="hr_urssaf_register"/>
1156+ </record>
1157+
1158+ <record id="hr_payroll_rules_C7_employer" model="hr.salary.rule">
1159+ <field name="category_id" ref="hr_payroll.COMP"/>
1160+ <field name="parent_rule_id" ref="hr_payroll_rules_C7_employe"/>
1161+ <field name="name">FNAL -20 Employes</field>
1162+ <field name="code">C7P</field>
1163+ <field name="sequence">2245</field>
1164+ <field name="condition_select">range</field>
1165+ <field name="condition_range">contract.employee_id.company_id.nombre_employes</field>
1166+ <field name="condition_range_max">19</field>
1167+ <field name="amount_select">percentage</field>
1168+ <field name="amount_percentage">0.1</field>
1169+ <field name="amount_percentage_base">min(categories.BRUT,SECU)</field>
1170+ <field name="register_id" ref="hr_urssaf_register"/>
1171+ </record>
1172+
1173+
1174+
1175+ <record id="hr_payroll_rules_C8_employe" model="hr.salary.rule">
1176+ <field name="category_id" ref="SALC"/>
1177+ <field name="name">FNAL +20 Employes</field>
1178+ <field name="code">C8</field>
1179+ <field name="sequence">2250</field>
1180+ <field name="condition_select">range</field>
1181+ <field name="condition_range">contract.employee_id.company_id.nombre_employes</field>
1182+ <field name="condition_range_min">20</field>
1183+ <field name="amount_select">percentage</field>
1184+ <field name="amount_percentage_base">categories.BRUT</field>
1185+ <field name="register_id" ref="hr_urssaf_register"/>
1186+ </record>
1187+
1188+ <record id="hr_payroll_rules_C8_employer" model="hr.salary.rule">
1189+ <field name="category_id" ref="hr_payroll.COMP"/>
1190+ <field name="parent_rule_id" ref="hr_payroll_rules_C8_employe"/>
1191+ <field name="name">FNAL +20 Employes</field>
1192+ <field name="code">C8P</field>
1193+ <field name="sequence">2255</field>
1194+ <field name="condition_select">range</field>
1195+ <field name="condition_range">contract.employee_id.company_id.nombre_employes</field>
1196+ <field name="condition_range_min">20</field>
1197+ <field name="amount_select">percentage</field>
1198+ <field name="amount_percentage">0.5</field>
1199+ <field name="amount_percentage_base">categories.BRUT</field>
1200+ <field name="register_id" ref="hr_urssaf_register"/>
1201+ </record>
1202+
1203+
1204+
1205+ <record id="hr_payroll_rules_C9_employe" model="hr.salary.rule">
1206+ <field name="category_id" ref="SALC"/>
1207+ <field name="name">Versement Transport</field>
1208+ <field name="code">C9</field>
1209+ <field name="sequence">2260</field>
1210+ <field name="condition_select">range</field>
1211+ <field name="condition_range">contract.employee_id.company_id.nombre_employes</field>
1212+ <field name="condition_range_min">10</field>
1213+ <field name="amount_select">percentage</field>
1214+ <field name="register_id" ref="hr_urssaf_register"/>
1215+ </record>
1216+
1217+
1218+ <record id="hr_payroll_rules_C9_employer" model="hr.salary.rule">
1219+ <field name="category_id" ref="hr_payroll.COMP"/>
1220+ <field name="parent_rule_id" ref="hr_payroll_rules_C9_employe"/>
1221+ <field name="name">Versement Transport</field>
1222+ <field name="code">C9P</field>
1223+ <field name="sequence">2265</field>
1224+ <field name="condition_select">range</field>
1225+ <field name="condition_range">contract.employee_id.company_id.nombre_employes</field>
1226+ <field name="condition_range_min">10</field>
1227+ <field name="amount_select">percentage</field>
1228+ <field name="register_id" ref="hr_urssaf_register"/>
1229+ </record>
1230+
1231+
1232+
1233+ <record id="hr_payroll_rules_C22_employe" model="hr.salary.rule">
1234+ <field name="category_id" ref="SALC"/>
1235+ <field name="name">Effort a la construction</field>
1236+ <field name="code">C22</field>
1237+ <field name="sequence">2270</field>
1238+ <field name="condition_select">range</field>
1239+ <field name="condition_range">contract.employee_id.company_id.nombre_employes</field>
1240+ <field name="condition_range_min">20</field>
1241+ <field name="amount_select">percentage</field>
1242+ <field name="register_id" ref="hr_urssaf_register"/>
1243+ </record>
1244+
1245+ <record id="hr_payroll_rules_C22_employer" model="hr.salary.rule">
1246+ <field name="category_id" ref="hr_payroll.COMP"/>
1247+ <field name="parent_rule_id" ref="hr_payroll_rules_C22_employe"/>
1248+ <field name="name">Effort a la construction</field>
1249+ <field name="code">C22P</field>
1250+ <field name="sequence">2275</field>
1251+ <field name="condition_select">range</field>
1252+ <field name="condition_range">contract.employee_id.company_id.nombre_employes</field>
1253+ <field name="condition_range_min">20</field>
1254+ <field name="amount_select">percentage</field>
1255+ <field name="amount_percentage">0.45</field>
1256+ <field name="amount_percentage_base">categories.BRUT</field>
1257+ <field name="register_id" ref="hr_urssaf_register"/>
1258+ </record>
1259+
1260+
1261+ <record id="hr_payroll_rules_C23_employe" model="hr.salary.rule">
1262+ <field name="category_id" ref="SALC"/>
1263+ <field name="name">Taxe d'apprentissage</field>
1264+ <field name="code">C23</field>
1265+ <field name="sequence">2280</field>
1266+ <field name="condition_select">none</field>
1267+ <field name="amount_select">percentage</field>
1268+ <field name="amount_percentage_base">categories.BRUT</field>
1269+ <field name="register_id" ref="hr_cci_register"/>
1270+ </record>
1271+
1272+ <record id="hr_payroll_rules_C23_employer" model="hr.salary.rule">
1273+ <field name="category_id" ref="hr_payroll.COMP"/>
1274+ <field name="parent_rule_id" ref="hr_payroll_rules_C23_employe"/>
1275+ <field name="name">Taxe d'apprentissage</field>
1276+ <field name="code">C23P</field>
1277+ <field name="sequence">2285</field>
1278+ <field name="condition_select">none</field>
1279+ <field name="amount_select">percentage</field>
1280+ <field name="amount_percentage">0.5</field>
1281+ <field name="amount_percentage_base">categories.BRUT</field>
1282+ <field name="register_id" ref="hr_cci_register"/>
1283+ </record>
1284+
1285+
1286+ <record id="hr_payroll_rules_C24_employe" model="hr.salary.rule">
1287+ <field name="category_id" ref="SALC"/>
1288+ <field name="name">Contribution additionnelle au developpement de l'apprentissage</field>
1289+ <field name="code">C24</field>
1290+ <field name="sequence">2290</field>
1291+ <field name="condition_select">none</field>
1292+ <field name="amount_select">percentage</field>
1293+ <field name="amount_percentage_base">categories.BRUT</field>
1294+ <field name="register_id" ref="hr_cci_register"/>
1295+ </record>
1296+
1297+ <record id="hr_payroll_rules_C24_employer" model="hr.salary.rule">
1298+ <field name="category_id" ref="hr_payroll.COMP"/>
1299+ <field name="parent_rule_id" ref="hr_payroll_rules_C24_employe"/>
1300+ <field name="name">Contribution additionnelle au developpement de l'apprentissage</field>
1301+ <field name="code">C24P</field>
1302+ <field name="sequence">2295</field>
1303+ <field name="condition_select">none</field>
1304+ <field name="amount_select">percentage</field>
1305+ <field name="amount_percentage">0.18</field>
1306+ <field name="amount_percentage_base">categories.BRUT</field>
1307+ <field name="register_id" ref="hr_cci_register"/>
1308+ </record>
1309+
1310+
1311+ <record id="hr_payroll_rules_C25_employe" model="hr.salary.rule">
1312+ <field name="category_id" ref="SALC"/>
1313+ <field name="name">Formation professionnelle 10- salaries</field>
1314+ <field name="code">C25</field>
1315+ <field name="sequence">2300</field>
1316+ <field name="condition_select">range</field>
1317+ <field name="condition_range">contract.employee_id.company_id.nombre_employes</field>
1318+ <field name="condition_range_max">9</field>
1319+ <field name="amount_select">percentage</field>
1320+ <field name="amount_percentage_base">categories.BRUT</field>
1321+ <field name="register_id" ref="hr_cci_register"/>
1322+ </record>
1323+
1324+ <record id="hr_payroll_rules_C25_employer" model="hr.salary.rule">
1325+ <field name="category_id" ref="hr_payroll.COMP"/>
1326+ <field name="parent_rule_id" ref="hr_payroll_rules_C25_employe"/>
1327+ <field name="name">Formation professionnelle 10- salaries</field>
1328+ <field name="code">C25P</field>
1329+ <field name="sequence">2305</field>
1330+ <field name="condition_select">range</field>
1331+ <field name="condition_range">contract.employee_id.company_id.nombre_employes</field>
1332+ <field name="condition_range_max">9</field>
1333+ <field name="amount_select">percentage</field>
1334+ <field name="amount_percentage">0.55</field>
1335+ <field name="amount_percentage_base">categories.BRUT</field>
1336+ <field name="register_id" ref="hr_cci_register"/>
1337+ </record>
1338+
1339+
1340+
1341+ <record id="hr_payroll_rules_C26_employe" model="hr.salary.rule">
1342+ <field name="category_id" ref="SALC"/>
1343+ <field name="name">Formation professionnelle 10-19 salaries</field>
1344+ <field name="code">C26</field>
1345+ <field name="sequence">2310</field>
1346+ <field name="condition_select">range</field>
1347+ <field name="condition_range">contract.employee_id.company_id.nombre_employes</field>
1348+ <field name="condition_range_min">10</field>
1349+ <field name="condition_range_max">19</field>
1350+ <field name="amount_select">percentage</field>
1351+ <field name="amount_percentage_base">categories.BRUT</field>
1352+ <field name="register_id" ref="hr_cci_register"/>
1353+ </record>
1354+
1355+ <record id="hr_payroll_rules_C26_employer" model="hr.salary.rule">
1356+ <field name="category_id" ref="hr_payroll.COMP"/>
1357+ <field name="parent_rule_id" ref="hr_payroll_rules_C26_employe"/>
1358+ <field name="name">Formation professionnelle 10-19 salaries</field>
1359+ <field name="code">C26P</field>
1360+ <field name="sequence">2315</field>
1361+ <field name="condition_select">range</field>
1362+ <field name="condition_range">contract.employee_id.company_id.nombre_employes</field>
1363+ <field name="condition_range_min">10</field>
1364+ <field name="condition_range_max">19</field>
1365+ <field name="amount_select">percentage</field>
1366+ <field name="amount_percentage">1.05</field>
1367+ <field name="amount_percentage_base">categories.BRUT</field>
1368+ <field name="register_id" ref="hr_cci_register"/>
1369+ </record>
1370+
1371+
1372+ <record id="hr_payroll_rules_C27_employe" model="hr.salary.rule">
1373+ <field name="category_id" ref="SALC"/>
1374+ <field name="name">Formation professionnelle 20+ salaries</field>
1375+ <field name="code">C27</field>
1376+ <field name="sequence">2320</field>
1377+ <field name="condition_select">range</field>
1378+ <field name="condition_range">contract.employee_id.company_id.nombre_employes</field>
1379+ <field name="condition_range_min">20</field>
1380+ <field name="amount_select">percentage</field>
1381+ <field name="amount_percentage_base">categories.BRUT</field>
1382+ <field name="register_id" ref="hr_cci_register"/>
1383+ </record>
1384+
1385+ <record id="hr_payroll_rules_C27_employer" model="hr.salary.rule">
1386+ <field name="category_id" ref="hr_payroll.COMP"/>
1387+ <field name="parent_rule_id" ref="hr_payroll_rules_C27_employe"/>
1388+ <field name="name">Formation professionnelle 20+ salaries</field>
1389+ <field name="code">C27P</field>
1390+ <field name="sequence">2325</field>
1391+ <field name="condition_select">range</field>
1392+ <field name="condition_range">contract.employee_id.company_id.nombre_employes</field>
1393+ <field name="condition_range_min">20</field>
1394+ <field name="amount_select">percentage</field>
1395+ <field name="amount_percentage">1.60</field>
1396+ <field name="amount_percentage_base">categories.BRUT</field>
1397+ <field name="register_id" ref="hr_cci_register"/>
1398+ </record>
1399+
1400+
1401+ <record id="hr_payroll_rules_C29_employe" model="hr.salary.rule">
1402+ <field name="category_id" ref="SALC"/>
1403+ <field name="name">CSG deductible</field>
1404+ <field name="code">C29</field>
1405+ <field name="sequence">2500</field>
1406+ <field name="condition_select">none</field>
1407+ <field name="amount_select">percentage</field>
1408+ <field name="amount_percentage">5.1</field>
1409+ <field name="amount_percentage_base">(categories.BRUT + categories.PREV)*0.9825</field>
1410+ <field name="appears_on_payslip" eval="True"/>
1411+ <field name="register_id" ref="hr_urssaf_register"/>
1412+ </record>
1413+
1414+ <record id="hr_payroll_rules_C28_employe" model="hr.salary.rule">
1415+ <field name="category_id" ref="RETENUES"/>
1416+ <field name="name">CSG non deductible</field>
1417+ <field name="code">C28</field>
1418+ <field name="sequence">2550</field>
1419+ <field name="condition_select">none</field>
1420+ <field name="amount_select">percentage</field>
1421+ <field name="amount_percentage">2.4</field>
1422+ <field name="amount_percentage_base">(categories.BRUT + categories.PREV)*0.9825</field>
1423+ <field name="appears_on_payslip" eval="True"/>
1424+ <field name="register_id" ref="hr_urssaf_register"/>
1425+ </record>
1426+
1427+
1428+ <record id="hr_payroll_rules_C30_employe" model="hr.salary.rule">
1429+ <field name="category_id" ref="RETENUES"/>
1430+ <field name="name">CRDS</field>
1431+ <field name="code">C30</field>
1432+ <field name="sequence">2560</field>
1433+ <field name="condition_select">none</field>
1434+ <field name="amount_select">percentage</field>
1435+ <field name="amount_percentage">0.5</field>
1436+ <field name="amount_percentage_base">(categories.BRUT + categories.PREV)*0.9825</field>
1437+ <field name="appears_on_payslip" eval="True"/>
1438+ <field name="register_id" ref="hr_urssaf_register"/>
1439+ </record>
1440+
1441+
1442+
1443+
1444+ <!-- Salary Structure -->
1445+
1446+
1447+ <record id="hr_payroll_salary_structure_base" model="hr.payroll.structure">
1448+ <field name="code">Fr-Base</field>
1449+ <field name="name">Cotisations de base Employe Francais</field>
1450+ <field eval="[(6, 0, [ref('hr_payroll.hr_rule_basic'), ref('hr_payroll.hr_rule_taxable'),ref('hr_payroll.hr_rule_net'), ref('hr_rule_secu'), ref('hr_rule_tranche_a'), ref('hr_rule_tranche_b'), ref('hr_rule_tranche_c'), ref('hr_rule_tranche_1'), ref('hr_rule_tranche_2'), ref('hr_rule_total'), ref('hr_rule_total_charges_salariales'), ref('hr_rule_total_retenues'), ref('hr_rule_cumul_imposable'), ref('hr_rule_total_charges_patronales'), ref('hr_payroll_rules_C1_employe'), ref('hr_payroll_rules_C2_employe'), ref('hr_payroll_rules_C3_employe'), ref('hr_payroll_rules_C4_employe'), ref('hr_payroll_rules_C5_employe'), ref('hr_payroll_rules_C7_employe'), ref('hr_payroll_rules_C8_employe'), ref('hr_payroll_rules_C9_employe'), ref('hr_payroll_rules_C10_employe'), ref('hr_payroll_rules_C11_employe'), ref('hr_payroll_rules_C22_employe'), ref('hr_payroll_rules_C23_employe'), ref('hr_payroll_rules_C24_employe'), ref('hr_payroll_rules_C25_employe'), ref('hr_payroll_rules_C26_employe'), ref('hr_payroll_rules_C27_employe'), ref('hr_payroll_rules_C28_employe'), ref('hr_payroll_rules_C29_employe'), ref('hr_payroll_rules_C30_employe'), ref('hr_payroll_rules_C40_employe')])]" name="rule_ids"/>
1451+ <field name="company_id" ref="base.main_company"/>
1452+ <field name="parent_id" ref="hr_payroll.structure_base"/>
1453+ </record>
1454+
1455+
1456+ <record id="hr_payroll_salary_structure_employe_non_cadre" model="hr.payroll.structure">
1457+ <field name="code">Fr-NC</field>
1458+ <field name="name">Employe non-cadre</field>
1459+ <field eval="[(6, 0, [ref('hr_payroll_rules_C12_employe'), ref('hr_payroll_rules_C13_employe'), ref('hr_payroll_rules_C14_employe'), ref('hr_payroll_rules_C15_employe')])]" name="rule_ids"/>
1460+ <field name="company_id" ref="base.main_company"/>
1461+ <field name="parent_id" ref="hr_payroll_salary_structure_base"/>
1462+ </record>
1463+
1464+
1465+ <record id="hr_payroll_salary_structure_employe_cadre" model="hr.payroll.structure">
1466+ <field name="code">Fr-C</field>
1467+ <field name="name">Employe cadre</field>
1468+ <field eval="[(6, 0, [ref('hr_payroll_rules_C16_employe'), ref('hr_payroll_rules_C17_employe'), ref('hr_payroll_rules_C18_employe'), ref('hr_payroll_rules_C19_employe'), ref('hr_payroll_rules_C20_employe'), ref('hr_payroll_rules_C21_employe'), ref('hr_payroll_rules_C38_employe'), ref('hr_payroll_rules_C39_employe')])]" name="rule_ids"/>
1469+ <field name="company_id" ref="base.main_company"/>
1470+ <field name="parent_id" ref="hr_payroll_salary_structure_base"/>
1471+ </record>
1472+
1473+
1474+
1475+
1476+
1477+
1478+ </data>
1479+</openerp>
1480
1481=== added file 'l10n_fr_hr_payroll/l10n_fr_hr_payroll_view.xml'
1482--- l10n_fr_hr_payroll/l10n_fr_hr_payroll_view.xml 1970-01-01 00:00:00 +0000
1483+++ l10n_fr_hr_payroll/l10n_fr_hr_payroll_view.xml 2012-04-21 16:28:20 +0000
1484@@ -0,0 +1,70 @@
1485+<?xml version="1.0" encoding="utf-8"?>
1486+<openerp>
1487+ <data>
1488+
1489+
1490+ <record id="res_company_form_l10n_fr_payroll" model="ir.ui.view">
1491+ <field name="name">res.company.form.l10n.fr.payroll</field>
1492+ <field name="model">res.company</field>
1493+ <field name="type">form</field>
1494+ <field name="priority">20</field>
1495+ <field name="inherit_id" ref="base.view_company_form"/>
1496+ <field name="arch" type="xml">
1497+ <data>
1498+ <xpath expr="/form/notebook/page[@string='Configuration']" position="after">
1499+ <page string="Paye">
1500+ <field name="plafond_secu"/>
1501+ <field name="nombre_employes"/>
1502+ <newline/>
1503+ <field name="org_ss"/>
1504+ <newline/>
1505+ <field name="conv_coll"/>
1506+ </page>
1507+ </xpath>
1508+ </data>
1509+ </field>
1510+ </record>
1511+
1512+ <record id="hr_contract_view_form_l10n_fr_payroll" model="ir.ui.view">
1513+ <field name="name">hr.contract.view.form.l10n.fr.payroll</field>
1514+ <field name="model">hr.contract</field>
1515+ <field name="type">form</field>
1516+ <field name="priority">20</field>
1517+ <field name="inherit_id" ref="hr_payroll.hr_contract_form_inherit"/>
1518+ <field name="arch" type="xml">
1519+ <field name="struct_id" position="after">
1520+ <field name="qualif"/>
1521+ <field name="niveau"/>
1522+ <field name="coef"/>
1523+ </field>
1524+ </field>
1525+ </record>
1526+
1527+ <record id="hr_payslip_form_l10n_fr_payroll" model="ir.ui.view">
1528+ <field name="name">hr.payslip.form.l10n.fr.payroll</field>
1529+ <field name="model">hr.payslip</field>
1530+ <field name="type">form</field>
1531+ <field name="priority">20</field>
1532+ <field name="inherit_id" ref="hr_payroll.view_hr_payslip_form"/>
1533+ <field name="arch" type="xml">
1534+ <data>
1535+ <xpath expr="/form/notebook/page[@string='Other Information']/group/field[@name='paid']" position="after">
1536+ <field name="payment_mode"/>
1537+ </xpath>
1538+ </data>
1539+ </field>
1540+ </record>
1541+
1542+
1543+ <report
1544+ auto="False"
1545+ header="False"
1546+ id="fiche_paye"
1547+ model="hr.payslip"
1548+ name="fiche.paye"
1549+ rml="l10n_fr_hr_payroll/report/fiche_paye.rml"
1550+ string="Fiche de Paye" />
1551+
1552+
1553+ </data>
1554+</openerp>
1555
1556=== added directory 'l10n_fr_hr_payroll/report'
1557=== added file 'l10n_fr_hr_payroll/report/__init__.py'
1558--- l10n_fr_hr_payroll/report/__init__.py 1970-01-01 00:00:00 +0000
1559+++ l10n_fr_hr_payroll/report/__init__.py 2012-04-21 16:28:20 +0000
1560@@ -0,0 +1,27 @@
1561+#!/usr/bin/env python
1562+#-*- coding:utf-8 -*-
1563+
1564+##############################################################################
1565+#
1566+# OpenERP, Open Source Management Solution
1567+# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
1568+# d$
1569+#
1570+# This program is free software: you can redistribute it and/or modify
1571+# it under the terms of the GNU Affero General Public License as published by
1572+# the Free Software Foundation, either version 3 of the License, or
1573+# (at your option) any later version.
1574+#
1575+# This program is distributed in the hope that it will be useful,
1576+# but WITHOUT ANY WARRANTY; without even the implied warranty of
1577+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1578+# GNU Affero General Public License for more details.
1579+#
1580+# You should have received a copy of the GNU Affero General Public License
1581+# along with this program. If not, see <http://www.gnu.org/licenses/>.
1582+#
1583+##############################################################################
1584+
1585+import fiche_paye
1586+
1587+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
1588
1589=== added file 'l10n_fr_hr_payroll/report/fiche_paye.py'
1590--- l10n_fr_hr_payroll/report/fiche_paye.py 1970-01-01 00:00:00 +0000
1591+++ l10n_fr_hr_payroll/report/fiche_paye.py 2012-04-21 16:28:20 +0000
1592@@ -0,0 +1,76 @@
1593+#!/usr/bin/env python
1594+#-*- coding:utf-8 -*-
1595+
1596+##############################################################################
1597+#
1598+# OpenERP, Open Source Management Solution
1599+# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
1600+# d$
1601+#
1602+# This program is free software: you can redistribute it and/or modify
1603+# it under the terms of the GNU Affero General Public License as published by
1604+# the Free Software Foundation, either version 3 of the License, or
1605+# (at your option) any later version.
1606+#
1607+# This program is distributed in the hope that it will be useful,
1608+# but WITHOUT ANY WARRANTY; without even the implied warranty of
1609+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1610+# GNU Affero General Public License for more details.
1611+#
1612+# You should have received a copy of the GNU Affero General Public License
1613+# along with this program. If not, see <http://www.gnu.org/licenses/>.
1614+#
1615+##############################################################################
1616+
1617+from report import report_sxw
1618+
1619+class fiche_paye_parser(report_sxw.rml_parse):
1620+
1621+ def __init__(self, cr, uid, name, context):
1622+ super(fiche_paye_parser, self).__init__(cr, uid, name, context)
1623+ self.localcontext.update({
1624+ 'get_payslip_lines': self.get_payslip_lines,
1625+ 'get_total_by_rule_category': self.get_total_by_rule_category,
1626+ 'get_employer_line': self.get_employer_line,
1627+ })
1628+
1629+ def get_payslip_lines(self, obj):
1630+ payslip_line = self.pool.get('hr.payslip.line')
1631+ res = []
1632+ ids = []
1633+ for id in range(len(obj)):
1634+ if obj[id].appears_on_payslip == True and not obj[id].salary_rule_id.parent_rule_id :
1635+ ids.append(obj[id].id)
1636+ if ids:
1637+ res = payslip_line.browse(self.cr, self.uid, ids)
1638+ return res
1639+
1640+
1641+ def get_total_by_rule_category(self, obj, code):
1642+ payslip_line = self.pool.get('hr.payslip.line')
1643+ rule_cate_obj = self.pool.get('hr.salary.rule.category')
1644+
1645+ cate_ids = rule_cate_obj.search(self.cr, self.uid, [('code', '=', code)])
1646+
1647+ category_total = 0
1648+ line_ids = payslip_line.search(self.cr, self.uid, [('slip_id', '=', obj.id),('category_id.id', '=', cate_ids[0] )])
1649+
1650+ for line in payslip_line.browse(self.cr, self.uid, line_ids):
1651+ category_total += line.total
1652+
1653+ return category_total
1654+
1655+
1656+ def get_employer_line(self, obj, parent_line):
1657+
1658+ payslip_line = self.pool.get('hr.payslip.line')
1659+
1660+ line_ids = payslip_line.search(self.cr, self.uid, [('slip_id', '=', obj.id), ('salary_rule_id.parent_rule_id.id', '=', parent_line.salary_rule_id.id )])
1661+ res = payslip_line.browse(self.cr, self.uid, line_ids[0])
1662+
1663+ return res
1664+
1665+
1666+report_sxw.report_sxw('report.fiche.paye', 'hr.payslip', 'l10n_fr_hr_payroll/report/fiche_paye.rml', parser=fiche_paye_parser)
1667+
1668+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
1669
1670=== added file 'l10n_fr_hr_payroll/report/fiche_paye.rml'
1671--- l10n_fr_hr_payroll/report/fiche_paye.rml 1970-01-01 00:00:00 +0000
1672+++ l10n_fr_hr_payroll/report/fiche_paye.rml 2012-04-21 16:28:20 +0000
1673@@ -0,0 +1,449 @@
1674+<?xml version="1.0"?>
1675+<document filename="test.pdf">
1676+ <template pageSize="(595.0,842.0)" title="Fiche de paye" author="Yannick Buron" allowSplitting="20">
1677+ <pageTemplate id="first">
1678+ <frame id="first" x1="28.0" y1="28.0" width="539" height="786"/>
1679+ </pageTemplate>
1680+ </template>
1681+ <stylesheet>
1682+ <blockTableStyle id="Standard_Outline">
1683+ <blockAlignment value="LEFT"/>
1684+ <blockValign value="TOP"/>
1685+ </blockTableStyle>
1686+ <blockTableStyle id="Tableau1">
1687+ <blockAlignment value="LEFT"/>
1688+ <blockValign value="TOP"/>
1689+ </blockTableStyle>
1690+ <blockTableStyle id="Tableau4">
1691+ <blockAlignment value="LEFT"/>
1692+ <blockValign value="TOP"/>
1693+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="0,0" stop="0,-1"/>
1694+ <lineStyle kind="LINEAFTER" colorName="#000000" start="0,0" stop="0,-1"/>
1695+ <lineStyle kind="LINEABOVE" colorName="#000000" start="0,0" stop="0,0"/>
1696+ <lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="0,-1"/>
1697+ </blockTableStyle>
1698+ <blockTableStyle id="Tableau5">
1699+ <blockAlignment value="LEFT"/>
1700+ <blockValign value="TOP"/>
1701+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="0,0" stop="0,-1"/>
1702+ <lineStyle kind="LINEABOVE" colorName="#000000" start="0,0" stop="0,0"/>
1703+ <lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="0,-1"/>
1704+ <lineStyle kind="LINEAFTER" colorName="#000000" start="1,0" stop="1,-1"/>
1705+ <lineStyle kind="LINEABOVE" colorName="#000000" start="1,0" stop="1,0"/>
1706+ <lineStyle kind="LINEBELOW" colorName="#000000" start="1,-1" stop="1,-1"/>
1707+ </blockTableStyle>
1708+ <blockTableStyle id="Tableau2">
1709+ <blockAlignment value="LEFT"/>
1710+ <blockValign value="TOP"/>
1711+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="0,0" stop="0,-1"/>
1712+ <lineStyle kind="LINEAFTER" colorName="#000000" start="0,0" stop="0,-1"/>
1713+ <lineStyle kind="LINEABOVE" colorName="#000000" start="0,0" stop="0,0"/>
1714+ <lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="0,-1"/>
1715+ </blockTableStyle>
1716+ <blockTableStyle id="Tableau3">
1717+ <blockAlignment value="LEFT"/>
1718+ <blockValign value="TOP"/>
1719+ </blockTableStyle>
1720+ <blockTableStyle id="Tableau7">
1721+ <blockAlignment value="LEFT"/>
1722+ <blockValign value="TOP"/>
1723+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="0,0" stop="0,-1"/>
1724+ <lineStyle kind="LINEABOVE" colorName="#000000" start="0,0" stop="0,0"/>
1725+ <lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="0,-1"/>
1726+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="1,0" stop="1,-1"/>
1727+ <lineStyle kind="LINEABOVE" colorName="#000000" start="1,0" stop="1,0"/>
1728+ <lineStyle kind="LINEBELOW" colorName="#000000" start="1,-1" stop="1,-1"/>
1729+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="2,0" stop="2,-1"/>
1730+ <lineStyle kind="LINEABOVE" colorName="#000000" start="2,0" stop="2,0"/>
1731+ <lineStyle kind="LINEBELOW" colorName="#000000" start="2,-1" stop="2,-1"/>
1732+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="3,0" stop="3,-1"/>
1733+ <lineStyle kind="LINEABOVE" colorName="#000000" start="3,0" stop="3,0"/>
1734+ <lineStyle kind="LINEBELOW" colorName="#000000" start="3,-1" stop="3,-1"/>
1735+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="4,0" stop="4,-1"/>
1736+ <lineStyle kind="LINEAFTER" colorName="#000000" start="4,0" stop="4,-1"/>
1737+ <lineStyle kind="LINEABOVE" colorName="#000000" start="4,0" stop="4,0"/>
1738+ <lineStyle kind="LINEBELOW" colorName="#000000" start="4,-1" stop="4,-1"/>
1739+ </blockTableStyle>
1740+ <blockTableStyle id="Tableau8">
1741+ <blockAlignment value="LEFT"/>
1742+ <blockValign value="TOP"/>
1743+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="0,0" stop="0,-1"/>
1744+ <lineStyle kind="LINEABOVE" colorName="#000000" start="0,0" stop="0,0"/>
1745+ <lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="0,-1"/>
1746+ <lineStyle kind="LINEAFTER" colorName="#000000" start="1,0" stop="1,-1"/>
1747+ <lineStyle kind="LINEABOVE" colorName="#000000" start="1,0" stop="1,0"/>
1748+ <lineStyle kind="LINEBELOW" colorName="#000000" start="1,-1" stop="1,-1"/>
1749+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="2,0" stop="2,-1"/>
1750+ <lineStyle kind="LINEABOVE" colorName="#000000" start="2,0" stop="2,0"/>
1751+ <lineStyle kind="LINEBELOW" colorName="#000000" start="2,-1" stop="2,-1"/>
1752+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="3,0" stop="3,-1"/>
1753+ <lineStyle kind="LINEABOVE" colorName="#000000" start="3,0" stop="3,0"/>
1754+ <lineStyle kind="LINEBELOW" colorName="#000000" start="3,-1" stop="3,-1"/>
1755+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="4,0" stop="4,-1"/>
1756+ <lineStyle kind="LINEABOVE" colorName="#000000" start="4,0" stop="4,0"/>
1757+ <lineStyle kind="LINEBELOW" colorName="#000000" start="4,-1" stop="4,-1"/>
1758+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="5,0" stop="5,-1"/>
1759+ <lineStyle kind="LINEABOVE" colorName="#000000" start="5,0" stop="5,0"/>
1760+ <lineStyle kind="LINEBELOW" colorName="#000000" start="5,-1" stop="5,-1"/>
1761+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="6,0" stop="6,-1"/>
1762+ <lineStyle kind="LINEAFTER" colorName="#000000" start="6,0" stop="6,-1"/>
1763+ <lineStyle kind="LINEABOVE" colorName="#000000" start="6,0" stop="6,0"/>
1764+ <lineStyle kind="LINEBELOW" colorName="#000000" start="6,-1" stop="6,-1"/>
1765+ </blockTableStyle>
1766+ <blockTableStyle id="Tableau11">
1767+ <blockAlignment value="LEFT"/>
1768+ <blockValign value="TOP"/>
1769+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="1,0" stop="1,-1"/>
1770+ <lineStyle kind="LINEABOVE" colorName="#000000" start="1,0" stop="1,0"/>
1771+ <lineStyle kind="LINEBELOW" colorName="#000000" start="1,-1" stop="1,-1"/>
1772+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="2,0" stop="2,-1"/>
1773+ <lineStyle kind="LINEAFTER" colorName="#000000" start="2,0" stop="2,-1"/>
1774+ <lineStyle kind="LINEABOVE" colorName="#000000" start="2,0" stop="2,0"/>
1775+ <lineStyle kind="LINEBELOW" colorName="#000000" start="2,-1" stop="2,-1"/>
1776+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="1,1" stop="1,-1"/>
1777+ <lineStyle kind="LINEBELOW" colorName="#000000" start="1,-1" stop="1,-1"/>
1778+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="2,1" stop="2,-1"/>
1779+ <lineStyle kind="LINEAFTER" colorName="#000000" start="2,1" stop="2,-1"/>
1780+ <lineStyle kind="LINEBELOW" colorName="#000000" start="2,-1" stop="2,-1"/>
1781+ </blockTableStyle>
1782+ <blockTableStyle id="Tableau6">
1783+ <blockAlignment value="LEFT"/>
1784+ <blockValign value="TOP"/>
1785+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="0,0" stop="0,-1"/>
1786+ <lineStyle kind="LINEABOVE" colorName="#000000" start="0,0" stop="0,0"/>
1787+ <lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="0,-1"/>
1788+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="1,0" stop="1,-1"/>
1789+ <lineStyle kind="LINEABOVE" colorName="#000000" start="1,0" stop="1,0"/>
1790+ <lineStyle kind="LINEBELOW" colorName="#000000" start="1,-1" stop="1,-1"/>
1791+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="2,0" stop="2,-1"/>
1792+ <lineStyle kind="LINEABOVE" colorName="#000000" start="2,0" stop="2,0"/>
1793+ <lineStyle kind="LINEBELOW" colorName="#000000" start="2,-1" stop="2,-1"/>
1794+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="3,0" stop="3,-1"/>
1795+ <lineStyle kind="LINEABOVE" colorName="#000000" start="3,0" stop="3,0"/>
1796+ <lineStyle kind="LINEBELOW" colorName="#000000" start="3,-1" stop="3,-1"/>
1797+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="4,0" stop="4,-1"/>
1798+ <lineStyle kind="LINEABOVE" colorName="#000000" start="4,0" stop="4,0"/>
1799+ <lineStyle kind="LINEBELOW" colorName="#000000" start="4,-1" stop="4,-1"/>
1800+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="5,0" stop="5,-1"/>
1801+ <lineStyle kind="LINEAFTER" colorName="#000000" start="5,0" stop="5,-1"/>
1802+ <lineStyle kind="LINEABOVE" colorName="#000000" start="5,0" stop="5,0"/>
1803+ <lineStyle kind="LINEBELOW" colorName="#000000" start="5,-1" stop="5,-1"/>
1804+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="0,1" stop="0,-1"/>
1805+ <lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="0,-1"/>
1806+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="1,1" stop="1,-1"/>
1807+ <lineStyle kind="LINEBELOW" colorName="#000000" start="1,-1" stop="1,-1"/>
1808+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="2,1" stop="2,-1"/>
1809+ <lineStyle kind="LINEBELOW" colorName="#000000" start="2,-1" stop="2,-1"/>
1810+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="3,1" stop="3,-1"/>
1811+ <lineStyle kind="LINEBELOW" colorName="#000000" start="3,-1" stop="3,-1"/>
1812+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="4,1" stop="4,-1"/>
1813+ <lineStyle kind="LINEBELOW" colorName="#000000" start="4,-1" stop="4,-1"/>
1814+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="5,1" stop="5,-1"/>
1815+ <lineStyle kind="LINEAFTER" colorName="#000000" start="5,1" stop="5,-1"/>
1816+ <lineStyle kind="LINEBELOW" colorName="#000000" start="5,-1" stop="5,-1"/>
1817+ </blockTableStyle>
1818+ <blockTableStyle id="Tableau9">
1819+ <blockAlignment value="LEFT"/>
1820+ <blockValign value="TOP"/>
1821+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="0,0" stop="0,-1"/>
1822+ <lineStyle kind="LINEABOVE" colorName="#000000" start="0,0" stop="0,0"/>
1823+ <lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="0,-1"/>
1824+ <lineStyle kind="LINEABOVE" colorName="#000000" start="1,0" stop="1,0"/>
1825+ <lineStyle kind="LINEBELOW" colorName="#000000" start="1,-1" stop="1,-1"/>
1826+ <lineStyle kind="LINEAFTER" colorName="#000000" start="2,0" stop="2,-1"/>
1827+ <lineStyle kind="LINEABOVE" colorName="#000000" start="2,0" stop="2,0"/>
1828+ <lineStyle kind="LINEBELOW" colorName="#000000" start="2,-1" stop="2,-1"/>
1829+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="0,1" stop="0,-1"/>
1830+ <lineStyle kind="LINEAFTER" colorName="#000000" start="2,1" stop="2,-1"/>
1831+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="0,2" stop="0,-1"/>
1832+ <lineStyle kind="LINEAFTER" colorName="#000000" start="2,2" stop="2,-1"/>
1833+ <lineStyle kind="LINEBEFORE" colorName="#000000" start="0,3" stop="0,-1"/>
1834+ <lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="0,-1"/>
1835+ <lineStyle kind="LINEBELOW" colorName="#000000" start="1,-1" stop="1,-1"/>
1836+ <lineStyle kind="LINEAFTER" colorName="#000000" start="2,3" stop="2,-1"/>
1837+ <lineStyle kind="LINEBELOW" colorName="#000000" start="2,-1" stop="2,-1"/>
1838+ </blockTableStyle>
1839+ <initialize>
1840+ <paraStyle name="all" alignment="justify"/>
1841+ </initialize>
1842+ <paraStyle name="P1" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
1843+ <paraStyle name="P2" rightIndent="-56.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
1844+ <paraStyle name="P3" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
1845+ <paraStyle name="P4" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
1846+ <paraStyle name="P5" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT"/>
1847+ <paraStyle name="P6" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
1848+ <paraStyle name="P7" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
1849+ <paraStyle name="P8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
1850+ <paraStyle name="P9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
1851+ <paraStyle name="P10" fontName="Helvetica-Bold" fontSize="14.0" leading="17" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
1852+ <paraStyle name="P11" fontName="Helvetica"/>
1853+ <paraStyle name="P12" fontName="Helvetica" alignment="LEFT"/>
1854+ <paraStyle name="P13" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
1855+ <paraStyle name="P14" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
1856+ <paraStyle name="P15" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
1857+ <paraStyle name="P16" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
1858+ <paraStyle name="P17" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
1859+ <paraStyle name="P18" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
1860+ <paraStyle name="P19" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
1861+ <paraStyle name="P20" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
1862+ <paraStyle name="P21" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
1863+ <paraStyle name="P22" fontName="Helvetica" alignment="LEFT" spaceBefore="0.0" spaceAfter="6.0"/>
1864+ <paraStyle name="P23" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
1865+ <paraStyle name="Standard" fontName="Helvetica"/>
1866+ <paraStyle name="Heading" fontName="Helvetica" fontSize="14.0" leading="17" spaceBefore="12.0" spaceAfter="6.0"/>
1867+ <paraStyle name="Text body" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
1868+ <paraStyle name="List" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
1869+ <paraStyle name="Caption" fontName="Helvetica" fontSize="12.0" leading="15" spaceBefore="6.0" spaceAfter="6.0"/>
1870+ <paraStyle name="Index" fontName="Helvetica"/>
1871+ <paraStyle name="terp_header" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
1872+ <paraStyle name="terp_default_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
1873+ <paraStyle name="terp_default_space" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
1874+ <paraStyle name="terp_header_Centre" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
1875+ <paraStyle name="terp_default_Centre_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
1876+ <paraStyle name="terp_default_Centre_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
1877+ <paraStyle name="terp_default_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
1878+ <paraStyle name="terp_default_Bold_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
1879+ <paraStyle name="terp_default_Bold_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
1880+ <paraStyle name="Table Contents" fontName="Helvetica"/>
1881+ <paraStyle name="terp_tblheader_Details" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
1882+ <paraStyle name="terp_tblheader_Details_Right" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
1883+ <paraStyle name="terp_tblheader_General" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
1884+ <paraStyle name="Table Heading" fontName="Helvetica" alignment="CENTER"/>
1885+ <paraStyle name="payslip_adj" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
1886+ <paraStyle name="terp_default_7" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="7.0" leading="9" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
1887+ <images/>
1888+ </stylesheet>
1889+ <story>
1890+ <para style="P2">[[repeatIn(objects,'o')]]</para>
1891+ <blockTable colWidths="239.0,38.0,262.0" style="Tableau1">
1892+ <tr>
1893+ <td>
1894+ <blockTable colWidths="233.0" style="Tableau4">
1895+ <tr>
1896+ <td>
1897+ <para style="P10">BULLETIN DE PAIE</para>
1898+ </td>
1899+ </tr>
1900+ </blockTable>
1901+ <para style="P13">PAIE DU [[ formatLang(o.date_from, date=True) or '']] AU [[ formatLang(o.date_to, date=True) or '' ]]</para>
1902+ <blockTable colWidths="56.0,178.0" style="Tableau5">
1903+ <tr>
1904+ <td>
1905+ <para style="terp_default_8">Matricule : </para>
1906+ <para style="terp_default_8">N° s.s :</para>
1907+ <para style="terp_default_8">Emploi :</para>
1908+ <para style="terp_default_8">Qualif :</para>
1909+ <para style="terp_default_8">Niveau : </para>
1910+ <para style="terp_default_8">Coef :</para>
1911+ <para style="P7">Entrée :</para>
1912+ </td>
1913+ <td>
1914+ <para style="P5">[[o.employee_id.sinid or '_']]</para>
1915+ <para style="terp_default_8">[[o.employee_id.ssnid or '_']]</para>
1916+ <para style="terp_default_8">[[o.contract_id.job_id.name or '_']]</para>
1917+ <para style="terp_default_8">[[o.contract_id.qualif or '_']]</para>
1918+ <para style="terp_default_8">[[o.contract_id.niveau or '_']]</para>
1919+ <para style="terp_default_8">[[o.contract_id.coef or '_']]</para>
1920+ <para style="P5">[[o.contract_id.date_start or '_']] Sortie : [[o.contract_id.date_end or '']] </para>
1921+ </td>
1922+ </tr>
1923+ <tr>
1924+ <td>
1925+ <para style="P7">ORG. S.S :</para>
1926+ </td>
1927+ <td>
1928+ <para style="P7">[[o.employee_id.company_id.org_ss or '_']] </para>
1929+ </td>
1930+ </tr>
1931+ </blockTable>
1932+ <para style="P14">
1933+ <font color="white"> </font>
1934+ </para>
1935+ </td>
1936+ <td>
1937+ <para style="P5">
1938+ <font color="white"> </font>
1939+ </para>
1940+ </td>
1941+ <td>
1942+ <blockTable colWidths="257.0" style="Tableau2">
1943+ <tr>
1944+ <td>
1945+ <para style="terp_default_8">[[o.employee_id.company_id.partner_id.title.name or '']] [[o.employee_id.company_id.name or '_']]</para>
1946+ <para style="terp_default_8">[[o.employee_id.company_id.street or '_']]</para>
1947+ <para style="terp_default_8">[[o.employee_id.company_id.street2 or '']] </para>
1948+ <para style="terp_default_8">[[o.employee_id.company_id.zip or '_']] [[o.employee_id.company_id.city or '']]</para>
1949+ <para style="terp_default_8">SIRET : [[o.employee_id.company_id.siret or '_']] APE : [[o.employee_id.company_id.ape or '_']]</para>
1950+ </td>
1951+ </tr>
1952+ </blockTable>
1953+ <para style="P5">
1954+ <font color="white"> </font>
1955+ </para>
1956+ <para style="P5">
1957+ <font color="white"> </font>
1958+ </para>
1959+ <para style="P5">
1960+ <font color="white"> </font>
1961+ </para>
1962+ <blockTable colWidths="257.0" style="Tableau3">
1963+ <tr>
1964+ <td>
1965+ <para style="terp_default_Bold_8">[[o.employee_id.name or '_']]</para>
1966+ <para style="terp_default_Bold_8">[[o.employee_id.address_home_id.street or '_' ]]</para>
1967+ <para style="terp_default_Bold_8">[[o.employee_id.address_home_id.street2 or '' ]]</para>
1968+ <para style="terp_default_Bold_8">[[o.employee_id.address_home_id.zip or '_' ]] [[o.employee_id.address_home_id.city or '' ]]</para>
1969+ </td>
1970+ </tr>
1971+ </blockTable>
1972+ <para style="P5">
1973+ <font color="white"> </font>
1974+ </para>
1975+ </td>
1976+ </tr>
1977+ </blockTable>
1978+ <para style="P3">
1979+ <font color="white"> </font>
1980+ </para>
1981+ <para style="P11">
1982+ <font color="white"> </font>
1983+ </para>
1984+ <blockTable colWidths="255.0,56.0,56.0,58.0,113.0" style="Tableau7">
1985+ <tr>
1986+ <td>
1987+ <para style="P15">DESIGNATION</para>
1988+ </td>
1989+ <td>
1990+ <para style="P15">QUANTITE / BASE</para>
1991+ </td>
1992+ <td>
1993+ <para style="P15">TAUX</para>
1994+ </td>
1995+ <td>
1996+ <para style="P15">MONTANT</para>
1997+ </td>
1998+ <td>
1999+ <para style="P15">CHARGES PATRONALES</para>
2000+ </td>
2001+ </tr>
2002+ </blockTable>
2003+ <section>
2004+ <para style="terp_default_8">[[repeatIn(get_payslip_lines(o.line_ids),'p')]]</para>
2005+ <blockTable colWidths="45.0,210.0,56.0,57.0,58.0,57.0,56.0" style="Tableau8">
2006+ <tr>
2007+ <td>
2008+ <para style="terp_default_7">[[ p.code or '' ]]</para>
2009+ </td>
2010+ <td>
2011+ <para style="terp_default_7">[[ p.name or '' ]]</para>
2012+ </td>
2013+ <td>
2014+ <para style="terp_default_7">[[ ((p.amount_select== 'percentage') or removeParentNode('para')) and '' ]] [[ p.amount or '' ]]</para>
2015+ <para style="terp_default_7">[[ ((p.amount_select== 'fix') or removeParentNode('para')) and '' ]] [[ p.quantity or '' ]]</para>
2016+ <para style="terp_default_7">[[ ((p.amount_select&lt;&gt; 'fix' and p.amount_select&lt;&gt; 'percentage') or removeParentNode('para')) and '' ]]</para>
2017+ </td>
2018+ <td>
2019+ <para style="terp_default_7">[[ ((p.amount_select == 'percentage') or removeParentNode('para')) and '' ]] [[ p.rate or '' ]]</para>
2020+ <para style="terp_default_7">[[ ((p.amount_select &lt;&gt; 'percentage') or removeParentNode('para')) and '' ]]</para>
2021+ </td>
2022+ <td>
2023+ <para style="terp_default_7">[[ p.total or '' ]]</para>
2024+ </td>
2025+ <td>
2026+ <para style="terp_default_7">[[ get_employer_line(o, p).rate or '']] </para>
2027+ </td>
2028+ <td>
2029+ <para style="terp_default_7">[[ get_employer_line(o,p).total or '' ]]</para>
2030+ </td>
2031+ </tr>
2032+ </blockTable>
2033+ </section>
2034+ <para style="terp_default_8">
2035+ <font color="white"> </font>
2036+ </para>
2037+ <para style="terp_default_8">
2038+ <font color="white"> </font>
2039+ </para>
2040+ <blockTable colWidths="360.0,89.0,89.0" style="Tableau11">
2041+ <tr>
2042+ <td>
2043+ <para style="terp_default_Bold_8">Mode de reglement : [[ o.payment_mode or '' ]]</para>
2044+ <para style="P20">Paye le : [[ formatLang(o.move_id.date, date=True) or '']]</para>
2045+ </td>
2046+ <td>
2047+ <para style="P18">NET A PAYER</para>
2048+ </td>
2049+ <td>
2050+ <para style="P18">TOTAL CHARGES PATRONALES</para>
2051+ </td>
2052+ </tr>
2053+ <tr>
2054+ <td>
2055+ <para style="P19">Conv. Coll.: [[ o.employee_id.company_id.conv_coll or '' ]]</para>
2056+ </td>
2057+ <td>
2058+ <para style="P21">[[ get_total_by_rule_category(o, 'NET') ]]</para>
2059+ </td>
2060+ <td>
2061+ <para style="P8">[[ get_total_by_rule_category(o, 'COMP') ]]</para>
2062+ </td>
2063+ </tr>
2064+ </blockTable>
2065+ <blockTable colWidths="90.0,90.0,90.0,91.0,89.0,89.0" style="Tableau6">
2066+ <tr>
2067+ <td>
2068+ <para style="P16">SALAIRE BRUT</para>
2069+ </td>
2070+ <td>
2071+ <para style="P18">TOTAL CHARGES SALARIALES</para>
2072+ </td>
2073+ <td>
2074+ <para style="P18">NET IMPOSABLE</para>
2075+ </td>
2076+ <td>
2077+ <para style="P18">PLAFOND S.S.</para>
2078+ </td>
2079+ <td>
2080+ <para style="P17">
2081+ <font color="white"> </font>
2082+ </para>
2083+ </td>
2084+ <td>
2085+ <para style="P16">COUT GLOBAL SALARIE</para>
2086+ </td>
2087+ </tr>
2088+ <tr>
2089+ <td>
2090+ <para style="P8">[[ get_total_by_rule_category(o, 'BRUT') ]]</para>
2091+ </td>
2092+ <td>
2093+ <para style="P8">[[ get_total_by_rule_category(o, 'SALC') ]]</para>
2094+ </td>
2095+ <td>
2096+ <para style="P8">[[ get_total_by_rule_category(o, 'C_IMP') ]]</para>
2097+ </td>
2098+ <td>
2099+ <para style="P9">[[ o.employee_id.company_id.plafond_secu or '' ]]</para>
2100+ </td>
2101+ <td>
2102+ <para style="P17">
2103+ <font color="white"> </font>
2104+ </para>
2105+ </td>
2106+ <td>
2107+ <para style="P8">[[ get_total_by_rule_category(o, 'TOTAL') ]]</para>
2108+ </td>
2109+ </tr>
2110+ </blockTable>
2111+ <para style="P22">
2112+ <font color="white"> </font>
2113+ </para>
2114+
2115+ <para style="P3">
2116+ <font color="white"> </font>
2117+ </para>
2118+ <para style="P6">DANS VOTRE INTERET ET POUR VOUS AIDER A FAIRE VALOIR VOS DROITS, CONSERVER CE BULLETIN DE PAIE SANS LIMITATION DE DUREE</para>
2119+
2120+ </story>
2121+</document>
2122+

Subscribers

People subscribed via source and target branches

to all changes: