class Module():
    
    def __init__(self, order_module, number):
        self.module_id = str(order_module.order_id) + '-' + str(number)
        self.order_module = order_module
        self.calendar = Calendar()
        self.last_step_completed = ''
        self.steps_left = copy.deepcopy(self.order_module.module_type.steps)
        self.pointer = (datetime.datetime.now().date(), 0)  #(date, intervalle)
        self.state = 'ready for the next step'

        self.create_calendar()
        self.Place_in_calendar()

    
    def create_calendar(self):
        for n in range(100):
            new_date = datetime.datetime.today() + datetime.timedelta(days=n)
            day = new_date.day
            month = new_date.month
            year = new_date.year
            self.calendar.add_days_module(day, month, year)


    def Place_in_calendar(self):
        #FINDING A SLOT FOR THE MODULE
        while len(self.steps_left) > 0:
            step = self.steps_left.pop(0)                                       #Next manufacturing step
            step_nb_inter = step.step_type.duration_intervalle                  #Duration (in time slots)
            step_skill = a.step_type.employee_skill                             #Skills required
            step_equipment = a.step_type.equipment_type                         #Equipment required
            # print(step_nb_inter, step_skill, step_equipment)
            module_slot_found = False                                            #True when the manufacturing step is placed in employee and machine calendar

            while not module_slot_found:
                #EMPLOYEE SLOT
                employee_sel = self.place_in_calendar_employee(step, step_nb_inter, step_skill)   
                self.pointer = employee_sel[1]
                #EQUIPMENT SLOT
                equipment_sel = self.place_in_calendar_equipment(step, step_nb_inter, step_equipment)                                          

                if pointer_employee[1] == pointer_equipment[1] 
                or pointer_employee[2] == pointer_equipment[2]:
                    module_slot_found == True
                    self.modify_module_calendar(step, step_nb_inter)
                    self.modify_employee_calendar(step, step_nb_inter, employee_sel[1])
                    self.modify_equipment_calendar(step, step_nb_inter, equipment_sel[1])
                    self.pointer[1] += step_nb_inter