Ejemplo n.º 1
0
    def getPaydInfo(self):
        """ Tolboriin huvaariin tololtiin dung 4 torloor yalgan bodoj bn.
        """
        if hasattr(self, 'paydinfo'):
            return self.paydinfo
            
        self.paydinfo = { 
                          "total":0 , "total_actual":0, "CNT":0, "TRN":0,"VAT":0 , "WHL":0, 
                          "CNT_actual":0, "TRN_actual":0,"VAT_actual":0 , "WHL_actual":0 
                        }
        
        for scdt in self.payment_schedule.payment_schedule_detail_set.all():
            if scdt.status in ["paid" ]:
                #################
                self.paydinfo["total_actual"] += convertcurrency(CNone(scdt.payment_request().amount), scdt.payment_request().currency.iso_code, scdt.payment_request().created)
                self.paydinfo["total_actual_cur"] = "MNT"
                self.paydinfo[scdt.type + "_actual"] += scdt.payment_request().amount
                self.paydinfo[scdt.type + "_actual_cur"] = scdt.payment_request().currency

            if scdt.payment_request():
                self.paydinfo["total"] += scdt.amount
                self.paydinfo["total_cur"] = scdt.currency
                self.paydinfo[scdt.type] += scdt.amount
                self.paydinfo[scdt.type + "_cur"] = scdt.currency
        return self.paydinfo
Ejemplo n.º 2
0
 def load_all_set(self):
     try:
         if self.requisition_set :
             vat = decimal.Decimal('0.00')
             discount = decimal.Decimal('0.00')
             contract = decimal.Decimal('0.00')
             transport = decimal.Decimal('0.00')
             withholding = decimal.Decimal('0.00')
             vat_mnt = decimal.Decimal('0.00')
             discount_mnt = decimal.Decimal('0.00')
             contract_mnt = decimal.Decimal('0.00')
             transport_mnt = decimal.Decimal('0.00')
             withholding_mnt = decimal.Decimal('0.00')
             for req in self.requisition_set.all():
                 vat += CNone(req.vat) + CNone(req.custom)
                 vat_mnt += decimal.Decimal(str(convertcurrency((CNone(req.vat) + CNone(req.custom)), req.currency.iso_code, req.created)))
                 transport += CNone(req.transport)
                 transport_mnt += decimal.Decimal(str(convertcurrency(CNone(req.transport), req.currency.iso_code, req.created)))
                 contract +=  req.line_total()  # + CNone(req.mgt_expense)) # Menegmentiin zardaliig Хасав
                 contract_mnt += decimal.Decimal(str(convertcurrency((CNone(req.quantity) * CNone(req.unit_price)), req.currency.iso_code, req.created )))
                 discount += CNone(req.discount)
                 discount_mnt += decimal.Decimal(str(convertcurrency(CNone(req.discount), req.currency.iso_code, req.created)))
                 withholding += CNone(req.withholding)
                 withholding_mnt += decimal.Decimal(str(convertcurrency(CNone(req.withholding), req.currency.iso_code, req.created)))
 
             self.get_vat = vat
             self.get_vat_mnt = vat_mnt
             self.get_transport = transport
             self.get_transport_mnt = transport_mnt
             self.get_discount = discount
             self.get_discount_mnt = discount_mnt
             self.get_withholding = withholding
             self.get_withholding_mnt = withholding_mnt
             self.get_contract = contract
             self.get_contract_disc = contract - discount
             self.get_contract_mnt = contract_mnt
             self.get_total = (vat + transport + withholding + contract) - discount
             self.get_total_mnt = (vat_mnt + transport_mnt + withholding_mnt + contract_mnt) - discount_mnt
          
     except AttributeError:
         #print "attribute Errror!!!!!!!!!"
         return "Error"
     except:
         import sys, traceback
         traceback.print_exc(file=sys.stdout)
     return ""
Ejemplo n.º 3
0
 def getScheduledForBudgetByDate(self, budget, date_start, date_end):
     """ Po uudaas tuhain tusviin niit schedule details uudiig tuune
     """
     self.getBudgetsProcents()
     total = decimal.Decimal('0.00')
     if self.payment_schedule :
         for detail in self.payment_schedule.payment_schedule_detail_set.filter(date__gte=date_start,date__lte=date_end) :
             total += decimal.Decimal(str(convertcurrency(detail.amount, detail.currency.iso_code, detail.date)))
     
     return (total / 100 ) * self.budgets[budget.pk]['total_procent']
