Hello

I have a custom form from SQLFORM.grid. After clicking the submit button 
onvalidation or oncreate funciton are not triggered - although some fields 
are validated, but that is even before the my_processing_form function 
there is no redirect after submit and the record is not inserted/updated in 
the database. I used the same principle with some other functions and views 
and there it works fine, but I have no idea why at this one the on validate 
is not triggered.
If anyone sees  the error please let me know

Here is my function

def shifts():
    user = auth.user_id
    org = db(db.auth_user.id == 
user).select(db.auth_user.organization)[0]["organization"]

    db.workers.w_user.default = user
    db.workers.w_organization.default = org
    #####Naredimo še grid za šifrant turnusov
    db.shifts.sh_organization.default = org

    query_shifts = ((db.shifts.sh_organization == org) & (db.shifts.sh_status 
== 1))
    query_inactive = db((db.shifts.sh_organization == org) & 
(db.shifts.sh_status == 100)).select().as_list()
    # print query_inactive

    ###V kolikor uporabnik naredi turnus ki je že ampak je 
arhiviran/deaktiviran ga je potrebno na to opozorit
    ##Določimo da ne more bit za istga userja dvakrat isti turnus

    # db.shifts.sh_code.requires=IS_NOT_IN_DB(db(db.shifts.sh_organization == 
