Skip to content

[Core]: Features & Improvements collection (v1 community) #2

Open
4 of 4 issues completed
Open

Description

@pouyiouk

This is feature request/suggestions/improvements for Invoice Plane. Some suggestions are already in the pipeline, but I thought in writing them again since they are closely related to some other improvements & suggestions I have.

Products:

  • Allow the user to upload/insert a product image that will be shown in quotes and invoices.
  • Stock Management - introduce product availability in quantities. (already in the pipeline)

Quotes:

  • While creating a quote, if a client is not already in the system allow the user via the search box to add a client on the go. Especially in busy environments adding a client instantly would be time efficient.
  • Give the option to select a quote expiration date rather than having to resort to the Settings page 'auto' date expiration setting. (i.e: Some quotes can expire after one month, others in 15 days, 10 days etc.)
  • Related to stock management, when creating a quotation product quantities shall be taken into consideration - or not. Possibly give an option to a user to do so.

Invoices:

  • While creating an invoice, if a client is not already in the system allow the user via the search box to add a new client on the go. Especially in busy environments adding a client instantly would be time efficient.
  • Related to stock management, when an invoice is created quantities shall be updated automatically.

Expenses: (Introduce a new tab):

  • This page will manage all the purchases & bills the company has due.
  • The user shall be able to create a new expense. Each expense can belong to a category - Purchases (For product purchases), Bills (Electricity,Rent,Internet etc.), Food Expenses for employees, Office Expenses (Office equipment etc.) and possibly Salaries.
  • The user according to the selected category mentioned above shall be able to input the relevant information and be allowed to upload pdf files or scanned images of the received bills.
  • An expense can have a status of: Unpaid OR Paid

Reports - Introduction of new reports as an addition to the ones already present:

  • The user shall be able to produce a report with the net profit made in a financial year.
  • The user shall be able to produce a complete Income vs Expenses report for a given period of time. i.e: Per financial year. or every three or six months, according to the needs of the company.
  • The user shall be able to produce a report with total V.A.T amount that is due by the company according to the sales of products made.
  • The user shall be able to produce a report with total Taxes amount that is due by the company according to the net profit.

Settings

  • Allow the export of invoices, products, clients, users etc. into a compressed file that can be used in other instances of InvoicePlane or by migrating to newer versions

All of the above are suggestions and nothing more. If the development team believes they are noteworthy we can discuss further and I can provide some more insights.

Activity

  1. nielsdrost7 commented on Feb 8, 2023

    @nielsdrost7
    Collaborator

    @pouyiouk great ideas. I've moved these ideas to the repository of our new version. If you don't mind, I'd love to split them up idea by idea.

    If you want, I can add you to that repository, so you can add your thoughts

  2. transferred this issue fromon Jan 6, 2025
  3. added theissue type on Jul 14, 2025
  4. 1 remaining item

  5. added this to the v2.0.0-alpha milestone on Dec 28, 2025
  6. changed the title [-]Features & Improvements for the next version of Invoice Plane.[/-] [+][Core]: Features & Improvements collection (v1 community)[/+] on Jun 13, 2026
  7. nielsdrost7 commented on Jul 16, 2026

    @nielsdrost7
    Collaborator

    Test Suggestions

    Added to support future implementation of this request. The issue body is unchanged.

    This is a large wishlist and several of its checked items are already real in v2: Modules\Invoices\Filament\Company\Resources\Invoices\Schemas\InvoiceForm already has Select::make('customer_id')->createOptionForm([...]), so inline client creation from the invoice form is implemented (and the Quotes form has the same pattern, matching the checked "add a client on the go" boxes). Modules\Expenses\Models\Expense has expense_status (ExpenseStatus enum) and a category_id/expense_category relation, matching the checked Expenses items. One unchecked item is also already done: Modules\Quotes\Models\Quote has a per-quote quote_expires_at date column, editable via a DatePicker in QuoteForm — so quotes already support a per-quote expiration date rather than only the settings-level default. Other unchecked items overlap with issues already tracked elsewhere: product images and stock management are tracked under the Products epic (#8) as "not started" and explicitly out of scope for images-in-PDF; export-for-backup is tracked separately (#384); and the Income vs. Expenses report is already covered in depth by a separate SMART plan (#71). This comment focuses on the one genuinely untracked item: net-profit/VAT/tax reports.

    • PHPUnit: it_already_saves_a_per_quote_expiration_date_via_quote_expires_at() (confirms existing behaviour, not a gap)
    #[Test]
    public function it_already_saves_a_per_quote_expiration_date_via_quote_expires_at(): void
    {
        /* Arrange */
        $quote = Quote::factory()->for($this->company)->create();
    
        /* Act */
        Livewire::actingAs($this->user)
            ->test(EditQuote::class, ['record' => $quote->getKey(), 'tenant' => Str::lower($this->company->search_code)])
            ->fillForm(['quote_expires_at' => now()->addDays(10)->toDateString()])
            ->call('save')
            ->assertHasNoFormErrors();
    
        /* Assert */
        $this->assertSame(now()->addDays(10)->toDateString(), $quote->fresh()->quote_expires_at?->toDateString());
    }
    • PHPUnit: it_generates_a_net_profit_report_for_a_financial_year() (no such report/service exists today)
    #[Test]
    public function it_generates_a_net_profit_report_for_a_financial_year(): void
    {
        /* Arrange */
        Payment::factory()->for($this->company)->create(['amount' => 1000, 'paid_at' => now()]);
        Expense::factory()->for($this->company)->create(['amount' => 400, 'expensed_at' => now()]);
    
        /* Act */
        $report = app(NetProfitReportService::class)->generate($this->company, now()->startOfYear(), now()->endOfYear());
    
        /* Assert */
        $this->assertSame(600.0, $report->netProfit);
    }

    Edge cases worth covering: this issue is a v1-era grab-bag rather than a single feature — several sub-items now have their own tracked issues, so future work here should confirm against those trackers before duplicating effort, per the note left by the original reporter themselves.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    refinedRefined with SMART plan / test suggestions

    Type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions