예제 #1
0
    def plan(self,
             do_plan=True,
             do_guntt=False,
             do_resource=False,
             do_msproject=False,
             do_profit=False,
             do_trace=True,
             do_traceSvg=False,
             report_width=1000):
        # lets select just one task
        #puid = getUUID() + '_' + self.uuid
        schedule_path = os.path.join(public_upload_folder,
                                     'Fearless_project_%s.tjp' % self.uuid)
        plan_path = os.path.join(public_upload_folder,
                                 'plan_%s.html' % (self.uuid))
        overall_plan_path = os.path.join(public_upload_folder, 'plan.html')
        overall_gantt_path = os.path.join(public_upload_folder, 'gantt.html')
        overall_resource_path = os.path.join(public_upload_folder,
                                             'resource.html')

        guntt_path = os.path.join(public_upload_folder,
                                  'guntt_%s.html' % (self.uuid))
        resource_path = os.path.join(public_upload_folder,
                                     'resource_%s.html' % (self.uuid))
        msproject_path = os.path.join(public_upload_folder,
                                      'MS-project_%s.xml' % (self.uuid))
        profit_path = os.path.join(public_upload_folder,
                                   'ProfiAndLoss_%s.html' % (self.uuid))
        csv_path = os.path.join(public_upload_folder,
                                'csv_%s.csv' % (self.uuid))
        trace_path = os.path.join(public_upload_folder,
                                  'TraceReport_%s.csv' % (self.uuid))
        traceSvg_path = os.path.join(public_upload_folder,
                                     'TraceReport_%s.html' % (self.uuid))

        if not r.get('fearless_tj3_lock'):
            r.set('fearless_tj3_lock', 'OK')
            # just for highly requested projects
            r.expire('fearless_tj3_lock', 5)
        else:
            return

        if not self.tasks:
            self.reports = []
            return
        templateFile = os.path.abspath(
            os.path.join(os.path.dirname(__file__),
                         '../templates/masterProject.tjp'))
        t = Template(filename=templateFile)
        session = session_factory()
        projects = session.query(Project).order_by(asc(Project.id)).all()
        resources = session.query(User).all()
        subProjectTasks = []
        reports = []
        for p in projects:
            if p.tasks:
                planData = p.tjp_subproject(do_plan=do_plan,
                                            do_guntt=do_guntt,
                                            do_resource=do_resource,
                                            do_msproject=do_msproject,
                                            do_profit=do_profit,
                                            do_trace=do_trace,
                                            do_traceSvg=do_traceSvg,
                                            report_width=report_width)
                subProjectTasks.append(planData.get('subProjectTasks'))
                reports.append(planData.get('report'))

        finalplan = t.render(reports=reports,
                             subProjectTasks=subProjectTasks,
                             now=now(),
                             subprojects=projects,
                             resources=resources)

        session.close()

        if self.last_plan == hashlib.md5(finalplan.encode(
                'utf-8', 'ignore')).hexdigest():
            print 'Using cached plan'
            return
        else:
            for i in [
                    schedule_path, plan_path, guntt_path, resource_path,
                    msproject_path, profit_path, csv_path, traceSvg_path
            ]:
                if os.path.isfile(i):
                    os.remove(i)

        #plan_path = '/tmp/Fearless_project.tjp'

        tj3 = sh.Command('../../bin/ruby/bin/tj3')

        with open(schedule_path, 'wb') as f:
            f.write(finalplan.encode('utf-8'))
        try:
            print 'Start Calculating project %s' % self.id
            import time
            s = time.time()
            tj = tj3(schedule_path,
                     '--silent',
                     '--no-color',
                     '--add-trace',
                     o=public_upload_folder,
                     c='4')
            print 'Finished in %s seconds' % round(time.time() - s, 3)
        except Exception, e:
            print e
            # print type(repr(e))
            for i in xrange(3):
                _d = '<br/>'.join(repr(e).split('\\n')[17:]).replace(
                    '\\x1b[31m', '<b>').replace('\\x1b[0m',
                                                '</b>').split('\\x1b[35m')
                if len(_d) > 1:
                    self.reports.append(_d[1])
            self.reports = []
            return
예제 #2
0
파일: __init__.py 프로젝트: ourway/fearless
rdb = riakClient.bucket('fearless_reports_database')

ddb = riakClient.bucket('fearless_documents_database')
riakClient.create_search_index('fearless_documents_database')
ddb.set_properties({'search_index': 'fearless_documents_database'})
ddb.enable_search()

mdb = riakClient.bucket('fearless_messages_database')
riakClient.create_search_index('fearless_messages_database')
mdb.set_properties({'search_index': 'fearless_messages_database'})
mdb.enable_search()
# r.flushdb()

from flib.models.db import session_factory, engine
from flib.models.mixin import Base
session = session_factory()

from flib.models.group import Group
from flib.models.document import Document
from flib.models.account import Account
from flib.models.report import Report
from flib.models.role import Role
from flib.models.client import Client
from flib.models.project import Project
from flib.models.repository import Repository
from flib.models.task import Task
from flib.models.ticket import Ticket
from flib.models.shot import Shot
from flib.models.sequence import Sequence
from flib.models.scene import Scene
from flib.models.tag import Tag