diff options
| author | qdp-launchpad@tinyerp.com <> | 2010-10-15 18:53:15 +0200 |
|---|---|---|
| committer | qdp-launchpad@tinyerp.com <> | 2010-10-15 18:53:15 +0200 |
| commit | e43a45fc9cb9d036d4852a72cafdc29abbd2e0c9 (patch) | |
| tree | 86acf14b9a8cb595241264a29b07853c8ed0e0f6 | |
| parent | 62c46fa5b45329b67c1de4e3a6ab8d0fc2594f7f (diff) | |
| parent | af1ac033e190bcd98bbcd2df2b7925dddca98443 (diff) | |
[MERGE] merged the usability branch (with fixesssss)
bzr revid: qdp-launchpad@tinyerp.com-20101015165315-qigrk92klwozhv5f
49 files changed, 440 insertions, 301 deletions
diff --git a/addons/crm/wizard/crm_merge_opportunities_view.xml b/addons/crm/wizard/crm_merge_opportunities_view.xml index cf1a7ee09a4..153267f0ad1 100644 --- a/addons/crm/wizard/crm_merge_opportunities_view.xml +++ b/addons/crm/wizard/crm_merge_opportunities_view.xml @@ -35,9 +35,10 @@ </record> <act_window id="action_merge_opportunities" + multi="True" key2="client_action_multi" name="Merge Opportunities" res_model="crm.merge.opportunity" src_model="crm.lead" view_mode="form" target="new" view_type="form" /> </data> -</openerp>
\ No newline at end of file +</openerp> diff --git a/addons/hr/board_hr_view.xml b/addons/hr/board_hr_view.xml index c740114789a..2bcc7738397 100644 --- a/addons/hr/board_hr_view.xml +++ b/addons/hr/board_hr_view.xml @@ -2,10 +2,6 @@ <openerp> <data> <menuitem id="base.dashboard" name="Dashboards" sequence="2" parent="base.reporting_menu"/> - <menuitem - id="menu_hr_deshboard" - name="Human Resources" - parent="base.dashboard"/> <!-- This board view will be complete by other hr_* modules--> <record id="board_hr_form" model="ir.ui.view"> @@ -32,6 +28,11 @@ <field name="usage">menu</field> <field name="view_id" ref="board_hr_form"/> </record> - <menuitem id="menu_hr_root" icon="terp-hr" name="Human Resources" sequence="15" action="open_board_hr"/> + <menuitem id="menu_hr_root" icon="terp-hr" name="Human Resources" sequence="15"/> + <menuitem + id="menu_hr_deshboard" + name="Human Resources" + parent="base.dashboard" + action="open_board_hr"/> </data> </openerp> diff --git a/addons/hr/hr.py b/addons/hr/hr.py index c05836c393a..240511a03a0 100644 --- a/addons/hr/hr.py +++ b/addons/hr/hr.py @@ -82,16 +82,23 @@ class hr_job(osv.osv): def _no_of_employee(self, cr, uid, ids, name, args, context=None): res = {} - for emp in self.browse(cr, uid, ids): - res[emp.id] = len(emp.employee_ids or []) + for job in self.browse(cr, uid, ids, context): + res[job.id] = len(job.employee_ids or []) + return res + + def _no_of_recruitement(self, cr, uid, ids, name, args, context=None): + res = {} + for job in self.browse(cr, uid, ids, context): + res[job.id] = job.expected_employees - job.no_of_employee return res _name = "hr.job" _description = "Job Description" _columns = { 'name': fields.char('Job Name', size=128, required=True, select=True), - 'expected_employees': fields.integer('Expected Employees', help='Required number of Employees'), - 'no_of_employee': fields.function(_no_of_employee, method=True, string='No of Employees', type='integer', help='Number of Employees selected'), + 'expected_employees': fields.integer('Expected Employees', help='Required number of Employees in total for that job.'), + 'no_of_employee': fields.function(_no_of_employee, method=True, string="No of Employee", help='Number of employee with that job.'), + 'no_of_recruitment': fields.function(_no_of_recruitement, method=True, string='Expected in Recruitment', readonly=True), 'employee_ids': fields.one2many('hr.employee', 'job_id', 'Employees'), 'description': fields.text('Job Description'), 'requirements': fields.text('Requirements'), @@ -102,9 +109,17 @@ class hr_job(osv.osv): _defaults = { 'expected_employees': 1, 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'hr.job', context=c), - 'state': 'open' + 'state': 'open', } + def on_change_expected_employee(self, cr, uid, ids, expected_employee, no_of_employee, context=None): + if context is None: + context = {} + result={} + if expected_employee: + result['no_of_recruitment'] = expected_employee - no_of_employee + return {'value': result} + def job_old(self, cr, uid, ids, *args): self.write(cr, uid, ids, {'state': 'old'}) return True diff --git a/addons/hr/hr_view.xml b/addons/hr/hr_view.xml index 2b1cd596024..ce501c6951a 100644 --- a/addons/hr/hr_view.xml +++ b/addons/hr/hr_view.xml @@ -324,8 +324,9 @@ <field name="name" /> <field name="department_id" /> <field name="company_id" widget="selection" groups="base.group_multi_company"/> - <field name="expected_employees"/> + <field name="expected_employees" on_change="on_change_expected_employee(expected_employees,no_of_employee)"/> <field name="no_of_employee"/> + <field name="no_of_recruitment"/> </group> <newline/> <notebook colspan="4"> @@ -360,6 +361,7 @@ <field name="company_id" groups="base.group_multi_company"/> <field name="expected_employees"/> <field name="no_of_employee"/> + <field name="no_of_recruitment"/> <field name="state"/> </tree> </field> diff --git a/addons/hr_attendance/__openerp__.py b/addons/hr_attendance/__openerp__.py index 3714050cbdb..8a52d0e2577 100644 --- a/addons/hr_attendance/__openerp__.py +++ b/addons/hr_attendance/__openerp__.py @@ -32,7 +32,6 @@ 'author': 'OpenERP SA', 'depends': ['hr'], 'update_xml': [ - 'security/hr_security.xml', 'security/ir.model.access.csv', 'hr_attendance_view.xml', 'hr_attendance_report.xml', diff --git a/addons/hr_attendance/security/hr_security.xml b/addons/hr_attendance/security/hr_security.xml deleted file mode 100644 index 39f923a895b..00000000000 --- a/addons/hr_attendance/security/hr_security.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<openerp> - <data noupdate="1"> - - </data> -</openerp> diff --git a/addons/hr_contract/__openerp__.py b/addons/hr_contract/__openerp__.py index 2851a9aa86b..aea686e4279 100755 --- a/addons/hr_contract/__openerp__.py +++ b/addons/hr_contract/__openerp__.py @@ -36,7 +36,6 @@ 'depends': ['hr'], 'init_xml': ['hr_contract_data.xml'], 'update_xml': [ - 'security/hr_contract_security.xml', 'security/ir.model.access.csv', 'hr_contract_view.xml' ], diff --git a/addons/hr_contract/security/hr_contract_security.xml b/addons/hr_contract/security/hr_contract_security.xml deleted file mode 100644 index 39f923a895b..00000000000 --- a/addons/hr_contract/security/hr_contract_security.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<openerp> - <data noupdate="1"> - - </data> -</openerp> diff --git a/addons/hr_evaluation/hr_evaluation.py b/addons/hr_evaluation/hr_evaluation.py index 960849bdfd4..97f00d8b861 100644 --- a/addons/hr_evaluation/hr_evaluation.py +++ b/addons/hr_evaluation/hr_evaluation.py @@ -267,7 +267,18 @@ class hr_evaluation(osv.osv): context = {} self.write(cr, uid, ids,{'state':'cancel'}, context=context) return True - + + def write(self, cr, uid, ids, vals, context=None): + if context is None: + context = {} + if 'date' in vals: + new_vals = {'date_deadline': vals.get('date')} + obj_hr_eval_iterview = self.pool.get('hr.evaluation.interview') + for evalutation in self.browse(cr, uid, ids, context=context): + for survey_req in evalutation.survey_request_ids: + obj_hr_eval_iterview.write(cr, uid, [survey_req.id], new_vals, context=context) + return super(hr_evaluation, self).write(cr, uid, ids, vals, context=context) + hr_evaluation() class survey_request(osv.osv): @@ -320,7 +331,7 @@ class hr_evaluation_interview(osv.osv): for id in self.browse(cr, uid, ids, context=context): flag = False wating_id = 0 - tot_done_req = 0 + tot_done_req = 1 if not id.evaluation_id.id: raise osv.except_osv(_('Warning !'),_("You cannot start evaluation without Evaluation.")) records = hr_eval_obj.browse(cr, uid, [id.evaluation_id.id], context=context)[0].survey_request_ids diff --git a/addons/hr_evaluation/wizard/hr_evaluation_mail.py b/addons/hr_evaluation/wizard/hr_evaluation_mail.py index 576c782bfd8..3464c4beaee 100644 --- a/addons/hr_evaluation/wizard/hr_evaluation_mail.py +++ b/addons/hr_evaluation/wizard/hr_evaluation_mail.py @@ -29,14 +29,14 @@ class hr_evaluation_reminder(osv.osv_memory): } def send_mail(self, cr, uid, ids, context=None): - hr_evaluation_obj = self.pool.get('hr_evaluation.evaluation') + hr_evaluation_interview_obj = self.pool.get('hr.evaluation.interview') if context is None: context = {} evaluation_data = self.read(cr, uid, ids, context=context)[0] - for waiting_id in hr_evaluation_obj.browse(cr, uid, evaluation_data['evaluation_id'], context=context).survey_request_ids: - if waiting_id.state == "waiting_answer" and waiting_id.user_to_review_id.work_email : - msg = " Hello %s, \n\n Kindly post your response for %s survey. \n\n Thanks," %(waiting_id.user_to_review_id.name, waiting_id.survey_id.title) - tools.email_send(tools.config['email_from'], [waiting_id.user_to_review_id.work_email],\ + current_interview = hr_evaluation_interview_obj.browse(cr, uid, evaluation_data.get('evaluation_id')) + if current_interview.state == "waiting_answer" and current_interview.user_to_review_id.work_email : + msg = " Hello %s, \n\n Kindly post your response for '%s' survey interview. \n\n Thanks," %(current_interview.user_to_review_id.name, current_interview.survey_id.title) + tools.email_send(tools.config['email_from'], [current_interview.user_to_review_id.work_email],\ 'Reminder to fill up Survey', msg) return {'type': 'ir.actions.act_window_close'} diff --git a/addons/hr_expense/report/hr_expense_report_view.xml b/addons/hr_expense/report/hr_expense_report_view.xml index 70b8625d7b6..0d94204f426 100644 --- a/addons/hr_expense/report/hr_expense_report_view.xml +++ b/addons/hr_expense/report/hr_expense_report_view.xml @@ -95,7 +95,7 @@ <separator orientation="vertical"/> <filter string="Product" icon="terp-accessories-archiver" context="{'group_by':'product_id'}"/> <separator orientation="vertical" groups="analytic.group_analytic_accounting"/> - <filter string="Analytic account" icon="terp-folder-green" context="{'group_by':'analytic_account'}" groups="analytic.group_analytic_accounting"/> + <filter string="Analytic account" icon="terp-folder-violet" context="{'group_by':'analytic_account'}" groups="analytic.group_analytic_accounting"/> <separator orientation="vertical" groups="analytic.group_analytic_accounting"/> <filter string="State" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/> <filter string="Company" icon="terp-go-home" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml index b5380c4e5a9..0d78af87975 100644 --- a/addons/hr_holidays/hr_holidays_view.xml +++ b/addons/hr_holidays/hr_holidays_view.xml @@ -137,7 +137,7 @@ <field name="notes" nolabel="1" colspan="4" /> <newline/> <field name="state" colspan="2"/> - <group colspan="2"> + <group colspan="2" col="6"> <button string="Cancel" name="cancel" states="validate,refuse" type="workflow" icon="gtk-cancel" groups="base.group_hr_manager"/> <button string="Confirm" name="confirm" states="draft" type="workflow" icon="gtk-yes" groups="base.group_hr_user,base.group_hr_manager"/> <button string="Approve" name="validate" states="confirm" type="workflow" icon="gtk-apply" groups="base.group_hr_manager"/> diff --git a/addons/hr_holidays/report/available_holidays_view.xml b/addons/hr_holidays/report/available_holidays_view.xml index ac607b6c78a..374e6300cd0 100644 --- a/addons/hr_holidays/report/available_holidays_view.xml +++ b/addons/hr_holidays/report/available_holidays_view.xml @@ -88,7 +88,7 @@ </record> <record id="action_hr_available_holidays_report" model="ir.actions.act_window"> - <field name="name">Available Holidays</field> + <field name="name">Leaves Analysis</field> <field name="res_model">available.holidays.report</field> <field name="view_type">form</field> <field name="view_mode">tree,graph</field> @@ -110,7 +110,7 @@ <field name="act_window_id" ref="action_hr_available_holidays_report"/> </record> - <menuitem name="Available Holidays" id="menu_hr_available_holidays_report_tree" action="action_hr_available_holidays_report" parent="menu_hr_reporting_holidays"/> + <menuitem name="Leaves Analysis" id="menu_hr_available_holidays_report_tree" action="action_hr_available_holidays_report" parent="menu_hr_reporting_holidays"/> </data> </openerp> diff --git a/addons/hr_holidays/report/hr_holidays_report.py b/addons/hr_holidays/report/hr_holidays_report.py index 5d2dc27c0de..f7b813f9cc5 100644 --- a/addons/hr_holidays/report/hr_holidays_report.py +++ b/addons/hr_holidays/report/hr_holidays_report.py @@ -22,67 +22,6 @@ import tools from osv import fields,osv -class hr_holidays_report(osv.osv): - _name = "hr.holidays.report" - _description = "Leaves Statistics By Employee and category" - _auto = False - _rec_name = 'date' - _columns = { - 'date': fields.date('Date', readonly=True), - 'delay_approve': fields.float('Delay to Approve', digits=(16,2),readonly=True), - 'year': fields.char('Year', size=4, readonly=True), - 'day': fields.char('Day', size=15, readonly=True), - 'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'), - ('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'), - ('10','October'), ('11','November'), ('12','December')], 'Month', readonly=True), - 'date_from' : fields.datetime('Start Date', readonly=True), - 'date_to' : fields.datetime('End Date', readonly=True), - 'number_of_days_temp': fields.float('Number of Days', readonly=True), - 'employee_id' : fields.many2one('hr.employee', "Employee's Name", readonly=True), - 'category_id' : fields.many2one('hr.employee.category', "Category's Name", readonly=True), - 'user_id':fields.many2one('res.users', 'User', readonly=True), - 'holiday_status_id' : fields.many2one("hr.holidays.status", "Leave Type",readonly=True), - 'department_id':fields.many2one('hr.department','Department',readonly=True), - 'state': fields.selection([('draft', 'Draft'), - ('confirm', 'Waiting Validation'), - ('refuse', 'Refused'), - ('validate', 'Validated'), - ('cancel', 'Cancelled')] - ,'State', readonly=True), - } - _order = 'date desc' - def init(self, cr): - tools.drop_view_if_exists(cr, 'hr_holidays_report') - cr.execute(""" - create or replace view hr_holidays_report as ( - select - min(s.id) as id, - date_trunc('day',s.create_date) as date, - date_trunc('day',s.date_from) as date_from, - date_trunc('day',s.date_to) as date_to, - sum(s.number_of_days_temp) as number_of_days_temp, - s.employee_id, - s.category_id, - s.user_id as user_id, - to_char(s.date_from, 'YYYY') as year, - to_char(s.date_from, 'MM') as month, - to_char(s.date_from, 'YYYY-MM-DD') as day, - s.holiday_status_id, - s.department_id, - s.state, - avg(extract('epoch' from age(s.create_date,CURRENT_DATE)))/(3600*24) as delay_approve - from - hr_holidays s - WHERE type='remove' - GROUP BY - s.create_date,s.state,s.date_from,s.date_to, - s.employee_id,s.user_id,s.holiday_status_id, - s.department_id, s.category_id - ) - """) - -hr_holidays_report() - class hr_holidays_remaining_leaves_user(osv.osv): _name = "hr.holidays.remaining.leaves.user" _description = "Total holidays by type" diff --git a/addons/hr_holidays/report/hr_holidays_report_view.xml b/addons/hr_holidays/report/hr_holidays_report_view.xml index e59cf852366..51ff25fea75 100644 --- a/addons/hr_holidays/report/hr_holidays_report_view.xml +++ b/addons/hr_holidays/report/hr_holidays_report_view.xml @@ -2,111 +2,6 @@ <openerp> <data> - <record id="view_hr_holidays_report_tree" model="ir.ui.view"> - <field name="name">hr.holidays.report.tree</field> - <field name="model">hr.holidays.report</field> - <field name="type">tree</field> - <field name="arch" type="xml"> - <tree colors="blue:state in ('draft');black:state in ('confirm','refuse','validate');gray:state in('cancel')" string="Leaves Statistics"> - <field name="date" invisible="1"/> - <field name="employee_id" invisible="1"/> - <field name="category_id" invisible="1"/> - <field name="user_id" invisible="1"/> - <field name="date_from" invisible="1"/> - <field name="date_to" invisible="1"/> - <field name="number_of_days_temp" sum="#Days"/> - <field name="delay_approve"/> - <field name="holiday_status_id" invisible="1"/> - <field name="department_id" invisible="1"/> - <field name="year" invisible="1"/> - <field name="day" invisible="1"/> - <field name="month" invisible="1"/> - <field name="state" invisible="1"/> - </tree> - </field> - </record> - - <record id="view_hr_holidays_report_graph" model="ir.ui.view"> - <field name="name">hr.holidays.report.graph</field> - <field name="model">hr.holidays.report</field> - <field name="type">graph</field> - <field name="arch" type="xml"> - <graph string="Leaves Statistics" type="bar"> - <field name="employee_id"/> - <field name="number_of_days_temp" operator="+"/> - <field name="state" group = "True"/> - </graph> - </field> - </record> - - <record id="view_hr_holidays_report_search" model="ir.ui.view"> - <field name="name">hr.holidays.report.search</field> - <field name="model">hr.holidays.report</field> - <field name="type">search</field> - <field name="arch" type="xml"> - <search string="Leaves"> - <group> - <filter icon="terp-go-year" string=" Year " - domain="[('date','<=', time.strftime('%%Y-%%m-%%d')),('date','>=',time.strftime('%%Y-01-01'))]" help="Leaves taken in current year"/> - <filter icon="terp-go-month" string=" Month " name="month" - domain="[('date','<=',(datetime.date.today()+relativedelta(day=31)).strftime('%%Y-%%m-%%d')),('date','>=',(datetime.date.today()-relativedelta(day=1)).strftime('%%Y-%%m-%%d'))]" - help="Leaves taken in current month"/> - <filter icon="terp-go-month" string=" Month-1 " separator="1" - domain="[('date','<=', (datetime.date.today() - relativedelta(day=31, months=1)).strftime('%%Y-%%m-%%d')),('date','>=',(datetime.date.today() - relativedelta(day=1,months=1)).strftime('%%Y-%%m-%%d'))]" - help="Leaves taken in last month"/> - <separator orientation="vertical"/> - <filter string="Future Leaves" icon="terp-gtk-media-pause" domain="[('state', 'in' ,('draft','confirm'))]" - help = "Draft and Confirmed leaves"/> - <filter string="Validated" name="Validated" icon="terp-camera_test" domain="[('state','=','validate')]" - help = "Pending Leaves"/> - <filter icon="gtk-cancel" string="Cancelled" domain="[('state','=','cancel')]"/> - <separator orientation="vertical"/> - <field name="department_id"/> - <field name="employee_id"/> - </group> - <newline/> - <group expand="0" string="Extended Filters..." colspan="10" col="12"> - <field name="holiday_status_id"/> - <field name="category_id"/> - <separator orientation="vertical"/> - <field name="user_id"/> - <newline/> - <field name="date_from"/> - <field name="date_to"/> - </group> - <newline/> - <group expand="1" string="Group By..." colspan="10" col="12"> - <filter icon="terp-personal" string="Employee" name="Employee" context="{'group_by':'employee_id'}" - help="Leaves by empolyee"/> - <filter string="Validation User" name="User" icon="terp-personal" context="{'group_by':'user_id'}"/> - <separator orientation="vertical"/> - <filter string="Department" name="department" icon="terp-personal+" context="{'group_by':'department_id'}"/> - <separator orientation="vertical"/> - <filter icon="terp-stock_symbol-selection" string="Category" context="{'group_by':'category_id'}" - help="Leaves by category"/> - <filter string="Type" icon="terp-stock_symbol-selection" context="{'group_by':'holiday_status_id'}"/> - <separator orientation="vertical"/> - <filter string="State" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/> - <separator orientation="vertical"/> - <filter string="Day" icon="terp-go-today" context="{'group_by':'day'}" help="Creation Date"/> - <filter string="Month" icon="terp-go-month" context="{'group_by':'month'}" help="Creation Date"/> - <filter string="Year" icon="terp-go-year" context="{'group_by':'year'}" help="Creation Date"/> - </group> - </search> - </field> - </record> - - <record id="action_hr_holidays_report_all" model="ir.actions.act_window"> - <field name="name">Leaves Analysis</field> - <field name="res_model">hr.holidays.report</field> - <field name="view_type">form</field> - <field name="view_mode">tree,graph</field> - <field name="context">{'search_default_Employee':1,'search_default_department':1,"search_default_Validated":1, 'group_by':[], 'group_by_no_leaf':1} </field> - <field name="search_view_id" ref="view_hr_holidays_report_search"/> - </record> - - <menuitem action="action_hr_holidays_report_all" id="menu_hr_holidays_report_all" parent="menu_hr_reporting_holidays" sequence="0"/> - <record id="view_hr_holidays_remaining_leaves_user_tree" model="ir.ui.view"> <field name="name">hr.holidays.remaining.leaves.user.tree</field> <field name="model">hr.holidays.remaining.leaves.user</field> diff --git a/addons/hr_holidays/security/ir.model.access.csv b/addons/hr_holidays/security/ir.model.access.csv index 20da4832fe2..f350b73ed64 100644 --- a/addons/hr_holidays/security/ir.model.access.csv +++ b/addons/hr_holidays/security/ir.model.access.csv @@ -2,6 +2,5 @@ "access_hr_holydays_status_user","hr.holidays.status user","model_hr_holidays_status","base.group_hr_user",1,1,1,1 "access_hr_holidays_user","hr.holidays.user","model_hr_holidays","base.group_hr_user",1,1,1,1 "access_hr_holidays_remain_user","hr.holidays.ramain.user","model_hr_holidays_remaining_leaves_user","base.group_hr_user",1,1,1,1 -"access_hr_holidays_report_manager","hr.holidays.report.manager","model_hr_holidays_report","base.group_hr_manager",1,1,1,1 "access_resource_calendar_leaves_manager","resource_calendar_leaves_manager","resource.model_resource_calendar_leaves","base.group_hr_manager",1,1,1,1 "access_available_holidays_report_user","hr.available.holidays.report.user","model_available_holidays_report","base.group_hr_user",1,1,1,1 diff --git a/addons/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py index 3dbcd946e87..56217455475 100644 --- a/addons/hr_recruitment/hr_recruitment.py +++ b/addons/hr_recruitment/hr_recruitment.py @@ -429,17 +429,9 @@ class hr_applicant(crm.crm_case, osv.osv): message = _('Applicant ') + " '" + name + "' "+ _("is Hired.") self.log(cr, uid, id, message) - stage_id = self.pool.get('hr.recruitment.stage').search(cr, uid, [('name','=','Contract Signed')]) - self.write(cr, uid, ids,{'stage_id':stage_id[0]}) - applicant = self.browse(cr, uid, ids)[0] if applicant.job_id : emp_id = employee_obj.create(cr,uid,{'name':applicant.name,'job_id':applicant.job_id.id}) - job_data = job_obj.browse(cr,uid, applicant.job_id.id) - expected_emp = job_data['expected_employees'] - 1 - if expected_emp == 0: - job_obj.write(cr,uid, [applicant.job_id.id],{'state':'old'}) - job_obj.write(cr,uid, [applicant.job_id.id],{'expected_employees':expected_emp}) return res def case_reset(self, cr, uid, ids, *args): @@ -450,18 +442,9 @@ class hr_applicant(crm.crm_case, osv.osv): @param ids: List of case Ids @param *args: Tuple Value for additional Params """ - applicant = self.browse(cr, uid, ids)[0] - if applicant.job_id : - job_obj = self.pool.get('hr.job') - emp_obj = self.pool.get('hr.employee') - job_data = job_obj.browse(cr,uid, applicant.job_id.id) - expected_emp = job_data['expected_employees'] + 1 - emp_id = emp_obj.search(cr,uid, [('job_id','=',applicant.job_id.id),('name','=',applicant.name)]) - emp_obj.unlink(cr, uid, emp_id) - job_obj.write(cr,uid, [applicant.job_id.id],{'expected_employees':expected_emp}) + res = super(hr_applicant, self).case_reset(cr, uid, ids, *args) self.write(cr, uid, ids, {'date_open': False, 'date_closed':False}) - return res diff --git a/addons/hr_recruitment/hr_recruitment_view.xml b/addons/hr_recruitment/hr_recruitment_view.xml index 033fd68052c..cf2097b2454 100644 --- a/addons/hr_recruitment/hr_recruitment_view.xml +++ b/addons/hr_recruitment/hr_recruitment_view.xml @@ -297,7 +297,7 @@ <field name="type">form</field> <field name="inherit_id" ref="hr.view_hr_job_form"/> <field name="arch" type="xml"> - <field name="no_of_employee" position="after"> + <field name="department_id" position="after"> <field name="survey_id"/> </field> </field> diff --git a/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report_view.xml b/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report_view.xml index 6b436f4ef99..1d03581ca22 100644 --- a/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report_view.xml +++ b/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report_view.xml @@ -468,7 +468,7 @@ <filter string="User" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/> <separator orientation="vertical"/> <filter string="Product" icon="terp-accessories-archiver" domain="[]" context="{'group_by':'product_id'}"/> - <filter string="Analytic Account" icon="terp-folder-green" domain="[]" context="{'group_by':'analytic_account_id'}"/> + <filter string="Analytic Account" icon="terp-folder-violet" domain="[]" context="{'group_by':'analytic_account_id'}"/> <filter string="General Account" icon="terp-folder-orange" domain="[]" context="{'group_by':'general_account_id'}"/> </group> </search> diff --git a/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml b/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml index cda4574845a..9a22de4d828 100644 --- a/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml +++ b/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml @@ -28,8 +28,6 @@ I create invoice on analytic Line using "Invoice analytic Line" wizard. - !record {model: hr.timesheet.invoice.create, id: hr_timesheet_invoice_create_0}: - accounts: - - account.analytic_sednacom date: 1 name: 1 price: 1 @@ -46,10 +44,12 @@ I check that Invoice is created for this timesheet. - !python {model: account.analytic.line}: | + account_id = self.pool.get('account.analytic.line') + accounts = account_id.browse(cr, uid, [ref("account_analytic_line_developyamlforhrmodule0")])[0] exp = self.browse(cr, uid, [ref('account_analytic_line_developyamlforhrmodule0')])[0] analytic_account_obj = self.pool.get('account.analytic.account') data = self.pool.get('hr.timesheet.invoice.create').read(cr, uid, [ref("hr_timesheet_invoice_create_0")], [], context)[0] - account_ids = data['accounts'] + account_ids = accounts['account_id'] for account in analytic_account_obj.browse(cr, uid, account_ids, context): partner = account.partner_id.id @@ -81,4 +81,4 @@ - I can also make some theoretical revenue reports. - - I can also see timesheet profit using Timesheet profit report.
\ No newline at end of file + I can also see timesheet profit using Timesheet profit report. diff --git a/addons/hr_timesheet_sheet/__openerp__.py b/addons/hr_timesheet_sheet/__openerp__.py index d00ee91a304..383521b399d 100644 --- a/addons/hr_timesheet_sheet/__openerp__.py +++ b/addons/hr_timesheet_sheet/__openerp__.py @@ -55,6 +55,7 @@ The validation can be configured in the company: 'process/hr_timesheet_sheet_process.xml', 'board_hr_timesheet_view.xml', 'report/hr_timesheet_report_view.xml', + 'report/timesheet_report_view.xml', 'wizard/hr_timesheet_current_view.xml', 'hr_timesheet_sheet_data.xml' ], diff --git a/addons/hr_timesheet_sheet/board_hr_timesheet_view.xml b/addons/hr_timesheet_sheet/board_hr_timesheet_view.xml index a50042c3dfb..13193e66d99 100644 --- a/addons/hr_timesheet_sheet/board_hr_timesheet_view.xml +++ b/addons/hr_timesheet_sheet/board_hr_timesheet_view.xml @@ -3,7 +3,7 @@ <data> <menuitem id="base.menu_hr_dasboard" name="Dashboard" parent="hr.menu_hr_reporting" - sequence="0" groups="base.group_hr_manager"/> + sequence="0"/> <menuitem action="hr.open_board_hr" icon="terp-graph" diff --git a/addons/hr_timesheet_sheet/report/__init__.py b/addons/hr_timesheet_sheet/report/__init__.py index 8dac73f07ec..b06b0608356 100644 --- a/addons/hr_timesheet_sheet/report/__init__.py +++ b/addons/hr_timesheet_sheet/report/__init__.py @@ -19,5 +19,7 @@ # ############################################################################## +import timesheet_report import hr_timesheet_report +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_timesheet_sheet/report/hr_timesheet_report_view.xml b/addons/hr_timesheet_sheet/report/hr_timesheet_report_view.xml index 36ea5b6418a..054a4def9f2 100644 --- a/addons/hr_timesheet_sheet/report/hr_timesheet_report_view.xml +++ b/addons/hr_timesheet_sheet/report/hr_timesheet_report_view.xml @@ -72,7 +72,7 @@ <filter string="User" name="group_user_id" icon="terp-personal" context="{'group_by':'user_id'}"/> <filter string="Product" icon="terp-accessories-archiver" context="{'group_by':'product_id'}"/> <separator orientation="vertical" groups="analytic.group_analytic_accounting"/> - <filter string="Analytic Account" icon="terp-folder-green" context="{'group_by':'account_id'}" groups="analytic.group_analytic_accounting"/> + <filter string="Analytic Account" icon="terp-folder-violet" context="{'group_by':'account_id'}" groups="analytic.group_analytic_accounting"/> <filter string="General Account" icon="terp-folder-orange" context="{'group_by':'general_account_id'}"/> <filter string="Company" icon="terp-go-home" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> <separator orientation="vertical"/> diff --git a/addons/hr_timesheet_sheet/report/timesheet_report.py b/addons/hr_timesheet_sheet/report/timesheet_report.py new file mode 100644 index 00000000000..a8c0440a053 --- /dev/null +++ b/addons/hr_timesheet_sheet/report/timesheet_report.py @@ -0,0 +1,122 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# +# 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 tools +from osv import fields,osv + +class timesheet_report(osv.osv): + _name = "timesheet.report" + _description = "Timesheet" + _auto = False + _columns = { + 'year': fields.char('Year',size=64,required=False, readonly=True), + 'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'), + ('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'), + ('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True), + 'day': fields.char('Day', size=128, readonly=True), + 'name': fields.char('Description', size=64,readonly=True), + 'product_id' : fields.many2one('product.product', 'Product'), + 'general_account_id' : fields.many2one('account.account', 'General Account', readonly=True), + 'user_id': fields.many2one('res.users', 'User',readonly=True), + 'to_invoice': fields.many2one('hr_timesheet_invoice.factor', 'Type of Invoicing',readonly=True), + 'account_id': fields.many2one('account.analytic.account', 'Analytic Account',readonly=True), + 'nbr': fields.integer('#Nbr',readonly=True), + 'total_diff': fields.float('#Total Diff',readonly=True), + 'total_timesheet': fields.float('#Total Timesheet',readonly=True), + 'total_attendance': fields.float('#Total Attendance',readonly=True), + 'company_id': fields.many2one('res.company', 'Company',readonly=True), + 'department_id':fields.many2one('hr.department','Department',readonly=True), + 'date_from': fields.date('Date from',readonly=True,), + 'date_to': fields.date('Date to',readonly=True), + 'date_current': fields.date('Current date', required=True), + 'state' : fields.selection([ + ('new', 'New'), + ('draft','Draft'), + ('confirm','Confirmed'), + ('done','Done')], 'State', readonly=True), + 'quantity': fields.float('#Quantity',readonly=True), + 'cost': fields.float('#Cost',readonly=True), + } + + def init(self, cr): + tools.drop_view_if_exists(cr, 'timesheet_report') + cr.execute(""" + create or replace view timesheet_report as ( + select + min(aal.id) as id, + htss.date_current, + htss.name, + htss.date_from, + htss.date_to, + to_char(htss.date_current,'YYYY') as year, + to_char(htss.date_current,'MM') as month, + to_char(htss.date_current, 'YYYY-MM-DD') as day, + count(*) as nbr, + aal.unit_amount as quantity, + aal.amount as cost, + aal.account_id, + aal.product_id, + (SELECT sum(day.total_difference) + FROM hr_timesheet_sheet_sheet AS sheet + LEFT JOIN hr_timesheet_sheet_sheet_day AS day + ON (sheet.id = day.sheet_id + AND day.name = sheet.date_current) where sheet.id=htss.id) as total_diff, + (SELECT sum(day.total_timesheet) + FROM hr_timesheet_sheet_sheet AS sheet + LEFT JOIN hr_timesheet_sheet_sheet_day AS day + ON (sheet.id = day.sheet_id + AND day.name = sheet.date_current) where sheet.id=htss.id) as total_timesheet, + (SELECT sum(day.total_attendance) + FROM hr_timesheet_sheet_sheet AS sheet + LEFT JOIN hr_timesheet_sheet_sheet_day AS day + ON (sheet.id = day.sheet_id + AND day.name = sheet.date_current) where sheet.id=htss.id) as total_attendance, + aal.to_invoice, + aal.general_account_id, + htss.user_id, + htss.company_id, + htss.department_id, + htss.state + from account_analytic_line as aal + left join hr_analytic_timesheet as hat ON (hat.line_id=aal.id) + left join hr_timesheet_sheet_sheet as htss ON (hat.line_id=htss.id) + group by + to_char(htss.date_current,'YYYY'), + to_char(htss.date_current,'MM'), + to_char(htss.date_current, 'YYYY-MM-DD'), + aal.account_id, + htss.date_from, + htss.date_to, + aal.unit_amount, + aal.amount, + htss.date_current, + aal.to_invoice, + aal.product_id, + aal.general_account_id, + htss.name, + htss.company_id, + htss.state, + htss.id, + htss.department_id, + htss.user_id + ) + """) +timesheet_report() diff --git a/addons/hr_timesheet_sheet/report/timesheet_report_view.xml b/addons/hr_timesheet_sheet/report/timesheet_report_view.xml new file mode 100644 index 00000000000..08abc6db63b --- /dev/null +++ b/addons/hr_timesheet_sheet/report/timesheet_report_view.xml @@ -0,0 +1,126 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + <record id="view_timesheet_report_graph" model="ir.ui.view"> + <field name="name">timesheet.report.graph</field> + <field name="model">timesheet.report</field> + <field name="type">graph</field> + <field name="arch" type="xml"> + <graph string="Timesheet" type="bar"> + <field name="user_id" /> + <field name="quantity" operator = "+"/> + <field name="state" group = "True"/> + </graph> + </field> + </record> + <record id="view_timesheet_report_tree" model="ir.ui.view"> + <field name="name">timesheet.report.tree</field> + <field name="model">timesheet.report</field> + <field name="type">tree</field> + <field name="arch" type="xml"> + <tree colors="blue:state in ('draft');black:state in ('confirm','new');gray:state in('cancel')" string="Timesheet"> + <field name="date_current" invisible="1"/> + <field name="name" invisible="1"/> + <field name="user_id" invisible="1"/> + <field name="date_from" invisible="1"/> + <field name="date_to" invisible="1"/> + <field name="state" invisible="1"/> + <field name="department_id" invisible="1"/> + <field name="company_id" invisible="1"/> + <field name="to_invoice" invisible="1"/> + <field name="product_id" invisible="1"/> + <field name="account_id" invisible="1"/> + <field name="general_account_id" invisible="1"/> + <field name="year" invisible="1"/> + <field name="day" invisible="1"/> + <field name="month" invisible="1"/> + <field name="quantity" sum="#Quantity"/> + <field name="cost" sum="#Cost"/> + <field name="total_diff" sum="#Total Diff"/> + <field name="total_timesheet" sum="#Total Timesheet"/> + <field name="total_attendance" sum="#Total Attendance"/> + </tree> + </field> + </record> + <record id="view_timesheet_report_search" model="ir.ui.view"> + <field name="name">timesheet.report.search</field> + <field name="model">timesheet.report</field> + <field name="type">search</field> + <field name="arch" type="xml"> + <search string="Timesheet"> + <group col="10" colspan="12"> + <filter icon="terp-go-year" string=" Year " + domain="[('date_current','<=', time.strftime('%%Y-%%m-%%d')),('date_current','>',(datetime.date.today()-datetime.timedelta(days=365)).strftime('%%Y-%%m-%%d'))]" + help="Timesheet in current year"/> + <filter icon="terp-go-month" string=" Month " + name="month" + domain="[('date_current','<=', time.strftime('%%Y-%%m-%%d')), ('date_current','>',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d'))]" + help="Timesheet in current month"/> + <filter icon="terp-go-month" + string=" Month-1 " + domain="[('date_current','<=', (datetime.date (int(time.strftime('%%Y')), datetime.date.today().month, 1) - datetime.timedelta (days = 1)).strftime('%%Y-%%m-%%d')),('date_current','>',(datetime.date (int(time.strftime('%%Y')), datetime.date.today().month-1, 1)).strftime('%%Y-%%m-%%d'))]" + help="Timesheet of last month"/> + <separator orientation="vertical"/> + <filter icon="terp-document-new" + string="Draft" + domain="[('state','=','draft')]"/> + <filter icon="terp-camera_test" + string="Confirmed" + domain="[('state','=','confirm')]"/> + <filter icon="terp-dialog-close" + string="Done" + domain="[('state','=','done')]"/> + <separator orientation="vertical"/> + <field name="account_id"/> + <field name="user_id" /> + </group> + <newline/> + <group expand="0" string="Extended Filters..." groups="base.group_extended"> + <field name="general_account_id"/> + <field name="to_invoice" widget="selection"/> + <separator orientation="vertical"/> + <field name="product_id"/> + <separator orientation="vertical"/> + <field name="department_id" widget="selection"/> + <separator orientation="vertical"/> + <field name="company_id" widget="selection" groups="base.group_multi_company"/> + <newline/> + <field name="date_to"/> + <field name="date_from"/> + </group> + <newline/> + <group expand="1" string="Group By..."> + <filter string="User" name="User_id" icon="terp-personal" context="{'group_by':'user_id'}"/> + <filter string="Department" icon="terp-personal+" context="{'group_by':'department_id'}"/> + <separator orientation="vertical"/> + <filter string="Product" icon="terp-accessories-archiver" context="{'group_by':'product_id'}"/> + <separator orientation="vertical"/> + <filter string="Type of Invoicing" icon="terp-stock_symbol-selection" context="{'group_by':'to_invoice'}"/> + <separator orientation="vertical"/> + <filter string="Analytic Account" icon="terp-folder-green" context="{'group_by':'account_id'}"/> + <filter string="General Account" icon="terp-folder-orange" context="{'group_by':'general_account_id'}"/> + <separator orientation="vertical"/> + <filter string="State" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/> + <separator orientation="vertical"/> + <filter string="Company" icon="terp-go-home" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> + <separator orientation="vertical"/> + <filter string="Day" icon="terp-go-today" context="{'group_by':'day'}" help="Group by day of date"/> + <filter string="Month" icon="terp-go-month" context="{'group_by':'month'}" help="Group by month of date"/> + <filter string="Year" icon="terp-go-year" context="{'group_by':'year'}" help="Group by year of date"/> + </group> + </search> + </field> + </record> + + <record id="action_timesheet_report_stat_all" model="ir.actions.act_window"> + <field name="name">Timesheet Sheet Analysis</field> + <field name="res_model">timesheet.report</field> + <field name="view_type">form</field> + <field name="view_mode">tree,graph</field> + <field name="context">{'search_default_month':1,'search_default_User_id':1,'group_by_no_leaf':1,'group_by':[]}</field> + <field name="search_view_id" ref="view_timesheet_report_search"/> + </record> + <menuitem action="action_timesheet_report_stat_all" id="menu_timesheet_report_all" + parent="hr_timesheet.menu_hr_reporting_timesheet" sequence="1" groups="base.group_hr_manager"/> + </data> +</openerp> diff --git a/addons/hr_timesheet_sheet/security/ir.model.access.csv b/addons/hr_timesheet_sheet/security/ir.model.access.csv index 9d0159bbc1a..f55ee0fb5e0 100644 --- a/addons/hr_timesheet_sheet/security/ir.model.access.csv +++ b/addons/hr_timesheet_sheet/security/ir.model.access.csv @@ -6,3 +6,4 @@ "access_hr_timesheet_report","hr.timesheet.report","model_hr_timesheet_report","base.group_hr_manager",1,1,1,1 "access_hr_analytic_timesheet_system_user","hr.analytic.timesheet.system.user","model_hr_analytic_timesheet","base.group_user",1,0,0,0 "access_hr_timesheet_sheet_sheet_day","hr.timesheet.sheet.sheet.day.user","model_hr_timesheet_sheet_sheet_day","base.group_user",1,0,0,0 +"access_timesheet_report_user","timesheet.report.user","model_timesheet_report","base.group_hr_manager",1,1,1,1 diff --git a/addons/marketing/marketing_wizard.py b/addons/marketing/marketing_wizard.py index 4b95bbb86da..a97d0ca16bc 100644 --- a/addons/marketing/marketing_wizard.py +++ b/addons/marketing/marketing_wizard.py @@ -32,6 +32,10 @@ class marketing_installer(osv.osv_memory): 'crm_profiling':fields.boolean('Profiling Tools', help="Helps you to perform segmentation of partners and design segmentation questionnaires") } + _defaults = { + 'marketing_campaign': lambda *a: 1, + } + marketing_installer() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_payment.xml b/addons/point_of_sale/wizard/pos_payment.xml index 58b4dc447cd..f0536ae0ac8 100644 --- a/addons/point_of_sale/wizard/pos_payment.xml +++ b/addons/point_of_sale/wizard/pos_payment.xml @@ -1,48 +1,48 @@ <?xml version="1.0" encoding="utf-8"?> <openerp> <data> - + <!-- Select an Open Sale Order --> - + <record id="view_pos_payment" model="ir.ui.view"> <field name="name">Add payment :</field> <field name="model">pos.make.payment</field> <field name="type">form</field> <field name="arch" type="xml"> <form string="Add payment :"> - <group colspan="8" col="8" width="660" height="230"> - <group colspan="4" col="4" width="150"> - <label align="0.0" string="The register must be opened to be able to execute a payment." colspan="2"/> - <separator string="" orientation="vertical" rowspan="6"/> - </group> - <group colspan="4" col="4"> - <field name="journal"/> - <field name="amount"/> - <field name="payment_date"/> - <!--field name="payment_name" /--> - <field name="invoice_wanted"/> - <field name="num_sale"/> - <field name="is_acc"/> - <group attrs="{'invisible':[('is_acc','=',False)]}" colspan="4" col="2"> - <field name="product_id" attrs="{'required':[('is_acc', '=', True)]}" domain="[('type','=','service')]" on_change="onchange_product_id(product_id, amount)"/> - </group> - <newline/> - <group attrs="{'invisible':[('invoice_wanted','=',False)]}" colspan="4"> - <field name="partner_id" attrs="{'required':[('invoice_wanted', '=', True)]}" colspan="2"/> - <field name="pricelist_id" attrs="{'required':[('invoice_wanted', '=', True)]}" colspan="2"/> - </group> - </group> - <separator colspan="8"/> - <group col="4" colspan="4"/> - <group col="4" colspan="4"> - <group col="2" colspan="2"/> - <group col="2" colspan="2"> - <button icon="gtk-stop" special="cancel" string="Cancel"/> - <button name="check" string="Make Payment" colspan="1" type="object" icon="terp-dolar"/> - </group> - </group> - </group> - </form> + <group colspan="6" col="6" > + <group colspan="3" > + <separator string="The register must be opened to be able to execute a payment." /> + </group> + <newline/> + <group colspan="6"> + <field name="journal"/> + <field name="payment_date"/> + <field name="num_sale" /> + <field name="amount" /> + <!--field name="payment_name" /--> + <field name="invoice_wanted" /> + <field name="is_acc" /> + </group> + <group attrs="{'invisible':[('is_acc','=',False)]}" colspan="3" > + <field name="product_id" attrs="{'required':[('is_acc', '=', True)]}" domain="[('type','=','service')]" on_change="onchange_product_id(product_id, amount)"/> + </group> + <newline/> + <group attrs="{'invisible':[('invoice_wanted','=',False)]}" colspan="3"> + <field name="partner_id" attrs="{'required':[('invoice_wanted', '=', True)]}" colspan="2"/> + <field name="pricelist_id" attrs="{'required':[('invoice_wanted', '=', True)]}" colspan="2"/> + </group> + <separator colspan="6"/> + <group colspan="3"/> + <group colspan="3"> + <group colspan="2"/> + <group colspan="2"> + <button icon="gtk-stop" special="cancel" string="Cancel"/> + <button name="check" string="Make Payment" colspan="1" type="object" icon="terp-dolar"/> + </group> + </group> + </group> + </form> </field> </record> <record id="action_pos_payment" model="ir.actions.act_window"> @@ -54,5 +54,5 @@ <field name="target">new</field> </record> </data> -</openerp> - +</openerp> + diff --git a/addons/point_of_sale/wizard/pos_return.py b/addons/point_of_sale/wizard/pos_return.py index 99e697ea826..abeadfc9931 100644 --- a/addons/point_of_sale/wizard/pos_return.py +++ b/addons/point_of_sale/wizard/pos_return.py @@ -143,6 +143,23 @@ class pos_return(osv.osv_memory): @return: Return the add product form again for adding more product """ + current_rec = self.read(cr, uid, data[0], context=context) + order_obj =self.pool.get('pos.order') + line_obj = self.pool.get('pos.order.line') + pos_current = order_obj.browse(cr, uid, context.get('active_id')) + pos_line_ids = pos_current.lines + if pos_line_ids: + for pos_line in pos_line_ids: + line_field = "return"+str(pos_line.id) + pos_list = current_rec.keys() + newline_vals = {} + if line_field in pos_list : + less_qty = current_rec.get(line_field) + pos_cur_line = line_obj.browse(cr, uid, pos_line.id, context=context) + qty = pos_cur_line.qty + qty = qty - less_qty + newline_vals.update({'qty':qty}) + line_obj.write(cr, uid, pos_line.id, newline_vals, context=context) return { 'name': _('Add Product'), 'view_type': 'form', diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index 3d483658eb0..ce54b58a378 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -407,7 +407,7 @@ <group expand="0" string="Group By..." colspan="4" col="20"> <filter string="Users" name="group_user_id" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/> <separator orientation="vertical"/> - <filter string="Project" name="group_project_id" icon="terp-folder-blue" domain="[]" context="{'group_by':'project_id'}"/> + <filter string="Project" name="group_project_id" icon="terp-folder-violet" domain="[]" context="{'group_by':'project_id'}"/> <separator orientation="vertical"/> <filter string="Stage" name="group_stage_id" icon="terp-stage" domain="[]" context="{'group_by':'type_id'}"/> <filter string="State" name="group_state" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/> diff --git a/addons/project/report/project_report_view.xml b/addons/project/report/project_report_view.xml index eb781690c1b..5d533056405 100644 --- a/addons/project/report/project_report_view.xml +++ b/addons/project/report/project_report_view.xml @@ -89,7 +89,7 @@ domain="[('state','=','done')]"/> <separator orientation="vertical"/> <field name="project_id"> - <filter icon="terp-folder-blue" + <filter icon="terp-folder-violet" string="My Projects" help="My Projects" domain="[('project_id.user_id','=',uid)]"/> </field> @@ -121,7 +121,7 @@ </group> <newline/> <group expand="1" string="Group By..." colspan="10" col="12"> - <filter string="Project" name="project" icon="terp-folder-blue" context="{'group_by':'project_id'}"/> + <filter string="Project" name="project" icon="terp-folder-violet" context="{'group_by':'project_id'}"/> <filter string="Task" icon="terp-stock_align_left_24" context="{'group_by':'name'}" /> <separator orientation="vertical"/> <filter string="Partner" icon="terp-partner" context="{'group_by':'partner_id'}" /> diff --git a/addons/project_issue/project_issue_view.xml b/addons/project_issue/project_issue_view.xml index 9e79f367ca4..d9ca4b04e08 100644 --- a/addons/project_issue/project_issue_view.xml +++ b/addons/project_issue/project_issue_view.xml @@ -236,7 +236,7 @@ <filter string="Partner" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}" /> <separator orientation="vertical"/> - <filter string="Project" icon="terp-folder-blue" domain="[]" + <filter string="Project" icon="terp-folder-violet" domain="[]" context="{'group_by':'project_id'}" /> <filter string="Version" icon="terp-gtk-jump-to-rtl" domain="[]" context="{'group_by':'version_id'}" /> diff --git a/addons/project_issue/report/project_issue_report_view.xml b/addons/project_issue/report/project_issue_report_view.xml index dd09592916d..ea864cd152b 100644 --- a/addons/project_issue/report/project_issue_report_view.xml +++ b/addons/project_issue/report/project_issue_report_view.xml @@ -121,7 +121,7 @@ domain="[]" context="{'group_by':'section_id'}" /> <separator orientation="vertical" /> - <filter string="Project" name="project" icon="terp-folder-blue" context="{'group_by':'project_id'}" /> + <filter string="Project" name="project" icon="terp-folder-violet" context="{'group_by':'project_id'}" /> <filter string="Task" icon="terp-stock_align_left_24" domain="[]" context="{'group_by':'task_id'}"/> <separator orientation="vertical" /> <filter string="Category" icon="terp-stock_symbol-selection" diff --git a/addons/project_long_term/project_long_term_view.xml b/addons/project_long_term/project_long_term_view.xml index 5e6ccebfe75..70bed5aba41 100644 --- a/addons/project_long_term/project_long_term_view.xml +++ b/addons/project_long_term/project_long_term_view.xml @@ -83,7 +83,7 @@ <group expand="0" string="Group By..." colspan="4" col="20"> <filter name="resource" string="Resource" icon="terp-personal" domain="[]" context="{'group_by':'resource_id'}"/> <separator orientation="vertical"/> - <filter string="Project" icon="terp-folder-blue" domain="[]" context="{'group_by':'project_id'}"/> + <filter string="Project" icon="terp-folder-violet" domain="[]" context="{'group_by':'project_id'}"/> <filter string="Phase" icon="terp-project" domain="[]" context="{'group_by':'phase_id'}"/> </group> </search> @@ -264,7 +264,7 @@ <separator orientation="vertical"/> <field name="name"/> <field name="project_id"> - <filter domain="[('project_id.user_id','=',uid)]" help="My Projects" icon="terp-personal"/> + <filter domain="[('project_id.user_id','=',uid)]" help="My Projects" icon="terp-folder-violet"/> </field> <field name="responsible_id"/> <field name="date_start"/> @@ -273,7 +273,7 @@ <group expand="0" string="Group By..." colspan="4" col="20" groups="base.group_extended"> <filter string="Responsible" icon="terp-personal" domain="[]" context="{'group_by':'responsible_id'}"/> <separator orientation="vertical"/> - <filter string="Project" icon="terp-folder-blue" domain="[]" context="{'group_by':'project_id'}" name="project"/> + <filter string="Project" icon="terp-folder-violet" domain="[]" context="{'group_by':'project_id'}" name="project"/> <separator orientation="vertical"/> <filter string="State" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/> <separator orientation="vertical"/> diff --git a/addons/project_messages/project_messages_view.xml b/addons/project_messages/project_messages_view.xml index 7042ce9d9b2..bffd1af0503 100644 --- a/addons/project_messages/project_messages_view.xml +++ b/addons/project_messages/project_messages_view.xml @@ -82,7 +82,7 @@ <filter string="Message To" icon="terp-personal" domain="[]" context="{'group_by':'to_id'}"/> <filter string="Message From" icon="terp-personal" domain="[]" context="{'group_by':'from_id'}"/> <separator orientation="vertical"/> - <filter string="Project" icon="terp-folder-blue" domain="[]" context="{'group_by':'project_id'}"/> + <filter string="Project" icon="terp-folder-violet" domain="[]" context="{'group_by':'project_id'}"/> </group> </search> </field> diff --git a/addons/project_scrum/project_scrum_view.xml b/addons/project_scrum/project_scrum_view.xml index cd4eb8e61b4..0c91348c910 100644 --- a/addons/project_scrum/project_scrum_view.xml +++ b/addons/project_scrum/project_scrum_view.xml @@ -166,7 +166,7 @@ <group expand="0" string="Group By..." colspan="4" col="20" groups="base.group_extended"> <filter string="Author" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/> <separator orientation="vertical"/> - <filter string="Project" icon="terp-folder-blue" domain="[]" context="{'group_by':'project_id'}"/> + <filter string="Project" icon="terp-folder-violet" domain="[]" context="{'group_by':'project_id'}"/> <filter string="Sprint" icon="terp-gtk-jump-to-ltr" domain="[]" context="{'group_by':'sprint_id'}"/> <separator orientation="vertical"/> <filter string="State" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/> @@ -332,7 +332,7 @@ <filter string="Product owner" icon="terp-personal" domain="[]" context="{'group_by':'product_owner_id'}"/> <filter string="Scrum Master" icon="terp-personal" domain="[]" context="{'group_by':'scrum_master_id'}"/> <separator orientation="vertical"/> - <filter string="Project" icon="terp-folder-blue" domain="[]" context="{'group_by':'project_id'}"/> + <filter string="Project" icon="terp-folder-violet" domain="[]" context="{'group_by':'project_id'}"/> <separator orientation="vertical"/> <filter string="State" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/> <separator orientation="vertical"/> diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index a0c6b66d29a..b288055faf3 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -37,6 +37,7 @@ from osv.orm import browse_record, browse_null # Model definition # class purchase_order(osv.osv): + def _calc_amount(self, cr, uid, ids, prop, unknow_none, unknow_dict): res = {} for order in self.browse(cr, uid, ids): @@ -44,7 +45,7 @@ class purchase_order(osv.osv): for oline in order.order_line: res[order.id] += oline.price_unit * oline.product_qty return res - + def _amount_all(self, cr, uid, ids, field_name, arg, context=None): res = {} cur_obj=self.pool.get('res.currency') diff --git a/addons/purchase/wizard/purchase_order_group_view.xml b/addons/purchase/wizard/purchase_order_group_view.xml index fe04af1a32b..cb67f489a99 100644 --- a/addons/purchase/wizard/purchase_order_group_view.xml +++ b/addons/purchase/wizard/purchase_order_group_view.xml @@ -30,7 +30,8 @@ Lines will only be merged if: res_model="purchase.order.group" src_model="purchase.order" view_mode="form" - target="new" + target="new" + multi="True" key2="client_action_multi" groups="base.group_extended" id="action_view_purchase_order_group"/> diff --git a/addons/sale/report/sale_report_view.xml b/addons/sale/report/sale_report_view.xml index bf2786f17ed..c4cc59f7b9a 100644 --- a/addons/sale/report/sale_report_view.xml +++ b/addons/sale/report/sale_report_view.xml @@ -102,7 +102,7 @@ <filter string="Default UoM" icon="terp-mrp" context="{'group_by':'uom_name'}"/> <filter string="Category of Product" icon="terp-stock_symbol-selection" context="{'group_by':'categ_id'}"/> <separator orientation="vertical" groups="analytic.group_analytic_accounting"/> - <filter string="Analytic Account" icon="terp-folder-green" context="{'group_by':'analytic_account_id'}" groups="analytic.group_analytic_accounting"/> + <filter string="Analytic Account" icon="terp-folder-violet" context="{'group_by':'analytic_account_id'}" groups="analytic.group_analytic_accounting"/> <separator orientation="vertical" groups="analytic.group_analytic_accounting"/> <filter string="State" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/> <separator orientation="vertical"/> diff --git a/addons/sale/sale.py b/addons/sale/sale.py index e8ccb657bc2..4db4641ad4c 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -54,7 +54,7 @@ def _incoterm_get(self, cr, uid, context=None): class sale_order(osv.osv): _name = "sale.order" _description = "Sale Order" - + def copy(self, cr, uid, id, default=None, context=None): if context is None: context = {} diff --git a/addons/sale/wizard/sale_make_invoice.xml b/addons/sale/wizard/sale_make_invoice.xml index e8e698e56b9..267167237bc 100644 --- a/addons/sale/wizard/sale_make_invoice.xml +++ b/addons/sale/wizard/sale_make_invoice.xml @@ -26,6 +26,7 @@ <field name="view_mode">form</field> <field name="view_id" ref="view_sale_order_make_invoice"/> <field name="target">new</field> + <field name="multi">True</field> </record> <record model="ir.values" id="sale_order_make_invoice"> diff --git a/addons/stock/stock.py b/addons/stock/stock.py index f46f0c2ab08..f1122640424 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -2371,7 +2371,7 @@ class stock_inventory(osv.osv): 'state': 'draft', 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.inventory', context=c) } - + def _inventory_line_hook(self, cr, uid, inventory_line, move_vals): """ Creates a stock move from an inventory line @param inventory_line: diff --git a/addons/stock/wizard/stock_fill_inventory_view.xml b/addons/stock/wizard/stock_fill_inventory_view.xml index 3db42eb7be5..e8dd6d323d1 100644 --- a/addons/stock/wizard/stock_fill_inventory_view.xml +++ b/addons/stock/wizard/stock_fill_inventory_view.xml @@ -1,33 +1,34 @@ <?xml version="1.0" encoding="utf-8"?> <openerp> <data> - <record id="view_stock_fill_inventory" model="ir.ui.view"> + <record id="view_stock_fill_inventory" model="ir.ui.view"> <field name="name">Import Inventory</field> <field name="model">stock.fill.inventory</field> <field name="type">form</field> <field name="arch" type="xml"> <form string="Import Inventory"> - <separator string="Import current product inventory from the following location" colspan="4" /> - <field name="location_id"/> - <newline/> - <field name="recursive"/> - <newline/> - <field name="set_stock_zero"/> - <separator string="" colspan="4" /> - <button special="cancel" string="_Cancel" icon='gtk-cancel'/> - <button name="fill_inventory" string="Fill Inventory" type="object" icon="gtk-ok"/> + <separator string="Import current product inventory from the following location" colspan="4" /> + <field name="location_id"/> + <newline/> + <field name="recursive"/> + <newline/> + <field name="set_stock_zero"/> + <separator string="" colspan="4" /> + <button special="cancel" string="_Cancel" icon='gtk-cancel'/> + <button name="fill_inventory" string="Fill Inventory" type="object" icon="gtk-ok"/> </form> </field> - </record> + </record> - <act_window name="Import Inventory" - res_model="stock.fill.inventory" - src_model="stock.inventory" - view_mode="form" - target="new" - context="{'search_default_in_location':1}" + <act_window name="Import Inventory" + res_model="stock.fill.inventory" + src_model="stock.inventory" + view_mode="form" + target="new" + multi="False" + context="{'search_default_in_location':1}" key2="client_action_multi" - id="action_view_stock_fill_inventory"/> + id="action_view_stock_fill_inventory"/> </data> </openerp> diff --git a/addons/stock/wizard/stock_inventory_merge_view.xml b/addons/stock/wizard/stock_inventory_merge_view.xml index 62cac877179..7a4735bdf41 100644 --- a/addons/stock/wizard/stock_inventory_merge_view.xml +++ b/addons/stock/wizard/stock_inventory_merge_view.xml @@ -22,6 +22,7 @@ res_model="stock.inventory.merge" src_model="stock.inventory" view_mode="form" + multi="True" target="new" key2="client_action_multi" id="action_view_stock_merge_inventories"/> diff --git a/addons/survey/survey.py b/addons/survey/survey.py index 57a78e9ac5d..5343ef3c229 100644 --- a/addons/survey/survey.py +++ b/addons/survey/survey.py @@ -68,6 +68,7 @@ class survey(osv.osv): 'users': fields.many2many('res.users', 'survey_users_rel', 'sid', 'uid', 'Users'), 'send_response': fields.boolean('E-mail Notification on Answer'), 'type': fields.many2one('survey.type', 'Type'), + 'invited_user_ids': fields.many2many('res.users', 'survey_invited_user_rel', 'sid', 'uid', 'Invited User'), } _defaults = { 'state': lambda * a: "draft", diff --git a/addons/survey/survey_view.xml b/addons/survey/survey_view.xml index 44bcb4475b5..713f3dbf7a4 100644 --- a/addons/survey/survey_view.xml +++ b/addons/survey/survey_view.xml @@ -206,6 +206,9 @@ <separator colspan="4" string="Survey Details"/> <field name="note" colspan="4" nolabel="1"/> </page> + <page string="Invited User"> + <field name="invited_user_ids" nolabel="1" readonly="1"/> + </page> <page string="History"> <field name="date_open" select="1"/> <field name="date_close"/> diff --git a/addons/survey/wizard/survey_selection.py b/addons/survey/wizard/survey_selection.py index 69cc8e10796..0f7ca8628f0 100644 --- a/addons/survey/wizard/survey_selection.py +++ b/addons/survey/wizard/survey_selection.py @@ -62,9 +62,20 @@ class survey_name_wiz(osv.osv_memory): for sur in surv_obj.browse(cr, uid, [context.get('survey_id',False)]): result.append((sur.id, sur.title)) return result + survey_user_group_id = self.pool.get('res.groups').search(cr, uid, [('name', '=', 'Survey / User')]) group_id = self.pool.get('res.groups').search(cr, uid, [('name', 'in', ('Tools / Manager','Tools / User','Survey / User'))]) user_obj = self.pool.get('res.users') user_rec = user_obj.read(cr, uid, uid) + if survey_user_group_id: + if survey_user_group_id == user_rec['groups_id']: + for sur in surv_obj.browse(cr, uid, surv_obj.search(cr, uid, [])): + if sur.state == 'open': + u_list = [] + for use in sur.invited_user_ids: + u_list.append(use.id) + if uid in u_list: + result.append((sur.id, sur.title)) + return result for sur in surv_obj.browse(cr, uid, surv_obj.search(cr, uid, [])): if sur.state == 'open': res = False diff --git a/addons/survey/wizard/survey_send_invitation.py b/addons/survey/wizard/survey_send_invitation.py index b9740fba6ba..92ba965d880 100644 --- a/addons/survey/wizard/survey_send_invitation.py +++ b/addons/survey/wizard/survey_send_invitation.py @@ -113,7 +113,13 @@ class survey_send_invitation(osv.osv_memory): error = "" res_user = "" user_exists = False + new_user = [] attachments = [] + current_sur = survey_ref.browse(cr, uid, context.get('active_id'), context=context) + exist_user = current_sur.invited_user_ids + if exist_user: + for use in exist_user: + new_user.append(use.id) for id in survey_ref.browse(cr, uid, survey_ids): report = self.create_report(cr, uid, [id.id], 'report.survey.form', id.title) file = open(tools.config['addons_path'] + '/survey/report/' + id.title +".pdf") @@ -134,6 +140,8 @@ class survey_send_invitation(osv.osv_memory): continue user = user_ref.search(cr, uid, [('login', "=", addr.email)]) if user: + if user[0] not in new_user: + new_user.append(user[0]) user = user_ref.browse(cr, uid, user[0]) user_ref.write(cr, uid, user.id, {'survey_id':[[6, 0, survey_ids]]}) mail = record['mail']%{'login':addr.email, 'passwd':user.password, \ @@ -172,11 +180,17 @@ class survey_send_invitation(osv.osv_memory): 'survey_id': [[6, 0, survey_ids]] } user = user_ref.create(cr, uid, res_data) + if user not in new_user: + new_user.append(user) created+= "- %s (Login: %s, Password: %s)\n" % (addr.name or 'Unknown',\ addr.email, passwd) else: error+= "- %s (Login: %s, Password: %s)\n" % (addr.name or 'Unknown',\ addr.email, passwd) + + new_vals = {} + new_vals.update({'invited_user_ids':[[6,0,new_user]]}) + survey_ref.write(cr, uid, context.get('active_id'),new_vals) note= "" if created: note += 'Created users:\n%s\n\n' % (created) |
