def fetch_startup_service(owner, context): """get the startup that assign to the requested user and get the custom leader that added by user Arguments: owner {OBEJCET} -- requested user context {DICT} -- a dictionary of context to add it some more context Returns: OBJECT -- returns the determined startup """ db_startup = get_startup_service(owner=owner) the_time = JalaliDateTime.now().to_gregorian() try: user_mentor = get_startup_service(owner=owner, rahbar__mentor_user=True) except: user_mentor = None context.update({ 'the_time': the_time, 'user_mentor': user_mentor, 'db_startup': db_startup, }) return db_startup
def team_instance_service(user, context, trak_info): """get the requested user info / startup/ team members if available Arguments: user {OBJECT} -- requsted user context {DICT} -- a dictionary to assign more contextes Returns: TUPLE -- returns tuple of context valuse to use the in page """ teams = TeamMember.objects.filter( pk__in=user.userprofile.team_member.all()) leader_form = LeaderUserForm(instance=user) userprofile_form = LeaderForm(instance=user.userprofile) db_startup = get_startup_service(owner=user) form_start = StartUpForm5(instance=db_startup) status = f"وارد مرحله تیم استارت اپ {db_startup.title} شد" status_of_user(trak_info, status, 'import-team-step') context.update({ 'teams': teams, 'leader_form': leader_form, 'userprofile_form': userprofile_form, 'form_start': form_start, 'db_startups': db_startup }) return db_startup
def create_event_service(form, owner, track_info): """create new event with type of investor and get the user throw Investor user id Arguments: form {POST Method} -- get entered values owner {OBJECT} -- requested user to define the maker track_info {DICT} -- dictionary contains of user id and ip to update status_of_user Returns: BOOLEAN -- returns True if everything goes well """ the_event = models.TheEvent.objects.create(owner=owner, th_type='investor') if form.getlist('investor[]'): for person_id in form.getlist('investor[]'): if not person_id: continue user_inv = Investors.objects.filter( user__pk=int(person_id)).first() event = models.CreateEvent.objects.create_by_model( instance=user_inv) the_event.c_event.add(event) the_event.save() for x in range(len(form.getlist(f'startup-{person_id}'))): if not re.search(r'\d', form.getlist(f'startup-{person_id}')[x], re.I): continue # try: schedule, created = models.StartupTime.objects.get_or_create( the_event=the_event, the_date=datetime.fromtimestamp( float(form.getlist('date_meeting')[x]) / 1000), from_time=datetime.fromtimestamp( float(form.getlist('meeting_time_s')[x]) / 1000), to_time=datetime.fromtimestamp( float(form.getlist('meeting_time_e')[x]) / 1000)) models.StartupsEvent.objects.create( event=event, startup=get_startup_service( pk=int(form.getlist(f'startup-{person_id}')[x])), schedule=schedule) # except: # pass try: status = f"برای سرمایه گذار {event.investor.user.first_name} {event.investor.user.last_name} برای استارت اپ {startup} ایونت ساخت" status_of_user(track_info, status, 'create-event-investor') create_notification(event.investor.user, 'create-event-investor', startup) create_notification(startup.owner, 'create-event-investor', event.investor.user) except: pass return True
def edit_offerto_leader_get_create(form, the_event, track_info): """update or create the LeaderModel and CreateEvent records Arguments: form {POST Method} -- to get new entered values the_event {OBJECT} -- TheEvent objecte that got by id track_info {DICT} -- dictionary contains of user id and ip to update status_of_user Returns: BOOLEAN -- returns True if everything goes well """ if form.getlist('leader[]'): create_event_id = (c_e for c_e in form.getlist('c_e_id')) for person_id in form.getlist('leader[]'): if not re.search(r'\d', person_id, re.I): continue leader_id = (c_e for c_e in form.getlist(f'lead_pk-{person_id}')) user_leader = get_user_service(pk=int(person_id)) try: event = get_create_event_service( pk=int(create_event_id.__next__())) event.content_object = user_leader event.save() except: event = models.CreateEvent.objects.create_by_model( instance=user_leader) finally: the_event.c_event.add(event) the_event.save() for st in form.getlist(f'startup-{person_id}'): if not re.search(r'\d', st, re.I): continue start = get_startup_service(pk=int(st)) try: leader = models.LeaderModel.objects.get( pk=int(leader_id.__next__())) leader.startup = start leader.save() except: models.LeaderModel.objects.create( event=event, startup=start, ) status = f"ملاقات {the_event.pk} با راهبر {user_leader.first_name} {user_leader.last_name} به استارتاپ {get_startup_service(pk=int(st)).title} تغییر کرد" status_of_user(track_info, status, 'edit-offerto-leader') create_notification(user_leader, 'edit-offerto-leader', start) create_notification(start.owner, 'edit-offerto-leader', user_leader) return True
def presentation_service(owner, track_info): """get the current users startup and a form with startup instance Arguments: owner {OBJECT} -- requested user track_info {DICT} -- dictionary contains of user id and ip to update status_of_user Returns: FORM -- returns startup instances as form """ db_startup = get_startup_service(owner=owner) status = f"وارد صفحه پیج دک استارت اپ {db_startup.title} شد" status_of_user(track_info, status, 'import-presentation-step') startup_form = StartUpForm3(instance=db_startup) return startup_form, db_startup
def upload_video_service(owner, track_info): """allow user to upload a vidoe to add more info about him/her startup Arguments: owner {OBJECT} -- requested user track_info {DICT} -- dictionary contains of user id and ip to update status_of_user Returns: FORM -- returns instance of startup form """ db_startup = get_startup_service(owner=owner) status = f"وارد صفحه اپلود استارت اپ {db_startup.title} شد" status_of_user(track_info, status, 'import-upload-step') form = StartUpForm2(instance=db_startup) return db_startup, form
def presentation_instance_file(id, th_file): """get the startup finance forecast/ peachdeck file if available Arguments: id {INT} -- the id of the chosen startup th_file {STRING} -- check if the file is for pdeck or finance forecast Returns: TUPLE -- returns db_startup objects and startup from """ db_startup = get_startup_service(pk=id) if th_file == 'mali': startup_form = StartUpForm6(instance=db_startup) elif th_file == 'pgdeck': startup_form = StartUpForm4(instance=db_startup) return db_startup, startup_form
def time_event_startup(startup): """show the time of meeting if accepted Arguments: startup {INT} -- the id of selected startup Returns: OBJECT -- return the startup event """ from theevent import models from startups.object import get_startup_service try: startups = get_startup_service(pk=startup) the_time = models.StartupsEvent.objects.filter( startup=startups).distinct() except: the_time = None return the_time
def wants_to_meet_service(owner, track_info, ajax_data): """allow startup to reserve a time to meet coaches Arguments: owner {OBJECT} -- requested user that own a startup track_info {DICT} -- dictionary contains of user id and ip to update status_of_user ajax_data {DICT} -- a dictionary that contains create event id and TheEvent id and CoachEvent id to ensuer that every startup can only reserve 2 meeting every event Returns: DICT -- returns dictionary of data for ajax """ data = { 'meeting_id': ajax_data.get('c_id'), 'coach_id': ajax_data.get('coach_id'), 'the_event': ajax_data.get('th_pk'), } th_startup = get_startup_service(owner=owner) cat = get_create_event_service(pk=ajax_data.get('coach_id')) the_event = models.TheEvent.objects.get(pk=ajax_data.get('th_pk')) try: wants = models.WantsMeet.objects.get(the_event=the_event) wants.event_counter += 1 wants.save() except: wants = models.WantsMeet.objects.create(the_event=the_event, startup=th_startup, c_event=cat) status = f"استارتاپ {th_startup.title} تمایل به رزرو وقت با مربی {cat.content_object.first_name} {cat.content_object.last_name} دارد" status_of_user(track_info, status, 'assigne-startup-to-leader') create_notification(th_startup.owner, 'assigne-startup-to-leader', cat.content_object) create_notification(cat.content_object, 'assigne-startup-to-leader', th_startup) coach = models.CoachEvent.objects.get(pk=ajax_data.get('c_id')) coach.startup = th_startup coach.th_time = 2 coach.save() return data
def offerto_leader_service(owner, form, track_info): """create an event with the type of leader - get the list of leaders ids and assgin CreateEvent by their model and id (GenericForeignKey) and then assgin them to TheEvent object - get the list of startups ids and create LeaderModel object with user model assgin to it(the choosen leader) Arguments: owner {OBJECT} -- requested user (the maker of this event) form {POST Method} -- to get ids from the maker Returns: BOOLEAN -- returns True if everything goes well """ the_event = models.TheEvent.objects.create(owner=owner, th_type='leader') if form.getlist('leader[]'): for person_id in form.getlist('leader[]'): if not re.search(r'\d', person_id, re.I): continue user_leader = get_user_service(pk=int(person_id)) event = models.CreateEvent.objects.create_by_model( instance=user_leader, ) the_event.c_event.add(event) the_event.save() for st in form.getlist(f'startup-{person_id}'): if not re.search(r'\d', st, re.I): continue startup = get_startup_service(pk=int(st)) models.LeaderModel.objects.create( event=event, startup=startup, ) status = f"استارتاپ {startup.title} به راهبر {user_leader} پیشنهاد داده شد" status_of_user(track_info, status, 'assigne-startup-to-leader') create_notification(startup.owner, 'assigne-startup-to-leader', user_leader) create_notification(user_leader, 'assigne-startup-to-leader', startup) return True
def finish_service(user, session, track_info): """when user reach to this stage the status of startup will be change to pending and some emails will be sent to startups owner, leader, team members, accelerator Arguments: user {OBJECT} -- requested user session {SESSION} -- to get user phone if it's deleted for the next stage track_info {DICT} -- dictionary contains of user id and ip to update status_of_user Returns: BOOLEAN -- returns True if everything goes well """ the_startup = get_startup_service(owner=user) if the_startup.status in ('pending', 'not_complete'): the_startup.status = 'pending' the_startup.save() to = the_startup.owner.email if not "email_sent" in session: template = 'email/active_email.html' the_message = f""" مدیر محترم تیم {user.first_name} {user.last_name} از اینکه طرح خود را در سامانه 100استارتآپ ثبت کردید متشکریم، شما میتوانید وضعیت تیم خود را از سامانه پیگیری نمایید. """ sub = 'ثبت استارت آپ' Thread(target=send_email, args=(track_info, ), kwargs={ "to": [to], 'first_name': user.first_name, 'last_name': user.last_name, 'template': template, 'sub': sub, 'the_messages': the_message }).start() for x in TeamMember.objects.filter(startup=the_startup): if not x.t_email: continue sub = 'عضویت در استارت اپ' the_message = """سلام استارتاپ شما در سامانه 100استارتآپ به ثبت رسیده است، امیدواریم با همراهی هم، بتوانیم مسیر موفقیت را به سرعت طی کنیم.""" Thread(target=send_email, args=(track_info, ), kwargs={ "to": [x.t_email], 'first_name': x.t_first_name, 'last_name': x.t_last_name, 'is_team': True, 'template': template, 'sub': sub, 'the_messages': the_message }).start() if the_startup.rahbar: sub = 'راهبر پیشنهادی استارت اپ' the_message = f"""راهبر گرامی، {the_startup.rahbar.first_name} {the_startup.rahbar.last_name} تیم {the_startup.title}طرح خود را در سامانه 100استارتآپ ثبت نمودهاست، و شما بعنوان راهبر میتوانید وضعیت این تیم را از سامانه پیگیری نمایید. امیدواریم با کمک های شما مسیر سخت موفقیت هموار شود. ممنون از همراهیتان """ Thread(target=send_email, args=(track_info, ), kwargs={ "to": [the_startup.rahbar.email], 'is_team': True, 'first_name': the_startup.rahbar.first_name, 'last_name': the_startup.rahbar.last_name, 'template': template, 'sub': sub, 'the_messages': the_message }).start() elif the_startup.rahbar_asli: sub = 'راهبر پیشنهادی استارت اپ' the_message = f"""شتابدهنده محترم {the_startup.rahbar_asli.first_name} {the_startup.rahbar_asli.last_name} تیم {the_startup.title} طرح خود را در سامانه 100استارتآپ ثبت نمودهاست، و شما بعنوان شتابدهنده میتوانید وضعیت این تیم را از سامانه پیگیری نمایید. ممنون از همراهیتان""" Thread(target=send_email, args=(track_info, ), kwargs={ "to": [the_startup.rahbar_asli.email], 'is_team': True, 'first_name': the_startup.rahbar_asli.first_name, 'last_name': the_startup.rahbar_asli.last_name, 'template': template, 'sub': sub, 'the_messages': the_message }).start() session['email_sent'] = True status = "پایان ثبت استارت اپ و ارسال ایمیل" status_of_user(track_info, status, 'import-finish-step') return True
def edit_get_create_event(the_event, form, track_info): """get the id of CreateEvent object and StartupEvent and StartupTime if there is instances and update it else create new Arguments: the_event {OBJECT} -- to add new CreateEvents to TheEvent object form {POST Method} -- to get entred values track_info {DICT} -- dictionary contains of user id and ip to update status_of_user Returns: BOOLEAN -- returns True if everything goes well """ create_event_id = (c_e for c_e in form.getlist('c_e_id')) if form.getlist('investor[]'): for person_id in form.getlist('investor[]'): if not person_id: continue startup_event = (s_e for s_e in form.getlist('startup_event_id')) the_date = (s_d for s_d in form.getlist('date_meeting')) from_time = (f_t for f_t in form.getlist('meeting_time_s')) to_time = (t_t for t_t in form.getlist('meeting_time_e')) startuptime_id = (sut for sut in form.getlist('startuptime')) user_inv = Investors.objects.filter(user__pk=int(person_id)) try: event = get_create_event_service( pk=int(create_event_id.__next__())) event.content_object = user_inv event.save() except: event = models.CreateEvent.objects.create_by_model( instance=user_inv) finally: the_event.c_event.add(event) the_event.save() for startup_id in form.getlist(f'startup-{person_id}'): if not re.search(r'\d', startup_id, re.I): continue startup = get_startup_service(pk=int(startup_id)) try: times = models.StartupTime.objects.get( pk=startuptime_id.__next__()) times.the_date = datetime.fromtimestamp( float(the_date.__next__()) / 1000) times.from_time = datetime.fromtimestamp( float(from_time.__next__()) / 1000) times.to_time = datetime.fromtimestamp( float(to_time.__next__()) / 1000) times.save() except: models.StartupTime.objects.create( the_event=the_event, the_date=datetime.fromtimestamp( float(the_date.__next__()) / 1000), from_time=datetime.fromtimestamp( float(from_time.__next__()) / 1000), to_time=datetime.fromtimestamp( float(to_time.__next__()) / 1000), ) finally: try: start_events = models.models.StartupsEvent.objects.get( pk=int(startup_event.__next__())) start_events.schedule = times start_events.save() except: start_events = models.models.StartupsEvent.objects.create( event=event, schedule=times, startup=startup) try: status = f"برای سرمایه گذار {event.investor.user.first_name} {event.investor.user.last_name} یک ایونت برای استارت اپ {startup} بروزرسانی کرد" status_of_user(track_info, status) create_notification(event.investor.user, 'create-event-investor', startup) create_notification(startup.owner, 'create-event-investor', event.investor.user) except: pass return True