← Back to team overview

clearcorp team mailing list archive

lp:~dr.clearcorp/openerp-ccorp-addons/6.1-partner_ledger_report into lp:openerp-ccorp-addons/6.1

 

Diana Rodríguez Martínez has proposed merging lp:~dr.clearcorp/openerp-ccorp-addons/6.1-partner_ledger_report into lp:openerp-ccorp-addons/6.1.

Requested reviews:
  CLEARCORP drivers (clearcorp-drivers)

For more details, see:
https://code.launchpad.net/~dr.clearcorp/openerp-ccorp-addons/6.1-partner_ledger_report/+merge/163957

[ADD] Add module that create the general partner ledger report
[FIX] Fix the account report library. Improve the get_move_lines method
-- 
https://code.launchpad.net/~dr.clearcorp/openerp-ccorp-addons/6.1-partner_ledger_report/+merge/163957
Your team CLEARCORP development team is subscribed to branch lp:openerp-ccorp-addons/6.1.
=== added directory 'account_general_ledger_report'
=== added file 'account_general_ledger_report/__init__.py'
--- account_general_ledger_report/__init__.py	1970-01-01 00:00:00 +0000
+++ account_general_ledger_report/__init__.py	2013-05-15 14:27:49 +0000
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    OpenERP, Open Source Management Solution
+#    Addons modules by CLEARCORP S.A.
+#    Copyright (C) 2009-TODAY CLEARCORP S.A. (<http://clearcorp.co.cr>).
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+import report
+import wizard
\ No newline at end of file

=== added file 'account_general_ledger_report/__openerp__.py'
--- account_general_ledger_report/__openerp__.py	1970-01-01 00:00:00 +0000
+++ account_general_ledger_report/__openerp__.py	2013-05-15 14:27:49 +0000
@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    OpenERP, Open Source Management Solution
+#    Addons modules by CLEARCORP S.A.
+#    Copyright (C) 2009-TODAY CLEARCORP S.A. (<http://clearcorp.co.cr>).
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+{
+    'name': 'General Partner Webkit Report',
+    'version': '1.0',
+    'url': 'http://launchpad.net/openerp-ccorp-addons',
+    'author': 'ClearCorp S.A.',
+    'website': 'http://clearcorp.co.cr',
+    'category': 'Accounting & Finance',
+    'complexity': 'normal',
+    'description': """This module modifies the general ledger report""",
+    'depends': [
+        'account',
+        'account_webkit_report_library',
+        'account_financial_report_webkit',
+    ],
+    'init_xml': [],
+    'demo_xml': [],
+    'update_xml': ['report/report.xml',
+                   'wizard/account_general_ledger_report_wizard.xml',
+                   'report_menus.xml',],
+    'license': 'AGPL-3',
+    'installable': True,
+    'active': False,
+}
\ No newline at end of file

=== added directory 'account_general_ledger_report/report'
=== added file 'account_general_ledger_report/report/__init__.py'
--- account_general_ledger_report/report/__init__.py	1970-01-01 00:00:00 +0000
+++ account_general_ledger_report/report/__init__.py	2013-05-15 14:27:49 +0000
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    OpenERP, Open Source Management Solution
+#    Addons modules by CLEARCORP S.A.
+#    Copyright (C) 2009-TODAY CLEARCORP S.A. (<http://clearcorp.co.cr>).
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+import account_general_ledger_report

