Exemple #1
0
def addCompoundDetails(request, rxn_id):
    """A view for adding compound details to a reaction."""
    compoundQuantities = CompoundQuantity.objects.filter(reaction__id=rxn_id)
    CompoundQuantityFormset = modelformset_factory(
        model=CompoundQuantity,
        form=compoundQuantityFormFactory(rxn_id),
        can_delete=('creating' not in request.GET),
        extra=6)
    if request.method == "POST":
        formset = CompoundQuantityFormset(queryset=compoundQuantities,
                                          data=request.POST,
                                          prefix='quantities')
        if formset.is_valid():
            formset.save()
            # copes with a bug in deletion from django
            CompoundQuantity.objects.filter(
                id__in=[cq.id for cq in formset.deleted_objects]).delete()
            messages.success(request, 'Compound details successfully updated')
            if 'creating' in request.GET:
                return redirect('createNumDescVals',
                                rxn_id,
                                params={'creating': True})
            else:
                return redirect('editReaction', rxn_id)
    else:
        formset = CompoundQuantityFormset(queryset=compoundQuantities,
                                          prefix='quantities')
    return render(
        request, 'reaction_compound_add.html', {
            'reactants_formset': formset,
            'reaction': PerformedReaction.objects.get(id=rxn_id),
        })
Exemple #2
0
def editReaction(request, rxn_id):
    """A view designed to edit performed reaction instances."""
    status = 200
    reaction = PerformedReaction.objects.get(id=rxn_id)
    if request.method == "POST":
        perfRxnForm = PerformedRxnForm(
            request.user, data=request.POST, instance=reaction, files=request.FILES)
        if perfRxnForm.is_valid():
            perfRxnForm.save()
            messages.success(request, "Reaction successfully updated.")
        else:
            status = 422
    else:
        perfRxnForm = PerformedRxnForm(request.user, instance=reaction)
    compoundQuantities = CompoundQuantity.objects.filter(reaction__id=rxn_id)
    CompoundQuantityFormset = modelformset_factory(
        model=CompoundQuantity, form=compoundQuantityFormFactory(rxn_id), can_delete=True, extra=1)
    cqFormset = CompoundQuantityFormset(
        queryset=compoundQuantities, prefix="quantities")
    descriptorFormsets = {}
    descriptorClasses = (('Numeric Descriptors', 'createNumDescVals', NumRxnDescriptorValue, NumRxnDescValFormFactory(rxn_id)),
                         ('Ordinal Descriptors', 'createOrdDescVals',
                          OrdRxnDescriptorValue, OrdRxnDescValFormFactory(rxn_id)),
                         ('Boolean Descriptors', 'createBoolDescVals',
                          BoolRxnDescriptorValue, BoolRxnDescValFormFactory(rxn_id)),
                         ('Categorical Descriptors', 'createCatDescVals', CatRxnDescriptorValue, CatRxnDescValFormFactory(rxn_id)))
    for descLabel, urlName, descValClass, descValFormClass in descriptorClasses:
        descVals = descValClass.objects.filter(reaction__id=rxn_id).filter(
            descriptor__calculatorSoftware="manual")
        descriptors = descValClass.descriptorClass.objects.filter(
            calculatorSoftware='manual')
        initialDescriptors = descValClass.descriptorClass.objects.filter(
            isDefaultForLabGroups=reaction.labGroup,
            calculatorSoftware='manual').exclude(id__in=set(descVal.descriptor.id for descVal in descVals))
        if descriptors.exists():
            descValFormset = modelformset_factory(
                model=descValClass, form=descValFormClass, can_delete=True, extra=initialDescriptors.count() + 1)
            descriptorFormsets[descLabel] = {'url': urlName, 'formset': descValFormset(queryset=descVals, initial=[
                                                                                       {'descriptor': descriptor.id} for descriptor in initialDescriptors], prefix=urlName)}
    return render(request, 'reaction_edit.html', {'reaction_form': perfRxnForm, 'reactants_formset': cqFormset, 'descriptor_formsets': descriptorFormsets, 'reaction': reaction}, status=status)
