def pay_employees(self, today_date): date_format = "%Y-%m-%d" for emp in self.employeesList: payMet = emp.payDate.split("-") w = datetime.strptime(today_date, date_format) - datetime.strptime( emp.last_pay_date, date_format) worked_days = int(w.days) value = 0 if payMet[0] == "weekly": hours = emp.workHours if worked_days >= (7 * int(payMet[1])) and payMet[2] == str( datetime.strptime(today_date, date_format).strftime("%A")).lower(): if isinstance(emp, Hourly): bonus_hours = hours - (worked_days * 8) aux = hours + 0.5 * bonus_hours value = aux * float(emp.hour_value) if isinstance(emp, Comissioned): if payMet[1] == 1: div = 4 else: div = 2 value = float(emp.wage) / div + emp.comission elif isinstance(emp, Salaried): if payMet[1] == 1: div = 4 else: div = 2 value = emp.wage / div if value > 0: self.payday_employee_method(emp_id=emp.id, value=value, today_date=today_date) elif payMet[0] == "monthly": if isinstance(emp, Hourly): bonus_hours = hours - (worked_days * 8) value = emp.hour_value * (hours + 0.5 * bonus_hours) if isinstance(emp, Comissioned): value = float(emp.wage) + emp.comission if isinstance(emp, Salaried): value = emp.wage if str( datetime.strptime( today_date, date_format).strftime("%d")).lower() == payMet[1]: self.payday_employee_method(emp.id, value, today_date) elif payMet[1] == "$": offset = BMonthEnd() payDay = datetime.strptime(today_date, date_format) d = offset.rollforward(payDay) if payDay.strftime("%d") == d.strftime("%d"): self.payday_employee_method(emp.id, value, today_date) elif str( datetime.strptime( today_date, date_format).strftime("%d")).lower() == payMet[1]: self.payday_employee_method(emp.id, value, today_date) print(self.payment_register) print("\n")
def create_csv_cuotas_cobradas_file( sql_select_csv_fn, output_csv_fn, columns_name_to_filter, db_engine, active_wallet_result, cartera_activa_table_name="cartera_activa"): msg = f"Reading {sql_select_csv_fn} ..." try: logger.info(msg) sql_file_csv = open( os.path.join(settings.MYSQL_SQL_DIR, sql_select_csv_fn)) logger.info(f"{msg} Done!") d = date.today() offset = BMonthEnd() date2 = str(offset.rollforward(d) - BDay(2))[:-9] date1 = str(offset.rollback(d) - BDay(1))[:-9] data = sql_file_csv.read().replace('$1', date1).replace('$2', date2) msg = f"Executing pandas.read_sql for {sql_select_csv_fn} ..." logger.info(msg) result = pandas.read_sql(sql=text( data.format(cartera_activa_table_name)), con=db_engine) logger.info(f"{msg} Done!") pattern = re.compile('[^a-zA-Z0-9\-._: \.\(\)\/]') msg = f"Removing characters '{pattern}' by '_' for {sql_select_csv_fn} data ..." logger.info(msg) for columns_name in columns_name_to_filter: result[columns_name] = result[columns_name].str.replace( pattern, '_') logger.info(f"{msg} Done!") fn = f'{output_csv_fn}_{datetime.datetime.now().strftime("%m-%d-%y-%H%M%S")}.zip' msg = f"Writing csv file {fn}... " logger.info(msg) result_csv = result.to_csv(header=False, decimal=',', index=False, encoding='utf-8-sig') zipbuff = io.BytesIO() with zipfile.ZipFile(zipbuff, "a", zipfile.ZIP_DEFLATED, False) as zip_file: zip_file.writestr(f"results_{output_csv_fn}.csv", result_csv.encode('utf-8-sig')) result = None result_csv = None gc.collect() active_wallet_result.save(fn, ContentFile(zipbuff.getvalue())) logger.info(f"{msg} Done!") except Exception as error: msg = f"{msg} Fail!: {error}" raise Exception(msg)
def simulate_lifetime_earnings(grossSalaryPA, N, principal, employment_start, method="monte carlo", increases=None): ''' Simulates payment of student debt across career based on monthly tax payments according to estimated salary and simultaneous compounding interest of loan ''' salary = [] # store salary trajectory for plotting payments_towards = 0 # cumulative total of payments made towards loan across career salary.append(grossSalaryPA) ## Simulation start and end points today = pd.Timestamp(employment_start) start = today edate = today + timedelta(days=N * 365) # N years of payments delta = timedelta(days=1) offset = BMonthEnd() # date each month that tax is paid cumulativeTotal = principal cumulativeList = [] # store the value of the loan at each timestep cumulativeList.append(cumulativeTotal) ## Simulate through N years of payments ## interest compounds each day ## payment made on last working day of the month while today <= edate: if method == "monte carlo" and increases is not None: if ((today - start).days / 365) % 5 == 0 and (today - start).days > 0: grossSalaryPA *= increases[(today - start).days / 365 / 5] elif method == "monte carlo" and increases is None: print("Please supply monte carlo simulated salary increases") if method == "median": if (today - start).days % 365 == 0 and ( today - start).days / 365 in male_HE.index: grossSalaryPA = male_HE.loc[(today - start).days / 365]['Earning'] cumulativeTotal *= ( 1 + (0.055 / 365) ) # apply interest on previous payments before new payment if today == offset.rollforward( today) and today.month == offset.rollforward( today).month: # if today in sim is last working day cumulativeTotal -= calc_student_finance_PM( grossSalaryPA ) # payment made to student finance based on gross salary payments_towards += calc_student_finance_PM( grossSalaryPA) # this payment is added to cumulative sum cumulativeList.append(cumulativeTotal) salary.append(grossSalaryPA) today += delta return cumulativeList, salary, payments_towards
def IsLastWorkingDayOfMonth(givendate): offset = BMonthEnd() #givendate += datetime.timedelta(days=3) lastday = offset.rollforward(givendate) if givendate == lastday.date(): return True else: return False
def FindLastWorkingDayOfMonth(givendate): offset = BMonthEnd() givendate += datetime.timedelta(days=3) lastday = offset.rollforward(givendate) return lastday