Пример #1
0
	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)