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
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 ""
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']
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']
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
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."
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