Skip to Content
Menu
Musisz się zarejestrować, aby móc wchodzić w interakcje z tą społecznością.
To pytanie dostało ostrzeżenie
4 Odpowiedzi
3583 Widoki

Hello!!

I work with a class named test_example:


class test_example(osv.osv):

_name = 'test.example'

_columns = {

'date_start': fields.date('Date Start ',size=256),

'date_end': fields.date('Date End ',size=256),

'company_id': fields.many2one('res.company', string ="Company Name",size=256),

}

I want to create a report which will contains all the employees of the selected company.

Please help

I really need an answer please

Awatar
Odrzuć

Please don't create double posts for exactly the same.. You could have easily modified your initial topic and added this code.

Autor

try to answer !!!

Sorry but I never work with RML reports. They're from V7 and will soon be deprecated so I never use them.. Can't answer this one for you.

Najlepsza odpowiedź

First for every report you need a source for the report, because you need all the employees of an specific company first you need to select the company in a wizard like form that have the print button or you could use the company form itself. You need to define what will be the model of the report, could be res.company or hr.employee. More direct solution is to define the report on the hr.employee (that not means that the print button need to be in the employee form, just the type of records that you iterate on the report). Next in your case you need to filter the employees by the selected company. That's better in a wizard like form, you select the company, clic on the print button that call a method in your wizard and search the employees ids filtering by the selected company and pass it to the report by the context, something like this:

    def print_btn(self, cr, uid, ids, context=None):
company_id = self.browse(cr, uid, ids, context=context)[0].company_id
employee_ids = self.pool.get('hr.employee').search(cr, uid, [('company_id','=',company_id)])
context = dict(context or {}, active_ids=employee_ids)
return { 'type': 'ir.actions.report.xml', 'report_name': 'employee.report', 'context': context, }

next you just need to define your rml report in xml and the report itself. For iterate on the employees:

<?xml version="1.0"?>
<document filename="test.pdf">
  <template title="Employees" author="Soltein" allowSplitting="20">
    <pageTemplate id="first">
      	<pageGraphics>
      	    <image x="20" y="760" height="70.0">[[company.logo]]</image>
      	    <rect x="15" y="750" width="410" height="3" fill="yes" stroke="yes"/>
      	    <rect x="425" y="746" width="155" height="12" fill="yes" stroke="yes"/>
      	    <setFont name="Helvetica" size="8"/>
      	    <drawRightString x="550" y="15">Pág.: <pageNumber/> / <pageCount/></drawRightString>
      	    <fill color="white"/>
      	    <setFont name="Helvetica-Bold" size="9"/>
      	    <drawString x="440" y="750">[[company.website]]</drawString>
	    </pageGraphics>
      <frame id="first" x1="15.0" y1="20.0" width="560" height="800"/>
    </pageTemplate>
  </template>
<story>
<blockTable colWidths="534.0"> <tr> <td> <para>Name</para> </td> </tr> </blockTable>
<blockTable colWidths="534.0"> <tr>[[ repeatIn(objects,'o') ]] <td> <para>[[ o.name ]]</para> </td> </tr> </blockTable> 
</story> </document>

That is a very simple report template, you could add more columns to the blocktable and don't forget to change colwidths with a value for every column that you put in the blocktable. You will be iterating for every employee as 'o' and to output any field of the employee you use this syntax [[ o.field ]]

Awatar
Odrzuć
Powiązane posty Odpowiedzi Widoki Czynność
1
wrz 15
3280
0
sie 15
2761
1
mar 15
4909
3
lip 24
8339
0
kwi 18
2713