def BillingRefund(self, ReceiptID, CashAmt, **kw): ''' Refund some cash to a customer Only allow refunds if the customer has credit, and only up to the credit amount If a refund cannot be fulfilled as requested, then don't do any refund at all, even if the customer has some credit ''' # Load the customer Customer = model.InvReceipt.get(ReceiptID).Customer if (Customer.CalcCashBalance() >= 0): ErrorMsg = 'Refund rejected, Customer has no credit' NextLink = 'index?receipt_id=%d' % ReceiptID raise cherrypy.HTTPRedirect('DataEntryError?error=%s&next_link=%s' % (ErrorMsg, NextLink)) elif (CashAmt <= 0): ErrorMsg = 'Refund ignored, cannot refund a 0 or negative amount' NextLink = 'index?receipt_id=%d' % ReceiptID raise cherrypy.HTTPRedirect('DataEntryError?error=%s&next_link=%s' % (ErrorMsg, NextLink)) elif (Customer.CalcBalance() + CashAmt > 0): ErrorMsg = 'Refund rejected, Customer has insufficient credit' NextLink = 'index?receipt_id=%d' % ReceiptID raise cherrypy.HTTPRedirect('DataEntryError?error=%s&next_link=%s' % (ErrorMsg, NextLink)) else: payment = model.InvCustomerPayment(CustomerID=Customer.id, DatePaid=model.cur_date_time(),\ Amount=-CashAmt,Notes='Cash refund from user id: %s' % (model.cur_user_id())) raise cherrypy.HTTPRedirect('index?receipt_id=%d' % ReceiptID)
def StockTransferRequest(self, id='',Id='', Op='', **kw): if Id != '': id = Id if id != '': try: int_id = int(id) record = model.InvStockTransferRequest.get(int_id) except (ValueError, SQLObjectNotFound): int_id = -1 else: int_id = -1 #Find initial values for our data record if int_id > 0: Id_data = record.id Name_data = record.Name() Notes_data = record.Notes RequestedBy_data = record.RequestedBy RequestedOn_data = record.RequestedOn RequiredBy_data = record.RequiredBy #ForeignKeys try: ForLocation_data = record.ForLocation.id ForLocation_display = record.ForLocation.Name + ' ('+str(record.ForLocation.id)+')' except AttributeError: ForLocation_data = '' ForLocation_display = 'None' #MultiJoin and RelatedJoin Items_data = 'There are ' + str(len(record.Items)) + ' records' if record.Status == 'deleted': DisplayMessage_data = "NOTE: This record is marked deleted!" else: DisplayMessage_data = "" else: Id_data = '' Name_data = '' Notes_data = '' RequestedBy_data = model.cur_user_id() RequestedOn_data = model.cur_date_time().strftime('%Y-%m-%d') RequiredBy_data = model.cur_date_time().strftime('%Y-%m-%d') #ForeignKeys ForLocation_data = '' ForLocation_display = 'None' #MultiJoin and RelatedJoin Items_data = 'There are no records' #Special manipulations for new records if Op == 'CopyIntoNew': #ForeignKeys Name_data = '' RequestedBy_data = model.cur_user_id() RequestedOn_data = model.cur_date_time().strftime('%Y-%m-%d') RequiredBy_data = model.cur_date_time().strftime('%Y-%m-%d') #MultiJoin and RelatedJoin Items_data = 'There are no records' Id_data = '' id = '' #Construct our display fields Id = dict(id="str_Id", name="Id", label="Id", type="Hidden",attr={}, data=Id_data) Name = dict(id="str_Name", name="Name", label="Name", type="StringRO",attr=dict(length=50), data=Name_data) RequestedBy = dict(id="str_RequestedBy", name="RequestedBy", label="Requested by", type="StringRO",attr=dict(length=50), data=RequestedBy_data) RequestedOn = dict(id="str_RequestedOn", name="RequestedOn", label="Requested on", type="DateTime",attr=dict(), data=RequestedOn_data) RequiredBy = dict(id="str_RequiredBy", name="RequiredBy", label="Required by", type="DateTime",attr=dict(), data=RequiredBy_data) Notes = dict(id="str_Notes", name="Notes", label="Notes", type="String",attr=dict(length=50), data=Notes_data) #ForeignKeys SrchLocationName = dict(id="str_SrchLocationName", name="Name", label="Name", type="String",attr=dict(length=25), data='') ForLocation = dict(id="str_ForLocation", name="ForLocation", label="ForLocation", type="ForeignKey",attr=dict(srchUrl="LocationSearch",lookupUrl="LocationGet", edit_url='Location', srchFields=[SrchLocationName]), data=ForLocation_data, init_display=ForLocation_display) #MultiJoin Items = dict(id="str_Items", name="Items", label="Items", type="MultiJoin",attr=dict(displayUrl="StockTransferRequestMultiJoinList",listUrl="StockTransferRequestMultiJoinList", linkUrl="StockTransferRequestItem"), data=Items_data) #Fields fields = [Id, Name, RequestedBy, RequestedOn, RequiredBy, ForLocation, Items, Notes] #Configure any of the links that might need configuring if id == '': StockTransferRequestMenu = 'StockTransferRequestMenu' else: StockTransferRequestMenu = 'StockTransferRequestMenu?id=' + id #RETURN VALUES HERE return dict(id=id, Name='StockTransferRequest', Label='Stock transfer request entry', Fields=fields, FieldsSrch=[Name], Read='StockTransferRequest', Add='StockTransferRequestSave', Del='StockTransferRequestDel', UnDel='StockTransferRequestUnDel', Edit='StockTransferRequest', Save='StockTransferRequestSave', SrchUrl='StockTransferRequestSearch', MenuBar=StockTransferRequestMenu)
def StockTransferRequestSave(self, ForLocation, Id='', id='', RequestedOn='', RequiredBy='', Notes='', **kw): # log.debug("Is Service: " + str(IsService)) # log.debug("IsForSale: " + str(IsForSale)) if id != '': Id = id if Id != '': try: int_id = int(Id) record = model.InvStockTransferRequest.get(int_id) except (ValueError, SQLObjectNotFound): int_id = -1 else: int_id = -1 if RequestedOn != '': if len(RequestedOn) > 16: RequestedOn = datetime.fromtimestamp(time.mktime(time.strptime(RequestedOn,'%Y-%m-%d %H:%M:%S'))) elif len(RequestedOn) > 10: RequestedOn = datetime.fromtimestamp(time.mktime(time.strptime(RequestedOn,'%Y-%m-%d %H:%M'))) else: RequestedOn = datetime.fromtimestamp(time.mktime(time.strptime(RequestedOn,'%Y-%m-%d'))) if RequiredBy != '': if len(RequiredBy) > 16: RequiredBy = datetime.fromtimestamp(time.mktime(time.strptime(RequiredBy,'%Y-%m-%d %H:%M:%S'))) elif len(RequiredBy) > 10: RequiredBy = datetime.fromtimestamp(time.mktime(time.strptime(RequiredBy,'%Y-%m-%d %H:%M'))) else: RequiredBy = datetime.fromtimestamp(time.mktime(time.strptime(RequiredBy,'%Y-%m-%d'))) try: if int_id > 0: if record.Status == 'deleted': result_msg="Cannot update a deleted record." result = 0 else: #Updating the record record.RequestedOn = RequestedOn record.RequiredBy = RequiredBy record.ForLocation = ForLocation record.Notes = Notes result_msg="Record saved" result = 1 else: record = model.InvStockTransferRequest(Notes=Notes, ForLocation=ForLocation, RequiredBy=RequiredBy, RequestedOn=RequestedOn, RequestedBy=model.cur_user_id(), Status='') result_msg = "Record added" result = 1 record_id = record.id except: result = 0 result_msg="Operation failed!" record_id = '' raise return dict(result=result, result_msg=result_msg, id=record_id)