Пример #1
0
    def mutate(cls, root, args, context, info):
        name = args.get('name')
        planned_start = args.get('planned_start')
        planned_finish = args.get('planned_finish')
        note = args.get('note')
        scope_id = args.get('scope_id')
        plan_id = args.get('plan_id')

        if not note:
            note = ""
        start_date = datetime.datetime.strptime(planned_start, '%Y-%m-%d').date()
        end_date = datetime.datetime.strptime(planned_finish, '%Y-%m-%d').date()
        scope = EconomicAgent.objects.get(pk=scope_id)
        plan = None
        if plan_id:
            plan = Order.objects.get(pk=plan_id)
        process = ProcessProxy(
            name=name,
            start_date=start_date,
            end_date=end_date,
            notes=note,
            context_agent=scope,
            plan=plan,
            created_by=context.user,
        )

        user_agent = AgentUser.objects.get(user=context.user).agent
        is_authorized = user_agent.is_authorized(object_to_mutate=process)
        if is_authorized:
            process.save()  
        else:
            raise PermissionDenied('User not authorized to perform this action.')

        return CreateProcess(process=process)
Пример #2
0
    def mutate(cls, root, args, context, info):
        name = args.get('name')
        planned_start = args.get('planned_start')
        planned_duration = args.get('planned_duration')
        note = args.get('note')
        scope_id = args.get('scope_id')

        if not note:
            note = ""
        start_date = datetime.datetime.strptime(planned_start, '%Y-%m-%d').date()
        end_date = start_date + datetime.timedelta(days=planned_duration)
        scope = EconomicAgent.objects.get(pk=scope_id)
        process = ProcessProxy(
            name=name,
            start_date=start_date,
            end_date=end_date,
            notes=note,
            context_agent=scope,
            created_by=context.user,
        )

        user_agent = AgentUser.objects.get(user=context.user).agent
        is_authorized = user_agent.is_authorized(object_to_mutate=process)
        if is_authorized:
            process.save()  
        else:
            raise PermissionDenied('User not authorized to perform this action.')
        
        #TODO: add logic for inserting process into workflow plan

        return CreateProcess(process=process)
Пример #3
0
def recursively_explode_demands(process, order, user, visited):
    """This method assumes the output commitment from the process 

        has already been created.

    """
    #import pdb; pdb.set_trace()
    pt = process.process_type
    output = process.main_outgoing_commitment()
    if output.resource_type not in visited:
        visited.append(output.resource_type)
    for ptrt in pt.all_input_resource_type_relationships():
        commitment = Commitment(
            independent_demand=order,
            event_type=ptrt.event_type,
            description=ptrt.description,
            due_date=process.start_date,
            resource_type=ptrt.resource_type,
            process=process,
            project=pt.project,
            quantity=output.quantity * ptrt.quantity,
            unit_of_quantity=ptrt.resource_type.unit,
            created_by=user,
        )
        commitment.save()
        if ptrt.resource_type not in visited:
            visited.append(ptrt.resource_type)
            qty_to_explode = commitment.net()
            if qty_to_explode:
                pptr = ptrt.resource_type.main_producing_process_type_relationship(
                )
                if pptr:
                    next_pt = pptr.process_type
                    start_date = process.start_date - datetime.timedelta(
                        minutes=next_pt.estimated_duration)
                    next_process = Process(
                        name=next_pt.name,
                        process_type=next_pt,
                        process_pattern=next_pt.process_pattern,
                        project=next_pt.project,
                        url=next_pt.url,
                        end_date=process.start_date,
                        start_date=start_date,
                    )
                    next_process.save()
                    next_commitment = Commitment(
                        independent_demand=order,
                        event_type=pptr.event_type,
                        description=pptr.description,
                        due_date=process.start_date,
                        resource_type=pptr.resource_type,
                        process=next_process,
                        project=next_pt.project,
                        quantity=qty_to_explode * pptr.quantity,
                        unit_of_quantity=pptr.resource_type.unit,
                        created_by=user,
                    )
                    next_commitment.save()
                    recursively_explode_demands(next_process, order, user,
                                                visited)