=== added file 'account_general_ledger_report/report/account_general_ledger_report.mako'
--- account_general_ledger_report/report/account_general_ledger_report.mako	1970-01-01 00:00:00 +0000
+++ account_general_ledger_report/report/account_general_ledger_report.mako	2013-05-15 14:27:49 +0000
@@ -0,0 +1,160 @@
+<!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html xmlns="http://www.w3.org/1999/xhtml";>
+    <head>
+        <link rel='stylesheet' href='addons/account_webkit_report_library/webkit_headers/main.css' />
+        <style>
+            ${css}
+        </style>
+    </head>
+    <body>
+        <div class="table header">
+           <div class="table-row">
+               <div class="table-cell logo">${helper.embed_logo_by_name('internal_reports_logo', height=100)|n}</div>
+               <br/>
+               <div class="table-cell text">
+                    <p class="title">${_('General Ledger Report ')}</p>
+               </div>
+           </div>
+        </div>
+        <%
+            chart_account = get_chart_account_id(data)
+            fiscalyear = get_fiscalyear(data)
+            filter = get_filter(data)
+        %>
+        <div class="table list">
+            <div class="table-header">
+                <div class="table-row labels no-wrap">
+                    <div class="table-cell first-column" style="width: 70px">${_('Chart of Accounts: ')}<br/>${chart_account.name}</div>
+                    <div class="table-cell" style="width: 70px">${_('Fiscal Year: ')}<br/>${fiscalyear.name}</div>
+                    <div class="table-cell" style="width: 70px">${_('Filter by: ')}<br/>
+                         %if filter == 'filter_date':
+                             <%
+                                start_date = get_start_date(data)
+                                stop_date = get_stop_date(data)
+                             %>
+                             ${_('Dates: ')}<br/>
+                             ${formatLang(start_date, date=True) if start_date else u'' }&nbsp;-&nbsp;${formatLang(stop_date, date=True) if start_date else u'' }
+                         %elif filter == 'filter_period':
+                             <%
+                                start_period = get_start_period(data)
+                                stop_period = get_end_period(data)
+                             %>
+                             ${_('Period: ')}<br/>
+                             ${start_period.name if start_period else u''}&nbsp;-&nbsp;${stop_period.name if stop_period else u'' }
+                         %else:
+                             ${_('No filter')}
+                        %endif
+                    </div>
+                    <div class="table-cell" style="width: 70px">${_('Accounts: ')}<br/>
+                         %if accounts(data):
+                           %for account in accounts(data):
+                                ${(account.code) + ','}<br/>
+                           %endfor
+                        %else:
+                            ${_('All')}
+                        %endif
+                    </div>
+                    <div class="table-cell" style="width: 70px">${_('Target moves: ')}<br/>${ display_target_move(data) }</div>
+                </div>
+            </div>            
+        </div>
+        <%
+            account_lines, account_balance, account_conciliation = get_data(cr, uid, data) 
+        %> 
+        %for account, move_lines in account_lines.items():
+           <%
+                count = 1
+                cumul_balance_ant = 0
+                cumul_balance_ac = 0
+                amount_total_debit = amount_total_credit = amount_total_acum = 0.0
+           %>
+           <br/><br/>
+           <div class="table header">
+                <div class="table-row">
+                   <div class="table-cell text">
+                        <p class="subtitle">${account.code +' - ' +account.name}</p>
+                        <p class="subtitle">${_('Initial balance:')}&nbsp;&nbsp;${formatLang(account_balance[account.id]['balance'])}</p>
+                   </div>
+                </div>
+           </div>
+           <div class="table list">
+                <div class="table-header">
+                    <div class="table-row labels no-wrap">                       
+                        <div class="table-cell first-column" style="width: 70px">${_('Date')}</div>
+                        <div class="table-cell" style="width: 70px">${_('Period')}</div>
+                        <div class="table-cell" style="width: 70px">${_('Entry')}</div>
+                        <div class="table-cell" style="width: 70px">${_('Journal')}</div>
+                        <div class="table-cell" style="width: 100px">${_('Partner')}</div>                    
+                        <div class="table-cell" style="width: 100px">${_('Label')}</div>
+                        %if len(account_conciliation) > 0:
+                            <div class="table-cell" style="width: 70px">${_('Reconcile')}</div>
+                        %endif
+                        <div class="table-cell" style="width: 80px">${_('Debit')}</div>
+                        <div class="table-cell" style="width: 80px">${_('Credit')}</div>
+                        <div class="table-cell amount last-column" style="width: 80px">${_('Cumul. Bal.')}</div>                        
+                    </div>
+                </div>
+                <div class="table-body"> 
+                    %for line in move_lines:
+                        <% 
+                            move_names = extract_name_move(cr, uid, move_lines)
+                            
+                            amount_total_debit += line.debit
+                            amount_total_credit += line.credit
+                        %>
+                        <div class="table-row ${row_even and 'even' or 'odd'}">
+                            <div class="table-cell first-column" style="width: 70px">${formatLang(line.date, date=True)}</div>
+                            <div class="table-cell" style="width: 70px">${line.period_id.name or ''}</div>
+                            <div class="table-cell" style="width: 70px">${move_names[line.id]}</div>
+                            <div class="table-cell" style="width: 70px">${line.journal_id.name}</div>    
+                            <div class="table-cell" style="width: 100px">${line.partner_id.name or ''}</div>
+                            <div class="table-cell" style="width: 100px">${line.name or ''}</div> 
+                            %if len(account_conciliation) > 0:
+                                <div class="table-cell" style="width: 70px">
+                                    %for conciliation in account_conciliation[account.id][line.id]:
+                                        ${conciliation or ''}
+                                    %endfor
+                                 </div>
+                            %endif 
+                            <div class="table-cell amount" style="width: 80px">${formatLang(line.debit)}</div>
+                            <div class="table-cell amount" style="width: 80px">${formatLang(line.credit)}</div>  
+                            %if count == 1:
+                                <%                                  
+                                    cumul_balance_ant = account_balance[account.id]['balance']
+                                %>
+                                <div class="table-cell amount last-column" style="width: 80px">${formatLang(cumul_balance_ant)}</div>  
+                                <% count +=1 %>           
+                            %else:
+                                <%                                     
+                                   cumul_balance_ac = cumul_balance_ant + line.debit - line.credit
+                                   cumul_balance_ant = cumul_balance_ac
+                                %>
+                                 <div class="table-cell amount last-column" style="width: 80px">${formatLang(cumul_balance_ac)}</div>  
+                                <% count +=1 %>
+                            %endif
+                            
+                       </div>
+                   %endfor                   
+                   <div class="table-row spacer">
+                        <div class="table-cell">&nbsp;</div>
+                   </div>
+                    <div class="table-row subtotal">
+                        <div class="table-cell first-column">&nbsp;</div>
+                        <div class="table-cell">&nbsp;</div>
+                        <div class="table-cell">&nbsp;</div>
+                        <div class="table-cell">&nbsp;</div>
+                        <div class="table-cell">&nbsp;</div>
+                        <div class="table-cell">&nbsp;</div>
+                        <div class="table-cell">${_('TOTAL')}</div>
+                        <div class="table-cell amount" >${formatLang(amount_total_debit)}</div>
+                        <div class="table-cell amount" >${formatLang(amount_total_credit)}</div>
+                        <div class="table-cell amount last-column" >${formatLang(cumul_balance_ac)}</div>
+                    </div>
+                    <% 
+                       amount_total_debit = amount_total_credit = 0.0
+                    %>
+                </div>
+            </div>     
+        %endfor 
+    </body>
+</html>

