Example #1
0
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))
Example #2
0
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())
Example #3
0
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')
Example #4
0
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))
Example #5
0
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())
Example #6
0
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'))
Example #7
0
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())
Example #8
0
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())
Example #9
0
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())