def updatePanel(self):           
     #Create or Update data according to PID and ANo in Status    
     if (self.data == None):
         self.data = TCAData(Status.PId,Status.ANo)
         self.data.loadTCAData()        
     if (Status.PId != self.data.pid)or(Status.ANo != self.data.ano):
         self.data = TCAData(Status.PId,Status.ANo)
         self.data.loadTCAData()
 def resetTCA(self):
     query = """SELECT AlternativeProposalNo,ShortName FROM salternatives WHERE ProjectID = %s"""
     query = query % (self.data.pid)    
     results = Status.DB.sql_query(query)
     anos = []              
               
     for result in results:
         if (result[0]>=0):
             anos.append([result[0],result[1]])              
     
     #print "reset:"
     #print anos
     for ano in anos: # ano = [ Number, Name ] !!!           
         data = TCAData(Status.PId,ano[0])  
         data.resetTCAData()   
     
     self.data = TCAData(Status.PId,Status.ANo)                 
     self.data.loadTCAData()               
    def runTCAModule(self):
        self.updatePanel()   
        self.result = []
                        
        #get cashflow for the current process
        DataOfCurrentProcess = TCAData(Status.PId,0)                
        DataOfCurrentProcess.loadTCAData()     
                                  
        #set parameters
        InterestRate = DataOfCurrentProcess.NIR - DataOfCurrentProcess.Inflation
        DiscountRate = DataOfCurrentProcess.CSDR - DataOfCurrentProcess.Inflation
        #PrimaryEnergyDemand = data.PETel + data.PETFuels
        ProjectLifetime = DataOfCurrentProcess.TimeFrame
          
        DataOfCurrentProcess = self.calculateCashFlow(DataOfCurrentProcess)
        DataOfCurrentProcess.storeCurrentProcessInformationToCGeneral()
        old = DataOfCurrentProcess.cashflow
        
        #print "current"
        #print old.CF()
        
        #get all proposal numbers and names
        query = """SELECT AlternativeProposalNo,ShortName FROM salternatives WHERE ProjectID = %s"""
        query = query % (Status.PId)    
        results = Status.DB.sql_query(query)
        self.anos = []              
                  
        for result in results:
            if (result[0]>0):
                self.anos.append([result[0],result[1]])              
        
        #calculate result for each proposal in project
        for ano in self.anos: # ano = [ Number, Name ] !!!
            try:
                name = ano[1]  
                #load data for alternative
                data = TCAData(Status.PId,ano[0])              
                data.loadTCAData()
		        #newdata = data
                #calculate cashflow for alternative
                data = self.calculateCashFlow(data)
                current = data.cashflow
                
                #print name
                #print current.CF()
                
                #set the default display option (1=display)
                display = 1                
                #set for the current proposal
                if (Status.ANo == ano[0]):
                    display = 1
                
                #calculate the results  
                                   
                npv = NPV(current.CF(), old.CF(), InterestRate)
                #print "npv--------------------------------"
                #print npv

                mirr = MIRR(current.CF(), old.CF(), InterestRate, DiscountRate)
                #print "mirr--------------------------------"
                #print mirr

                bcr = BCR(current.CF(), old.CF(), InterestRate)  
                #print "bcr--------------------------------"
                #print bcr               
                annuity = ANNUITY(current.TotalInvestmentCapital,InterestRate,ProjectLifetime)              
                pp = payback_period(npv)
               
                energycostCurrentProcess =  DataOfCurrentProcess.getTotalEnergyCost()
                energycostNewProcess     =  data.getTotalEnergyCost()
                opcostCurrentProcess     =  DataOfCurrentProcess.totalopcost
                opcostNewProcess         =  data.totalopcost
                energydemandCurrentProcess = DataOfCurrentProcess.getTotalEnergyDemand()
                energydemandNewProcess = data.getTotalEnergyDemand()
                
                additionalcost = annuity+opcostNewProcess+energycostNewProcess-opcostCurrentProcess-energycostCurrentProcess         
                try: additionalcostpersavePE = additionalcost/(energydemandNewProcess-energydemandCurrentProcess)
                except: additionalcostpersavePE = 0.0
                #print additionalcost

                #set the results in data, store data in result list
                data.setResult(name,npv,mirr,bcr,annuity,pp,additionalcost,additionalcostpersavePE,display)                                
                self.result.append(data)
                data.storeResultToCGeneralData()
                
            except Exception, inst:
                print type(inst)
                print inst.args
                print inst
                data.setResultInvalid(name,display)
                self.result.append(data)
                logWarning((_("TCA: No result for %s") % ano[1]))