=== added file 'account_general_ledger_report/report/account_general_ledger_report.py'
--- account_general_ledger_report/report/account_general_ledger_report.py	1970-01-01 00:00:00 +0000
+++ account_general_ledger_report/report/account_general_ledger_report.py	2013-05-15 14:27:49 +0000
@@ -0,0 +1,302 @@
+#-*- coding:utf-8 -*-
+##############################################################################
+#
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
+#    d$
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as published by
+#    the Free Software Foundation, either version 3 of the License, or
+#    (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from openerp.addons.account_financial_report_webkit.report.common_reports import CommonReportHeaderWebkit
+import pooler
+from report import report_sxw
+
+class GeneralLedgerReportWebkit(report_sxw.rml_parse, CommonReportHeaderWebkit):
+
+    def __init__(self, cursor, uid, name, context):
+        super(GeneralLedgerReportWebkit, self).__init__(cursor, uid, name, context=context)
+        self.pool = pooler.get_pool(self.cr.dbname)
+        self.cursor = self.cr
+
+        self.localcontext.update({
+            'cr': cursor,
+            'uid': uid,
+            'get_data':self.get_data,  
+            'get_chart_account_id':self._get_chart_account_id_br,
+            'get_fiscalyear':self.get_fiscalyear_br,      
+            'get_filter': self._get_filter,   
+            'get_start_period':self.get_start_period_br,
+            'get_end_period':self.get_end_period_br,
+            'get_start_date':self._get_date_from,
+            'get_stop_date':self._get_date_to,
+            'accounts': self._get_accounts_br,
+            'display_target_move': self._get_display_target_move,
+            'extract_name_move': self.extract_name_move,
+        })
+
+    def get_data(self, cr, uid, data):
+        filter_data = []
+        account_list = []
+        account_selected = []
+        conciliation_lines = [] 
+        
+        account_lines = {}
+        account_balance = {}
+        account_conciliation = {}
+        account_move_line_con = {}
+                
+        library_obj = self.pool.get('account.webkit.report.library')
+        
+        filter_type = self._get_form_param('filter', data, default='filter_no')
+        chart_account = self._get_chart_account_id_br(data)
+        
+        if filter_type == 'filter_date':
+            start_date = self._get_form_param('date_from', data)
+            stop_date = self._get_form_param('date_to', data)
+            
+            filter_data.append(start_date)
+            filter_data.append(stop_date)
+            
+        elif filter_type == 'filter_period':
+            
+            start_period = self.get_start_period_br(data) #return the period object
+            stop_period = self.get_end_period_br(data)
+            
+            filter_data.append(start_period)
+            filter_data.append(stop_period)
+            
+        else:
+            filter_type = ''
+        
+        fiscalyear = self.get_fiscalyear_br(data)
+        target_move = self._get_form_param('target_move', data, default='all')
+        
+        #From the wizard can select specific account, extract this accounts
+        account_selected = data['form']['account_ids']
+
+        #Prepare the account_id list. 
+        if account_selected == []:
+            account_list_ids = library_obj.get_account_child_ids(cr, uid, chart_account.id) #get all the accounts in the chart_account_id
+            account_list_obj = self.pool.get('account.account').browse(cr, uid, account_list_ids)
+            for account in account_list_obj:
+                conciliation_lines = []
+                if  account.type != 'view':
+                    #Get the move_lines for each account.
+                    move_lines = library_obj.get_move_lines(cr, uid,
+                                                            [account.id], 
+                                                            filter_type=filter_type, 
+                                                            filter_data=filter_data, 
+                                                            fiscalyear=fiscalyear, 
+                                                            target_move=target_move,
+                                                            order_by='asc')
+                    if account.id not in account_lines.keys():
+                       account_lines[account] = move_lines
+                    
+                    #Reconcile -> show reconcile in the mako.
+                    '''
+                    First, if the account permit reconcile (reconcile == True), add to the dictionary.
+                    If the account don't allow the reconcile, search if the lines have reconcile_id or partial_reconcile_id
+                    If the account allow the reconcile or the lines have reconcile_id or partial_reconcile_id, add in the dictionary
+                    and show in the mako the column "Reconcile"
+                    
+                    the final result is:
+                       {account_id: {line.id: [conciliation_name]}}
+                    '''
+                    #1. If the account have reconcile, add to the dictionary
+                    if account.reconcile and account.id not in account_conciliation:
+                        account_conciliation[account.id] = []
+                    
+                    #Search if the move_lines have partial or reconcile id
+                    for line in move_lines:
+                        if line.reconcile_id and line.reconcile_id.name != '':
+                            conciliation_lines.append(line.reconcile_id.name)
+                         
+                        elif line.reconcile_partial_id and line.reconcile_partial_id.name != '':
+                            str_name = 'P' + line.reconcile_id.name
+                            conciliation_lines.append(str_name)
+                        
+                        #Add the line.id and the name of the conciliation.
+                        if len(conciliation_lines) > 0: 
+                             account_move_line_con[line.id] = conciliation_lines
+                        
+                        #Clean the name of the conciliation
+                        conciliation_lines = []
+                    
+                    #After the search in each lines, add the dictionary (key: line.id, value: conciliation_name)
+                    #with account.id (key of the principal dictionary) and match the account_id with the conciliation name.                    
+                    if account.id in account_conciliation.keys():
+                        account_conciliation[account.id] = account_move_line_con
+                    
+                    elif account.id not in account_conciliation.keys() and len(account_move_line_con) > 0: 
+                        account_conciliation[account.id] = account_move_line_con
+                        
+            #Get the initial_balance for the account
+            for account in account_list_obj:
+                if  account.type != 'view':
+                    account_list.append(account.id)
+
+            if filter_type == 'filter_date':
+                account_balance = library_obj.get_account_balance(cr, uid, 
+                                                                  account_list,
+                                                                  ['balance'],
+                                                                  initial_balance=True,
+                                                                  company_id=chart_account.company_id.id,
+                                                                  fiscal_year_id = fiscalyear.id,
+                                                                  state = target_move,
+                                                                  start_date = start_date,
+                                                                  stop_date = stop_date,
+                                                                  chart_account_id = chart_account.id,
+                                                                  filter_type=filter_type)
+            elif filter_type == 'filter_period':
+                account_balance = library_obj.get_account_balance(cr, uid, 
+                                                                  account_list,
+                                                                  ['balance'],
+                                                                  initial_balance=True,
+                                                                  company_id=chart_account.company_id.id,
+                                                                  fiscal_year_id = fiscalyear.id,
+                                                                  state = target_move,
+                                                                  start_period_id = start_period.id,
+                                                                  end_period_id = stop_period.id,
+                                                                  chart_account_id = chart_account.id,
+                                                                  filter_type=filter_type)
+            else:
+                account_balance = library_obj.get_account_balance(cr, uid, 
+                                                                  account_list,
+                                                                  ['balance'],
+                                                                  initial_balance=True,
+                                                                  company_id=chart_account.company_id.id,
+                                                                  fiscal_year_id = fiscalyear.id,
+                                                                  state = target_move,
+                                                                  chart_account_id = chart_account.id,
+                                                                  filter_type=filter_type)
+        else:
+            account_list_ids = library_obj.get_account_child_ids(cr, uid, account_selected) #get all the accounts in the chart_account_id
+            account_list_obj = self.pool.get('account.account').browse(cr, uid, account_list_ids)
+            for account in account_list_obj:
+                if  account.type != 'view':
+                     move_lines = library_obj.get_move_lines(cr, uid,
+                                                             [account.id], 
+                                                            filter_type=filter_type, 
+                                                            filter_data=filter_data, 
+                                                            fiscalyear=fiscalyear, 
+                                                            target_move=target_move,
+                                                            order_by='asc')
+                
+                     if account.id not in account_lines.keys():
+                         account_lines[account] = move_lines
+                    
+                     #Reconcile -> show reconcile in the mako.
+                     '''
+                     First, if the account permit reconcile (reconcile == True), add to the dictionary.
+                     If the account don't allow the reconcile, search if the lines have reconcile_id or partial_reconcile_id
+                     If the account allow the reconcile or the lines have reconcile_id or partial_reconcile_id, add in the dictionary
+                     and show in the mako the column "Reconcile"
+                    
+                     the final result is:
+                        {account_id: {line.id: [conciliation_name]}}
+                     '''
+                     #1. If the account have reconcile, add to the dictionary
+                     if account.reconcile and account.id not in account_conciliation:
+                         account_conciliation[account.id] = []
+                    
+                     #Search if the move_lines have partial or reconcile id
+                     for line in move_lines:
+                         if line.reconcile_id and line.reconcile_id.name != '':
+                             conciliation_lines.append(line.reconcile_id.name)
+                         
+                         elif line.reconcile_partial_id and line.reconcile_partial_id.name != '':
+                             str_name = 'P' + line.reconcile_id.name
+                             conciliation_lines.append(str_name)
+                        
+                         #Add the line.id and the name of the conciliation.
+                         if len(conciliation_lines) > 0: 
+                             account_move_line_con[line.id] = conciliation_lines
+                        
+                         #Clean the name of the conciliation
+                         conciliation_lines = []
+                    
+                     #After the search in each lines, add the dictionary (key: line.id, value: conciliation_name)
+                     #with account.id (key of the principal dictionary) and match the account_id with the conciliation name.                    
+                     if account.id in account_conciliation.keys():
+                         account_conciliation[account.id] = account_move_line_con
+                    
+                     elif account.id not in account_conciliation.keys() and len(account_move_line_con) > 0: 
+                         account_conciliation[account.id] = account_move_line_con
+            
+            #Get the initial_balance for the account
+            for account in account_list_obj:
+                if  account.type != 'view':
+                    account_list.append(account.id)
+
+            if filter_type == 'filter_date':
+                account_balance = library_obj.get_account_balance(cr, uid, 
+                                                                  account_list,
+                                                                  ['balance'],
+                                                                  initial_balance=True,
+                                                                  company_id=chart_account.company_id.id,
+                                                                  fiscal_year_id = fiscalyear.id,
+                                                                  state = target_move,
+                                                                  start_date = start_date,
+                                                                  stop_date = stop_date,
+                                                                  chart_account_id = chart_account.id,
+                                                                  filter_type=filter_type)
+            elif filter_type == 'filter_period':
+                account_balance = library_obj.get_account_balance(cr, uid, 
+                                                                  account_list,
+                                                                  ['balance'],
+                                                                  initial_balance=True,
+                                                                  company_id=chart_account.company_id.id,
+                                                                  fiscal_year_id = fiscalyear.id,
+                                                                  state = target_move,
+                                                                  start_period_id = start_period.id,
+                                                                  end_period_id = stop_period.id,
+                                                                  chart_account_id = chart_account.id,
+                                                                  filter_type=filter_type)
+            else:
+                account_balance = library_obj.get_account_balance(cr, uid, 
+                                                                  account_list,
+                                                                  ['balance'],
+                                                                  initial_balance=True,
+                                                                  company_id=chart_account.company_id.id,
+                                                                  fiscal_year_id = fiscalyear.id,
+                                                                  state = target_move,
+                                                                  chart_account_id = chart_account.id,
+                                                                  filter_type=filter_type)
+        
+        return account_lines, account_balance, account_conciliation
+    
+    ''''
+    This method is created to solve the error when extracting the name move_id (line.move_id.name) fails because of read permissions
+    parameter move_lines are the move_lines that match with the journal and period. Pass from mako. 
+    ''' 
+    def extract_name_move(self, cr, uid, move_lines):
+        move_temp = self.pool.get('account.move')
+        dict_name = {} #dict_name keys is the line id. 
+        
+        for line in move_lines:
+            move_id = move_temp.search(cr, uid, [('id', '=', line.move_id.id)])
+            move_obj = move_temp.browse(cr, uid, move_id)
+            if move_obj[0].name:
+                dict_name[line.id] = move_obj[0].name
+            else:
+                 dict_name[line.id] = move_obj[0].id
+        
+        return dict_name
+    
+report_sxw.report_sxw('report.account_general_ledger_webkit',
+                             'account.account',
+                             'addons/account_general_ledger_report/report/account_general_ledger_report.mako',
+                             parser=GeneralLedgerReportWebkit)
\ No newline at end of file

