예제 #1
0
 def status_dialog(self):
     customer_id = self.request.matchdict.get('customer_id')
     customer = Customer.load(customer_id)
     self.forbid_if(not customer or customer.campaign.company.enterprise_id != self.enterprise_id)
     order = order_item = events = redir = None
     if self.request.GET.get('order_id'):
         order = CustomerOrder.load(self.request.GET.get('order_id'))
         self.forbid_if(not order or order.campaign.company.enterprise_id != self.enterprise_id)
         events = util.select_list(StatusEvent.find_all_applicable(self.enterprise_id, order), 'event_id', 'display_name', True)
         redir = '/crm/customer/show_orders/%s' % customer_id
     elif self.request.GET.get('order_item_id'):
         order_item = OrderItem.load(self.request.GET.get('order_item_id'))
         self.forbid_if(not order_item or order_item.order.campaign.company.enterprise_id != self.enterprise_id)
         events = util.select_list(StatusEvent.find_all_applicable(self.enterprise_id, order_item), 'event_id', 'display_name', True)
         redir = '/crm/customer/edit_order_dialog/%s/%s' % (customer_id, order_item.order_id)
     else:
         events = util.select_list(StatusEvent.find_all_applicable(self.enterprise_id, customer), 'event_id', 'display_name', True)
         redir = '/crm/customer/edit/%s' % customer_id
     return {
         'customer' : customer,
         'order' : order,
         'order_item' : order_item,
         'events' : events,
         'redir' : redir
         }
예제 #2
0
 def _cancel_order_impl(self, order_id, reason, by_customer=False):
     codr = CustomerOrder.load(order_id)
     self.forbid_if(not codr)
     cust = codr.customer
     api = BaseBillingApi.create_api(cust.campaign.company.enterprise)
     if api.cancel_order(codr, cust.billing):
         Status.add(cust, cust, Status.find_event(self.enterprise_id, cust, 'NOTE'), 'Billing Cancelled at gateway')
     codr.cancel(reason, by_customer)
     cust.invalidate_caches()
예제 #3
0
 def apply_payment(self):
     customer_id = self.request.matchdict.get('customer_id')
     order_id = self.request.matchdict.get('order_id')
     if 'bill_cc_token' in self.request.POST and self.request.POST['bill_cc_token']:
         cust = Customer.load(customer_id)
         order = CustomerOrder.load(order_id)
         bill = self._create_billing(cust)
         self._bill_credit_card(cust, order, bill)
     else:
         self._apply_payment(customer_id, order_id)
     return HTTPFound('/crm/customer/edit_order_dialog/%s/%s' % (customer_id, order_id))
예제 #4
0
 def cancel_order_dialog(self):
     customer_id = self.request.matchdict.get('customer_id')
     order_id = self.request.matchdict.get('order_id')
     customer = Customer.load(customer_id)
     self.forbid_if(not customer or customer.campaign.company.enterprise_id != self.enterprise_id)
     order = CustomerOrder.load(order_id)
     self.forbid_if(not order or order.customer_id != customer.customer_id)
     return {
         'customer' : customer,
         'order' : order
         }
예제 #5
0
 def save_status(self):
     customer_id = self.request.matchdict.get('customer_id')
     customer = Customer.load(customer_id)
     self.forbid_if(not customer or customer.campaign.company.enterprise_id != self.enterprise_id)
     event = StatusEvent.load(self.request.POST.get('event_id'))
     self.forbid_if(not event or not self.request.POST.get('event_id') or (not event.is_system and event.enterprise_id is not None and event.enterprise_id != self.enterprise_id))
     order = None
     note = self.request.POST.get('note')
     if self.request.POST.get('order_id'):
         order = CustomerOrder.load(self.request.POST.get('order_id'))
         self.forbid_if(not order or order.campaign.company.enterprise_id != self.enterprise_id)
         Status.add(customer, order, event, note, self.request.ctx.user)
         self.flash('Statused Order to %s' % event.display_name)
     elif self.request.POST.get('order_item_id'):
         order_item = OrderItem.load(self.request.POST.get('order_item_id'))
         self.forbid_if(not order_item or order_item.order.campaign.company.enterprise_id != self.enterprise_id)
         Status.add(customer, order_item, event, note, self.request.ctx.user)
         self.flash('Statused Item to %s' % event.display_name)
     else:
         Status.add(customer, customer, event, note, self.request.ctx.user)
         self.flash('Statused Customer to %s' % event.display_name)
     customer.invalidate_caches()
     return self.find_redirect()
예제 #6
0
 def get_order(self, order_id):
     return CustomerOrder.find_by_customer(self, order_id)
예제 #7
0
 def add_order(self, cart, user_created, enterprise_id, campaign, order_note=None, incl_tax=True):     #pylint: disable-msg=R0913
     return CustomerOrder.create_new(cart, self, enterprise_id, campaign, user_created,
                                     order_note=order_note, incl_tax=incl_tax)