from Data import Data from Comparabile import Comparabile from OperazioneErrata import * true = lambda : 1 false = lambda : 0 def checkInteger(numero): if type(numero) == type(0): return true() else: return false() class ContoCorrente(Comparabile): numerazioneConti = 0 maxScopertoStandard = 100 forfaitSpese = 1 capitaleSocialeBanca = 1000 totaleSoldiBanca = capitaleSocialeBanca tassoStandard = 5 tassoPassivoStandard = 10 nomeBanca = "Banca Sella" arrayOfContoCorrente = [] data = Data() def __init__(self, nome, saldoIniziale = 0): self.nomeCorrentista = nome self.saldo = saldoIniziale self.numeroConto = ContoCorrente.numerazioneConti ContoCorrente.numerazioneConti += 1 ContoCorrente.totaleSoldiBanca += saldoIniziale self.interesseMaturato = 0 self.giornoUltimoInteresse = Data(ContoCorrente.data.getData()) (ContoCorrente.arrayOfContoCorrente).append(self) def versamento(self, valore): if not checkInteger(valore): raise OperazioneErrata("Valore non intero") if valore < 0: raise OperazioneErrata("Valore versamento negativo") else: self.calcoloInteresseMaturato() self.saldo += valore ContoCorrente.totaleSoldiBanca += valore def prelievo(self, valore): saldoTemp = self.saldo - valore if not checkInteger(valore): raise OperazioneErrata("Valore non intero") if valore < 0: raise OperazioneErrata("Valore versamento negativo") else: if saldoTemp < 0: if -saldoTemp < maxScopertoStandard: if valore < totaleSoldiBanca: self.saldo -= valore self.totaleSoldiBanca -= valore else: raise OperazioneErrata("Soldi della banca esauriti") else: raise OperazioneErrata("Scoperto Standard Superato") else: self.saldo -= valore self.totaleSoldiBanca -= valore def getSaldo(self): return self.saldo def getNomeCorrentista(self): return self.nomeCorrentista def getNumeroConto(self): return self.numeroConto def getInteresseMaturato(self): return self.interesseMaturato def calcoloInteresseMaturato(self): if self.saldo > 0: self.interesseMaturato += self.saldo * self.tassoStandard * self.data.diffData(self.giornoUltimoInteresse) / 36000 else: self.interesseMaturato += self.saldo * self.tassoPassivoStandard * self.data.diffData(self.giornoUltimoInteresse) / 36000 self.giornoUltimoInteresse.setData(self.data.getData()) def calcolaCompetenze(self): return self.interesseMaturato - self.forfaitSpese def chiusura(self): self.calcoloInteresseMaturato() self.saldo += self.calcolaCompetenze() self.interesseMaturato = 0 def compara(self,altroCC): if not issubclass(self.__class__, altroCC.__class__) and \ not issubclass(altroCC.__class__, self.__class__): raise OperazioneErrata("Confronto non permesso") else: if self.getSaldo() < altroCC.getSaldo(): return -1 if self.getSaldo() > altroCC.getSaldo(): return 1 return 0 def __str__(self): return \ "\nData :" + str(self.data.getData()) +\ "\nNome del Correntista :" + str(self.getNomeCorrentista()) +\ "\nNumero del Conto :" + str(self.getNumeroConto()) +\ "\nInteressi Maturati :" + str(self.getInteresseMaturato()) +\ "\nSaldo :" + str(self.getSaldo()) class ContoCorrenteConSpese(ContoCorrente): costoOperazione = 1 numOperazioniGratis = 2 def __init__(self, nome, saldoIniziale = 0): ContoCorrente.__init__(self, nome, saldoIniziale) self.numeroOperazioni = 0 def versamento(self, valore): ContoCorrente.versamento(self, valore) self.numeroOperazioni += 1 def prelievo(self, valore): ContoCorrente.prelievo(self, valore) self.numeroOperazioni += 1 def calcolaCompetenze(self): if self.numeroOperazioni <= self.numOperazioniGratis: return ContoCorrente.calcolaCompetenze(self) else: return ContoCorrente.calcolaCompetenze(self) - self.costoOperazione * self.numOperazioni def chiusura(self): ContoCorrente.chiusura(self) def getInteresseMaturato(self): ContoCorrente.getInteresseMaturato(self) def calcoloInteresseMaturato(self): ContoCorrente.calcoloInteresseMaturato(self) def __str__(self): return ContoCorrente.__str__(self) + \ "\nNumero operazioni effettuate: " + str(self.numeroOperazioni)