=== added file 'account_general_ledger_report/report/report.xml'
--- account_general_ledger_report/report/report.xml	1970-01-01 00:00:00 +0000
+++ account_general_ledger_report/report/report.xml	2013-05-15 14:27:49 +0000
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+    <data>
+       <record id="account_financial_report_webkit.account_report_general_ledger_webkit" model="ir.actions.report.xml">
+            <field name="report_type">webkit</field>
+            <field name="report_name">account_general_ledger_webkit</field>
+            <field eval="[(6,0,[])]" name="groups_id"/>
+            <field name="model">account.account</field>
+            <field name="type">ir.actions.report.xml</field>
+            <field name="name">General Ledger Webkit</field>
+            <field name="report_rml">account_general_ledger_report/report/account_general_ledger_report.mako</field>
+            <field name="report_file">account_general_ledger_report/report/account_general_ledger_report.mako</field>
+        </record> 
+    </data>
+</openerp>

=== added file 'account_general_ledger_report/report_menus.xml'
--- account_general_ledger_report/report_menus.xml	1970-01-01 00:00:00 +0000
+++ account_general_ledger_report/report_menus.xml	2013-05-15 14:27:49 +0000
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+    <data>
+        
+          <menuitem icon="STOCK_PRINT" 
+            name="General Ledger"
+            parent="account.final_accounting_reports" 
+            action="action_general_ledger_report_wizard"
+            groups="account.group_account_manager,account.group_account_user" 
+            id="account.menu_general_ledger"/>
+        
+    </data>
+</openerp>

