def closed(projet_id): from ..tache.models_tache import Tache projet = Projet.get_by_id(projet_id) if projet.closed: projet.closed = False projet.put() else: tache_exist = Tache.query( Tache.projet_id == projet.key ).count() tache_closed = Tache.query( Tache.projet_id == projet.key, Tache.closed == True ).count() if tache_closed == tache_exist: projet.closed = True projet.put() else: flash('Impossible de cloturer ce projet car il y\'a des taches non cloturees existantes', 'warning') return redirect(url_for('projet.edit', projet_id=projet_id))
def index(): menu = 'projet' submenu = 'tous' context = '' title_page = 'Projets' search = False q = request.args.get('q') if q: search = True try: page = int(request.args.get('page', 1)) except ValueError: page = 1 datas = Projet.query( Projet.closed == False, Projet.suspend == False ) if request.args.get('filtre') and request.args.get('filtre') is not None: if request.args.get('filtre') == 'suspend': datas = Projet.query( Projet.closed == False, Projet.suspend == True ) small_title = 'en suspend' if request.args.get('filtre') == 'cloture': datas = Projet.query( Projet.closed == True, Projet.suspend == False ) small_title = 'clotures' pagination = Pagination(css_framework='bootstrap3', per_page=25, page=page, total=datas.count(), search=search, record_name='Projets') if datas.count() > 25: if page == 1: offset = 0 else: page -= 1 offset = page * 25 datas = datas.fetch(limit=25, offset=offset) return render_template('projet/index.html', **locals())
def controle_date_start(form, field): date_start = function.date_convert(field.data) # if datetime.date.today() > date_start and not form.id.data: # raise wtf.ValidationError('La date de debut doit etre >= date en cours') if form.id.data: projet = Projet.get_by_id(int(form.id.data)) if projet.date_start > date_start: raise wtf.ValidationError('La nouvelle date de debut doit etre >= a la date modifie')
def suspend(projet_id): projet = Projet.get_by_id(projet_id) if projet.suspend: projet.suspend = False else: projet.suspend = True projet.put() return redirect(url_for('projet.edit', projet_id=projet_id))
def index_user(): menu = 'self_finance' context = '' title_page = 'Mes besoins financiers' search = False q = request.args.get('q') if q: search = True try: page = int(request.args.get('page', 1)) except ValueError: page = 1 user = Users.objects.get(id=session.get('user_id')) user_projet = Projet.objects(responsable_id=user.id) datas = [] if request.args.get('filtre') and request.args.get('filtre') is not None: if request.args.get('filtre') == 'rejet': for projet in user_projet: for prod in projet.besoin(rejet=True, attente=False): datas.append(prod) small_title = 'rejetes' if request.args.get('filtre') == 'applique': for projet in user_projet: for prod in projet.besoin(rejet=False, attente=False): datas.append(prod) small_title = 'valides' else: small_title = 'en cours' for projet in user_projet: for prod in projet.besoin(): datas.append(prod) for prod in projet.besoin_unsolde(): datas.append(prod) pagination = Pagination(css_framework='bootstrap3', page=page, total=len(datas), search=search, record_name='Besoins Financiers') if len(datas) > 25: offset_start = (page - 1) * 25 offset_end = page * 25 datas = datas[offset_start:offset_end] return render_template('projet/besoin_user.html', **locals())
def delete(projet_id): from ..tache.models_tache import Tache from ..frais.models_frais import FraisProjet projet = Projet.get_by_id(projet_id) frais = FraisProjet.query( FraisProjet.projet_id == projet.key ).count() tache = Tache.query( Tache.projet_id == projet.key ).count() if frais or tache: flash('Impossible de supprimer le projet '+ str(projet.code), 'danger') else: flash('Suppression effectue avec succes', 'success') projet.key.delete() return redirect(url_for('projet.index'))
def edit_user(besoin_id=None): relance = False if request.args.get('relance'): relance = True solde = False if request.args.get('solde'): solde = True if besoin_id: besoin = BesoinFinancier.objects.get(id=besoin_id) form = FormBesoin(obj=besoin) form.projet_id.data = str(besoin.projet_id.id) form.id.data = str(besoin.id) else: besoin = BesoinFinancier() form = FormBesoin() if relance: form.relance.data = 1 if solde: form.solde.data = 1 user = Users.objects.get(id=session.get('user_id')) form.projet_id.choices = [(0, 'Selectionnez un projet')] for projet in Projet.objects(responsable_id=user.id): form.projet_id.choices.append((str(projet.id), projet.titre)) success = False if form.validate_on_submit(): if not solde: besoin.commande = form.commande.data besoin.avance = float(form.avance.data) besoin.montant = float(form.montant.data) besoin.fournisseur = form.fournisseur.data if not form.avance.data: besoin.paye = float(form.montant.data) else: besoin.paye = float(form.avance.data) proj = Projet.objects.get(id=form.projet_id.data) besoin.projet_id = proj update = Update_Besoin() time_zones = pytz.timezone('Africa/Douala') date_now = datetime.datetime.now(time_zones) the_user = Users.objects.get(id=session.get('user_id')) update.date = date_now update.user = the_user update.action = 'creation_besoin' if relance: besoin.attente = True besoin.rejet = False update.action = 'relance_besoin' update.notified = True besoin.updated.append(update) besoin.date_echeance = datetime.datetime.combine( function.date_convert(form.date_echeance.data), datetime.datetime.min.time()) besoin.save() success = True else: # traitement a faire quand nous devons enregistrer une demande de solde besoin_new = BesoinFinancier() besoin_new.commande = form.commande.data besoin_new.avance = float(form.avance.data) besoin_new.montant = float(form.montant.data) besoin_new.fournisseur = form.fournisseur.data besoin_new.paye = float(form.avance.data) + besoin.paye besoin_new.last_child = True besoin_new.parent = besoin proj = Projet.objects.get(id=form.projet_id.data) besoin_new.projet_id = proj besoin_new.attente = True besoin_new.rejet = False update = Update_Besoin() time_zones = pytz.timezone('Africa/Douala') date_now = datetime.datetime.now(time_zones) the_user = Users.objects.get(id=session.get('user_id')) update.date = date_now update.user = the_user update.action = 'solde_besoin' update.notified = True besoin_new.updated.append(update) besoin_new.date_echeance = datetime.datetime.combine( function.date_convert(form.date_echeance.data), datetime.datetime.min.time()) besoin_new.save() success = True flash('Enregistrement effectue avec succes', 'success') return render_template('projet/besoin_edit_user.html', **locals())
def me(): from ..tache.models_tache import Tache menu = 'projet' submenu = 'my' context = '' title_page = 'Projets' search = False q = request.args.get('q') if q: search = True try: page = int(request.args.get('page', 1)) except ValueError: page = 1 user = Users.get_by_id(int(session.get('user_id'))) all_tache = [] for tache in Tache.query(Tache.user_id == user.key): if tache.projet_id: all_tache.append(tache.projet_id.get().key.id()) responsable = Projet.query( Projet.responsable_id == user.key, Projet.suspend == False, Projet.closed == False ) all_projet = [] all_projet_id = [] en_cours = Projet.query( Projet.closed == False, Projet.suspend == False ) if request.args.get('filtre') and request.args.get('filtre') is not None: if request.args.get('filtre') == 'suspend': en_cours = Projet.query( Projet.closed == False, Projet.suspend == True ) responsable = Projet.query( Projet.responsable_id == user.key, Projet.suspend == False, Projet.closed == True ) small_title = 'en suspend' if request.args.get('filtre') == 'cloture': en_cours = Projet.query( Projet.closed == True, Projet.suspend == False ) responsable = Projet.query( Projet.responsable_id == user.key, Projet.suspend == True, Projet.closed == False ) small_title = 'clotures' for resp in responsable: if resp.key.id() not in all_tache: all_tache.append(resp.key.id()) # Projet ou l'utilisateur a une tache for proj in en_cours: if proj.key.id() in all_tache: projet = {} projet['id'] = proj.key.id() projet['code'] = proj.code projet['titre'] = proj.titre projet['client'] = proj.client_id.get().name projet['responsable'] = proj.responsable_id.get().last_name projet['responsable_id'] = proj.responsable_id.get().key.id() all_projet.append(projet) # pagination = Pagination(css_framework='bootstrap3', page=page, total=len(all_projet), search=search, record_name='Projet') return render_template('projet/me.html', **locals())
def edit(projet_id=None): menu = 'projet' submenu = 'projet' context = 'information' title_page = 'Projets - Edition' if projet_id: projet = Projet.get_by_id(projet_id) form = FormProjet(obj=projet) if request.method != 'POST': form.domaine_id.data = projet.domaine_id.get().key.id() form.service_id.data = projet.service_id.get().key.id() form.client_id.data = projet.client_id.get().key.id() form.responsable_id.data = projet.responsable_id.get().key.id() if projet.prospect_id: form.prospect_id.data = projet.prospect_id.get().key.id() form.id.data = projet_id else: projet = Projet() form = FormProjet() form.domaine_id.choices = [(0, 'Selection du domaine')] for domaine in Domaine.query(): form.domaine_id.choices.append((domaine.key.id(), domaine.libelle)) service = [] if projet_id: services = Service.query( Service.domaine == projet.domaine_id ) prospects = Client.query( Client.prospect == True ) if form.domaine_id.data and not projet_id: domaine = Domaine.get_by_id(int(form.domaine_id.data)) services = Service.query( Service.domaine == domaine.key ) if not projet_id: prospects = Client.query( Client.prospect == True ) form.client_id.choices = [(0, 'Selection du client')] for client in Client.query(Client.prospect == False): form.client_id.choices.append((client.key.id(), client.name)) form.responsable_id.choices = [(0, 'Selection du responsable')] for user in Users.query(Users.email != '*****@*****.**'): form.responsable_id.choices.append((user.key.id(), user.first_name+" "+user.last_name)) if form.validate_on_submit() and current_user.has_roles([('super_admin', 'projet')], ['edit']): projet.titre = form.titre.data client_code = Client.get_by_id(int(form.client_id.data)) if not projet_id: projet_client = Projet.query( Projet.client_id == client_code.key ).count() projet.code = client_code.ref+""+str(projet_client+1) projet.heure = form.heure.data projet.montant = float(form.montant.data) projet.date_start = function.date_convert(form.date_start.data) projet.date_end = function.date_convert(form.date_end.data) projet.client_id = client_code.key if client_code.myself and int(form.prospect_id.data): pros = Client.get_by_id(int(form.prospect_id.data)) projet.prospect_id = pros.key user = Users.get_by_id(int(form.responsable_id.data)) projet.responsable_id = user.key domaine = Domaine.get_by_id(int(form.domaine_id.data)) projet.domaine_id = domaine.key service = Service.get_by_id(int(form.service_id.data)) projet.service_id = service.key if not projet_id: projet.facturable = form.facturable.data projet.closed = form.closed.data projet_id = projet.put() flash('Enregistrement effectue avec succes', 'success') return redirect(url_for('projet.edit', projet_id=projet_id.id())) return render_template('projet/edit.html', **locals())