示例#1
0
def new_inbound_operation(request, entity_id, entity_cls, form_cls, target,
                        title):
    entity = entity_cls.objects.get(pk=entity_id)
    building = entity.building()
    building_accessible(request, building, True)
    
    if request.method == 'POST':
        form = form_cls(request.POST, entity=entity)
        if form.is_valid() and ('cmd' not in form.cleaned_data or form.cleaned_data['cmd'] == 'save'):
            try:
                if 'cmd' in form.cleaned_data:
                    del form.cleaned_data['cmd']
                entity.new_inbound_operation(**form.cleaned_data)
            except Exception as e:
                data = {'form': form, 'target': target, 'parent_id': entity_id,
                        'building': building, 'title': title + ' ' + entity.name}
                logger.exception('Cannot save inbound operation')
                form.add_form_error(e)
                return render(request, 'edit_dialog.html', data)
            return render(request, 'edit_ok.html')
    else:
        form = form_cls(entity=entity, initial=entity.initial_operation())
    
    data = {'form': form, 'target': target, 'parent_id': entity_id,
            'building': building, 'title': title + ' ' + entity.name}
    return render(request, 'edit_dialog.html', data)  
示例#2
0
def new_transfer(request, account_id, form_cls, target, title):
    src_account = Account.objects.get(pk=account_id)
    try:
        account_link = AccountLink.objects.get(account=src_account)
        building = account_link.holder.building()
    except AccountLink.DoesNotExist:
        collecting_fund = CollectingFund.objects.get(account=src_account)
        building = collecting_fund.building()
    building_accessible(request, building, True)
    
    if request.method == 'POST':
        form = form_cls(request.POST, account=src_account,
                               user=request.user, building=building)
        if form.is_valid():
            try:
                data = __transfer_data(building, form)
                src_account.new_transfer(**data)
                return render(request, 'edit_ok.html')
            # TODO @iia catch by different exceptions
            except Exception as e:
                data = {'form' : form, 'target': target, 'entity_id': account_id,
                        'building': building,
                        'title': title + ' ' + src_account.name}
                logger.exception('Cannot save transfer')
                form.add_form_error(e)
                return render(request, 'edit_dialog.html', data)
    else:
        form = form_cls(account=src_account, user=request.user,
                        building=building)
    
    data = {'form' : form, 'target': target, 'entity_id': account_id,
            'building': building,
            'title': title + ' ' + src_account.name}
    return render(request, 'edit_dialog.html', data)
示例#3
0
def edit_entity(request, entity_id, entity_cls, form_cls, target, title='Entity'):
    entity = entity_cls.objects.get(pk=entity_id)
    building = entity.building()
    building_accessible(request, building, True)
    
    if request.method == 'DELETE':
        if entity.can_delete():
            entity.delete()
            return HttpResponse()
        else:
            return HttpResponseBadRequest()
    
    if request.method == 'POST':
        form = form_cls(request.POST, user=request.user, building=building,
                        instance=entity)
        if form.is_valid():
            try:
                form.save()
                return render(request, 'edit_ok.html')
            # TODO @iia catch by different exceptions
            except Exception as e:
                data = {'form': form, 'target': target, 'entity_id': entity_id,
                            'building': building, 'title': title + ' ' + entity.name} 
                logger.exception('Cannot save entity')
                form.add_form_error(e)

                return render(request, 'edit_dialog.html', data)

    else:
        form = form_cls(user=request.user, building=building, instance=entity)
    
    data = {'form': form, 'target': target, 'entity_id': entity_id,
            'building': building, 'title': title + ' ' + entity.name}
    return render(request, 'edit_dialog.html', data)
示例#4
0
def new_building_entity(request, building_id, form_cls, target,
                        title='New Entity', save_kwargs=None,
                        commit_directly=False):
    building = ApartmentGroup.objects.get(pk=building_id).building()
    building_accessible(request, building, True)
    
    if request.method == 'POST':
        form = form_cls(request.POST, user=request.user, building=building)
        if form.is_valid():
            try:
                if commit_directly:
                    form.save()
                else: 
                    entity = form.save(commit=False)
                    if save_kwargs != None:
                        save_kwargs['building'] = building
                        entity.save(**save_kwargs)
                    else:
                        entity.save()
                return render(request, 'edit_ok.html')
            # TODO @iia catch by different exceptions
            except Exception as e:
                data = {'form': form, 'target': target, 'parent_id': building_id,
                        'building': building, 'title': title}
                logger.exception('Cannot save building entity')
                form.add_form_error(e)

                return render(request, 'edit_dialog.html', data)
    else:
        form = form_cls(user=request.user, building=building)
    data = {'form': form, 'target': target, 'parent_id': building_id,
            'building': building, 'title': title}
    return render(request, 'edit_dialog.html', data)