=== added directory 'account_general_ledger_report/wizard'
=== added file 'account_general_ledger_report/wizard/__init__.py'
--- account_general_ledger_report/wizard/__init__.py	1970-01-01 00:00:00 +0000
+++ account_general_ledger_report/wizard/__init__.py	2013-05-15 14:27:49 +0000
@@ -0,0 +1,23 @@
+#-*- coding:utf-8 -*-
+##############################################################################
+#
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
+#    d$
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as published by
+#    the Free Software Foundation, either version 3 of the License, or
+#    (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+import account_general_ledger_report_wizard
\ No newline at end of file

=== added file 'account_general_ledger_report/wizard/account_general_ledger_report_wizard.py'
--- account_general_ledger_report/wizard/account_general_ledger_report_wizard.py	1970-01-01 00:00:00 +0000
+++ account_general_ledger_report/wizard/account_general_ledger_report_wizard.py	2013-05-15 14:27:49 +0000
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    OpenERP, Open Source Management Solution
+#    Addons modules by CLEARCORP S.A.
+#    Copyright (C) 2009-TODAY CLEARCORP S.A. (<http://clearcorp.co.cr>).
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from osv import fields, osv
+
+class AccountReportGeneralLedgerWizard(osv.osv_memory):
+    
+    _inherit = "general.ledger.webkit"
+    _name = "general.ledger.webkit"
+    _description = "General Ledger Report Wizard"
+    
+    def _print_report(self, cursor, uid, ids, data, context=None):
+        context = context or {}
+        
+        # we update form with display account value
+        data = self.pre_print_report(cursor, uid, ids, data, context=context)
+        
+        return {'type': 'ir.actions.report.xml',
+                'report_name': 'account_general_ledger_webkit',
+                'datas': data}
+    
\ No newline at end of file