org),'shifts.sh_code')

    # najprej popravmo definicijo tabele

    fields_shifts = (
        db.shifts.sh_code,
        db.shifts.sh_name,
        db.shifts.sh_color,
        db.shifts.sh_category,
        db.shifts.sh_start1,
        db.shifts.sh_end1,
        db.shifts.sh_length1,
        db.shifts.sh_start2,
        db.shifts.sh_end2,
        db.shifts.sh_length2,
        db.shifts.sh_duration1,
        #     db.shifts.sh_start3,
        #     db.shifts.sh_end3,
        #     db.shifts.sh_start4,
        #     db.shifts.sh_end4,
        #     db.shifts.sh_start5,
        #     db.shifts.sh_end5,
        db.shifts.sh_note)

    db.shifts.sh_organization.readable = False
    db.shifts.sh_organization.writable = False
    db.shifts.sh_organization.editable = False

    # db.shifts.sh_code.editable = db.shifts.sh_code.writable = False

    # db.shifts.sh_duration.writable = False

    db.shifts.sh_duration1.readable = db.shifts.sh_duration1.writable = False
    db.shifts.sh_start3.readable = db.shifts.sh_start3.writable = False
    db.shifts.sh_end3.readable = db.shifts.sh_end3.writable = False
    db.shifts.sh_length3.readable = db.shifts.sh_length3.writable = False
    db.shifts.sh_start4.readable = db.shifts.sh_start4.writable = False
    db.shifts.sh_length4.readable = db.shifts.sh_length4.writable = False
    db.shifts.sh_end4.readable = db.shifts.sh_end4.writable = False
    db.shifts.sh_start5.readable = db.shifts.sh_start5.writable = False
    db.shifts.sh_length5.readable = db.shifts.sh_length5.writable = False
    db.shifts.sh_end5.readable = db.shifts.sh_end5.writable = False


    db.shifts.sh_code.widget = SQLFORM.widgets.string.widget
    db.shifts.sh_name.widget = SQLFORM.widgets.string.widget
    db.shifts.sh_note.widget = SQLFORM.widgets.string.widget
    db.shifts.partner_id.widget = SQLFORM.widgets.integer.widget
    #db.shifts.sh_category.widget = SQLFORM.widgets.integer.widget
    #db.shifts.sh_start1 = SQLFORM.widgets.time.widget
    #db.shifts.sh_start1 = SQLFORM.widgets.timewidget.widget

    db.shifts.sh_code.requires = [IS_NOT_IN_DB(db((db.shifts.sh_organization == 
org)&(db.shifts.sh_status != 250)), 'shifts.sh_code',
                                               error_message=T('Shift with this 
code already exist. Follow the link in upper right corner'))]

    db.shifts.sh_name.requires = [IS_NOT_EMPTY(error_message=T('Missing shift 
name'))]
    db.shifts.sh_color.requires = [IS_NOT_EMPTY(error_message=T('Missing shift 
color'))]
    db.shifts.sh_start1.requires = [IS_NOT_EMPTY(error_message=T('Missing start 
time of the shift'))]
    db.shifts.sh_end1.requires = [IS_NOT_EMPTY(error_message=T('Missing end 
time of the shift'))]
    # db.shifts.sh_category.requires = [IS_NOT_EMPTY(error_message=T("""Missing 
shift category.1 – Morning, 11- Afternoon, 21 – Night
    #                                                                 101 – All 
day,121 – All night,201 – Day split"""))]
    db.shifts.partner_id.requires = 
IS_EMPTY_OR(IS_NOT_IN_DB(db((db.shifts.sh_organization == org)
                                                    & (db.shifts.sh_status != 
250)
                                                    & (db.shifts.partner_id == 
request.vars.partner_id)
                                                    & (db.shifts.partner_id >= 
0)), db.shifts.partner_id,
                                              error_message=T('There is a shift 
with the same partned ID.')))



    links = [lambda row: A('', _class='glyphicon glyphicon 
glyphicon-remove-sign',
                           callback=URL('settings', 'deactivate',
                                        vars=dict(table='shifts', 
field='sh_status', value=row.id)))]

    #Tole je funcija ki preverja če je ok zta deljen delovni čas
    """Turnus je deljen lahko samo v enem dnevu.
    Zato ni dovoljen zapis
    0600-1400&1800-1300
    """
    def my_form_processing_new_shifts(form):
        shift_name = form.vars.sh_name
        shifts = db((db.shifts.sh_organization == org) & (db.shifts.sh_name == 
shift_name) & (db.shifts.sh_status != 250)).select()
        partner_id = form.vars.partner_id
        if shifts:
            form.errors.sh_name = T('Shift with this nick name already exists!')
        if not partner_id or partner_id == '':
            form.vars.partner_id = -1
        redirect(URL('settings', 'shifts'))


    def my_form_processing_edit_shifts(form):
        partner_id = form.vars.partner_id
        sh_category = form.vars.sh_category
        # if not partner_id or partner_id == '':
        #     form.vars.partner_id = -1

        # print
        # print form.vars
        # print
        start1 = form.vars.sh_start1
        end1 = form.vars.sh_end1
        #start2 že pride kot datetime - Do not ask me why
        start2 = form.vars.sh_start2
        end2 = form.vars.sh_end2
        # print "start1 ",start1
        # print "end1 ",end1
        # print "start2 ",start2
        # print "end2 ", end2

        if start1:
            start1 = start1.split(":")
            start1 = start1[0] + ":" + start1[1]
            start1 = datetime.datetime.strptime(start1,'%H:%M').time()
        if end1:
            end1 = end1.split(":")
            end1 = end1[0] + ":" + end1[1]
            end1 = datetime.datetime.strptime(end1,'%H:%M').time()


        #ker mi vrača čas end1 00:00 kot string ostalo pa kot time
        #vsah en člas more bit
        if start1 and end1 is None:
            form.errors.sh_end1 = T('Please insert end time')

        #če je neki vnešen v start2 pol more bit tut v end2
        if start1 and end1 and start2 and  end2 is None and end2 != 
datetime.datetime.strptime('00:00', '%H:%M').time():
            form.errors.sh_end2 = T('Please insert end time')

        if start1 and end1 and start2 == datetime.datetime.strptime('00:00', 
'%H:%M').time() and end2 is None:
            form.errors.sh_end2 = T('Please insert end time')

        if start1 and end1 and start2 is None and end2:
            form.errors.sh_start2 = T('Please insert start time')

        if start1 and end1 and start2 is None and end2 == 
datetime.datetime.strptime('00:00', '%H:%M').time():
            form.errors.sh_start2 = T('Please insert start time')

        if start1 and end1 and start2 == datetime.datetime.strptime('00:00', 
'%H:%M').time() and end2 == datetime.datetime.strptime('00:00', '%H:%M').time():
            form.errors.sh_start2 = T('Second part of the shift cannot last 
24hours')
            form.errors.sh_end2 = T('Second part of the shift cannot last 
24hours')

        #Če so vsi časi morjo bit vsak večji od drucga, razen zadn je lahko 0:00
        if (start1 and end1 and start2 and end2) or \
            start1 and end1 and start2 and end2 == 
datetime.datetime.strptime('00:00', '%H:%M').time() or \
            (start1 == datetime.datetime.strptime('00:00', '%H:%M').time() and 
end1 and start2 and end2 == datetime.datetime.strptime('00:00', 
'%H:%M').time()) or\
            (start1 == datetime.datetime.strptime('00:00', '%H:%M').time() and 
end1 and start2 and end2):
            if end1 <= start1:
                form.errors.sh_end1 = T('End time 1 cannot be before Start time 
1')
            if end1 >= start2:
                form.errors.sh_start2 = T('Start time 2 cannot be before End 
time 1')
            if end1 >= start2:
                form.errors.sh_start2 = T('Start time 2 cannot be before End 
time 1')
            if end2 <= start2 and end2 != datetime.datetime.strptime('00:00', 
'%H:%M').time():
                form.errors.sh_end2 = T('End time must be later than Start 
time')

        """Če user izbere kategorijo NA- 0, mu jo mi izračunamo glede na to 
kdaj se je time_start1
        SET sh_category = 0 --> tole spremeniti
        --- če se začne od 00-11:59 je 10
        --- če se začne od 12-18:59 je 20
        --- če se začne od 19-23:59 je 30
        """

        if int(sh_category) == 0:
            if datetime.datetime.strptime('00:00', '%H:%M').time() <= start1 <= 
datetime.datetime.strptime('11:59', '%H:%M').time():
                form.vars.sh_category = 10
            elif datetime.datetime.strptime('12:00', '%H:%M').time() <= start1 
<= datetime.datetime.strptime('18:59', '%H:%M').time():
                form.vars.sh_category = 20
            elif datetime.datetime.strptime('19:00', '%H:%M').time() <= start1 
<= datetime.datetime.strptime('23:59', '%H:%M').time():
                form.vars.sh_category = 30
        # redirect(URL('settings', 'shifts'))


    grid_shifts = SQLFORM.grid(query=query_shifts,
                        fields=fields_shifts,orderby=db.shifts.sh_code,
                               searchable=False, create=True,
                        deletable=False, editable=True, paginate=100, 
buttons_placement='right',
                        user_signature=True,
                        showbuttontext=False,
                               formname='shiftTable',
                               onvalidation=my_form_processing_edit_shifts,
                               oncreate=my_form_processing_new_shifts,
                        formargs=dict(message_onsuccess=T('New record 
inserted'),
                                             message_onfailure=T('Form has 
errors')),
                        links=links,
                        # oncreate=myfunction,
                               ui=dict(widget='',
                                       header='',
                                       content='',
                                       default='',
                                       cornerall='',
                                       cornertop='',
                                       cornerbottom='',
                                       button='button btn btn-default',
                                       buttontext='buttontext button',
                                       buttonadd='icon plus icon-plus glyphicon 
glyphicon-plus',
                                       buttonback='icon leftarrow 
icon-arrow-left glyphicon glyphicon-arrow-left',
                                       buttonexport='icon downarrow 
icon-download glyphicon glyphicon-download',
                                       buttondelete='icon trash icon-trash 
glyphicon glyphicon-trash',
                                       buttonedit='icon pen icon-pencil 
glyphicon glyphicon-pencil',
                                       buttontable='icon rightarrow 
icon-arrow-right glyphicon glyphicon-arrow-right',
                                       buttonview='icon magnifier icon-zoom-in 
glyphicon glyphicon-eye-open',
                                       buttonvidov='icon glyphicon 
glyphicon-euro'
                                       ),
                        exportclasses=dict(csv=False, 
csv_with_hidden_cols=False,
                                                   html=False, 
tsv_with_hidden_cols=False,json=False, tsv= False, xml = False))


    #  for input in grid_shifts.elements('input', _class='string'):
    #     input['_class'] = 'testniKlass'

    if request.args and request.args[0] in ['edit', 'new']:
        # dolocamo sirino polj
        form = grid_shifts.create_form or grid_shifts.update_form
        #grid_shifts.element('input[name=sh_color]')['_style'] = 'width:30%'
        "PReverjanje polj za čase"
        # form = grid_shifts.element('.web2py_form')
        # form = grid_shifts.create_form or grid_shifts.update_form
        if form.errors["sh_code"] == "Shift with this code already exist. 
Follow the link in upper right corner":
            codeField = form.vars.sh_code
            if codeField or codeField != '':
                redId = db((db.shifts.sh_code == codeField) & 
(db.shifts.sh_organization == org) & (db.shifts.sh_status != 
250)).select().first().id
        #         shiftId = db(db.shifts.sh_code == 
codeField).select(db.shifts.id).as_list()
        #         redId =  shiftId[0]["id"]

                url_ = URL('shifts/edit/shifts', args=redId)
                'static', 'js/web2py-bootstrap3.js'
                session.flash = A(
                    T("Click here if you want to activate shift with that code 
or if you want to be redirected to the shift."),
                    _href=url_)


        return dict(form = form, query_inactive = query_inactive)
        # if form.accepts(request.vars, 
session,onvalidation=my_form_processing):
        #     session.flash = T('Shift inserted')
        #     redirect(URL())

    return dict(grid_shifts=grid_shifts, query_inactive=query_inactive)

-- 
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 web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to