Пример #4
0
def recursively_explode_demands(process, order, user, visited):
    """This method assumes the output commitment from the process 

        has already been created.

    """
    #import pdb; pdb.set_trace()
    pt = process.process_type
    output = process.main_outgoing_commitment()
    if output.resource_type not in visited:
        visited.append(output.resource_type)
    for ptrt in pt.all_input_resource_type_relationships():        
        commitment = Commitment(
            independent_demand=order,
            event_type=ptrt.event_type,
            description=ptrt.description,
            due_date=process.start_date,
            resource_type=ptrt.resource_type,
            process=process,
            project=pt.project,
            quantity=output.quantity * ptrt.quantity,
            unit_of_quantity=ptrt.resource_type.unit,
            created_by=user,
        )
        commitment.save()
        if ptrt.resource_type not in visited:
            visited.append(ptrt.resource_type)
            qty_to_explode = commitment.net()
            if qty_to_explode:
                pptr = ptrt.resource_type.main_producing_process_type_relationship()
                if pptr:
                    next_pt = pptr.process_type
                    start_date = process.start_date - datetime.timedelta(minutes=next_pt.estimated_duration)
                    next_process = Process(          
                        name=next_pt.name,
                        process_type=next_pt,
                        process_pattern=next_pt.process_pattern,
                        project=next_pt.project,
                        url=next_pt.url,
                        end_date=process.start_date,
                        start_date=start_date,
                    )
                    next_process.save()
                    next_commitment = Commitment(
                        independent_demand=order,
                        event_type=pptr.event_type,
                        description=pptr.description,
                        due_date=process.start_date,
                        resource_type=pptr.resource_type,
                        process=next_process,
                        project=next_pt.project,
                        quantity=qty_to_explode * pptr.quantity,
                        unit_of_quantity=pptr.resource_type.unit,
                        created_by=user,
                    )
                    next_commitment.save()
                    recursively_explode_demands(next_process, order, user, visited)
Пример #5
0
def generate_schedule(process, order, user):
    pt = process.process_type
    output = process.main_outgoing_commitment()
    for ptrt in pt.consumed_resource_type_relationships():
        commitment = Commitment(
            independent_demand=order,
            event_type=ptrt.relationship.event_type,
            relationship=ptrt.relationship,
            due_date=process.start_date,
            resource_type=ptrt.resource_type,
            process=process,
            project=pt.project,
            quantity=output.quantity * ptrt.quantity,
            unit_of_quantity=ptrt.resource_type.unit,
            created_by=user,
        )
        commitment.save()
        pptr = ptrt.resource_type.main_producing_process_type_relationship()
        if pptr:
            next_pt = pptr.process_type
            start_date = process.start_date - datetime.timedelta(
                minutes=next_pt.estimated_duration)
            next_process = Process(
                name=next_pt.name,
                process_type=next_pt,
                project=next_pt.project,
                url=next_pt.url,
                end_date=process.start_date,
                start_date=start_date,
            )
            next_process.save()
            next_commitment = Commitment(
                independent_demand=order,
                event_type=pptr.relationship.event_type,
                relationship=pptr.relationship,
                due_date=process.start_date,
                resource_type=pptr.resource_type,
                process=next_process,
                project=next_pt.project,
                quantity=output.quantity * pptr.quantity,
                unit_of_quantity=pptr.resource_type.unit,
                created_by=user,
            )
            next_commitment.save()
            generate_schedule(next_process, order, user)
Пример #6
0
def generate_schedule(process, order, user):
    pt = process.process_type
    output = process.main_outgoing_commitment()
    for ptrt in pt.consumed_resource_type_relationships():
        commitment = Commitment(
            independent_demand=order,
            event_type=ptrt.relationship.event_type,
            relationship=ptrt.relationship,
            due_date=process.start_date,
            resource_type=ptrt.resource_type,
            process=process,
            project=pt.project,
            quantity=output.quantity * ptrt.quantity,
            unit_of_quantity=ptrt.resource_type.unit,
            created_by=user,
        )
        commitment.save()
        pptr = ptrt.resource_type.main_producing_process_type_relationship()
        if pptr:
            next_pt = pptr.process_type
            start_date = process.start_date - datetime.timedelta(minutes=next_pt.estimated_duration)
            next_process = Process(          
                name=next_pt.name,
                process_type=next_pt,
                project=next_pt.project,
                url=next_pt.url,
                end_date=process.start_date,
                start_date=start_date,
            )
            next_process.save()
            next_commitment = Commitment(
                independent_demand=order,
                event_type=pptr.relationship.event_type,
                relationship=pptr.relationship,
                due_date=process.start_date,
                resource_type=pptr.resource_type,
                process=next_process,
                project=next_pt.project,
                quantity=output.quantity * pptr.quantity,
                unit_of_quantity=pptr.resource_type.unit,
                created_by=user,
            )
            next_commitment.save()
            generate_schedule(next_process, order, user)