=== added file 'account_general_ledger_report/wizard/account_general_ledger_report_wizard.xml'
--- account_general_ledger_report/wizard/account_general_ledger_report_wizard.xml	1970-01-01 00:00:00 +0000
+++ account_general_ledger_report/wizard/account_general_ledger_report_wizard.xml	2013-05-15 14:27:49 +0000
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+    <data>
+        <record id ="account_report_general_ledger_report_inherit" model="ir.ui.view">
+            <field name="name">General Ledger Report </field>
+            <field name="model">general.ledger.webkit</field>
+            <field name="type">form</field>
+            <field name="inherit_id" ref="account_financial_report_webkit.account_report_general_ledger_view_webkit"/>
+            <field name="arch" type="xml">
+                <data>
+                    <field name="fiscalyear_id" position="attributes">
+                        <attribute name="required">True</attribute>
+                    </field>
+                </data>
+            </field>
+        </record>
+        
+        <record id="action_general_ledger_report_wizard" model="ir.actions.act_window">
+            <field name="name">General Ledger Report</field>
+            <field name="type">ir.actions.act_window</field>
+            <field name="res_model">general.ledger.webkit</field>
+            <field name="view_type">form</field>
+            <field name="view_mode">form</field>
+            <field name="view_id" ref="account_report_general_ledger_report_inherit"/>
+            <field name="target">new</field>
+        </record>
+    </data>
+</openerp>