Ejemplo n.º 4
0
 def getPaidForBudget(self, budget):
     """ Po uudaas tuhain tusviin tulsun schedule details uudiig tuune
     """
     self.getBudgetsProcents()
     total = decimal.Decimal('0.00')
     if self.payment_schedule :
         for detail in self.payment_schedule.payment_schedule_detail_set.filter(status='paid') :
             total += decimal.Decimal(str(convertcurrency(detail.amount, detail.currency.iso_code, detail.date)))
     
     return (total / 100 ) * self.budgets[budget.pk]['total_procent']
Ejemplo n.º 5
0
 def schedules_mnt(self):
     list = []
     rows = []
     schedule = {}
     for s in self.payment_schedule.payment_schedule_detail_set.all() :
         s.amount = convertcurrency(s.amount, s.currency.iso_code, s.date)
         if s.date in rows:
             schedule[s.type] = s
         else :
             list.append(schedule)
             schedule = {}
             schedule[s.type] = s
             rows.append(s.date)
     
     return list
Ejemplo n.º 6
0
	def handle(self, *args, **options):
		''' Харилцагчийн гэрээт төлбөрийн хүсэлтийн зарцуулалтын өгөгдөл
			буюу payment_budgetamounts, payment_request_budgets table -үүдээс
			устсан өгөгдлийг сэргээх, Ингэснээр төсвийн зарцуулалт зөв болж засагдана.
		'''
		def print_green(msg):
			print '\033[92m%s\033[0m' % msg
		def print_blue(msg):
			print '\033[94m%s\033[0m' % msg
		def print_red(msg):
			print '\033[91m%s\033[0m' % msg
		
		if not args :
			raise CommandError('Argument required.')
		if args[0] == 'all' :
			ids = Request.objects.filter(status='approved',category='CUSPO',created__gte='2009-12-31',created__lte='2010-06-01').values_list('id', flat=True)
		else :
			ids = [id for id in args if id.isdigit()]
			if not ids :
				raise CommandError('Integer argument required.')
		print "\n\n--------------------------------------------------------------------------"
		print "Starting restore consume process.\n\n"
		
		probjs = Request.objects.filter(pk__in=ids)
		
		#try :
		print_blue("*    %s payment request to be restored.\n" % len(probjs))
		for pr in probjs :
			### DEBUG MODE
			for b in pr.budgets.all():
				consume = CashflowConsume.objects.filter(procurement_consume__budget__id=b.budget.pk, prequest_id=pr.id)
				if consume :
					consume[0].delete()
				b.delete()
			pr.budgets.clear()
			#break
			#####
			if pr.budget != None :
				print_green("*%s tulburiin huselt n (CUSPO) hariltsagchiin gereet tulbur bish bna. Ene huseltiig algaslaa." % pr.no)
				continue
			if len(pr.budgets.all()) > 0 :
				print_green("*%s tulburiin huseltiin budgetamount data ustaagui bna. Ene huseltiig algaslaa."% pr.no)
				continue
			
			if pr.category == 'CUSPO' :
				try :
					payment_schedule_detail = Payment_Schedule_Detail.objects.get(payment_request_id=pr.id)
				except Payment_Schedule_Detail.DoesNotExist:
					payment_schedule_detail = Payment_Schedule_Detail_Req.objects.filter(payment_request_id=pr.id)
					if not payment_schedule_detail :
						print_green("*%s tulburiin huselt n (CUSPO) hariltsagchiin gereet tulbur bish bna. Ene huseltiig algaslaa."% pr.no)
						continue
					payment_schedule_detail = payment_schedule_detail[0].schedule_detail
				
				total_amount = pr.amount
				currency =  pr.currency
				schedule = payment_schedule_detail.schedule
				#print schedule, schedule.id
				contract = schedule.parent_contract_set.all()
				if not contract :
					contract = pr.po
					if not contract :
						print_green("*%s tulburiin huseltiin holbogdoh Geree / PO oldohgui bna. Ene huseltiig algaslaa."% pr.no)
						continue
				else :
					contract = contract[0]
				try :
					contract = PO.objects.get(pk=contract.pk)
				except PO.DoesNotExist :
					contract = Contract_Approval.objects.get(pk=contract.pk)
				
				#eorder_dict = contract.getScheduleDetailEorders(payment_schedule_detail)
				contract.getEordersProcents()
				type = ''
				if payment_schedule_detail.type == 'VAT':
					type = 'vat'
				if payment_schedule_detail.type == 'CNT':
					type = 'amount'
				if payment_schedule_detail.type == 'TRN':
					type = 'transport'
				if payment_schedule_detail.type == 'WHL':
					type = 'withholding'
				
				for k, dict in contract.eorders.iteritems() :
					procent = dict[type + '_procent']
					amount = decimal.Decimal(str(roundNumber(procent * pr.amount / 100, 2)))
					if amount == 0 :
						continue
					
					budget = dict['budget']
					req = dict['eorder']
					# Тухайн RN -ны батлагдсан зарцуулалт нь устсан тохиолдолд сэргээн үүсгэх шаардлагатай.
					proconsume = ProcurementConsume.objects.filter(eorder_id=req.id,budget=budget)
					if not proconsume :
						proconsume = ProcurementConsume()
						proconsume.eorder_id = req.id
						proconsume.budget = budget
						proconsume.eorder_no = req.no
						proconsume.used_for = req.used_for
						proconsume.approved_amount = req.get_total_mnt()
						proconsume.approved_date = req.complete_date or req.getBNXOgnoo() or req.created
						proconsume.save()
						req.budget_approved_amount = req.get_total_mnt()
						req.budget_approved_budget = budget
						req.save()
						#budget.increase_procurement()
					
					ba = BudgetAmount.objects.create(budget=budget,amount=amount,eorder=req)
					pr.budgets.add(ba)
					
					if pr.currency.iso_code != 'MNT' :
						oldamount = amount
						amount = convertcurrency(amount, pr.currency.iso_code, date=pr.complete_date)
						#print '%s : %s -> %s' % (budget.budget_name, oldamount, amount)
					
					### Зарцуулалтын функц ажиллуулах
					done = consumeIt(pr, budget, amount, req, pr.complete_date)
					if not done :
						print_blue("*%s[%s] tusvuus zartsuulalt hiih uyed aldaa garlaa : %s" % (budget.budget_code,budget.id,sys.exc_info()))
						continue
			elif pr.category == 'PTCPO' :
				expense_page = pr.expense_page
				if not expense_page :
					print_green("**%s tulburiin huseltend holbogdoh mungun zarlagiin huudas oldohgui baigaa tul algaslaa." % pr.no)
					continue
				budgets = expense_page.budgets.all()
				if not budgets :
					print_green("**%s tulburiin huseltend holbogdoh mungun zarlagiin huudsand tusviin talaar medeelel alga. Ene huseltiig algaslaa." % pr.no)
					continue
				if not pr.po :
					print_green("**%s tulburiin huseltend holbogdoh PO geree todorhoilogodoogui baina. Ene huseltiig algaslaa." % pr.no)
					continue
				data = []
				req_list = [req for req in pr.po.requisition_set.exclude(budget=None)]
				c = len(req_list)
				total = pr.amount
				input = decimal.Decimal("0")
				print_blue("\n** %s tulburin husetiin daguu daraah tusvuudees zartsuulasn dung oruulna uu!\n      Tulburiin niit dun : %s %s" % (pr.no, pr.amount, pr.currency.iso_code))
				i = 0
				while i < c :
					req = req_list[i]
					if i == c - 1 :
						amount = total - input
						print "[%s]%s tusviin \033[95m%s\033[0m zahialgaas zartsuulsan dun = %s" % (req.budget.id, req.budget.budget_code, req.no, amount)
					else :
						amount = raw_input("[%s]%s tusviin \033[95m%s\033[0m zahialgaas zartsuulsan dun ?....:" % (req.budget.id, req.budget.budget_code, req.no))
						try : 
							amount = decimal.Decimal(amount)
						except :
							print_red("Dun buruu baina. Dahin oruulna uu!")
							continue
						if input + amount > total :
							print_red("Ene tusviin dun niit dungees heterch baina. Dahin oruulna uu!")
							continue
					if amount > 0 :
						data.append((req, amount))
						input += amount
					i += 1
				
				print '\033[92mDeerh dungeer zartsuulal hiih gej bna. Itgeltei baina uu?\033[0m',
				ok = raw_input("(Y/n):")
				if ok in ("y", "Y") :
					for req, amount in data :
						budget = req.budget
						ba = BudgetAmount.objects.create(budget=budget,amount=amount,eorder=req)
						pr.budgets.add(ba)
						
						if pr.currency.iso_code != 'MNT' :
							oldamount = amount
							amount = convertcurrency(amount, pr.currency.iso_code, date=pr.complete_date)
						
						done = consumeIt(pr, budget, amount, eorder=req, cdate=pr.complete_date)
						if not done :
							print_blue("*%s[%s] tusvuus zartsuulalt hiih uyed aldaa garlaa : %s" % (b.budget_code,b.id,sys.exc_info()))
							continue
				else :
					print_red("%s tulburiin huselt zasvarlah ajillagaag tsutsallaa." % pr.no)
			else :
				expense_page = pr.expense_page
				if not expense_page :
					print_green("**%s tulburiin huseltend holbogdoh mungun zarlagiin huudas oldohgui baigaa tul algaslaa." % pr.no)
					continue
				budgets = expense_page.budgets.all()
				if not budgets :
					print_green("**%s tulburiin huseltend holbogdoh mungun zarlagiin huudsand tusviin talaar medeelel alga. Ene huseltiig algaslaa." % pr.no)
					continue
				data = []
				c = len(budgets)
				total = pr.amount
				input = decimal.Decimal("0")
				print_blue("\n** %s tulburin husetiin daguu daraah tusvuudees zartsuulasn dung oruulna uu!\n      Tulburiin niit dun : %s %s" % (pr.no, pr.amount, pr.currency.iso_code))
				i = 0
				while i < c :
					b = budgets[i]
					if i == c - 1 :
						amount = total - input
						print "[%s]%s tusvuus zartsuulsan dun = %s" % (b.id, b.budget_code, amount)
					else :
						amount = raw_input("[%s]%s tusvuus zartsuulsan dun ?....:" % (b.id, b.budget_code))
						try : 
							amount = decimal.Decimal(amount)
						except :
							print_red("Dun buruu baina. Dahin oruulna uu!")
							continue
						if input + amount > total :
							print_red("Ene tusviin dun niit dungees heterch baina. Dahin oruulna uu!")
							continue
					
					data.append((b, amount))
					input += amount
					i += 1
				
				print '\033[92mDeerh dungeer zartsuulal hiih gej bna. Itgeltei baina uu?\033[0m',
				ok = raw_input("(Y/n):")
				if ok in ("y", "Y") :
					for budget, amount in data :
						ba = BudgetAmount.objects.create(budget=budget,amount=amount)
						pr.budgets.add(ba)
						
						if pr.currency.iso_code != 'MNT' :
							oldamount = amount
							amount = convertcurrency(amount, pr.currency.iso_code, date=pr.complete_date)
						
						done = consumeIt(pr, budget, amount, eorder=None, cdate=pr.complete_date)
						if not done :
							print_blue("*%s[%s] tusvuus zartsuulalt hiih uyed aldaa garlaa : %s" % (b.budget_code,b.id,sys.exc_info()))
							continue
				else :
					print_red("%s tulburiin huselt zasvarlah ajillagaag tsutsallaa." % pr.no)
		#except :
		#	print sys.exc_info()
			
		print u" --------------------------------------------------------------------------------------\n"
		print u"Restore consume process has loaded successfully."
Ejemplo n.º 7
0
 def get_paid_mnt(self):
     amount = decimal.Decimal('0.00')
     for s in self.payment_schedule.payment_schedule_detail_set.filter(status='paid') :
         amount += convertcurrency(s.amount, s.currency.iso_code, s.date)
     return amount