Exemple #3
0
def addCompoundDetails(request, rxn_id):
    """A view for adding compound details to a reaction."""
    compoundQuantities = CompoundQuantity.objects.filter(reaction__id=rxn_id)
    CompoundQuantityFormset = modelformset_factory(model=CompoundQuantity, form=compoundQuantityFormFactory(
        rxn_id), can_delete=('creating' not in request.GET), extra=6)
    if request.method == "POST":
        formset = CompoundQuantityFormset(
            queryset=compoundQuantities, data=request.POST, prefix='quantities')
        if formset.is_valid():
            formset.save()
            # copes with a bug in deletion from django
            CompoundQuantity.objects.filter(
                id__in=[cq.id for cq in formset.deleted_objects]).delete()
            messages.success(request, 'Compound details successfully updated')
            if 'creating' in request.GET:
                return redirect('createNumDescVals', rxn_id, params={'creating': True})
            else:
                return redirect('editReaction', rxn_id)
    else:
        formset = CompoundQuantityFormset(
            queryset=compoundQuantities, prefix='quantities')
    return render(request, 'reaction_compound_add.html', {'reactants_formset': formset, 'reaction': PerformedReaction.objects.get(id=rxn_id), })
Exemple #4
0
def editReaction(request, rxn_id):
    """A view designed to edit performed reaction instances."""
    reaction = PerformedReaction.objects.get(id=rxn_id)
    if request.method == "POST":
        perfRxnForm = PerformedRxnForm(
            request.user, data=request.POST, instance=reaction)
        if perfRxnForm.is_valid():
            perfRxnForm.save()
            messages.success(request, "Reaction successfully updated.")
    else:
        perfRxnForm = PerformedRxnForm(request.user, instance=reaction)
    compoundQuantities = CompoundQuantity.objects.filter(reaction__id=rxn_id)
    CompoundQuantityFormset = modelformset_factory(
        model=CompoundQuantity, form=compoundQuantityFormFactory(rxn_id), can_delete=True, extra=1)
    cqFormset = CompoundQuantityFormset(
        queryset=compoundQuantities, prefix="quantities")
    descriptorFormsets = {}
    descriptorClasses = (('Numeric Descriptors', 'createNumDescVals', NumRxnDescriptorValue, NumRxnDescValFormFactory(rxn_id)),
                         ('Ordinal Descriptors', 'createOrdDescVals',
                          OrdRxnDescriptorValue, OrdRxnDescValFormFactory(rxn_id)),
                         ('Boolean Descriptors', 'createBoolDescVals',
                          BoolRxnDescriptorValue, BoolRxnDescValFormFactory(rxn_id)),
                         ('Categorical Descriptors', 'createCatDescVals', CatRxnDescriptorValue, CatRxnDescValFormFactory(rxn_id)))
    for descLabel, urlName, descValClass, descValFormClass in descriptorClasses:
        descriptors = descValClass.descriptorClass.objects.filter(
            calculatorSoftware='manual')
        if descriptors.exists():
            descVals = descValClass.objects.filter(reaction__id=rxn_id).filter(
                descriptor__calculatorSoftware="manual")
            initialDescriptors = descValClass.descriptorClass.objects.filter(
                calculatorSoftware='manual').exclude(id__in=set(descVal.descriptor.id for descVal in descVals))
            descValFormset = modelformset_factory(
                model=descValClass, form=descValFormClass, can_delete=True, extra=initialDescriptors.count())
            descriptorFormsets[descLabel] = {'url': urlName, 'formset': descValFormset(queryset=descVals, initial=[
                                                                                       {'descriptor': descriptor.id} for descriptor in initialDescriptors], prefix=urlName)}
    return render(request, 'reaction_edit.html', {'reaction_form': perfRxnForm, 'reactants_formset': cqFormset, 'descriptor_formsets': descriptorFormsets, 'reaction': reaction})