Well its progressing now, using
form.vars.employee=contraa.employee
form.vars.payslip_name=contraa.employee.fullname
form.vars.contract=contraa.id
Now it is inserting only one payslip(from one contract) but not inserting the
other one
On Monday, September 26, 2016 at 7:54:03 PM UTC+3, Jim S wrote:
>
> You're setting form.vars.employee = contraa.employee.fullname
>
> It should be set to the employee id, not the name. Results in the same
> problem as with contract name/id.
>
> Should just be contraa.employee I believe...
>
> -Jim
>
> On Monday, September 26, 2016 at 10:23:15 AM UTC-5, Oasis Agano wrote:
>>
>> i changed it to form.vars.contract = contraa.id
>> but still getting the same error
>>
>> On Monday, September 26, 2016 at 5:39:41 PM UTC+3, Anthony wrote:
>>>
>>> In your model, db.payslip.contract is a reference field, but in your
>>> code, you attempt to assign a string value to it (form.vars.contract =
>>> contraa.contract_name).
>>>
>>> Anthony
>>>
>>> On Monday, September 26, 2016 at 10:04:30 AM UTC-4, Oasis Agano wrote:
>>>>
>>>> Models are here, if this way cant work can you suggest another way of
>>>> doing it
>>>>
>>>> MARITAL_SET = [
>>>> T('Single'),
>>>> T('Married'),
>>>> T('Divorced'),
>>>> T('Widower')
>>>>
>>>>
>>>> ]
>>>> TIME_SET = [
>>>> T('Part time'),
>>>> T('Full time'),
>>>>
>>>>
>>>> ]
>>>>
>>>> STATE_SET = [
>>>> T('Trial'),
>>>> T('Employed'),
>>>> T('Fired'),
>>>> T('Retired'),
>>>>
>>>>
>>>> ]
>>>> #@auth.requires_login()
>>>>
>>>> db.define_table('employee',
>>>> Field('emp_photo', 'upload',label='Photo'),
>>>> Field('first_name','string',label='First Name'),
>>>> Field('last_name','string',label='Last Name'),
>>>> Field('fullname','string',readable='False',compute=lambda
>>>> r: r.first_name+' '+r.last_name),
>>>> Field('email','string'),
>>>> Field('phone','string'),
>>>> Field('marital_status', requires=IS_IN_SET(MARITAL_SET,
>>>> zero=T('--choose marital status--'))),
>>>> Field('number_of_children', 'string'),
>>>> Field('name_of_children','text'),
>>>> Field('address','text'),
>>>> Field('Manager', 'reference employee'),
>>>> #Field('date','datetime'),
>>>> Field('dob', 'datetime', label='Date of Birth'),
>>>> Field('doj', 'datetime', label='Hired Date'),
>>>> Field('ismanager', 'boolean', default=False,label='Is
>>>> Department Manager'),
>>>> Field('department', 'reference
>>>> department',requires=IS_EMPTY_OR(IS_IN_DB(db, "department.id",
>>>> '%(department_name)s'))),
>>>> Field('user', 'reference
>>>> auth_user',requires=IS_EMPTY_OR(IS_IN_DB(db, "auth_user.id",
>>>> '%(fullname)s'))),
>>>> Field('job', 'reference job_title'),
>>>> Field('Other', 'text'),
>>>> Field('state', requires=IS_IN_SET(STATE_SET,
>>>> zero=T('--choose employment status--'))),
>>>> auth.signature,
>>>> format='%(fullname)s'
>>>>
>>>> )
>>>> db.define_table('job_title',
>>>> Field('job_name', 'string', label='Job Title'),
>>>> auth.signature,
>>>> format='%(job_name)s'
>>>> )
>>>> #db = DAL(lazy_tables=True)
>>>> db.define_table('department',
>>>> Field('department_name', 'string', label='Department
>>>> Name'),
>>>> Field('parent_dept', 'reference department'),
>>>> Field('Other', 'text'),
>>>> format='%(department_name)s'
>>>> )
>>>> #db.employee.department.requires = IS_IN_DB(db, db.department.id,
>>>> '%(department_name)s')
>>>>
>>>> CONTRACTTYPE_SET = [
>>>> T('Employee'),
>>>> T('Consultant'),
>>>> T('Freelance'),
>>>> T('Internship'),
>>>>
>>>> ]
>>>>
>>>> SALARYSTRUCTURE_SET = [
>>>> T('Less than 30000'),
>>>> T('Between 30000 and 100000'),
>>>> T('Great than 100000')
>>>>
>>>> ]
>>>>
>>>> CONTRACTSTATE_SET = [
>>>> T('Draft'),
>>>> T('Running'),
>>>> T('Expired/To Renew'),
>>>> T('Closed'),
>>>> T('Cancelled'),
>>>>
>>>>
>>>> ]
>>>>
>>>>
>>>> db.define_table('contract',
>>>> Field('employee', 'reference employee', required='true',
>>>> requires=IS_IN_DB(db, "employee.id",
>>>> '%(fullname)s')),
>>>> # Field('date','datetime'),
>>>> Field('contract_name', 'string', label='Contract Title'),
>>>> Field('contract_type',
>>>> requires=IS_IN_SET(CONTRACTTYPE_SET, zero=T('--choose contract type--'))),
>>>> Field('salary_structure',
>>>> requires=IS_IN_SET(SALARYSTRUCTURE_SET, zero=T('--choose salary type--'))),
>>>> Field('job', 'reference job_title'),
>>>> Field('contract_scan', 'upload',label='Contract Upload'),
>>>> Field('date_trial_start', 'datetime', label='Starting
>>>> Trial Date'),
>>>> Field('date_trial_end', 'datetime', label='End Trial
>>>> Date'),
>>>> Field('date_work_start', 'datetime', label='Starting
>>>> Working Date'),
>>>> Field('date_work_end', 'datetime', label='End of
>>>> Contract'),
>>>> Field('wage', 'float'),
>>>> Field('rssb', 'boolean', default=True, label='Pay RSSB'),
>>>> Field('batch', 'boolean', default=True, label='Enable
>>>> Batch Payslip'),
>>>> Field('allowances', 'float'),
>>>> Field('visa_no', 'string', label='Visa No'),
>>>> Field('work_permit_no', 'string', label='Work Permit No'),
>>>> Field('visa_exp', 'datetime', label='Visa Expiry Date'),
>>>> Field('other','text'),
>>>> Field('state', requires=IS_IN_SET(CONTRACTSTATE_SET,
>>>> zero=T('--State--'))),
>>>> auth.signature
>>>> )
>>>>
>>>>
>>>>
>>>> LOANSTATE_SET = [
>>>> T('Draft'),
>>>> T('Confirmed'),
>>>> T('Refused'),
>>>> T('Paid'),
>>>>
>>>>
>>>>
>>>> ]
>>>>
>>>> LOANTYPE_SET = [
>>>> T('Advance'),
>>>> T('Long Term'),
>>>>
>>>> ]
>>>> db.define_table('loans',
>>>> Field('loan_name', 'string', label='Loan Title'),
>>>> Field('employee', 'reference employee', required='true',
>>>> requires=IS_IN_DB(db, "employee.id",
>>>> '%(fullname)s')),
>>>> Field('contract', 'reference contract', required='true',
>>>> requires=IS_IN_DB(db, "contract.id",
>>>> '%(contract_name)s')),
>>>> Field('loan_type', requires=IS_IN_SET(LOANTYPE_SET,
>>>> zero=T('--Type--'))),
>>>> Field('loan_amount', 'float',label='Loan Amount'),
>>>> Field('paid', 'float', label='Amount Paid',default='0.0'),
>>>> Field('balance', 'float', label='Loan Amount
>>>> Remaining',default='0.0',readable=False),
>>>> Field('date','datetime',label='Date
>>>> request',default=lambda:datetime.now()),
>>>> Field('date_start', 'datetime', label='Start of Payment'),
>>>> Field('no_of_months', 'integer',label='No of Months'),
>>>> Field('state', requires=IS_IN_SET(LOANSTATE_SET,
>>>> zero=T('--State--')),default='Draft'),
>>>> auth.signature
>>>> )
>>>>
>>>> db.define_table('loanpayment',
>>>> Field('loanpayment_name', 'string', label='Payment Title'),
>>>> Field('employee', 'reference employee', required='true',
>>>> requires=IS_IN_DB(db, "employee.id",
>>>> '%(fullname)s')),
>>>> Field('loan', 'reference loans', required='true',
>>>> requires=IS_IN_DB(db, "loans.id", '%(loan_name)s')),
>>>> Field('amount_payed', 'float', label='Loan Amount Payed'),
>>>> Field('date', 'datetime', label='Date of Payment'),
>>>> auth.signature
>>>> )
>>>>
>>>> PAYSLIPSTATE_SET = [
>>>> T('Draft'),
>>>> T('Confirmed'),
>>>> T('Closed'),
>>>> T('Cancelled'),
>>>>
>>>>
>>>>
>>>> ]
>>>> db.define_table('payslip',
>>>> Field('employee', 'reference employee', required='true',
>>>> requires=IS_IN_DB(db, "employee.id",
>>>> '%(fullname)s')),
>>>> Field('contract', 'reference contract', required='true',
>>>> requires=IS_EMPTY_OR(IS_IN_DB(db, "contract.id",
>>>> '%(contract_name)s'))),
>>>> Field('payslip_name', 'string', label='Payslip Title'),
>>>> Field('gross', 'float',readable=False, writable=False),
>>>> Field('net', 'float',readable=False, writable=False),
>>>> Field('rssb_emp','float',readable=False, writable=False),
>>>> Field('rssb_comp','float',readable=False, writable=False),
>>>> Field('rssb_tot','float',readable=False, writable=False),
>>>> Field('paye','float',readable=False, writable=False),
>>>> #Field('loan','float',default='0'),
>>>> Field('loan', 'reference loanpayment',label='Loan
>>>> ',requires=IS_EMPTY_OR(IS_IN_DB(db, "loanpayment.id",
>>>> '%(loanpayment_name)s'))),
>>>> Field('date','datetime',default=lambda:datetime.now()),
>>>> Field('date_pay_start', 'datetime', label='Start of
>>>> Payment Period'),
>>>> Field('date_pay_end', 'datetime', label='End of Payment
>>>> Period'),
>>>> #Field('contract_type',
>>>> requires=IS_IN_SET(CONTRACTTYPE_SET, zero=T('--choose contract
>>>> type--')),readable=False, writable=False),
>>>> #Field('salary_structure',
>>>> requires=IS_IN_SET(SALARYSTRUCTURE_SET, zero=T('--choose salary
>>>> type--')),readable=False, writable=False),
>>>> #Field('job', 'reference job_title',readable=False,
>>>> writable=False),
>>>> Field('user', 'reference auth_user',label='Link to
>>>> User',requires=IS_EMPTY_OR(IS_IN_DB(db, "auth_user.id", '%(fullname)s'))),
>>>> Field('state', requires=IS_IN_SET(PAYSLIPSTATE_SET,
>>>> zero=T('--State--'))),
>>>>
>>>> auth.signature
>>>> )
>>>>
>>>>
>>>> On Monday, September 26, 2016 at 5:00:14 PM UTC+3, Anthony wrote:
>>>>>
>>>>> Well, you still haven't shown your models. My guess is one of your
>>>>> fields is a reference field, which stores long int values representing
>>>>> the
>>>>> record ID of the referenced record, but you are attempting to insert a
>>>>> string value.
>>>>>
>>>>> Anyway, your approach won't work because SQLFORM only does a single
>>>>> insert, which happens after the onvalidation callback runs. So, only the
>>>>> last set of form.vars values assigned in the onvalidation for loop will
>>>>> end
>>>>> up being inserted in the database.
>>>>>
>>>>> Anthony
>>>>>
>>>>> On Monday, September 26, 2016 at 9:56:34 AM UTC-4, Oasis Agano wrote:
>>>>>>
>>>>>> TRACEBACK
>>>>>>
>>>>>> Traceback (most recent call last):
>>>>>> File "D:\lab\PycharmProjects\Smartwork\web2py\gluon\restricted.py",
>>>>>> line 227, in restricted
>>>>>> exec ccode in environment
>>>>>> File
>>>>>> "D:/lab/PycharmProjects/Smartwork/web2py/applications/smartwork/controllers/default.py"
>>>>>>
>>>>>> <http://127.0.0.1:8000/admin/default/edit/smartwork/controllers/default.py>,
>>>>>> line 708, in <module>
>>>>>> File "D:\lab\PycharmProjects\Smartwork\web2py\gluon\globals.py", line
>>>>>> 417, in <lambda>
>>>>>> self._caller = lambda f: f()
>>>>>> File
>>>>>> "D:/lab/PycharmProjects/Smartwork/web2py/applications/smartwork/controllers/default.py"
>>>>>>
>>>>>> <http://127.0.0.1:8000/admin/default/edit/smartwork/controllers/default.py>,
>>>>>> line 300, in batch_payslip
>>>>>> if form.process(onvalidation=check_batch).accepted:
>>>>>> File "D:\lab\PycharmProjects\Smartwork\web2py\gluon\html.py", line
>>>>>> 2298, in process
>>>>>> self.validate(**kwargs)
>>>>>> File "D:\lab\PycharmProjects\Smartwork\web2py\gluon\html.py", line
>>>>>> 2236, in validate
>>>>>> if self.accepts(**kwargs):
>>>>>> File "D:\lab\PycharmProjects\Smartwork\web2py\gluon\sqlhtml.py", line
>>>>>> 1746, in accepts
>>>>>> self.vars.id = self.table.insert(**fields)
>>>>>> File
>>>>>> "D:\lab\PycharmProjects\Smartwork\web2py\gluon\packages\dal\pydal\objects.py",
>>>>>> line 726, in insert
>>>>>> ret = self._db._adapter.insert(self, self._listify(fields))
>>>>>> File
>>>>>> "D:\lab\PycharmProjects\Smartwork\web2py\gluon\packages\dal\pydal\adapters\base.py",
>>>>>> line 739, in insert
>>>>>> query = self._insert(table,fields)
>>>>>> File
>>>>>> "D:\lab\PycharmProjects\Smartwork\web2py\gluon\packages\dal\pydal\adapters\base.py",
>>>>>> line 730, in _insert
>>>>>> values = ','.join(self.expand(v, f.type) for f, v in fields)
>>>>>> File
>>>>>> "D:\lab\PycharmProjects\Smartwork\web2py\gluon\packages\dal\pydal\adapters\base.py",
>>>>>> line 730, in <genexpr>
>>>>>> values = ','.join(self.expand(v, f.type) for f, v in fields)
>>>>>> File
>>>>>> "D:\lab\PycharmProjects\Smartwork\web2py\gluon\packages\dal\pydal\adapters\base.py",
>>>>>> line 962, in expand
>>>>>> rv = self.represent(expression, field_type)
>>>>>> File
>>>>>> "D:\lab\PycharmProjects\Smartwork\web2py\gluon\packages\dal\pydal\adapters\base.py",
>>>>>> line 1442, in represent
>>>>>> return str(long(obj))
>>>>>> ValueError: invalid literal for long() with base 10: 'Jul Contract'
>>>>>>
>>>>>>
>>>>>> Note that this contract is the second in the database
>>>>>>
>>>>>>
>>>>>> Basically what im trying to do is create a loop(from a form) that will
>>>>>> create payslips for all running contracts
>>>>>>
>>>>>>
>>>>>> On Monday, September 26, 2016 at 4:21:56 PM UTC+3, Anthony wrote:
>>>>>>>
>>>>>>> Hard to say what the problem is without seeing the full traceback as
>>>>>>> well as your models.
>>>>>>>
>>>>>>> Also, what are you trying to do in the check_batch function? You are
>>>>>>> looping through some records and making assignments to form.vars, but
>>>>>>> only
>>>>>>> the final run of the loop will end up taking effect -- so what is the
>>>>>>> point
>>>>>>> of the loop?
>>>>>>>
>>>>>>> Anthony
>>>>>>>
>>>>>>> On Monday, September 26, 2016 at 8:29:35 AM UTC-4, Oasis Agano wrote:
>>>>>>>>
>>>>>>>> Greetings
>>>>>>>> im creating a payroll app and i need a to create a batch of payslips
>>>>>>>>
>>>>>>>> i want to create payslips for all contracts in the database within
>>>>>>>> the running state
>>>>>>>> the code
>>>>>>>>
>>>>>>>> def check_batch(form):
>>>>>>>>
>>>>>>>> contraaa = db(db.contract.state ==
>>>>>>>> 'Running').select(db.contract.ALL)
>>>>>>>> for contraa in contraaa:
>>>>>>>>
>>>>>>>> if contraa.salary_structure == 'Less than 30000':
>>>>>>>> totgross=contraa.wage+contraa.allowances
>>>>>>>>
>>>>>>>> form.vars.employee=contraa.employee.fullname
>>>>>>>> form.vars.payslip_name=contraa.employee.fullname
>>>>>>>> form.vars.contract=contraa.contract_name
>>>>>>>>
>>>>>>>> form.vars.gross=totgross
>>>>>>>> form.vars.rssb_emp = totgross*0.03
>>>>>>>> form.vars.rssb_comp = totgross*0.05
>>>>>>>> form.vars.paye = 0
>>>>>>>> totrssb=form.vars.rssb_emp+form.vars.rssb_comp
>>>>>>>> form.vars.rssb_tot=form.vars.rssb_emp+form.vars.rssb_comp
>>>>>>>> if type(form.vars.loan) !=int :
>>>>>>>>
>>>>>>>> form.vars.net = totgross-form.vars.rssb_emp
>>>>>>>> else:
>>>>>>>> payy=db(db.loanpayment.id ==
>>>>>>>> form.vars.loan).select(db.loanpayment.ALL)
>>>>>>>> for pay in payy:
>>>>>>>> loanpay=int(pay.amount_payed)
>>>>>>>> form.vars.net = totgross-form.vars.rssb_emp-loanpay
>>>>>>>>
>>>>>>>> elif contraa.salary_structure == 'Between 30000 and 100000':
>>>>>>>>
>>>>>>>> form.vars.employee=contraa.employee.fullname
>>>>>>>> form.vars.payslip_name=contraa.employee.fullname
>>>>>>>> form.vars.contract=contraa.contract_name
>>>>>>>>
>>>>>>>> totgross=contraa.wage+contraa.allowances
>>>>>>>> form.vars.gross=totgross
>>>>>>>> form.vars.rssb_emp = totgross*0.03
>>>>>>>> form.vars.rssb_comp = totgross*0.05
>>>>>>>> varia =totgross-30000
>>>>>>>> form.vars.paye = varia*0.2
>>>>>>>> totrssb=form.vars.rssb_emp+form.vars.rssb_comp
>>>>>>>> form.vars.rssb_tot=form.vars.rssb_emp+form.vars.rssb_comp
>>>>>>>> if type(form.vars.loan) !=int :
>>>>>>>> form.vars.net =
>>>>>>>> totgross-form.vars.rssb_emp-form.vars.paye
>>>>>>>> else:
>>>>>>>> payy=db(db.loanpayment.id ==
>>>>>>>> form.vars.loan).select(db.loanpayment.ALL)
>>>>>>>> for pay in payy:
>>>>>>>> loanpay=int(pay.amount_payed)
>>>>>>>> form.vars.net =
>>>>>>>> totgross-form.vars.rssb_emp-form.vars.paye-loanpay
>>>>>>>>
>>>>>>>>
>>>>>>>> #form = SQLFORM(db.payslip)
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> elif contraa.salary_structure=='Great than 100000':
>>>>>>>>
>>>>>>>> form.vars.employee=contraa.employee
>>>>>>>> form.vars.payslip_name=contraa.employee
>>>>>>>> form.vars.contract=contraa.contract_name
>>>>>>>>
>>>>>>>> totgross=contraa.wage+contraa.allowances
>>>>>>>> form.vars.gross=totgross
>>>>>>>> form.vars.rssb_emp = totgross*0.03
>>>>>>>> form.vars.rssb_comp = totgross*0.05
>>>>>>>> varia2 =totgross-100000
>>>>>>>> variah = varia2*0.3
>>>>>>>> varia3 =70000*0.2
>>>>>>>> form.vars.paye = variah+varia3
>>>>>>>> totrssb=form.vars.rssb_emp+form.vars.rssb_comp
>>>>>>>> form.vars.rssb_tot=form.vars.rssb_emp+form.vars.rssb_comp
>>>>>>>> if type(form.vars.loan) !=int :
>>>>>>>> form.vars.net =
>>>>>>>> totgross-form.vars.rssb_emp-form.vars.paye
>>>>>>>> else:
>>>>>>>> payy=db(db.loanpayment.id ==
>>>>>>>> form.vars.loan).select(db.loanpayment.ALL)
>>>>>>>> for pay in payy:
>>>>>>>> loanpay=int(pay.amount_payed)
>>>>>>>> form.vars.net =
>>>>>>>> totgross-form.vars.rssb_emp-form.vars.paye-loanpay
>>>>>>>>
>>>>>>>> #form = SQLFORM(db.payslip)
>>>>>>>>
>>>>>>>> else:
>>>>>>>> response.flash=T('Select a salary structure and contract')
>>>>>>>>
>>>>>>>>
>>>>>>>> def batch_payslip():
>>>>>>>> db.payslip.gross.readonly =True
>>>>>>>> db.payslip.net.readable =False
>>>>>>>> db.payslip.rssb_emp.readable =False
>>>>>>>> #db.payslip.salary_structure.readable =False
>>>>>>>> db.payslip.rssb_comp.readable =False
>>>>>>>> db.payslip.paye.readable =False
>>>>>>>> db.payslip.employee.readable =False
>>>>>>>> db.payslip.employee.writable =False
>>>>>>>> db.payslip.contract.readable =False
>>>>>>>> db.payslip.contract.writable =False
>>>>>>>> db.payslip.payslip_name.readable =False
>>>>>>>> db.payslip.payslip_name.writable =False
>>>>>>>> db.payslip.loan.readable =False
>>>>>>>> db.payslip.loan.writable =False
>>>>>>>> db.payslip.user.readable =False
>>>>>>>> db.payslip.user.writable =False
>>>>>>>> form = SQLFORM(db.payslip)
>>>>>>>>
>>>>>>>> if form.process(onvalidation=check_batch).accepted:
>>>>>>>> response.flash=T('Payslip Added')
>>>>>>>> return dict(form=form)
>>>>>>>>
>>>>>>>>
>>>>>>>> im getting this error
>>>>>>>>
>>>>>>>> ValueError: invalid literal for long() with base 10: 'with a contract
>>>>>>>> name'
>>>>>>>>
>>>>>>>>
--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.