示例#5
0
def download_list(request, building_id, month):
    building = ApartmentGroup.objects.get(pk=building_id)
    building_accessible(request, building, True)
    begin_ts = datetime.strptime(month + '-%02d' % building.close_day,
                                  "%Y-%m-%d").date()
    end_ts = begin_ts + relativedelta(months=1) 
    l = request.user.administrator.license
    l.validate_month(building, begin_ts)
   
    building.mark_display(begin_ts) 

    temp = download_display_list(building, begin_ts, end_ts)
    return __pdf_response(building, month, 'lista', temp)
示例#6
0
def download_report(request, generator, name, building_id, month):
    building = ApartmentGroup.objects.get(pk=building_id)
    building_accessible(request, building, True)
    if month == None:
        day = date.today()
        month = str(day.month)
    else:
        day = datetime.strptime(month + '-01', '%Y-%m-%d').date()
        last = calendar.monthrange(day.year, day.month)[1]
        day = date(year=day.year, month=day.month, day=last)
   
    l = request.user.administrator.license
    l.validate_month(building, day)
    
    temp = generator(building, day)
    return __pdf_response(building, month, name, temp)
示例#7
0
def upload_initial_operations(request, building_id):
    building = ApartmentGroup.objects.get(pk=building_id)
    building_accessible(request, building, True)
    
    if request.method == 'POST':
        form = UploadInitialOperations(request.POST, request.FILES, building=building)
        if form.is_valid():
            try:
                load_initial_operations(building, request.FILES['file'])
                return render(request, 'edit_ok.html')
            except Exception as e:
                logger.exception('Cannot upload initial operations')
                form.add_form_error(e)
    else:
        form = UploadInitialOperations(building=building)
    data = {'form': form, 'building': building}
    return render(request, 'upload_initial_operations.html', data)
示例#8
0
def new_billable(request, building_id, form_class, save_kwargs=None):
    building = ApartmentGroup.objects.get(pk=building_id).building()
    building_accessible(request, building, True)
    user_license = request.user.administrator.license 
    
    if request.method == 'POST':
        form = form_class(request.POST, user=request.user,
                               building=building, user_license=user_license)
        if form.is_valid() and form.cleaned_data['cmd'] == 'save':
            return __save_service(request, form)
    else:
        form = form_class(user=request.user, building=building,
                            user_license=user_license)
    
    data = {'form': form, 'target': 'new_billable_' + form_class.target(),
            'parent_id': building_id, 'building': building,
            'title': form_class.new_title()}
    return render(request, 'edit_dialog.html', data)
示例#9
0
def operation_list(request, building_id, account_id, month=None):
    building = ApartmentGroup.objects.get(pk=building_id)
    building_accessible(request, building)
    if month == None:
        today = date.today()
        month = date(day=building.close_day, month=today.month,
                     year=today.year)
    else:
        month = datetime.strptime(month + '-%02d' % building.close_day,
                                  "%Y-%m-%d").date()
    
    l = License.for_building(building)
    l.validate_month(building, month)
    month_end = month + relativedelta(months=1) 
    
    account = Account.objects.get(pk=account_id)
    
    ops = account.operation_list(month, month_end)
    initial_penalties, final_penalties = None, None
    src_exclude = None
    
    apartment = entity_for_account(Apartment, account)
    # TODO(Stefan) there's logic put in the view, this is uncool
    if apartment != None:
        initial_penalties = apartment.penalties(month)
        final_penalties = apartment.penalties(month_end)
        src_exclude = Q(dest=apartment.building().penalties_account)
        
    service = entity_for_account(CollectingFund, account)
    if service != None:
        src_exclude = Q(doc__type='collection')
        
    initial = account.balance(month, src_exclude)
    final = account.balance(month_end, src_exclude)
    
    data = {'account': account, 'docs': ops, 'building': building,
            'initial_balance': initial, 'initial_penalties': initial_penalties,
            'final_balance': final, 'final_penalties': final_penalties,
            'month': month, 'month_end': month_end, 'service': service,
            'building': building_for_account(account)}
    return render(request, 'operation_list.html', data)
示例#10
0
def operation_doc(request, building_id, account_id, operationdoc_id):
    building = ApartmentGroup.objects.get(pk=building_id)
    building_accessible(request, building, True)
    OperationDoc.delete_doc(operationdoc_id)
    return redirect('operation_list', building_id=building_id,
                    account_id=account_id)
示例#11
0
def download_initial_operations_template(request, building_id):
    building = ApartmentGroup.objects.get(pk=building_id)
    building_accessible(request, building, True)
    temp = initial_operations_template(building)
    return __xlsx_response(building, 'solduri_initiale_', temp)
示例#12
0
def building_tab(request, building_id, tab, show_all=False):
    building = ApartmentGroup.objects.get(pk=building_id).building()
    building_accessible(request, building)
    data = {'building': building, 'active_tab': tab, 'show_all': show_all}
    return render(request, tab + '.html', data)