=== modified file 'account_webkit_report_library/common_library.py'
--- account_webkit_report_library/common_library.py	2013-02-06 22:15:54 +0000
+++ account_webkit_report_library/common_library.py	2013-05-15 14:27:49 +0000
@@ -80,7 +80,7 @@
        
         return pevious_period
         
-    def get_move_lines(self, cr, uid, account_ids, filter_type='', filter_data=None, fiscalyear=None, target_move='all', unreconcile = False, historic_strict=False, special_period =False, context=None):
+    def get_move_lines(self, cr, uid, account_ids, filter_type='', filter_data=None, fiscalyear=None, target_move='all', unreconcile = False, historic_strict=False, special_period =False, order_by=None, context=None):
         ''' Get the move lines of the accounts provided and filtered.
         Arguments:
         'account_ids': List of accounts ids.
@@ -91,6 +91,7 @@
         'target_move': Target moves of the report, possibles values: 'all' or 'posted'.
         'unreconcile': If True then get the move lines unreconciled.
         'historic_strict': Used when unreconcile = True, forces to include move lines that where not reconciled at the end date of the filter but are now.
+        'order_by': Used to the lines return order by specific order. asc or desc are the acepted words.  
          
         '''
         #TODO: Translate comments to english
@@ -181,11 +182,19 @@
                 periods_ids = self.pool.get('account.period').search(cr, uid, [('special', '=', False),('fiscalyear_id', '=', fiscalyear.id)], context=context)
             domain_period = ('period_id.id', 'in', periods_ids)
             list_tuples.append(domain_period)
-                
+                    
         #**********************************************************************************************#
         
         if unreconcile == False:
-            move_line_ids = move_line_obj.search(cr, uid, list_tuples, context=context)
+            #order by date ASC or DESC the move_lines 
+            if order_by != None and order_by == 'asc':
+                move_line_ids = move_line_obj.search(cr, uid, list_tuples, order='date asc', context=context)
+                
+            elif order_by != None and order_by == 'desc':
+                move_line_ids = move_line_obj.search(cr, uid, list_tuples, order='date DESC', context=context)
+            
+            else:
+                move_line_ids = move_line_obj.search(cr, uid, list_tuples, context=context)
                 
         else:
             #list_tuples + [domain_unreconciled] -> Con esta sintaxis no se altera la variable 
@@ -419,7 +428,6 @@
         return res
 
     def get_account_child_ids(self, cr, uid, account_ids, context={}):
-        print account_ids
         if isinstance(account_ids, orm.browse_record):
             account_ids = [account_ids.id]
         elif isinstance(account_ids, int):


Follow ups