def render_get_actions_for_contact(self, colname, record): tag = Tag(Translate(self.request)) site = plone.api.portal.get() view_orders_target = '%s/@@orders#%s' % ( site.absolute_url(), str(record.attrs['personal_data.email'])) view_orders_attrs = { 'class_': 'contenttype-document', 'href': view_orders_target, 'title': _('view_orders', default=u'View Orders'), } view_orders = tag('a', ' ', **view_orders_attrs) view_bookings_target = '%s/@@bookings#%s' % ( site.absolute_url(), str(record.attrs['personal_data.email'])) view_bookings_attrs = { 'class_': 'contenttype-document', 'href': view_bookings_target, 'title': _('view_bookings', default=u'View Bookings'), } view_bookings = tag('a', ' ', **view_bookings_attrs) return view_orders + view_bookings
def render_get_actions_for_contact(self, colname, record): tag = Tag(Translate(self.request)) site = plone.api.portal.get() base_url = site.absolute_url() # view orders view_orders_target = '%s/@@orders#%s' % ( base_url, str(record.attrs['personal_data.email'])) view_orders_attrs = { 'href': view_orders_target, 'title': _('view_orders', default=u'View Orders'), } orders_icon_url = '%s/++resource++bda.plone.orders/orders.png' % base_url view_orders_icon = tag('img', src=orders_icon_url) view_orders = tag('a', view_orders_icon, **view_orders_attrs) # view bookings view_bookings_target = '%s/@@bookings#%s' % ( base_url, str(record.attrs['personal_data.email'])) view_bookings_attrs = { 'href': view_bookings_target, 'title': _('view_bookings', default=u'View Bookings'), } bookings_icon_url = '%s/++resource++bda.plone.orders/bookings.png' % base_url view_bookings_icon = tag('img', src=bookings_icon_url) view_bookings = tag('a', view_bookings_icon, **view_bookings_attrs) # XXX: view invoices return view_orders + view_bookings
def heading(self): try: if self.order_data.state in self.reservation_states: return _('reservation_done', default=u'Reservation Done') return _('order_done', default=u'Order Done') except ValueError: return _('unknown_order', default=u'Unknown Order')
def render_get_actions_for_contact(self, colname, record): tag = Tag(Translate(self.request)) site = plone.api.portal.get() view_orders_target = '%s/@@orders#%s' % ( site.absolute_url(), str(record.attrs['personal_data.email'])) view_orders_attrs = { 'class_': 'contenttype-document', 'href': view_orders_target, 'title': _('view_orders', default=u'View Orders'), } view_orders = tag('a', ' ', **view_orders_attrs) view_bookings_target = '%s/@@bookings#%s' % ( site.absolute_url(), str(record.attrs['personal_data.email'])) view_bookings_attrs = { 'class_': 'contenttype-document', 'href': view_bookings_target, 'title': _('view_bookings', default=u'View Bookings'), } view_bookings = tag('a', ' ', **view_bookings_attrs) return view_orders + view_bookings
def render_order_actions(self, colname, record): tag = Tag(Translate(self.request)) view_order_target = '%s?uid=%s' % ( self.context.absolute_url(), str(record.attrs['uid'])) view_order_attrs = { 'ajax:bind': 'click', 'ajax:target': view_order_target, 'ajax:overlay': 'myorder', 'class_': 'contenttype-document', 'href': '', 'title': _('view_order', default=u'View Order'), } view_order = tag('a', ' ', **view_order_attrs) add_order_items_to_cart_attrs = { 'ajax:bind': 'click', 'ajax:target': view_order_target, 'ajax:overlay': 'add_order_items_to_cart', 'class_': 'go_to_cart_action', 'href': '', 'title': _('add_order_items_to_cart', default=u'Add Order Items To Cart'), } add_order_items_to_cart = tag('a', ' ', **add_order_items_to_cart_attrs) return view_order + add_order_items_to_cart
def heading(self): try: if self.order_data.state in self.reservation_states: return _('reservation_done', default=u'Reservation Done') return _('order_done', default=u'Order Done') except ValueError: return _('unknown_order', default=u'Unknown Order')
def state_transitions_vocab(): vocab = { ifaces.STATE_TRANSITION_RENEW: _('renew', default=u'Renew'), ifaces.STATE_TRANSITION_PROCESS: _('process', default=u'Process'), ifaces.STATE_TRANSITION_FINISH: _('finish', default=u'Finish'), ifaces.STATE_TRANSITION_CANCEL: _('cancel', default=u'Cancel'), } return vocab
def salaried_vocab(): vocab = { ifaces.SALARIED_YES: _('yes', default=u'Yes'), ifaces.SALARIED_NO: _('no', default=u'No'), ifaces.SALARIED_FAILED: _('failed', default=u'Failed'), ifaces.SALARIED_MIXED: _('mixed', default=u'Mixed'), } return vocab
def salaried_transitions_vocab(): vocab = { ifaces.SALARIED_TRANSITION_SALARIED: _('mark_salaried', default=u'Mark salaried'), ifaces.SALARIED_TRANSITION_OUTSTANDING: _('mark_outstanding', default=u'Mark outstanding'), } return vocab
def state_transitions_vocab(): vocab = { ifaces.STATE_TRANSITION_RENEW: _('renew', default=u'Renew'), ifaces.STATE_TRANSITION_PROCESS: _('process', default=u'Process'), ifaces.STATE_TRANSITION_FINISH: _('finish', default=u'Finish'), ifaces.STATE_TRANSITION_CANCEL: _('cancel', default=u'Cancel'), } return vocab
def salaried_vocab(): vocab = { ifaces.SALARIED_YES: _('yes', default=u'Yes'), ifaces.SALARIED_NO: _('no', default=u'No'), ifaces.SALARIED_FAILED: _('failed', default=u'Failed'), ifaces.SALARIED_MIXED: _('mixed', default=u'Mixed'), } return vocab
def salaried_transitions_vocab(): vocab = { ifaces.SALARIED_TRANSITION_SALARIED: _( 'mark_salaried', default=u'Mark salaried'), ifaces.SALARIED_TRANSITION_OUTSTANDING: _( 'mark_outstanding', default=u'Mark outstanding'), } return vocab
def groups_vocab(): """ used for grouping the bookings table """ vocab = { 'email': _('email', default=u'Email'), 'buyable': _('buyable', default=u'Buyable'), } return vocab
def text(self): try: if self.order_data.state in self.reservation_states: return _('reservation_text', default=u'Thanks for your Reservation.') return _('order_text', default=u'Thanks for your Order.') except ValueError: return _('unknown_order_text', default=u'Sorry, this order does not exist.')
def text(self): try: if self.order_data.state in self.reservation_states: return _('reservation_text', default=u'Thanks for your Reservation.') return _('order_text', default=u'Thanks for your Order.') except ValueError: return _('unknown_order_text', default=u'Sorry, this order does not exist.')
def groups_vocab(): """ used for grouping the bookings table """ vocab = { 'email': _('email', default=u'Email'), 'buyable': _('buyable', default=u'Buyable'), } return vocab
def render_order_actions(self, colname, record): order_uid = record.attrs['order_uid'] tag = Tag(Translate(self.request)) vendor_uid = self.request.form.get('vendor', '') if vendor_uid: view_order_target = '%s?uid=%s&vendor=%s' % ( self.context.absolute_url(), str(order_uid), vendor_uid) else: view_order_target = '%s?uid=%s' % (self.context.absolute_url(), str(order_uid)) view_order_attrs = { 'ajax:bind': 'click', 'ajax:target': view_order_target, 'ajax:overlay': 'order', 'class_': 'contenttype-document', 'href': '', 'title': _('view_order', default=u'View Order'), } view_order = tag('a', ' ', **view_order_attrs) select_order_attrs = { 'name': 'select_order', 'type': 'checkbox', 'value': order_uid, 'class_': 'select_order', } select_order = tag('input', **select_order_attrs) site = plone.api.portal.get() portal_url = site.absolute_url() ## Custom print order data = OrderData(self.context, uid=order_uid) ordernumber = data.order.attrs.get('ordernumber', '') email = data.order.attrs.get('personal_data.email', '') print_order_attrs = { "class_": "contenttype-document", "href": "%s/showorder?ordernumber=%s&email=%s" % (portal_url, ordernumber, email), "target": "_blank", "title": _('view_order', default=u'View Order'), } print_order = tag('a', ' ', **print_order_attrs) return select_order + print_order
def fix_shipping_attrs(ctx=None): portal = getSite() orders_soup = get_orders_soup(portal) data = orders_soup.storage.data for item in data.values(): try: item.attrs['shipping_method'] except KeyError: item.attrs['shipping_method'] = 'unknown' logging.info( u"Added shipping_method {0} to booking {1}".format( 'unknown', item.attrs['uid'] ) ) try: item.attrs['shipping_label'] except KeyError: item.attrs['shipping_label'] = _('unknown', default=u'Unknown') logging.info( u"Added shipping_label {0} to booking {1}".format( 'unknown', item.attrs['uid'] ) ) try: item.attrs['shipping_description'] except KeyError: item.attrs['shipping_description'] = \ _('unknown', default=u'Unknown') logging.info( u"Added shipping_description {0} to booking {1}".format( 'unknown', item.attrs['uid'] ) ) try: item.attrs['shipping_net'] except KeyError: item.attrs['shipping_net'] = item.attrs['shipping'] logging.info( u"Added shipping_net {0} to booking {1}".format( item.attrs['shipping'], item.attrs['uid'] ) ) try: item.attrs['shipping_vat'] except KeyError: item.attrs['shipping_vat'] = Decimal(0) logging.info( u"Added shipping_vat {0} to booking {1}".format( Decimal(0), item.attrs['uid'] ) )
def columns(self): return [{ 'id': 'actions', 'label': _('actions', default=u'Actions'), 'head': self.render_order_actions_head, 'renderer': self.render_order_actions, }, { 'id': 'created', 'label': _('date', default=u'Date'), 'renderer': self.render_dt, }, { 'id': 'personal_data.lastname', 'label': _('lastname', default=u'Last Name'), }, { 'id': 'personal_data.firstname', 'label': _('firstname', default=u'First Name'), }, { 'id': 'personal_data.email', 'label': _('email', default=u'Email'), }, { 'id': 'billing_address.city', 'label': _('city', default=u'City'), }, { 'id': 'salaried', 'label': _('salaried', default=u'Salaried'), 'renderer': self.render_salaried, }, { 'id': 'state', 'label': _('state', default=u'State'), 'renderer': self.render_state, }]
def columns(self): return [{ 'id': 'actions', 'label': _('actions', default=u'Actions'), 'head': self.render_order_actions_head, 'renderer': self.render_order_actions, }, { 'id': 'created', 'label': _('date', default=u'Date'), 'renderer': self.render_dt, }, { 'id': 'personal_data.lastname', 'label': _('lastname', default=u'Last Name'), }, { 'id': 'personal_data.firstname', 'label': _('firstname', default=u'First Name'), }, { 'id': 'personal_data.email', 'label': _('email', default=u'Email'), }, { 'id': 'billing_address.city', 'label': _('city', default=u'City'), }, { 'id': 'salaried', 'label': _('salaried', default=u'Salaried'), 'renderer': self.render_salaried, }, { 'id': 'state', 'label': _('state', default=u'State'), 'renderer': self.render_state, }]
def render_order_actions(self, colname, record): order_uid = record.attrs['order_uid'] tag = Tag(Translate(self.request)) vendor_uid = self.request.form.get('vendor', '') if vendor_uid: view_order_target = '%s?uid=%s&vendor=%s' % ( self.context.absolute_url(), str(order_uid), vendor_uid) else: view_order_target = '%s?uid=%s' % ( self.context.absolute_url(), str(order_uid)) view_order_attrs = { 'ajax:bind': 'click', 'ajax:target': view_order_target, 'ajax:overlay': 'order', 'class_': 'contenttype-document', 'href': '', 'title': _('view_order', default=u'View Order'), } view_order = tag('a', ' ', **view_order_attrs) select_order_attrs = { 'name': 'select_order', 'type': 'checkbox', 'value': order_uid, 'class_': 'select_order', } select_order = tag('input', **select_order_attrs) return select_order + view_order
def fix_payment_attrs(ctx=None): portal = getSite() payments = Payments(portal) orders_soup = get_orders_soup(portal) data = orders_soup.storage.data for item in data.values(): try: item.attrs['payment_method'] item.attrs['payment_label'] continue except KeyError: payment_method = item.attrs['payment_selection.payment'] payment = payments.get(payment_method) if payment: payment_label = payment.label else: payment_label = _('unknown', default=u'Unknown') item.attrs['payment_method'] = payment_method logging.info( u"Added payment_method {0} to booking {1}".format( payment_method, item.attrs['uid'] ) ) item.attrs['payment_label'] = payment_label logging.info( u"Added payment_label {0} to booking {1}".format( payment_label, item.attrs['uid'] ) )
def from_before_to(self, widget, data): from_date = data.fetch('exportorders.from').extracted to_date = data.fetch('exportorders.to').extracted if to_date <= from_date: raise ExtractionError(_('from_date_before_to_date', default=u'From-date after to-date')) return data.extracted
def __call__(self): booking_uid = self.request.form.get('uid') if not booking_uid: raise BadRequest('value not given') try: booking_data = BookingData(self.context, uid=uuid.UUID(booking_uid)) # noqa if booking_data.booking is None: raise ValueError('invalid value (no booking found)') do_transition_for( booking_data, transition=ifaces.STATE_TRANSITION_CANCEL, context=self.context, request=self.request ) except ValueError: raise BadRequest('something is wrong with the value') plone.api.portal.show_message( message=_(u"Booking cancelled."), request=self.request, type='info' ) self.request.response.redirect( self.context.absolute_url() + '/@@orders' )
def render_order_actions(self, colname, record): tag = Tag(Translate(self.request)) vendor_uid = self.request.form.get('vendor', '') if vendor_uid: view_order_target = '%s?uid=%s&vendor=%s' % ( self.context.absolute_url(), str( record.attrs['uid']), vendor_uid) else: view_order_target = '%s?uid=%s' % (self.context.absolute_url(), str(record.attrs['uid'])) view_order_attrs = { 'ajax:bind': 'click', 'ajax:target': view_order_target, 'ajax:overlay': 'order', 'class_': 'contenttype-document', 'href': '', 'title': _('view_order', default=u'View Order'), } view_order = tag('a', ' ', **view_order_attrs) select_order_attrs = { 'name': 'select_order', 'type': 'checkbox', 'value': record.attrs['uid'], 'class_': 'select_order', } select_order = tag('input', **select_order_attrs) return select_order + view_order
def template_vocabulary(self, widget, data): vocab = [ ('-', _('no_template_selected', default=u'No template selected')), ] tpllib = IDynamicMailTemplateLibrary(self.context) for key in tpllib.keys(): vocab.append((key, key)) return vocab
def from_before_to(self, widget, data): from_date = data.fetch('exportorders.from').extracted to_date = data.fetch('exportorders.to').extracted if to_date <= from_date: raise ExtractionError( _('from_date_before_to_date', default=u'From-date after to-date')) return to_date
def template_vocabulary(self, widget, data): vocab = [ ('-', _('no_template_selected', default=u'No template selected')), ] tpllib = IDynamicMailTemplateLibrary(self.context) for key in tpllib.keys(): vocab.append((key, key)) return vocab
def columns(self): return [{ 'id': 'actions', 'label': _('actions', default=u'Actions'), 'head': self.render_order_actions_head, 'renderer': self.render_order_actions, }, { 'id': 'uid', 'label': _('Ticket UID', default=u'Ticket UID'), 'head': self.render_order_uid_head, 'renderer': self.render_order_uid, }, { 'id': 'title', 'label': _('Title', default=u'Title'), 'head': self.render_booking_title_head, 'renderer': self.render_booking_title, }, { 'id': 'created', 'label': _('date', default=u'Date'), 'renderer': self.render_dt, }, { 'id': 'personal_data.firstname', 'label': _('firstname', default=u'First Name'), 'head': self.render_order_firstname_head, 'renderer': self.render_order_firstname }, { 'id': 'personal_data.lastname', 'label': _('lastname', default=u'Last Name'), 'head': self.render_order_lastname_head, 'renderer': self.render_order_lastname }, { 'id': 'state', 'label': _('state', default=u'State'), 'renderer': self.render_state, }]
def render_auth_form(self): # Render the authentication form for anonymous users. req = self.request action = req.getURL() ordernumber = self.ordernumber or req.form.get('ordernumber', '') email = self.email or req.form.get('email', '') form = factory('form', name='order_auth_form', props={'action': action}) form['ordernumber'] = factory('div:label:error:text', value=ordernumber, props={ 'label': _('anon_auth_label_ordernumber', default=u'Ordernumber'), 'div.class': 'ordernumber', 'required': True, }) form['email'] = factory('div:label:error:text', value=email, props={ 'label': _('anon_auth_label_email', default=u'Email'), 'div.class': 'email', 'required': True, }) form['submit'] = factory('div:label:submit', props={ 'label': _('anon_auth_label_submit', default=u'Submit'), 'div.class': 'submit', 'handler': self._form_handler, 'action': 'submit', }) controller = Controller(form, req) return controller.rendered
def order(self): if not self.uid: err = _( 'statusmessage_err_no_order_uid_given', default='Cannot show order information because no order uid was given.' # noqa ) IStatusMessage(self.request).addStatusMessage(err, 'error') raise Redirect(self.context.absolute_url()) return dict(self.order_data.order.attrs)
def send_success(self, request): message = _('customers_notified_success', default=u'Mail to customers sent') continuation = [ AjaxOverlay(close=True), AjaxMessage(message, 'info', None) ] ajax_continue(self.request, continuation) return True
def order(self): if not self.uid: err = _( 'statusmessage_err_no_order_uid_given', default= 'Cannot show order information because no order uid was given.' # noqa ) IStatusMessage(self.request).addStatusMessage(err, 'error') raise Redirect(self.context.absolute_url()) return dict(self.order_data.order.attrs)
def send_success(self, request): message = translate(_('customers_notified_success', default=u'Mail to customers sent'), context=self.request) continuation = [ AjaxOverlay(close=True), AjaxMessage(message, 'info', None) ] ajax_continue(self.request, continuation) return True
def render_filter(self): # vendor areas of current user vendors = vendors_form_vocab() vendor_selector = None # vendor selection, include if more than one vendor if len(vendors) > 2: vendor_selector = factory('label:select', name='vendor', value=self.request.form.get( 'vendor', ''), props={ 'vocabulary': vendors, 'label': _('filter_for_vendors', default=u'Filter for vendors'), }) # customers of current user customers = customers_form_vocab() customer_selector = None # customers selection, include if more than one customer if len(customers) > 2: customer_selector = factory('label:select', name='customer', value=self.request.form.get( 'customer', ''), props={ 'vocabulary': customers, 'label': _('filter_for_customers', default=u'Filter for customers'), }) if not vendor_selector and not customer_selector: return # concatenate filters filter = '' if vendor_selector: filter += vendor_selector(request=self.request) if customer_selector: filter += customer_selector(request=self.request) return filter
def __call__(self): req = self.request ordernumber = req.form.get('content_auth_form.ordernumber', None) email = req.form.get('content_auth_form.email', None) order = None errs = [] if ordernumber and email: orders_soup = get_orders_soup(self.context) order = orders_soup.query(Eq('ordernumber', ordernumber)) try: # generator should have only one item order = next(order) try: assert(order.attrs['personal_data.email'] == email) except AssertionError: # Don't raise Unauthorized, as this allows to draw # conclusions on existing ordernumbers order = None except StopIteration: # order by ordernumber not exists order = None if not email: err = _('anon_auth_err_email', default=u'Please provide the email adress you used for ' u'submitting the order.') errs.append(err) if not ordernumber: err = _('anon_auth_err_ordernumber', default=u'Please provide the ordernumber') errs.append(err) if email and ordernumber and not order: err = _('anon_auth_err_order', default=u'No order could be found for the given ' u'credentials') errs.append(err) if not ordernumber and not email: # first call of this form errs = [] for err in errs: IStatusMessage(self.request).addStatusMessage(err, 'error') self.uid = order.attrs['uid'] if order else None return self.view_template(self)
def columns(self): return [ { 'id': 'actions', 'label': _('actions', default=u'Actions'), 'renderer': self.render_get_actions_for_contact, }, { 'id': 'personal_data.email', 'label': _('email', default=u'Email'), }, { 'id': 'personal_data.lastname', 'label': _('lastname', default=u'Last Name'), }, { 'id': 'personal_data.firstname', 'label': _('firstname', default=u'First Name'), }, ]
def render_order_actions_head(self): tag = Tag(Translate(self.request)) select_all_orders_attrs = { 'name': 'select_all_orders', 'type': 'checkbox', 'class_': 'select_all_orders', 'title': _('select_all_orders', default=u'Select all visible orders'), } select_all_orders = tag('input', **select_all_orders_attrs) notify_customers_target = self.context.absolute_url() notify_customers_attributes = { 'ajax:target': notify_customers_target, 'class_': 'notify_customers', 'href': '', 'title': _('notify_customers', default=u'Notify customers of selected orders'), } notify_customers = tag('a', ' ', **notify_customers_attributes) return select_all_orders + notify_customers
def columns(self): return [ { 'id': 'actions', 'label': _('actions', default=u'Actions'), 'renderer': self.render_get_actions_for_contact, }, { 'id': 'personal_data.email', 'label': _('email', default=u'Email'), }, { 'id': 'personal_data.lastname', 'label': _('lastname', default=u'Last Name'), }, { 'id': 'personal_data.firstname', 'label': _('firstname', default=u'First Name'), }, ]
def render_email(self, colname, record): email = record.attrs.get(colname, '') bookings_quantity = self.render_bookings_quantity(colname, record) bookings_total_sum = self.render_bookings_total_sum(colname, record) value = \ '<tr class="group_email">' \ '<td colspan="13">' + '<p>' + email + '</p>' +\ '<span>' +\ translate( _("bookings_quantity", default=u"Bookings quantity"), self.request ) \ + ': ' + str(bookings_quantity) + '</span>' \ '<span>' +\ translate( _("bookings_total_sum", default=u"Bookings total sum"), self.request ) \ + ': ' + str(bookings_total_sum) + '</td></tr>' return value
def render_date_to_filter(self): to_date = factory( 'label:text', name='to_date', value=self.request.form.get('to_date', ''), props={ 'label': _('to_date', default=u'to date'), } ) filter = to_date(request=self.request) return filter
def render_date_from_filter(self): from_date = factory( 'label:text', name='from_date', value=self.request.form.get('from_date', ''), props={ 'label': _('from_date', default=u'Filter from date'), } ) filter = from_date(request=self.request) return filter
def render_email(self, colname, record): email = record.attrs.get(colname, '') bookings_quantity = self.render_bookings_quantity(colname, record) bookings_total_sum = self.render_bookings_total_sum(colname, record) value = \ '<tr class="group_email">' \ '<td colspan="13">' + '<p>' + email + '</p>' +\ '<span>' +\ translate( _("bookings_quantity", default=u"Bookings quantity"), self.request ) \ + ': ' + str(bookings_quantity) + '</span>' \ '<span>' +\ translate( _("bookings_total_sum", default=u"Bookings total sum"), self.request ) \ + ': ' + str(bookings_total_sum) + '</td></tr>' return value
def render_date_from_filter(self): from_date = factory( 'label:text', name='from_date', value=self.request.form.get('from_date', ''), props={ 'label': _('from_date', default=u'Filter from date'), } ) filter = from_date(request=self.request) return filter
def render_date_to_filter(self): to_date = factory( 'label:text', name='to_date', value=self.request.form.get('to_date', ''), props={ 'label': _('to_date', default=u'to date'), } ) filter = to_date(request=self.request) return filter
def render_filter(self): # vendor areas of current user vendors = vendors_form_vocab() vendor_selector = None # vendor selection, include if more than one vendor if len(vendors) > 2: vendor_selector = factory( 'label:select', name='vendor', value=self.request.form.get('vendor', ''), props={ 'vocabulary': vendors, 'label': _('filter_for_vendors', default=u'Filter for vendors'), } ) # customers of current user customers = customers_form_vocab() customer_selector = None # customers selection, include if more than one customer if len(customers) > 2: customer_selector = factory( 'label:select', name='customer', value=self.request.form.get('customer', ''), props={ 'vocabulary': customers, 'label': _('filter_for_customers', default=u'Filter for customers'), } ) if not vendor_selector and not customer_selector: return # concatenate filters filter = '' if vendor_selector: filter += vendor_selector(request=self.request) if customer_selector: filter += customer_selector(request=self.request) return filter
def render_buyable_uid(self, colname, record): # this actually gets the title of a buyable_uid title = record.attrs.get('title', '') bookings_quantity = self.render_bookings_quantity(colname, record) bookings_total_sum = self.render_bookings_total_sum(colname, record) value = \ '<tr class="group_buyable">' \ '<td colspan="13">' + '<p>' + title + '</p>' +\ '<span>' +\ translate( _("bookings_quantity", default=u"Bookings quantity"), self.request ) \ + ': ' + str(bookings_quantity) + '</span>' \ '<span>' +\ translate( _("bookings_total_sum", default=u"Bookings total sum"), self.request ) \ + ': ' + str(bookings_total_sum) + '</td></tr>' return value
def render_buyable_uid(self, colname, record): # this actually gets the title of a buyable_uid title = record.attrs.get('title', '') bookings_quantity = self.render_bookings_quantity(colname, record) bookings_total_sum = self.render_bookings_total_sum(colname, record) value = \ u'<tr class="group_buyable">' \ u'<td colspan="13">' + u'<p>' + safe_unicode(title) + u'</p>' +\ u'<span>' +\ translate( _("bookings_quantity", default=u"Bookings quantity"), self.request ) \ + u': ' + safe_unicode(bookings_quantity) + u'</span>' \ u'<span>' +\ translate( _("bookings_total_sum", default=u"Bookings total sum"), self.request ) \ + u': ' + bookings_total_sum + u'</td></tr>' return value
def do_notify(context, order_data, templates, receiver): attrs = order_data.order.attrs subject = templates['subject'] % attrs['ordernumber'] message = create_mail_body(templates, context, order_data) mail_notify = MailNotify(context) try: mail_notify.send(subject, message, receiver) except Exception: msg = translate( _('email_sending_failed', default=u'Failed to send notification to ${receiver}', mapping={'receiver': receiver})) api.portal.show_message(message=msg, request=context.REQUEST) logger.exception("Email could not be sent.")
def render_order_actions(self, colname, record): tag = Tag(Translate(self.request)) view_order_target = '%s?uid=%s' % (self.context.absolute_url(), str(record.attrs['uid'])) view_order_attrs = { 'ajax:bind': 'click', 'ajax:target': view_order_target, 'ajax:overlay': 'myorder', 'class_': 'contenttype-document', 'href': '', 'title': _('view_order', default=u'View Order'), } view_order = tag('a', ' ', **view_order_attrs) return view_order
def render_address(self, colname, record): street = safe_unicode(self._get_ordervalue( 'billing_address.street', record, )) city = safe_unicode(self._get_ordervalue( 'billing_address.city', record, )) phone = safe_unicode(self._get_ordervalue( 'personal_data.phone', record, )) email = safe_unicode(record.attrs.get('email', '')) return u"{0} {1}<br/>{2}: {3}<br/>{4}: {5}".format( street, city, _("phone", default=u"Phone"), phone, _("email", default=u"Email"), email )
def render_address(self, colname, record): street = safe_unicode(self._get_ordervalue( 'billing_address.street', record, )) city = safe_unicode(self._get_ordervalue( 'billing_address.city', record, )) phone = safe_unicode(self._get_ordervalue( 'personal_data.phone', record, )) email = safe_unicode(record.attrs.get('email', '')) return u"{0} {1}<br/>{2}: {3}<br/>{4}: {5}".format( street, city, _("phone", default=u"Phone"), phone, _("email", default=u"Email"), email )
def do_notify(context, order_data, templates, receiver): attrs = order_data.order.attrs subject = templates['subject'] % attrs['ordernumber'] message = create_mail_body(templates, context, order_data) mail_notify = MailNotify(context) try: mail_notify.send(subject, message, receiver) except Exception: msg = translate( _('email_sending_failed', default=u'Failed to send notification to ${receiver}', mapping={'receiver': receiver})) api.portal.show_message(message=msg, request=context.REQUEST) logger.exception("Email could not be sent.")
def __call__(self): booking_uid = self.request.form.get('uid') if not booking_uid: raise BadRequest('value not given') try: booking_cancel(self.context, self.request, uuid.UUID(booking_uid)) except ValueError: raise BadRequest('something is wrong with the value') plone.api.portal.show_message(message=_(u"Booking cancelled."), request=self.request, type='info') self.request.response.redirect(self.context.absolute_url() + '/@@orders')
def fix_shipping_attrs(ctx=None): portal = getSite() orders_soup = get_orders_soup(portal) data = orders_soup.storage.data for item in data.values(): try: item.attrs['shipping_method'] except KeyError: item.attrs['shipping_method'] = 'unknown' logging.info("Added shipping_method {0} to booking {1}".format( 'unknown', item.attrs['uid'])) try: item.attrs['shipping_label'] except KeyError: item.attrs['shipping_label'] = _('unknown', default=u'Unknown') logging.info("Added shipping_label {0} to booking {1}".format( 'unknown', item.attrs['uid'])) try: item.attrs['shipping_description'] except KeyError: item.attrs['shipping_description'] = \ _('unknown', default=u'Unknown') logging.info( "Added shipping_description {0} to booking {1}".format( 'unknown', item.attrs['uid'])) try: item.attrs['shipping_net'] except KeyError: item.attrs['shipping_net'] = item.attrs['shipping'] logging.info("Added shipping_net {0} to booking {1}".format( item.attrs['shipping'], item.attrs['uid'])) try: item.attrs['shipping_vat'] except KeyError: item.attrs['shipping_vat'] = Decimal(0) logging.info("Added shipping_vat {0} to booking {1}".format( Decimal(0), item.attrs['uid']))
def __call__(self): req = self.request ordernumber = req.form.get('order_auth_form.ordernumber', None) email = req.form.get('order_auth_form.email', None) order = None errs = [] if ordernumber and email: orders_soup = get_orders_soup(self.context) order = orders_soup.query(Eq('ordernumber', ordernumber)) order = order.next() # generator should have only one item try: assert (order.attrs['personal_data.email'] == email) except AssertionError: # Don't raise Unauthorized, as this allows to draw conclusions # on existing ordernumbers order = None if not email: err = _('anon_auth_err_email', default=u'Please provide the email adress you used for ' u'submitting the order.') errs.append(err) if not ordernumber: err = _('anon_auth_err_ordernumber', default=u'Please provide the ordernumber') errs.append(err) if email and ordernumber and not order: err = _('anon_auth_err_order', default=u'No order could be found for the given ' u'credentials') errs.append(err) if not ordernumber and not email: # first call of this form errs = [] for err in errs: IStatusMessage(self.request).addStatusMessage(err, 'error') self.uid = order.attrs['uid'] if order else None return self.order_auth_template(self)
def render_auth_form(self): # Render the authentication form for anonymous users. req = self.request action = req.getURL() ordernumber = self.ordernumber or req.form.get('ordernumber', '') email = self.email or req.form.get('email', '') form = factory( 'form', name='order_auth_form', props={'action': action}) form['ordernumber'] = factory( 'div:label:error:text', value=ordernumber, props={ 'label': _('anon_auth_label_ordernumber', default=u'Ordernumber'), 'div.class': 'ordernumber', 'required': True, }) form['email'] = factory( 'div:label:error:text', value=email, props={ 'label': _('anon_auth_label_email', default=u'Email'), 'div.class': 'email', 'required': True, }) form['submit'] = factory( 'div:label:submit', props={ 'label': _('anon_auth_label_submit', default=u'Submit'), 'div.class': 'submit', 'handler': self._form_handler, 'action': 'submit', }) controller = Controller(form, req) return controller.rendered
def render_group_filter(self): # group orders groups = vocabs.groups_vocab() group_selector = factory( 'label:select', name='group', value=self.request.form.get('group', ''), props={ 'vocabulary': groups, 'label': _('group_orders_by', default=u'Group orders by'), } ) filter = group_selector(request=self.request) return filter
def render_order_actions_head(self): tag = Tag(Translate(self.request)) select_all_orders_attrs = { 'name': 'select_all_orders', 'type': 'checkbox', 'class_': 'select_all_orders', 'title': _('select_all_orders', default=u'Select all visible orders'), } select_all_orders = tag('input', **select_all_orders_attrs) notify_customers_target = self.context.absolute_url() notify_customers_attributes = { 'ajax:target': notify_customers_target, 'class_': 'notify_customers', 'href': '', 'title': _('notify_customers', default=u'Notify customers of selected orders'), } notify_customers = tag('a', ' ', **notify_customers_attributes) return select_all_orders + notify_customers
def render_group_filter(self): # group orders groups = vocabs.groups_vocab() group_selector = factory( 'label:select', name='group', value=self.request.form.get('group', ''), props={ 'vocabulary': groups, 'label': _('group_orders_by', default=u'Group orders by'), } ) filter = group_selector(request=self.request) return filter