Merge pull request #110 from akaunting/1.1-dev

1.1 dev
This commit is contained in:
Cüneyt Şentürk 2017-11-30 14:46:05 +03:00 committed by GitHub
commit 2d5c24efa8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
169 changed files with 3774 additions and 512 deletions

View File

@ -0,0 +1,22 @@
<?php
namespace App\Http\Controllers\Common;
use App\Http\Controllers\Controller;
class Import extends Controller
{
/**
* Show the form for creating a new resource.
*
* @param $group
* @param $type
* @return Response
*/
public function create($group, $type)
{
$path = $group . '/' . $type;
return view('common.import.create', compact('group', 'type', 'path'));
}
}

View File

@ -39,7 +39,7 @@ class Controller extends BaseController
}
// Add CRUD permission check
$this->middleware('permission:create-' . $controller)->only(['create', 'store']);
$this->middleware('permission:create-' . $controller)->only(['create', 'store', 'duplicate', 'import']);
$this->middleware('permission:read-' . $controller)->only(['index', 'show', 'edit']);
$this->middleware('permission:update-' . $controller)->only(['update']);
$this->middleware('permission:delete-' . $controller)->only('destroy');

View File

@ -23,7 +23,7 @@ class Payments extends Controller
{
$payments = Payment::with(['account', 'category'])->where('customer_id', '=', Auth::user()->customer->id)->paginate();
$payment_methods = Modules::getPaymentMethods();
$payment_methods = Modules::getPaymentMethods('all');
$categories = collect(Category::enabled()->type('income')->pluck('name', 'id'))
->prepend(trans('general.all_type', ['type' => trans_choice('general.categories', 2)]), '');

View File

@ -22,6 +22,7 @@ use App\Models\Setting\Tax;
use App\Traits\Currencies;
use App\Traits\DateTime;
use App\Traits\Uploads;
use App\Utilities\ImportFile;
use App\Utilities\Modules;
use Date;
@ -201,55 +202,51 @@ class Bills extends Controller
$bill->update($request->input());
// Added bill total sub total
$bill_sub_total = [
BillTotal::create([
'company_id' => $request['company_id'],
'bill_id' => $bill->id,
'code' => 'sub_total',
'name' => 'bills.sub_total',
'amount' => $sub_total,
'sort_order' => 1,
];
BillTotal::create($bill_sub_total);
]);
$sort_order = 2;
// Added bill total taxes
if ($taxes) {
foreach ($taxes as $tax) {
$bill_tax_total = [
BillTotal::create([
'company_id' => $request['company_id'],
'bill_id' => $bill->id,
'code' => 'tax',
'name' => $tax['name'],
'amount' => $tax['amount'],
'sort_order' => $sort_order,
];
BillTotal::create($bill_tax_total);
]);
$sort_order++;
}
}
// Added bill total total
$bill_total = [
BillTotal::create([
'company_id' => $request['company_id'],
'bill_id' => $bill->id,
'code' => 'total',
'name' => 'bills.total',
'amount' => $sub_total + $tax_total,
'sort_order' => $sort_order,
];
]);
BillTotal::create($bill_total);
$request['bill_id'] = $bill->id;
$request['status_code'] = 'new';
$request['notify'] = 0;
$request['description'] = trans('messages.success.added', ['type' => $request['bill_number']]);
BillHistory::create($request->input());
// Add bill history
BillHistory::create([
'company_id' => session('company_id'),
'bill_id' => $bill->id,
'status_code' => 'draft',
'notify' => 0,
'description' => trans('messages.success.added', ['type' => $bill->bill_number]),
]);
// Fire the event to make it extendible
event(new BillCreated($bill));
@ -261,6 +258,58 @@ class Bills extends Controller
return redirect('expenses/bills/' . $bill->id);
}
/**
* Duplicate the specified resource.
*
* @param Bill $bill
*
* @return Response
*/
public function duplicate(Bill $bill)
{
$clone = $bill->duplicate();
// Add bill history
BillHistory::create([
'company_id' => session('company_id'),
'bill_id' => $clone->id,
'status_code' => 'draft',
'notify' => 0,
'description' => trans('messages.success.added', ['type' => $clone->bill_number]),
]);
$message = trans('messages.success.duplicated', ['type' => trans_choice('general.bills', 1)]);
flash($message)->success();
return redirect('expenses/bills/' . $clone->id . '/edit');
}
/**
* Import the specified resource.
*
* @param ImportFile $import
*
* @return Response
*/
public function import(ImportFile $import)
{
$rows = $import->all();
foreach ($rows as $row) {
$data = $row->toArray();
$data['company_id'] = session('company_id');
Bill::create($data);
}
$message = trans('messages.success.imported', ['type' => trans_choice('general.bills', 2)]);
flash($message)->success();
return redirect('expenses/bills');
}
/**
* Show the form for editing the specified resource.
*

View File

@ -10,7 +10,7 @@ use App\Models\Expense\Vendor;
use App\Models\Setting\Category;
use App\Models\Setting\Currency;
use App\Traits\Uploads;
use App\Utilities\ImportFile;
use App\Utilities\Modules;
class Payments extends Controller
@ -90,6 +90,49 @@ class Payments extends Controller
return redirect('expenses/payments');
}
/**
* Duplicate the specified resource.
*
* @param Payment $payment
*
* @return Response
*/
public function duplicate(Payment $payment)
{
$clone = $payment->duplicate();
$message = trans('messages.success.duplicated', ['type' => trans_choice('general.payments', 1)]);
flash($message)->success();
return redirect('expenses/payments/' . $clone->id . '/edit');
}
/**
* Import the specified resource.
*
* @param ImportFile $import
*
* @return Response
*/
public function import(ImportFile $import)
{
$rows = $import->all();
foreach ($rows as $row) {
$data = $row->toArray();
$data['company_id'] = session('company_id');
Payment::create($data);
}
$message = trans('messages.success.imported', ['type' => trans_choice('general.payments', 2)]);
flash($message)->success();
return redirect('expenses/payments');
}
/**
* Show the form for editing the specified resource.
*

View File

@ -6,6 +6,7 @@ use App\Http\Controllers\Controller;
use App\Http\Requests\Expense\Vendor as Request;
use App\Models\Expense\Vendor;
use App\Models\Setting\Currency;
use App\Utilities\ImportFile;
class Vendors extends Controller
{
@ -52,6 +53,49 @@ class Vendors extends Controller
return redirect('expenses/vendors');
}
/**
* Duplicate the specified resource.
*
* @param Vendor $vendor
*
* @return Response
*/
public function duplicate(Vendor $vendor)
{
$clone = $vendor->duplicate();
$message = trans('messages.success.duplicated', ['type' => trans_choice('general.vendors', 1)]);
flash($message)->success();
return redirect('expenses/vendors/' . $clone->id . '/edit');
}
/**
* Import the specified resource.
*
* @param ImportFile $import
*
* @return Response
*/
public function import(ImportFile $import)
{
$rows = $import->all();
foreach ($rows as $row) {
$data = $row->toArray();
$data['company_id'] = session('company_id');
Vendor::create($data);
}
$message = trans('messages.success.imported', ['type' => trans_choice('general.vendors', 2)]);
flash($message)->success();
return redirect('expenses/vendors');
}
/**
* Show the form for editing the specified resource.
*
@ -122,4 +166,11 @@ class Vendors extends Controller
return response()->json($vendor);
}
public function vendor(Request $request)
{
$vendor = Vendor::create($request->all());
return response()->json($vendor);
}
}

View File

@ -7,6 +7,7 @@ use App\Http\Requests\Income\Customer as Request;
use App\Models\Auth\User;
use App\Models\Income\Customer;
use App\Models\Setting\Currency;
use App\Utilities\ImportFile;
class Customers extends Controller
{
@ -47,33 +48,26 @@ class Customers extends Controller
if (empty($request->input('create_user'))) {
Customer::create($request->all());
} else {
// Check if user exist
$user = User::where('email', $request['email'])->first();
if (!empty($user)) {
$message = trans('messages.error.customer', ['name' => $user->name]);
flash($message)->error();
return redirect()->back()->withInput($request->except('create_user'))->withErrors(
['email' => trans('customer.error.email')]
['email' => trans('customers.error.email')]
);
//$user = User::create($request->input());
}
$customer = Customer::create($request->all());
// Create user first
$user = User::create($request->all());
$user->roles()->attach(['3']);
$user->companies()->attach([session('company_id')]);
$request['user_id'] = $user->id;
$request['roles'] = array('3');
$request['companies'] = array(session('company_id'));
// Attach roles
$user->roles()->attach($request['roles']);
// Attach companies
$user->companies()->attach($request['companies']);
$customer->update($request->all());
Customer::create($request->all());
}
$message = trans('messages.success.added', ['type' => trans_choice('general.customers', 1)]);
@ -83,6 +77,49 @@ class Customers extends Controller
return redirect('incomes/customers');
}
/**
* Duplicate the specified resource.
*
* @param Customer $customer
*
* @return Response
*/
public function duplicate(Customer $customer)
{
$clone = $customer->duplicate();
$message = trans('messages.success.duplicated', ['type' => trans_choice('general.customers', 1)]);
flash($message)->success();
return redirect('incomes/customers/' . $clone->id . '/edit');
}
/**
* Import the specified resource.
*
* @param ImportFile $import
*
* @return Response
*/
public function import(ImportFile $import)
{
$rows = $import->all();
foreach ($rows as $row) {
$data = $row->toArray();
$data['company_id'] = session('company_id');
Customer::create($data);
}
$message = trans('messages.success.imported', ['type' => trans_choice('general.customers', 2)]);
flash($message)->success();
return redirect('incomes/customers');
}
/**
* Show the form for editing the specified resource.
*
@ -110,29 +147,24 @@ class Customers extends Controller
if (empty($request->input('create_user'))) {
$customer->update($request->all());
} else {
// Check if user exist
$user = User::where('email', $request['email'])->first();
if (!empty($user)) {
$message = trans('messages.error.customer', ['name' => $user->name]);
flash($message)->error();
return redirect()->back()->withInput($request->except('create_user'))->withErrors(
['email' => trans('customer.error.email')]
['email' => trans('customers.error.email')]
);
//$user = User::create($request->input());
}
// Create user first
$user = User::create($request->all());
$user->roles()->attach(['3']);
$user->companies()->attach([session('company_id')]);
$request['user_id'] = $user->id;
$request['roles'] = array('3');
$request['companies'] = array(session('company_id'));
// Attach roles
$user->roles()->attach($request['roles']);
// Attach companies
$user->companies()->attach($request['companies']);
$customer->update($request->all());
}
@ -181,4 +213,11 @@ class Customers extends Controller
return response()->json($customer);
}
public function customer(Request $request)
{
$customer = Customer::create($request->all());
return response()->json($customer);
}
}

View File

@ -24,14 +24,16 @@ use App\Notifications\Income\Invoice as Notification;
use App\Notifications\Item\Item as ItemNotification;
use App\Traits\Currencies;
use App\Traits\DateTime;
use App\Traits\Incomes;
use App\Traits\Uploads;
use App\Utilities\ImportFile;
use App\Utilities\Modules;
use Date;
use File;
class Invoices extends Controller
{
use DateTime, Currencies, Uploads;
use DateTime, Currencies, Incomes, Uploads;
/**
* Display a listing of the resource.
@ -100,11 +102,7 @@ class Invoices extends Controller
$taxes = Tax::enabled()->pluck('name', 'id');
// Generate next invoice number
$prefix = setting('general.invoice_number_prefix', 'INV-');
$next = setting('general.invoice_number_next', '1');
$digit = setting('general.invoice_number_digit', '5');
$number = $prefix . str_pad($next, $digit, '0', STR_PAD_LEFT);
$number = $this->getNextInvoiceNumber();
return view('incomes.invoices.create', compact('customers', 'currencies', 'items', 'taxes', 'number'));
}
@ -227,17 +225,17 @@ class Invoices extends Controller
// Add invoice totals
$this->addTotals($invoice, $request, $taxes, $sub_total, $tax_total);
$request['invoice_id'] = $invoice->id;
$request['status_code'] = 'draft';
$request['notify'] = 0;
$request['description'] = trans('messages.success.added', ['type' => $request['invoice_number']]);
InvoiceHistory::create($request->all());
// Add invoice history
InvoiceHistory::create([
'company_id' => session('company_id'),
'invoice_id' => $invoice->id,
'status_code' => 'draft',
'notify' => 0,
'description' => trans('messages.success.added', ['type' => $invoice->invoice_number]),
]);
// Update next invoice number
$next = setting('general.invoice_number_next', 1) + 1;
setting(['general.invoice_number_next' => $next]);
setting()->save();
$this->increaseNextInvoiceNumber();
// Fire the event to make it extendible
event(new InvoiceCreated($invoice));
@ -249,6 +247,61 @@ class Invoices extends Controller
return redirect('incomes/invoices/' . $invoice->id);
}
/**
* Duplicate the specified resource.
*
* @param Invoice $invoice
*
* @return Response
*/
public function duplicate(Invoice $invoice)
{
$clone = $invoice->duplicate();
// Add invoice history
InvoiceHistory::create([
'company_id' => session('company_id'),
'invoice_id' => $clone->id,
'status_code' => 'draft',
'notify' => 0,
'description' => trans('messages.success.added', ['type' => $clone->invoice_number]),
]);
// Update next invoice number
$this->increaseNextInvoiceNumber();
$message = trans('messages.success.duplicated', ['type' => trans_choice('general.invoices', 1)]);
flash($message)->success();
return redirect('incomes/invoices/' . $clone->id . '/edit');
}
/**
* Import the specified resource.
*
* @param ImportFile $import
*
* @return Response
*/
public function import(ImportFile $import)
{
$rows = $import->all();
foreach ($rows as $row) {
$data = $row->toArray();
$data['company_id'] = session('company_id');
Invoice::create($data);
}
$message = trans('messages.success.imported', ['type' => trans_choice('general.invoices', 2)]);
flash($message)->success();
return redirect('incomes/invoices');
}
/**
* Show the form for editing the specified resource.
*
@ -653,47 +706,41 @@ class Invoices extends Controller
$sort_order = 1;
// Added invoice total sub total
$invoice_sub_total = [
InvoiceTotal::create([
'company_id' => $request['company_id'],
'invoice_id' => $invoice->id,
'code' => 'sub_total',
'name' => 'invoices.sub_total',
'amount' => $sub_total,
'sort_order' => $sort_order,
];
InvoiceTotal::create($invoice_sub_total);
]);
$sort_order++;
// Added invoice total taxes
if ($taxes) {
foreach ($taxes as $tax) {
$invoice_tax_total = [
InvoiceTotal::create([
'company_id' => $request['company_id'],
'invoice_id' => $invoice->id,
'code' => 'tax',
'name' => $tax['name'],
'amount' => $tax['amount'],
'sort_order' => $sort_order,
];
InvoiceTotal::create($invoice_tax_total);
]);
$sort_order++;
}
}
// Added invoice total total
$invoice_total = [
InvoiceTotal::create([
'company_id' => $request['company_id'],
'invoice_id' => $invoice->id,
'code' => 'total',
'name' => 'invoices.total',
'amount' => $sub_total + $tax_total,
'sort_order' => $sort_order,
];
InvoiceTotal::create($invoice_total);
]);
}
}

View File

@ -12,6 +12,7 @@ use App\Models\Setting\Currency;
use App\Traits\Currencies;
use App\Traits\DateTime;
use App\Traits\Uploads;
use App\Utilities\ImportFile;
use App\Utilities\Modules;
class Revenues extends Controller
@ -91,6 +92,49 @@ class Revenues extends Controller
return redirect('incomes/revenues');
}
/**
* Duplicate the specified resource.
*
* @param Revenue $revenue
*
* @return Response
*/
public function duplicate(Revenue $revenue)
{
$clone = $revenue->duplicate();
$message = trans('messages.success.duplicated', ['type' => trans_choice('general.revenues', 1)]);
flash($message)->success();
return redirect('incomes/revenues/' . $clone->id . '/edit');
}
/**
* Import the specified resource.
*
* @param ImportFile $import
*
* @return Response
*/
public function import(ImportFile $import)
{
$rows = $import->all();
foreach ($rows as $row) {
$data = $row->toArray();
$data['company_id'] = session('company_id');
Revenue::create($data);
}
$message = trans('messages.success.imported', ['type' => trans_choice('general.revenues', 2)]);
flash($message)->success();
return redirect('incomes/revenues');
}
/**
* Show the form for editing the specified resource.
*

View File

@ -43,10 +43,6 @@ class Requirements extends Controller
{
$requirements = array();
if (version_compare(PHP_VERSION, '5.6.4', '<')) {
$requirements[] = trans('install.requirements.php_version');
}
if (ini_get('safe_mode')) {
$requirements[] = trans('install.requirements.disabled', ['feature' => 'Safe Mode']);
}

View File

@ -9,6 +9,7 @@ use App\Models\Setting\Category;
use App\Models\Setting\Currency;
use App\Models\Setting\Tax;
use App\Traits\Uploads;
use App\Utilities\ImportFile;
class Items extends Controller
{
@ -67,6 +68,49 @@ class Items extends Controller
return redirect('items/items');
}
/**
* Duplicate the specified resource.
*
* @param Item $item
*
* @return Response
*/
public function duplicate(Item $item)
{
$clone = $item->duplicate();
$message = trans('messages.success.duplicated', ['type' => trans_choice('general.items', 1)]);
flash($message)->success();
return redirect('items/items/' . $clone->id . '/edit');
}
/**
* Import the specified resource.
*
* @param ImportFile $import
*
* @return Response
*/
public function import(ImportFile $import)
{
$rows = $import->all();
foreach ($rows as $row) {
$data = $row->toArray();
$data['company_id'] = session('company_id');
Item::create($data);
}
$message = trans('messages.success.imported', ['type' => trans_choice('general.items', 2)]);
flash($message)->success();
return redirect('items/items');
}
/**
* Show the form for editing the specified resource.
*

View File

@ -2,11 +2,11 @@
namespace App\Http\Controllers\Settings;
use Akaunting\Money\Currency as MoneyCurrency;
use App\Http\Controllers\Controller;
use App\Http\Requests\Setting\Currency as Request;
use App\Models\Banking\Account;
use App\Models\Setting\Currency;
use ClickNow\Money\Currency as MoneyCurrency;
class Currencies extends Controller
{
@ -29,10 +29,18 @@ class Currencies extends Controller
*/
public function create()
{
// Get current currencies
$current = Currency::pluck('code')->toArray();
// Prepare codes
$codes = array();
$currencies = MoneyCurrency::getCurrencies();
foreach ($currencies as $key => $item) {
// Don't show if already available
if (in_array($key, $current)) {
continue;
}
$codes[$key] = $key;
}
@ -77,10 +85,18 @@ class Currencies extends Controller
*/
public function edit(Currency $currency)
{
// Get current currencies
$current = Currency::pluck('code')->toArray();
// Prepare codes
$codes = array();
$currencies = MoneyCurrency::getCurrencies();
foreach ($currencies as $key => $item) {
// Don't show if already available
if (($key != $currency->code) && in_array($key, $current)) {
continue;
}
$codes[$key] = $key;
}

View File

@ -0,0 +1,48 @@
<?php
namespace App\Listeners\Updates;
use App\Events\UpdateFinished;
use App\Models\Auth\Role;
use App\Models\Auth\Permission;
class Version110 extends Listener
{
const ALIAS = 'core';
const VERSION = '1.1.0';
/**
* Handle the event.
*
* @param $event
* @return void
*/
public function handle(UpdateFinished $event)
{
// Check if should listen
if (!$this->check($event)) {
return;
}
// Create permission
$permission = Permission::firstOrCreate([
'name' => 'create-common-import',
'display_name' => 'Create Common Import',
'description' => 'Create Common Import',
]);
// Attach permission to roles
$roles = Role::all();
foreach ($roles as $role) {
$allowed = ['admin', 'manager'];
if (!in_array($role->name, $allowed)) {
continue;
}
$role->attachPermission($permission);
}
}
}

View File

@ -5,11 +5,12 @@ namespace App\Models\Expense;
use App\Models\Model;
use App\Traits\Currencies;
use App\Traits\DateTime;
use Bkwld\Cloner\Cloneable;
use Sofa\Eloquence\Eloquence;
class Bill extends Model
{
use Currencies, DateTime, Eloquence;
use Cloneable, Currencies, DateTime, Eloquence;
protected $table = 'bills';
@ -44,6 +45,13 @@ class Bill extends Model
'notes' => 2,
];
/**
* Clonable relationships.
*
* @var array
*/
protected $cloneable_relations = ['items', 'totals'];
public function vendor()
{
return $this->belongsTo('App\Models\Expense\Vendor');
@ -94,6 +102,11 @@ class Bill extends Model
return $query->where('bill_status_code', '!=', 'new');
}
public function onCloning($src, $child = null)
{
$this->bill_status_code = 'draft';
}
/**
* Convert amount to double.
*

View File

@ -5,11 +5,12 @@ namespace App\Models\Expense;
use App\Models\Model;
use App\Traits\Currencies;
use App\Traits\DateTime;
use Bkwld\Cloner\Cloneable;
use Sofa\Eloquence\Eloquence;
class Payment extends Model
{
use Currencies, DateTime, Eloquence;
use Cloneable, Currencies, DateTime, Eloquence;
protected $table = 'payments';

View File

@ -3,11 +3,12 @@
namespace App\Models\Expense;
use App\Models\Model;
use Bkwld\Cloner\Cloneable;
use Sofa\Eloquence\Eloquence;
class Vendor extends Model
{
use Eloquence;
use Cloneable, Eloquence;
protected $table = 'vendors';

View File

@ -3,13 +3,13 @@
namespace App\Models\Income;
use App\Models\Model;
use Bkwld\Cloner\Cloneable;
use Illuminate\Notifications\Notifiable;
use Sofa\Eloquence\Eloquence;
class Customer extends Model
{
use Eloquence;
use Notifiable;
use Cloneable, Eloquence, Notifiable;
protected $table = 'customers';
@ -59,4 +59,9 @@ class Customer extends Model
{
return $this->belongsTo('App\Models\Auth\User', 'customer_id', 'id');
}
public function onCloning($src, $child = null)
{
$this->user_id = null;
}
}

View File

@ -5,11 +5,13 @@ namespace App\Models\Income;
use App\Models\Model;
use App\Traits\Currencies;
use App\Traits\DateTime;
use App\Traits\Incomes;
use Bkwld\Cloner\Cloneable;
use Sofa\Eloquence\Eloquence;
class Invoice extends Model
{
use Currencies, DateTime, Eloquence;
use Cloneable, Currencies, DateTime, Eloquence, Incomes;
protected $table = 'invoices';
@ -44,6 +46,13 @@ class Invoice extends Model
'notes' => 2,
];
/**
* Clonable relationships.
*
* @var array
*/
protected $cloneable_relations = ['items', 'totals'];
public function user()
{
return $this->belongsTo('App\Models\Auth\User', 'customer_id', 'id');
@ -99,6 +108,12 @@ class Invoice extends Model
return $query->where('invoice_status_code', '!=', 'draft');
}
public function onCloning($src, $child = null)
{
$this->invoice_status_code = 'draft';
$this->invoice_number = $this->getNextInvoiceNumber();
}
/**
* Convert amount to double.
*

View File

@ -5,11 +5,12 @@ namespace App\Models\Income;
use App\Models\Model;
use App\Traits\Currencies;
use App\Traits\DateTime;
use Bkwld\Cloner\Cloneable;
use Sofa\Eloquence\Eloquence;
class Revenue extends Model
{
use Currencies, DateTime, Eloquence;
use Cloneable, Currencies, DateTime, Eloquence;
protected $table = 'revenues';

View File

@ -3,14 +3,13 @@
namespace App\Models\Item;
use App\Models\Model;
use App\Models\Expense\Bill;
use App\Models\Income\Invoice;
use App\Traits\Currencies;
use Bkwld\Cloner\Cloneable;
use Sofa\Eloquence\Eloquence;
class Item extends Model
{
use Currencies, Eloquence;
use Cloneable, Currencies, Eloquence;
protected $table = 'items';

View File

@ -18,6 +18,7 @@ class EventServiceProvider extends ServiceProvider
'App\Listeners\Updates\Version107',
'App\Listeners\Updates\Version108',
'App\Listeners\Updates\Version109',
'App\Listeners\Updates\Version110',
],
'Illuminate\Auth\Events\Login' => [
'App\Listeners\Auth\Login',

View File

@ -2,8 +2,8 @@
namespace App\Traits;
use ClickNow\Money\Money;
use ClickNow\Money\Currency;
use Akaunting\Money\Money;
use Akaunting\Money\Currency;
trait Currencies
{

34
app/Traits/Incomes.php Normal file
View File

@ -0,0 +1,34 @@
<?php
namespace App\Traits;
trait Incomes
{
/**
* Generate next invoice number
*
* @return string
*/
public function getNextInvoiceNumber()
{
$prefix = setting('general.invoice_number_prefix', 'INV-');
$next = setting('general.invoice_number_next', '1');
$digit = setting('general.invoice_number_digit', '5');
$number = $prefix . str_pad($next, $digit, '0', STR_PAD_LEFT);
return $number;
}
/**
* Increase the next invoice number
*/
public function increaseNextInvoiceNumber()
{
// Update next invoice number
$next = setting('general.invoice_number_next', 1) + 1;
setting(['general.invoice_number_next' => $next]);
setting()->save();
}
}

View File

@ -0,0 +1,36 @@
<?php
namespace App\Utilities;
use Maatwebsite\Excel\Files\ExcelFile;
use Storage;
class ImportFile extends ExcelFile
{
public function getFile()
{
$request = request();
if (!$request->hasFile('import')) {
flash(trans('messages.error.no_file'))->error();
redirect()->back()->send();
}
$folder = session('company_id') . '/imports';
// Upload file
$path = Storage::path($request->import->store($folder));
return $path;
}
public function getFilters()
{
return [
'chunk'
];
}
}

View File

@ -11,14 +11,14 @@ use App\Events\PaymentGatewayListing;
class Modules
{
public static function getPaymentMethods()
public static function getPaymentMethods($type = null)
{
$payment_methods = Cache::get('payment_methods.admin');
$customer = auth()->user()->customer;
if ($customer) {
if ($customer && $type != 'all') {
$payment_methods = Cache::get('payment_methods.customer');
}
@ -38,7 +38,7 @@ class Modules
continue;
}
if ($customer && empty($gateway['customer'])) {
if (($customer && empty($gateway['customer'])) && $type != 'all') {
continue;
}

View File

@ -8,13 +8,14 @@
"require": {
"php": ">=5.6.4",
"akaunting/language": "1.0.*",
"akaunting/money": "1.0.*",
"akaunting/setting": "1.0.*",
"akaunting/version": "1.0.*",
"almasaeed2010/adminlte": "2.3.*",
"barryvdh/laravel-debugbar": "2.3.*",
"barryvdh/laravel-dompdf": "0.*",
"barryvdh/laravel-ide-helper": "2.3.*",
"cknow/laravel-money": "1.0.*",
"bkwld/cloner": "3.2.*",
"dingo/api": "1.0.0-beta8",
"fzaninotto/faker": "1.6.*",
"guzzlehttp/guzzle": "6.3.*",
@ -26,6 +27,7 @@
"laravel/framework": "5.4.*",
"laravel/tinker": "~1.0",
"LaravelCollective/html": "5.4.*",
"maatwebsite/excel": "2.1.*",
"nwidart/laravel-menus": "0.5.*",
"nwidart/laravel-modules": "1.*",
"santigarcor/laratrust": "4.0.*",

View File

@ -184,10 +184,11 @@ return [
* Vendor Service Providers...
*/
Akaunting\Language\Provider::class,
Akaunting\Money\Provider::class,
Akaunting\Setting\Provider::class,
Akaunting\Version\Provider::class,
Barryvdh\DomPDF\ServiceProvider::class,
ClickNow\Money\MoneyServiceProvider::class,
Bkwld\Cloner\ServiceProvider::class,
Collective\Html\HtmlServiceProvider::class,
Dingo\Api\Provider\LaravelServiceProvider::class,
EloquentFilter\ServiceProvider::class,
@ -197,6 +198,7 @@ return [
Kyslik\ColumnSortable\ColumnSortableServiceProvider::class,
Laracasts\Flash\FlashServiceProvider::class,
Laratrust\LaratrustServiceProvider::class,
Maatwebsite\Excel\ExcelServiceProvider::class,
Nwidart\Menus\MenusServiceProvider::class,
Nwidart\Modules\LaravelModulesServiceProvider::class,
Sofa\Eloquence\ServiceProvider::class,
@ -257,6 +259,7 @@ return [
'Debugbar' => Barryvdh\Debugbar\Facade::class,
'Date' => Jenssegers\Date\Date::class,
'DotenvEditor' => Jackiedo\DotenvEditor\Facades\DotenvEditor::class,
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
'Form' => Collective\Html\FormFacade::class,
'Html' => Collective\Html\HtmlFacade::class,
'Image' => Intervention\Image\Facades\Image::class,

704
config/excel.php Normal file
View File

@ -0,0 +1,704 @@
<?php
return array(
'cache' => [
/*
|--------------------------------------------------------------------------
| Enable/Disable cell caching
|--------------------------------------------------------------------------
*/
'enable' => true,
/*
|--------------------------------------------------------------------------
| Caching driver
|--------------------------------------------------------------------------
|
| Set the caching driver
|
| Available methods:
| memory|gzip|serialized|igbinary|discISAM|apc|memcache|temp|wincache|sqlite|sqlite3
|
*/
'driver' => 'memory',
/*
|--------------------------------------------------------------------------
| Cache settings
|--------------------------------------------------------------------------
*/
'settings' => [
'memoryCacheSize' => '32MB',
'cacheTime' => 600
],
/*
|--------------------------------------------------------------------------
| Memcache settings
|--------------------------------------------------------------------------
*/
'memcache' => [
'host' => 'localhost',
'port' => 11211,
],
/*
|--------------------------------------------------------------------------
| Cache dir (for discISAM)
|--------------------------------------------------------------------------
*/
'dir' => storage_path('cache')
],
'properties' => [
'creator' => 'Akaunting',
'lastModifiedBy' => 'Akaunting',
'title' => 'Spreadsheet',
'description' => 'Default spreadsheet export',
'subject' => 'Spreadsheet export',
'keywords' => 'akaunting, excel, export',
'category' => 'Excel',
'manager' => 'Akaunting',
'company' => 'Akaunting',
],
/*
|--------------------------------------------------------------------------
| Sheets settings
|--------------------------------------------------------------------------
*/
'sheets' => [
/*
|--------------------------------------------------------------------------
| Default page setup
|--------------------------------------------------------------------------
*/
'pageSetup' => [
'orientation' => 'portrait',
'paperSize' => '9',
'scale' => '100',
'fitToPage' => false,
'fitToHeight' => true,
'fitToWidth' => true,
'columnsToRepeatAtLeft' => ['', ''],
'rowsToRepeatAtTop' => [0, 0],
'horizontalCentered' => false,
'verticalCentered' => false,
'printArea' => null,
'firstPageNumber' => null,
],
],
/*
|--------------------------------------------------------------------------
| Creator
|--------------------------------------------------------------------------
|
| The default creator of a new Excel file
|
*/
'creator' => 'Akaunting',
'csv' => [
/*
|--------------------------------------------------------------------------
| Delimiter
|--------------------------------------------------------------------------
|
| The default delimiter which will be used to read out a CSV file
|
*/
'delimiter' => ',',
/*
|--------------------------------------------------------------------------
| Enclosure
|--------------------------------------------------------------------------
*/
'enclosure' => '"',
/*
|--------------------------------------------------------------------------
| Line endings
|--------------------------------------------------------------------------
*/
'line_ending' => "\r\n",
/*
|--------------------------------------------------------------------------
| setUseBom
|--------------------------------------------------------------------------
*/
'use_bom' => false
],
'export' => [
/*
|--------------------------------------------------------------------------
| Autosize columns
|--------------------------------------------------------------------------
|
| Disable/enable column autosize or set the autosizing for
| an array of columns ( array('A', 'B') )
|
*/
'autosize' => true,
/*
|--------------------------------------------------------------------------
| Autosize method
|--------------------------------------------------------------------------
|
| --> PHPExcel_Shared_Font::AUTOSIZE_METHOD_APPROX
| The default is based on an estimate, which does its calculation based
| on the number of characters in the cell value (applying any calculation
| and format mask, and allowing for wordwrap and rotation) and with an
| "arbitrary" adjustment based on the font (Arial, Calibri or Verdana,
| defaulting to Calibri if any other font is used) and a proportional
| adjustment for the font size.
|
| --> PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT
| The second method is more accurate, based on actual style formatting as
| well (bold, italic, etc), and is calculated by generating a gd2 imagettf
| bounding box and using its dimensions to determine the size; but this
| method is significantly slower, and its accuracy is still dependent on
| having the appropriate fonts installed.
|
*/
'autosize-method' => PHPExcel_Shared_Font::AUTOSIZE_METHOD_APPROX,
/*
|--------------------------------------------------------------------------
| Auto generate table heading
|--------------------------------------------------------------------------
|
| If set to true, the array indices (or model attribute names)
| will automatically be used as first row (table heading)
|
*/
'generate_heading_by_indices' => true,
/*
|--------------------------------------------------------------------------
| Auto set alignment on merged cells
|--------------------------------------------------------------------------
*/
'merged_cell_alignment' => 'left',
/*
|--------------------------------------------------------------------------
| Pre-calculate formulas during export
|--------------------------------------------------------------------------
*/
'calculate' => false,
/*
|--------------------------------------------------------------------------
| Include Charts during export
|--------------------------------------------------------------------------
*/
'includeCharts' => false,
/*
|--------------------------------------------------------------------------
| Default sheet settings
|--------------------------------------------------------------------------
*/
'sheets' => [
/*
|--------------------------------------------------------------------------
| Default page margin
|--------------------------------------------------------------------------
|
| 1) When set to false, default margins will be used
| 2) It's possible to enter a single margin which will
| be used for all margins.
| 3) Alternatively you can pass an array with 4 margins
| Default order: array(top, right, bottom, left)
|
*/
'page_margin' => false,
/*
|--------------------------------------------------------------------------
| Value in source array that stands for blank cell
|--------------------------------------------------------------------------
*/
'nullValue' => null,
/*
|--------------------------------------------------------------------------
| Insert array starting from this cell address as the top left coordinate
|--------------------------------------------------------------------------
*/
'startCell' => 'A1',
/*
|--------------------------------------------------------------------------
| Apply strict comparison when testing for null values in the array
|--------------------------------------------------------------------------
*/
'strictNullComparison' => false
],
/*
|--------------------------------------------------------------------------
| Store settings
|--------------------------------------------------------------------------
*/
'store' => [
/*
|--------------------------------------------------------------------------
| Path
|--------------------------------------------------------------------------
|
| The path we want to save excel file to
|
*/
'path' => storage_path('app/exports'),
/*
|--------------------------------------------------------------------------
| Return info
|--------------------------------------------------------------------------
|
| Whether we want to return information about the stored file or not
|
*/
'returnInfo' => false
],
/*
|--------------------------------------------------------------------------
| PDF Settings
|--------------------------------------------------------------------------
*/
'pdf' => [
/*
|--------------------------------------------------------------------------
| PDF Drivers
|--------------------------------------------------------------------------
| Supported: DomPDF, tcPDF, mPDF
*/
'driver' => 'DomPDF',
/*
|--------------------------------------------------------------------------
| PDF Driver settings
|--------------------------------------------------------------------------
*/
'drivers' => [
/*
|--------------------------------------------------------------------------
| DomPDF settings
|--------------------------------------------------------------------------
*/
'DomPDF' => [
'path' => base_path('vendor/dompdf/dompdf/')
],
/*
|--------------------------------------------------------------------------
| tcPDF settings
|--------------------------------------------------------------------------
*/
'tcPDF' => [
'path' => base_path('vendor/tecnick.com/tcpdf/')
],
/*
|--------------------------------------------------------------------------
| mPDF settings
|--------------------------------------------------------------------------
*/
'mPDF' => [
'path' => base_path('vendor/mpdf/mpdf/')
],
]
]
],
'filters' => [
/*
|--------------------------------------------------------------------------
| Register read filters
|--------------------------------------------------------------------------
*/
'registered' => [
'chunk' => 'Maatwebsite\Excel\Filters\ChunkReadFilter'
],
/*
|--------------------------------------------------------------------------
| Enable certain filters for every file read
|--------------------------------------------------------------------------
*/
'enabled' => []
],
'import' => [
/*
|--------------------------------------------------------------------------
| Has heading
|--------------------------------------------------------------------------
|
| The sheet has a heading (first) row which we can use as attribute names
|
| Options: true|false|slugged|slugged_with_count|ascii|numeric|hashed|trans|original
|
*/
'heading' => 'slugged',
/*
|--------------------------------------------------------------------------
| First Row with data or heading of data
|--------------------------------------------------------------------------
|
| If the heading row is not the first row, or the data doesn't start
| on the first row, here you can change the start row.
|
*/
'startRow' => 1,
/*
|--------------------------------------------------------------------------
| Cell name word separator
|--------------------------------------------------------------------------
|
| The default separator which is used for the cell names
| Note: only applies to 'heading' settings 'true' && 'slugged'
|
*/
'separator' => '_',
/*
|--------------------------------------------------------------------------
| Slug whitelisting
|--------------------------------------------------------------------------
|
| Here you can whitelist certain characters in the slug.
| E.g. user.last_name will not remove . and _
| Note: only applies to 'heading' settings 'true' && 'slugged'
|
*/
'slug_whitelist' => '._',
/*
|--------------------------------------------------------------------------
| Include Charts during import
|--------------------------------------------------------------------------
*/
'includeCharts' => false,
/*
|--------------------------------------------------------------------------
| Sheet heading conversion
|--------------------------------------------------------------------------
|
| Convert headings to ASCII
| Note: only applies to 'heading' settings 'true' && 'slugged'
|
*/
'to_ascii' => true,
/*
|--------------------------------------------------------------------------
| Import encoding
|--------------------------------------------------------------------------
*/
'encoding' => [
'input' => 'UTF-8',
'output' => 'UTF-8'
],
/*
|--------------------------------------------------------------------------
| Calculate
|--------------------------------------------------------------------------
|
| By default cells with formulas will be calculated.
|
*/
'calculate' => true,
/*
|--------------------------------------------------------------------------
| Ignore empty cells
|--------------------------------------------------------------------------
|
| By default empty cells are not ignored
|
*/
'ignoreEmpty' => true,
/*
|--------------------------------------------------------------------------
| Force sheet collection
|--------------------------------------------------------------------------
|
| For a sheet collection even when there is only 1 sheets.
| When set to false and only 1 sheet found, the parsed file will return
| a row collection instead of a sheet collection.
| When set to true, it will return a sheet collection instead.
|
*/
'force_sheets_collection' => false,
/*
|--------------------------------------------------------------------------
| Date format
|--------------------------------------------------------------------------
|
| The format dates will be parsed to
|
*/
'dates' => [
/*
|--------------------------------------------------------------------------
| Enable/disable date formatting
|--------------------------------------------------------------------------
*/
'enabled' => true,
/*
|--------------------------------------------------------------------------
| Default date format
|--------------------------------------------------------------------------
|
| If set to false, a carbon object will return
|
*/
'format' => false,
/*
|--------------------------------------------------------------------------
| Date columns
|--------------------------------------------------------------------------
*/
'columns' => []
],
/*
|--------------------------------------------------------------------------
| Import sheets by config
|--------------------------------------------------------------------------
*/
'sheets' => [
/*
|--------------------------------------------------------------------------
| Example sheet
|--------------------------------------------------------------------------
|
| Example sheet "test" will grab the firstname at cell A2
|
*/
'test' => [
'firstname' => 'A2'
]
]
],
'views' => [
/*
|--------------------------------------------------------------------------
| Styles
|--------------------------------------------------------------------------
|
| The default styles which will be used when parsing a view
|
*/
'styles' => [
/*
|--------------------------------------------------------------------------
| Table headings
|--------------------------------------------------------------------------
*/
'th' => [
'font' => [
'bold' => true,
'size' => 12,
]
],
/*
|--------------------------------------------------------------------------
| Strong tags
|--------------------------------------------------------------------------
*/
'strong' => [
'font' => [
'bold' => true,
'size' => 12,
]
],
/*
|--------------------------------------------------------------------------
| Bold tags
|--------------------------------------------------------------------------
*/
'b' => [
'font' => [
'bold' => true,
'size' => 12,
]
],
/*
|--------------------------------------------------------------------------
| Italic tags
|--------------------------------------------------------------------------
*/
'i' => [
'font' => [
'italic' => true,
'size' => 12,
]
],
/*
|--------------------------------------------------------------------------
| Heading 1
|--------------------------------------------------------------------------
*/
'h1' => [
'font' => [
'bold' => true,
'size' => 24,
]
],
/*
|--------------------------------------------------------------------------
| Heading 2
|--------------------------------------------------------------------------
*/
'h2' => [
'font' => [
'bold' => true,
'size' => 18,
]
],
/*
|--------------------------------------------------------------------------
| Heading 3
|--------------------------------------------------------------------------
*/
'h3' => [
'font' => [
'bold' => true,
'size' => 13.5,
]
],
/*
|--------------------------------------------------------------------------
| Heading 4
|--------------------------------------------------------------------------
*/
'h4' => [
'font' => [
'bold' => true,
'size' => 12,
]
],
/*
|--------------------------------------------------------------------------
| Heading 5
|--------------------------------------------------------------------------
*/
'h5' => [
'font' => [
'bold' => true,
'size' => 10,
]
],
/*
|--------------------------------------------------------------------------
| Heading 6
|--------------------------------------------------------------------------
*/
'h6' => [
'font' => [
'bold' => true,
'size' => 7.5,
]
],
/*
|--------------------------------------------------------------------------
| Hyperlinks
|--------------------------------------------------------------------------
*/
'a' => [
'font' => [
'underline' => true,
'color' => ['argb' => 'FF0000FF'],
]
],
/*
|--------------------------------------------------------------------------
| Horizontal rules
|--------------------------------------------------------------------------
*/
'hr' => [
'borders' => [
'bottom' => [
'style' => 'thin',
'color' => ['FF000000']
],
]
]
]
]
);

View File

@ -115,7 +115,7 @@ return [
|
*/
'allowed' => ['en-GB', 'de-DE', 'es-ES', 'fa-IR', 'fr-FR', 'pt-BR', 'ru-RU', 'sq-AL', 'tr-TR', 'zh-TW'],
'allowed' => ['en-GB', 'de-DE', 'es-ES', 'fa-IR', 'fr-FR', 'nl-NL', 'pt-BR', 'ru-RU', 'sq-AL', 'tr-TR', 'vi-VN', 'zh-TW'],
/*
|--------------------------------------------------------------------------

View File

@ -35,6 +35,7 @@ class Roles extends Seeder
'auth-permissions' => 'c,r,u,d',
'auth-profile' => 'r,u',
'companies-companies' => 'c,r,u,d',
'common-import' => 'c',
'items-items' => 'c,r,u,d',
'incomes-invoices' => 'c,r,u,d',
'incomes-revenues' => 'c,r,u,d',
@ -64,6 +65,7 @@ class Roles extends Seeder
'admin-panel' => 'r',
'auth-profile' => 'r,u',
'companies-companies' => 'c,r,u,d',
'common-import' => 'c',
'items-items' => 'c,r,u,d',
'incomes-invoices' => 'c,r,u,d',
'incomes-revenues' => 'c,r,u,d',

View File

@ -6,6 +6,14 @@
* @link https://akaunting.com
*/
// Define minimum supported PHP version
define('AKAUNTING_PHP', '5.6.4');
// Check PHP version
if (version_compare(PHP_VERSION, AKAUNTING_PHP, '<')) {
die('Your host needs to use PHP ' . AKAUNTING_PHP . ' or higher to run Akaunting');
}
// Register the auto-loader
require(__DIR__.'/bootstrap/autoload.php');

View File

@ -10,4 +10,7 @@ return [
'order' => 'Order',
'payment_gateways' => 'Offline Payment Methods',
'confirm' => 'Confirm',
'loading' => 'Loading',
];

View File

@ -3,82 +3,84 @@
@section('title', trans('offlinepayment::offlinepayment.offlinepayment'))
@section('content')
<div class="col-md-4 no-padding-left">
<div class="box box-success">
<div class="box-header with-border">
<h3 class="box-title">{{ trans('offlinepayment::offlinepayment.add_new') }}</h3>
<!-- /.box-tools -->
</div>
<!-- /.box-header -->
{!! Form::open(['url' => 'apps/offlinepayment/settings', 'files' => true, 'role' => 'form']) !!}
<div class="box-body">
<div id="install-loading"></div>
{{ Form::textGroup('name', trans('general.name'), 'id-card-o', ['required' => 'required'], null, 'col-md-12') }}
{{ Form::textGroup('code', trans('offlinepayment::offlinepayment.code'), 'key', ['required' => 'required'], null, 'col-md-12') }}
{{ Form::radioGroup('customer', trans('offlinepayment::offlinepayment.customer'), '', ['required' => 'required'], 0, 'col-md-12') }}
{{ Form::textGroup('order', trans('offlinepayment::offlinepayment.order'), 'sort', [], null, 'col-md-12') }}
{{ Form::textareaGroup('description', trans('general.description')) }}
</div>
<!-- /.box-body -->
<div class="box-footer">
{{ Form::saveButtons('apps/offlinepayment/settings') }}
</div>
<!-- /.box-footer -->
{!! Form::close() !!}
</div>
<!-- /.box -->
</div>
<div class="col-md-8 no-padding-left">
<!-- Default box -->
<div class="box box-success">
<div class="box-header with-border">
<h3 class="box-title">{{ trans('offlinepayment::offlinepayment.payment_gateways') }}</h3>
<!-- /.box-tools -->
</div>
<!-- /.box-header -->
<div class="box-body">
<div class="table table-responsive">
<table class="table table-striped table-hover" id="tbl-items">
<thead>
<tr>
<th class="col-md-3">{{ trans('general.name') }}</th>
<th class="col-md-4">{{ trans('offlinepayment::offlinepayment.code') }}</th>
<th class="col-md-2 text-center">{{ trans('offlinepayment::offlinepayment.order') }}</th>
<th class="col-md-3">{{ trans('general.actions') }}</th>
</tr>
</thead>
<tbody>
@if($items)
@foreach($items as $item)
<tr id="method-{{ $item->code }}">
<td>{{ $item->name }}</td>
<td>{{ $item->code }}</td>
<td class="text-center">{{ $item->order }}</td>
<td>
<button type="button" class="btn btn-primary btn-xs method-edit" id="edit-{{ $item->code }}" title="{{ trans('general.edit') }}"><i class="fa fa-pencil-square-o" aria-hidden="true"></i> {{ trans('general.edit') }}</button>
<button type="button" class="btn btn-danger btn-xs method-delete" id="delete-{{ $item->code }}" title="{{ trans('general.delete') }}"><i class="fa fa-trash-o" aria-hidden="true"></i> {{ trans('general.delete') }}</button>
</td>
</tr>
@endforeach
@else
@endif
</tbody>
</table>
<div class="row">
<div class="col-md-4">
<div class="box box-success">
<div class="box-header with-border">
<h3 class="box-title">{{ trans('offlinepayment::offlinepayment.add_new') }}</h3>
<!-- /.box-tools -->
</div>
<!-- /.box-header -->
{!! Form::open(['url' => 'apps/offlinepayment/settings', 'files' => true, 'role' => 'form']) !!}
<div class="box-body">
<div id="install-loading"></div>
{{ Form::textGroup('name', trans('general.name'), 'id-card-o', ['required' => 'required'], null, 'col-md-12') }}
{{ Form::textGroup('code', trans('offlinepayment::offlinepayment.code'), 'key', ['required' => 'required'], null, 'col-md-12') }}
{{ Form::radioGroup('customer', trans('offlinepayment::offlinepayment.customer'), '', ['required' => 'required'], 0, 'col-md-12') }}
{{ Form::textGroup('order', trans('offlinepayment::offlinepayment.order'), 'sort', [], null, 'col-md-12') }}
{{ Form::textareaGroup('description', trans('general.description')) }}
</div>
<!-- /.box-body -->
<div class="box-footer">
{{ Form::saveButtons('apps/offlinepayment/settings') }}
</div>
<!-- /.box-footer -->
{!! Form::close() !!}
</div>
<!-- /.box-body -->
<!-- /.box -->
</div>
<div class="col-md-8">
<!-- Default box -->
<div class="box box-success">
<div class="box-header with-border">
<h3 class="box-title">{{ trans('offlinepayment::offlinepayment.payment_gateways') }}</h3>
<!-- /.box-tools -->
</div>
<!-- /.box-header -->
<div class="box-body">
<div class="table table-responsive">
<table class="table table-striped table-hover" id="tbl-items">
<thead>
<tr>
<th class="col-md-3">{{ trans('general.name') }}</th>
<th class="col-md-4">{{ trans('offlinepayment::offlinepayment.code') }}</th>
<th class="col-md-2 text-center">{{ trans('offlinepayment::offlinepayment.order') }}</th>
<th class="col-md-3">{{ trans('general.actions') }}</th>
</tr>
</thead>
<tbody>
@if($items)
@foreach($items as $item)
<tr id="method-{{ $item->code }}">
<td>{{ $item->name }}</td>
<td>{{ $item->code }}</td>
<td class="text-center">{{ $item->order }}</td>
<td>
<button type="button" class="btn btn-primary btn-xs method-edit" id="edit-{{ $item->code }}" title="{{ trans('general.edit') }}"><i class="fa fa-pencil-square-o" aria-hidden="true"></i> {{ trans('general.edit') }}</button>
<button type="button" class="btn btn-danger btn-xs method-delete" id="delete-{{ $item->code }}" title="{{ trans('general.delete') }}"><i class="fa fa-trash-o" aria-hidden="true"></i> {{ trans('general.delete') }}</button>
</td>
</tr>
@endforeach
@else
@endif
</tbody>
</table>
</div>
</div>
<!-- /.box-body -->
</div>
<!-- /.box -->
</div>
<!-- /.box -->
</div>
@endsection

4
public/css/app.css vendored
View File

@ -453,6 +453,10 @@ ul.add-new.nav.navbar-nav.pull-left {
overflow-x: visible;
}
.margin-top {
margin-top: 20px;
}
@media only screen and (max-width : 768px) {
.main-header .add-new.nav.navbar-nav i {
margin-top: 3px;

View File

@ -0,0 +1,2 @@
"bill_number","order_number","bill_status_code","billed_at","due_at","amount","currency_code","currency_rate","vendor_id","vendor_name","vendor_email","vendor_tax_number","vendor_phone","vendor_address","notes","attachment","created_at","updated_at","deleted_at"
"987654","","received","2017-11-30","2017-12-07","10.0000","USD","1.00000000","1","Test Vendor","test@vendor.com","","","","","","2017-11-30 00:00:00","2017-11-30 00:00:00",NULL
1 bill_number order_number bill_status_code billed_at due_at amount currency_code currency_rate vendor_id vendor_name vendor_email vendor_tax_number vendor_phone vendor_address notes attachment created_at updated_at deleted_at
2 987654 received 2017-11-30 2017-12-07 10.0000 USD 1.00000000 1 Test Vendor test@vendor.com 2017-11-30 00:00:00 2017-11-30 00:00:00 NULL

View File

@ -0,0 +1,2 @@
"user_id","name","email","tax_number","phone","address","website","currency_code","enabled","created_at","updated_at","deleted_at"
"","Test Customer","test@customer.com","","","","","USD","1","2017-11-30 00:00:00","2017-11-30 00:00:00",NULL
1 user_id name email tax_number phone address website currency_code enabled created_at updated_at deleted_at
2 Test Customer test@customer.com USD 1 2017-11-30 00:00:00 2017-11-30 00:00:00 NULL

View File

@ -0,0 +1,2 @@
"invoice_number","order_number","invoice_status_code","invoiced_at","due_at","amount","currency_code","currency_rate","customer_id","customer_name","customer_email","customer_tax_number","customer_phone","customer_address","notes","attachment","created_at","updated_at","deleted_at"
"INV-00001","","sent","2017-11-30","2017-12-07","10.0000","USD","1.00000000","1","Test Customer","test@customer.com","","","","","","2017-11-30 00:00:00","2017-11-30 00:00:00",NULL
1 invoice_number order_number invoice_status_code invoiced_at due_at amount currency_code currency_rate customer_id customer_name customer_email customer_tax_number customer_phone customer_address notes attachment created_at updated_at deleted_at
2 INV-00001 sent 2017-11-30 2017-12-07 10.0000 USD 1.00000000 1 Test Customer test@customer.com 2017-11-30 00:00:00 2017-11-30 00:00:00 NULL

View File

@ -0,0 +1,2 @@
"name","sku","description","sale_price","purchase_price","quantity","category_id","tax_id","picture","enabled","created_at","updated_at","deleted_at"
"Test Item","test-item","","10.0000","5.0000","1","5","2","items/test-item.png","1","2017-11-30 00:00:00","2017-11-30 00:00:00",NULL
1 name sku description sale_price purchase_price quantity category_id tax_id picture enabled created_at updated_at deleted_at
2 Test Item test-item 10.0000 5.0000 1 5 2 items/test-item.png 1 2017-11-30 00:00:00 2017-11-30 00:00:00 NULL

View File

@ -0,0 +1,2 @@
"account_id","paid_at","amount","currency_code","currency_rate","vendor_id","description","category_id","payment_method","reference","attachment","created_at","updated_at","deleted_at"
"1","2017-11-30","10.0000","USD","1.00000000","1","","4","offlinepayment.cash.1","","","2017-11-30 00:00:00","2017-11-30 00:00:00",NULL
1 account_id paid_at amount currency_code currency_rate vendor_id description category_id payment_method reference attachment created_at updated_at deleted_at
2 1 2017-11-30 10.0000 USD 1.00000000 1 4 offlinepayment.cash.1 2017-11-30 00:00:00 2017-11-30 00:00:00 NULL

View File

@ -0,0 +1,2 @@
"account_id","paid_at","amount","currency_code","currency_rate","customer_id","description","category_id","payment_method","reference","attachment","created_at","updated_at","deleted_at"
"1","2017-11-30","10.0000","USD","1.00000000","","","3","offlinepayment.cash.1","","revenues/test-revenue.pdf","2017-11-30 00:00:00","2017-11-30 00:00:00",NULL
1 account_id paid_at amount currency_code currency_rate customer_id description category_id payment_method reference attachment created_at updated_at deleted_at
2 1 2017-11-30 10.0000 USD 1.00000000 3 offlinepayment.cash.1 revenues/test-revenue.pdf 2017-11-30 00:00:00 2017-11-30 00:00:00 NULL

View File

@ -0,0 +1,2 @@
"user_id","name","email","tax_number","phone","address","website","currency_code","enabled","created_at","updated_at","deleted_at"
"","Test Vendor","test@vendor.com","","","","","USD","1","2017-11-30 00:00:00","2017-11-30 00:00:00",NULL
1 user_id name email tax_number phone address website currency_code enabled created_at updated_at deleted_at
2 Test Vendor test@vendor.com USD 1 2017-11-30 00:00:00 2017-11-30 00:00:00 NULL

View File

@ -10,6 +10,5 @@ return [
'bank_phone' => 'Bank Telefonnummer',
'bank_address' => 'Bank Adresse',
'default_account' => 'Standardkonto',
'all' => 'Alle Konten',
];

View File

@ -24,6 +24,7 @@ return [
],
'failed' => 'Diese Anmeldeinformationen entsprechen nicht unseren Aufzeichnungen.',
'disabled' => 'Dieses Konto ist deaktiviert! Bitte kontaktieren Sie den Systemadministrator.',
'throttle' => 'Zu viele fehlgeschlagene Anmeldeversuche. Bitte versuchen Sie es erneut in :seconds Sekunden.',
];

View File

@ -23,14 +23,19 @@ return [
'histories' => 'Historie',
'payments' => 'Zahlungen',
'add_payment' => 'Zahlung hinzufügen',
'mark_received' => 'Als erhalten markieren',
'download_pdf' => 'PDF herunterladen',
'send_mail' => 'E-Mail senden',
'status' => [
'new' => 'Neu',
'updated' => 'Aktualisiert',
'draft' => 'Entwurf',
'received' => 'Erhalten',
'partial' => 'Teilweise',
'paid' => 'Bezahlt',
],
'messages' => [
'received' => 'Rechnung als erfolgreich erhalten markiert!',
],
];

View File

@ -1,5 +0,0 @@
<?php
return [
'all' => 'Alle Kunden',
];

View File

@ -0,0 +1,11 @@
<?php
return [
'allow_login' => 'Login erlauben?',
'user_created' => 'Benutzer angelegt',
'error' => [
'email' => 'Diese Email wurde bereits benutzt.'
]
];

View File

@ -11,7 +11,7 @@ return [
'currencies_gbp' => 'Britisches Pfund',
'currencies_try' => 'Türkische Lira',
'taxes_exempt' => 'Steuerbefreit',
'taxes_normal' => 'Normal',
'taxes_normal' => 'Normale Steuer',
'taxes_sales' => 'Umsatzsteuer',
];

View File

@ -35,6 +35,7 @@ return [
'languages' => 'Sprache | Sprachen',
'updates' => 'Aktualisierung| Aktualisierungen',
'numbers' => 'Nummer| Nummern',
'statuses' => 'Status | Stati',
'dashboard' => 'Kontrollzentrum',
'banking' => 'Banking',
@ -76,22 +77,20 @@ return [
'color' => 'Farbe',
'save' => 'Speichern',
'cancel' => 'Abbrechen',
'status' => 'Status',
'from' => 'Von',
'to' => 'An',
'print' => 'Drucken',
'search' => 'Suchen',
'search_placeholder' => 'Typ um zu suchen..',
'filter' => 'Filter',
'create_user' => 'Benutzer erstellen',
'created_user' => 'Erstellter Benutzer',
'all_statuses' => 'Alle Status',
'bank' => 'Überweisungen',
'cash' => 'Bar',
'paypal' => 'PayPal',
'help' => 'Hilfe',
'all' => 'Alle',
'all_type' => 'Alle :Typ',
'upcoming' => 'Anstehend',
'created' => 'Erstellt',
'id' => 'ID',
'more_actions' => 'Weitere Aktionen',
'duplicate' => 'Duplikat',
'title' => [
'new' => 'Neu :type',

View File

@ -8,6 +8,7 @@ return [
'counter' => '{0} Sie haben keine Benachrichtigungen|{1} Sie haben :count Benachrichtigung|[2,*] Sie haben :count Benachrichtigungen',
'overdue_invoices' => '{1} :count überfällige Rechnung|[2,*] :count überfällige Rechnungen',
'upcoming_bills' => '{1} :count bevorstehende Rechnung|[2,*] :count bevorstehende Rechnungen',
'items_stock' => '{1}:count Artikel ausverkauft|[2,*]:count Artikel ausverkauft',
'view_all' => 'Alle anzeigen'
],

View File

@ -0,0 +1,9 @@
<?php
return [
'import' => 'Import',
'title' => 'Import :type',
'message' => 'Allowed file types: CSV, XLS. Please, <a target="_blank" href=":link"><strong>download</strong></a> the sample file.',
];

View File

@ -22,6 +22,8 @@ return [
'histories' => 'Historie',
'payments' => 'Zahlungen',
'add_payment' => 'Zahlung hinzufügen',
'mark_paid' => 'Als bezahlt markieren',
'mark_sent' => 'Als versendet markieren',
'download_pdf' => 'PDF herunterladen',
'send_mail' => 'E-Mail senden',
@ -34,4 +36,14 @@ return [
'paid' => 'Bezahlt',
],
'messages' => [
'email_sent' => 'Rechnungsemail wurde erfolgreich versendet!',
'marked_sent' => 'Rechnung als erfolgreich versendet markiert!',
],
'notification' => [
'message' => 'Sie erhalten diese Email, da eine Rechnung in Höhe von :amount für den Kunden :customer ansteht.',
'button' => 'Jetzt bezahlen',
],
];

View File

@ -7,4 +7,9 @@ return [
'purchase_price' => 'Einkaufspreis',
'sku' => 'SKU',
'notification' => [
'message' => 'Sie erhalten diese EMail, da :name nur noch begrenzt verfügbar ist.',
'button' => 'Jetzt ansehen',
],
];

View File

@ -6,12 +6,17 @@ return [
'added' => ':type hinzugefügt!',
'updated' => ':type aktualisiert!',
'deleted' => ':type gelöscht!',
'duplicated' => ':type dupliziert!',
'imported' => ':type imported!',
],
'error' => [
'not_user_company' => 'Fehler: Sie haben nicht die Berechtigung um diese Firma zu verwalten!',
'customer' => 'Fehler: Sie können diesen Benutzer nicht erstellen! :name benutzt diese Email bereits.',
'no_file' => 'Error: No file selected!',
],
'warning' => [
'deleted' => 'Achtung: Sie können :type nicht löschen, da :text',
'deleted' => 'Warnung: Sie dürfen <b>:name</b> nicht löschen, da :text dazu in Bezug steht.',
'disabled' => 'Warnung: Sie dürfen <b>:name</b> nicht deaktivieren, da :text dazu in Bezug steht.',
],
];

View File

@ -2,41 +2,42 @@
return [
'api_token' => 'Token',
'enter_api_token' => 'Geben Sie Ihren API-Schlüssel ein',
'top_paid' => 'Top bezahlt',
'new' => 'Neu',
'top_free' => 'Top kostenlos',
'free' => 'Kostenlos',
'install' => 'Installieren',
'buy_now' => 'Jetzt kaufen',
'faq' => 'Häufige Fragen / FAQ',
'changelog' => 'Changelog',
'installed' => 'Changelog',
'uninstalled' => 'Changelog',
'title' => 'API Token',
'api_token' => 'Token',
'top_paid' => 'Top bezahlt',
'new' => 'Neu',
'top_free' => 'Top kostenlos',
'free' => 'Kostenlos',
'install' => 'Installieren',
'buy_now' => 'Jetzt kaufen',
'faq' => 'Häufige Fragen / FAQ',
'changelog' => 'Changelog',
'installed' => 'Installiert',
'uninstalled' => 'Deinstalliert',
'token_link' => '<a href="https://akaunting.com/tokens" target="_blank">Hier klicken</a> um Ihren API Token zu erhalten.',
'enabled' => ':module Modul aktiviert',
'disabled' => ':module Modul deaktiviert',
'enabled' => 'Anwendung :module aktiviert',
'disabled' => 'Anwendung :module deaktiviert',
'installation' => [
'header' => 'Modulinstallation',
'start' => ':module wird installiert.',
'download' => 'Lade :module Dateien herunter.',
'unzip' => 'Extrahiere :module Dateien.',
'install' => 'Lade :module Dateien hoch.',
'header' => 'Modulinstallation',
'start' => ':module wird installiert.',
'download' => 'Lade :module Dateien herunter.',
'unzip' => 'Extrahiere :module Dateien.',
'install' => 'Lade :module Dateien hoch.',
],
'history' => [
'installed' => ':module installiert',
'uninstalled' => ':module deinstallieren',
'updated' => ':module aktualisiert',
'enabled' => ':module aktiviert',
'disabled' => ':module deaktiviert',
'installed' => ':module installiert',
'uninstalled' => ':module deinstallieren',
'updated' => ':module aktualisiert',
'enabled' => ':module aktiviert',
'disabled' => ':module deaktiviert',
],
'button' => [
'uninstall' => 'Deinstallieren',
'disable' => 'Deaktivieren',
'enable' => 'Aktivieren',
'uninstall' => 'Deinstallieren',
'disable' => 'Deaktivieren',
'enable' => 'Aktivieren',
],
];

View File

@ -24,10 +24,10 @@ return [
],
'invoice' => [
'tab' => 'Rechnung',
'prefix' => 'Rechnung-Präfix',
'digit' => 'Rechnungsnummer Zahl',
'start' => 'Rechnungsnummer Start bei',
'logo' => 'Rechnung-Logo',
'prefix' => 'Zahlenprefix',
'digit' => 'Nachkommastellen',
'next' => 'Nächste Nummer',
'logo' => 'Logo',
],
'default' => [
'tab' => 'Standardeinstellungen',

View File

@ -6,7 +6,10 @@ return [
'latest_version' => 'Neueste Version',
'update' => 'Update Akaunting auf Version :version',
'changelog' => 'Changelog',
'check' => 'Prüfen',
'new_core' => 'Eine aktualisierte Version Akaunting ist verfügbar.',
'latest_core' => 'Glückwunsch! Sie nutzen die aktuellste Version von Akaunting. Zukünftige Sicherheitsupdates werden automatisch angewendet.',
'success' => 'Der Updateprozess wurde erfolgreich ausgeführt.',
'error' => 'Updateprozess fehlgeschlagen, bitte erneut versuchen.',
];

View File

@ -1,9 +0,0 @@
<?php
return [
'all' => 'All Customers',
'error' => [
'email' => 'The email has already been taken.'
]
];

View File

@ -0,0 +1,11 @@
<?php
return [
'allow_login' => 'Allow Login?',
'user_created' => 'User Created',
'error' => [
'email' => 'The email has already been taken.'
]
];

View File

@ -83,8 +83,6 @@ return [
'search' => 'Search',
'search_placeholder' => 'Type to search..',
'filter' => 'Filter',
'create_user' => 'Create User',
'created_user' => 'Created User',
'help' => 'Help',
'all' => 'All',
'all_type' => 'All :type',
@ -92,6 +90,7 @@ return [
'created' => 'Created',
'id' => 'ID',
'more_actions' => 'More Actions',
'duplicate' => 'Duplicate',
'title' => [
'new' => 'New :type',

View File

@ -0,0 +1,9 @@
<?php
return [
'import' => 'Import',
'title' => 'Import :type',
'message' => 'Allowed file types: CSV, XLS. Please, <a target="_blank" href=":link"><strong>download</strong></a> the sample file.',
];

View File

@ -17,7 +17,6 @@ return [
],
'requirements' => [
'php_version' => 'PHP 5.6.4 or above needs to be used!',
'enabled' => ':feature needs to be enabled!',
'disabled' => ':feature needs to be disabled!',
'extension' => ':extension extension needs to be loaded!',

View File

@ -6,10 +6,13 @@ return [
'added' => ':type added!',
'updated' => ':type updated!',
'deleted' => ':type deleted!',
'duplicated' => ':type duplicated!',
'imported' => ':type imported!',
],
'error' => [
'not_user_company' => 'Error: You are not allowed to manage this company!',
'customer' => 'Error: You can not created user! :name use this email address.',
'no_file' => 'Error: No file selected!',
],
'warning' => [
'deleted' => 'Warning: You are not allowed to delete <b>:name</b> because it has :text related.',

View File

@ -10,6 +10,5 @@ return [
'bank_phone' => 'Teléfono Banco',
'bank_address' => 'Dirección del Banco',
'default_account' => 'Cuenta Predeterminada',
'all' => 'Todas las cuentas',
];

View File

@ -24,6 +24,7 @@ return [
],
'failed' => 'Estas credenciales no coinciden con nuestros registros.',
'disabled' => 'Esta cuenta está deshabilitada. Por favor, póngase en contacto con el administrador del sistema.',
'throttle' => 'Demasiados intentos fallidos de inicio de sesión. Por favor vuelva a intentarlo después de %s segundos.',
];

View File

@ -23,14 +23,19 @@ return [
'histories' => 'Historial',
'payments' => 'Pagos',
'add_payment' => 'Añadir pago',
'mark_received' => 'Marcar como recibido',
'download_pdf' => 'Descargar PDF',
'send_mail' => 'Enviar Email',
'status' => [
'new' => 'Nuevo',
'updated' => 'Actualizado',
'draft' => 'Borrador',
'received' => 'Recibido',
'partial' => 'Parcial',
'paid' => 'Pagado',
],
'messages' => [
'received' => 'Recibo marcado como recibido con éxito!',
],
];

View File

@ -1,5 +0,0 @@
<?php
return [
'all' => 'Todos los clientes',
];

View File

@ -0,0 +1,11 @@
<?php
return [
'allow_login' => '¿Permitir inicio de sesión?',
'user_created' => 'Usuario Creado',
'error' => [
'email' => 'Ese email ya está en uso.'
]
];

View File

@ -11,7 +11,7 @@ return [
'currencies_gbp' => 'Libra esterlina',
'currencies_try' => 'Libra turca',
'taxes_exempt' => 'Exentos de impuestos',
'taxes_normal' => 'Normal',
'taxes_normal' => 'Impuesto Normal',
'taxes_sales' => 'Impuesto sobre Ventas',
];

View File

@ -35,6 +35,7 @@ return [
'languages' => 'Idioma | Idiomas',
'updates' => 'Actualización | Actualizaciones',
'numbers' => 'Número | Números',
'statuses' => 'Estado|Estados',
'dashboard' => 'Panel de Control',
'banking' => 'Banking',
@ -76,23 +77,20 @@ return [
'color' => 'Color',
'save' => 'Guardar',
'cancel' => 'Cancelar',
'status' => 'Estado',
'from' => 'De ',
'to' => 'Para',
'print' => 'Imprimir',
'search' => 'Buscar',
'search_placeholder' => 'Escriba para buscar..',
'filter' => 'Filtro',
'create_user' => 'Crear Usuario',
'created_user' => 'Usuario Creado',
'all_statuses' => 'Todos los Estados',
'bank' => 'Transferencia Bancaria',
'cash' => 'Efectivo',
'paypal' => 'PayPal',
'help' => 'Ayuda',
'all' => 'Todos',
'all_type' => 'Todos :type',
'upcoming' => 'Próximos',
'created' => 'Creado',
'id' => 'ID',
'more_actions' => 'Más acciones',
'duplicate' => 'Duplicar',
'title' => [
'new' => 'Nuevo :type',

View File

@ -7,7 +7,8 @@ return [
'notifications' => [
'counter' => '{0} No tiene notificaciones |{1} Tiene :count notificación | [2,*] Tiene :count notificaciones',
'overdue_invoices' => '{1} :count factura vencida | [2,*] :count facturas vencidas',
'upcoming_bills' => '{1} :count factura vencida|[2,*] :count facturas vencidas',
'upcoming_bills' => '{1} :count recibo por vencer|[2,*] :count recibo por vencer',
'items_stock' => '{1} :count artículo sin stock|[2,*] :count artículos sin stock',
'view_all' => 'Ver todas'
],

View File

@ -0,0 +1,9 @@
<?php
return [
'import' => 'Import',
'title' => 'Import :type',
'message' => 'Allowed file types: CSV, XLS. Please, <a target="_blank" href=":link"><strong>download</strong></a> the sample file.',
];

View File

@ -22,6 +22,8 @@ return [
'histories' => 'Historias',
'payments' => 'Pagos',
'add_payment' => 'Añadir pago',
'mark_paid' => 'Marcar Como Pagada',
'mark_sent' => 'Marcar Como Enviada',
'download_pdf' => 'Descargar PDF',
'send_mail' => 'Enviar Email',
@ -34,4 +36,14 @@ return [
'paid' => 'Pagado',
],
'messages' => [
'email_sent' => 'El email de la factura se ha enviado correctamente!',
'marked_sent' => 'Factura marcada como enviada con éxito!',
],
'notification' => [
'message' => 'Usted está recibiendo este correo electrónico porque usted tiene una factura de :amount para el cliente :cliente .',
'button' => 'Pagar Ahora',
],
];

View File

@ -7,4 +7,9 @@ return [
'purchase_price' => 'Precio de Compra',
'sku' => 'SKU',
'notification' => [
'message' => 'Usted está recibiendo este correo electrónico porque el producto :name se está quedando sin stock.',
'button' => 'Ver ahora',
],
];

View File

@ -6,12 +6,17 @@ return [
'added' => ':type creado!',
'updated' => ':type actualizado!',
'deleted' => ':type borrado!',
'duplicated' => ': type duplicado!',
'imported' => ':type imported!',
],
'error' => [
'not_user_company' => 'Error: No tiene permisos para administrar esta empresa!',
'customer' => 'Error: No se puede crear el usuario! :name usa esta dirección de correo electrónico.',
'no_file' => 'Error: No file selected!',
],
'warning' => [
'deleted' => 'Advertencia: No puede borrar :type porque tiene :text',
'deleted' => 'Advertencia: No puede borrar <b>:name</b> porque tiene :text relacionado.',
'disabled' => 'Advertencia: No se permite desactivar <b>:name</b> porque tiene :text relacionado.',
],
];

View File

@ -16,8 +16,8 @@ return [
'uninstalled' => 'Desinstalado',
'token_link' => 'Haga <a href="https://akaunting.com/tokens" target="_blank">Click aquí</a> para obtener su API token.',
'enabled' => ':module módulo habilitado',
'disabled' => ':module módulo deshabilitado',
'enabled' => ':module habilitado',
'disabled' => ':module deshabilitado',
'installation' => [
'header' => 'Instalación del módulo',

View File

@ -13,7 +13,7 @@ return [
|
*/
'password' => 'Los passwords deben tener mínimo 6 caracteres y coincidir.',
'password' => 'Las contraseñas deben tener mínimo 6 caracteres y coincidir con la confirmación.',
'reset' => 'Su contraseña ha sido reestablecida!',
'sent' => 'Hemos enviado un enlace para resetear su contraseña!',
'token' => 'Ese token de contraseña ya no es válido.',

View File

@ -24,10 +24,10 @@ return [
],
'invoice' => [
'tab' => 'Factura',
'prefix' => 'Prefijo de Factura',
'digit' => 'Dígitos del Nº de Factura',
'start' => 'Número de Factura Inicial',
'logo' => 'Logotipo de la factura',
'prefix' => 'Prefijo de número',
'digit' => 'Número de cifras',
'next' => 'Siguiente número',
'logo' => 'Logo',
],
'default' => [
'tab' => 'Por defecto',
@ -57,7 +57,7 @@ return [
'tab' => 'Programación',
'send_invoice' => 'Enviar Recordatorio de Factura',
'invoice_days' => 'Enviar después del vencimiento',
'send_bill' => 'Enviar Recordatorio de Factura',
'send_bill' => 'Enviar Recordatorio de Recibo',
'bill_days' => 'Enviar Antes del Vencimiento',
'cron_command' => 'Comando Cron',
'schedule_time' => 'Hora de ejecución',

View File

@ -9,5 +9,7 @@ return [
'check' => 'Comprobar',
'new_core' => 'Una versión actualizada de Akaunting está disponible.',
'latest_core' => '¡Felicidades! Tienes la última versión de Akaunting. Las actualizaciones de seguridad futuras se aplicarán automáticamente.',
'success' => 'El proceso de actualización se ha completado con éxito.',
'error' => 'El proceso de actualización ha fallado, por favor inténtelo de nuevo.',
];

View File

@ -16,7 +16,7 @@ return [
'accepted' => ':attribute debe ser aceptado.',
'active_url' => ':attribute no es una URL correcta.',
'after' => ':attribute debe ser posterior a :date.',
'after_or_equal' => ':attribute debe ser posterior a :date.',
'after_or_equal' => ':attribute debe ser una fecha posterior o igual a :date.',
'alpha' => ':attribute solo acepta letras.',
'alpha_dash' => ':attribute solo acepta letras, números y guiones.',
'alpha_num' => ':attribute solo acepta letras y números.',
@ -24,7 +24,7 @@ return [
'before' => ':attribute debe ser anterior a :date.',
'before_or_equal' => ':attribute debe ser anterior o igual a :date.',
'between' => [
'numeric' => ':attribute debe estar entre :min - :max.',
'numeric' => ':attribute debe estar entre :min y :max.',
'file' => ':attribute debe estar entre :min - :max kilobytes.',
'string' => ':attribute debe estar entre :min - :max caracteres.',
'array' => ':attribute debe tener entre :min y :max items.',

View File

@ -10,7 +10,7 @@ return [
'forgot_password' => 'گذرواژه خود را فراموش کرده ام',
'reset_password' => 'تنظیم مجدد رمز عبور',
'enter_email' => 'آدرس ایمیل خود را وارد نمایید',
'current_email' => 'ایمیل',
'current_email' => 'ایمیل فعلی',
'reset' => 'بازنشانی',
'never' => 'هرگز',
'password' => [
@ -20,7 +20,7 @@ return [
'new_confirm' => 'تکرار رمز عبور',
],
'error' => [
'self_delete' => 'خطا: نمی توانید خودتان حذف کنید!'
'self_delete' => 'خطا: نمیتوانید خودتان حذف کنید!'
],
'failed' => 'مشخصات وارد شده با اطلاعات ما سازگار نیست.',

View File

@ -1,5 +0,0 @@
<?php
return [
'all' => 'تمام مشتریان',
];

View File

@ -0,0 +1,11 @@
<?php
return [
'allow_login' => 'مجاز به ورود به سیستم؟',
'user_created' => 'کاربر ایجاد شده',
'error' => [
'email' => 'این ایمیل قبلا انتخاب شده است.'
]
];

View File

@ -83,8 +83,6 @@ return [
'search' => 'جستجو',
'search_placeholder' => 'جستجو...',
'filter' => 'فیلتر',
'create_user' => 'ایجاد کاربر',
'created_user' => 'کاربر ایجاد شده',
'help' => 'راهنما',
'all' => 'همه',
'all_type' => 'همه :type',
@ -92,6 +90,7 @@ return [
'created' => 'ایجاد شده',
'id' => 'شناسه',
'more_actions' => 'اقدامات بیشتر',
'duplicate' => 'تکراری',
'title' => [
'new' => ':type جدید',

View File

@ -8,6 +8,7 @@ return [
'counter' => '{0} شما اطلاعیه ای ندارید |{1} شما:count اطلاعیه دارید | [2, *] شما :coun اطلاعیه دارید',
'overdue_invoices' => '{1} :count فاکتور سررسید شده دارید | [2, *]: :count فاکتور سررسید شده دارید',
'upcoming_bills' => '{1}:count صورتحساب دارید | [2, *]:count صورتحساب دارید',
'items_stock' => '{1} :count موجود است | [2,*] :count موجود است',
'view_all' => 'نمایش همه'
],

View File

@ -0,0 +1,9 @@
<?php
return [
'import' => 'Import',
'title' => 'Import :type',
'message' => 'Allowed file types: CSV, XLS. Please, <a target="_blank" href=":link"><strong>download</strong></a> the sample file.',
];

View File

@ -37,7 +37,13 @@ return [
],
'messages' => [
'email_sent' => 'فاکتور با موفقت ارسال شده است!',
'marked_sent' => 'فاکتور با موفقت ارسال شده است!',
],
'notification' => [
'message' => 'شما این ایمیل را دریافت کردید به دلیل اینکه مشتری شما :customer مقدار :amount فاکتور دارد.',
'button' => 'پرداخت',
],
];

View File

@ -7,4 +7,9 @@ return [
'purchase_price' => 'قیمت خرید',
'sku' => 'کد کالا',
'notification' => [
'message' => 'شما به این دلیل این ایمیل را دریافت کرده‌اید که موجودی :name در حال اتمام است.',
'button' => 'مشاهده',
],
];

View File

@ -4,11 +4,15 @@ return [
'success' => [
'added' => ':type اضافه شد!',
'updated' => ':type بروز شد!',
'updated' => ':type بهروز شد!',
'deleted' => ':type حذف شد!',
'duplicated' => ':type دو عدد موجود است!',
'imported' => ':type imported!',
],
'error' => [
'not_user_company' => 'خطا:شما نمی توانید این شرکت را مدیریت کنید!',
'not_user_company' => 'خطا: شما اجازه مدیریت این شرکت را ندارید!',
'customer' => 'خطا در تعریف کاربر! :name از این ایمیل استفاده می‌کند.',
'no_file' => 'Error: No file selected!',
],
'warning' => [
'deleted' => 'هشدار: شما نمی توانید <b>:name</b> را به دلیل :text حذف کنید.',

View File

@ -0,0 +1,14 @@
<?php
return [
'account_name' => 'Bedrijfsnaam',
'number' => 'Nummer',
'opening_balance' => 'Beginsaldo',
'current_balance' => 'Huidig saldo',
'bank_name' => 'Banknaam',
'bank_phone' => 'Bank telefoon',
'bank_address' => 'Adres van de Bank',
'default_account' => 'Standaard account',
];

View File

@ -0,0 +1,30 @@
<?php
return [
'profile' => 'Profiel',
'logout' => 'Afmelden',
'login' => 'Aanmelden',
'login_to' => 'Login om uw sessie te starten',
'remember_me' => 'Onthoud mijn gegevens',
'forgot_password' => 'Ik ben mijn wachtwoord vergeten',
'reset_password' => 'Herstel wachtwoord',
'enter_email' => 'Vul uw e-mailadres in',
'current_email' => 'Huidige E-mail',
'reset' => 'Resetten',
'never' => 'nooit',
'password' => [
'current' => 'Wachtwoord',
'current_confirm' => 'Wachtwoordbevestiging',
'new' => 'Nieuw Wachtwoord',
'new_confirm' => 'Wachtwoordbevestiging',
],
'error' => [
'self_delete' => 'Fout: Kan niet zelf verwijderen!'
],
'failed' => 'Deze referenties komen niet overeen met onze administratie.',
'disabled' => 'Deze account is uitgeschakeld. Alstublieft, neem dan contact op met de systeembeheerder.',
'throttle' => 'Te veel inlogpogingen. Probeer het opnieuw: seconden seconden.',
];

View File

@ -0,0 +1,41 @@
<?php
return [
'bill_number' => 'Faktuur nummer',
'bill_date' => 'Faktuurdatum',
'total_price' => 'Totale prijs',
'due_date' => 'Vervaldatum',
'order_number' => 'Ordernummer',
'bill_from' => 'Factuur van',
'quantity' => 'Hoeveelheid',
'price' => 'Prijs',
'sub_total' => 'Subtotaal',
'tax_total' => 'Totaal Btw',
'total' => 'Totaal',
'item_name' => 'Item naam',
'payment_due' => 'Te betalen voor',
'amount_due' => 'Bedrag',
'paid' => 'Betaald',
'histories' => 'Geschiedenis',
'payments' => 'Betalingen',
'add_payment' => 'Toevoegen van betaling',
'mark_received' => 'Ontvangen',
'download_pdf' => 'PDF downloaden',
'send_mail' => 'Verstuur e-mail',
'status' => [
'draft' => 'Concept',
'received' => 'Ontvangen',
'partial' => 'Gedeeltelijk',
'paid' => 'Betaald',
],
'messages' => [
'received' => 'Faktuur gemarkeerd als succesvol ontvangen!',
],
];

View File

@ -0,0 +1,13 @@
<?php
return [
'domain' => 'Domein',
'logo' => 'Logo',
'manage' => 'Bedrijven Beheren',
'all' => 'Alle bedrijven',
'error' => [
'delete_active' => 'Fout: Kan niet verwijderen van actieve bedrijf, gelieve, het eerste veranderen!',
],
];

View File

@ -0,0 +1,9 @@
<?php
return [
'code' => 'Code',
'rate' => 'Tarief',
'default' => 'Standaard Valuta',
];

View File

@ -0,0 +1,11 @@
<?php
return [
'allow_login' => 'Inloggen toestaan?',
'user_created' => 'Gebruiker aangemaakt',
'error' => [
'email' => 'Deze e-mail is reeds geregistreerd.'
]
];

View File

@ -0,0 +1,24 @@
<?php
return [
'total_incomes' => 'Totaal inkomsten',
'receivables' => 'Vorderingen',
'open_invoices' => 'Openstaande facturen',
'overdue_invoices' => 'Vervallen facturen',
'total_expenses' => 'Totale uitgaven',
'payables' => 'Schulden',
'open_bills' => 'Open rekeningen',
'overdue_bills' => 'Openstaande fakturen',
'total_profit' => 'Totale winst',
'open_profit' => 'Open winst',
'overdue_profit' => 'Achterstallige winst',
'cash_flow' => 'Cash-Flow',
'no_profit_loss' => 'Geen winst-verlies',
'incomes_by_category' => 'Inkomsten per categorie',
'expenses_by_category' => 'Kosten per categorie',
'account_balance' => 'Betalingsbalans',
'latest_incomes' => 'Nieuwste inkomens',
'latest_expenses' => 'Nieuwste uitgaven',
];

View File

@ -0,0 +1,17 @@
<?php
return [
'accounts_cash' => 'Contant',
'categories_uncat' => 'Ongecategoriseerd',
'categories_deposit' => 'Storting',
'categories_sales' => 'Verkoop',
'currencies_usd' => 'Amerikaanse Dollar',
'currencies_eur' => 'Euro',
'currencies_gbp' => 'Britse pond',
'currencies_try' => 'Turkse Lira',
'taxes_exempt' => 'Vrijgesteld van btw',
'taxes_normal' => 'Normale btw',
'taxes_sales' => 'Verkoop Btw',
];

View File

@ -0,0 +1,9 @@
<?php
return [
'version' => 'Versie',
'powered' => 'Powered By Akaunting',
'software' => 'Gratis boekhoudsoftware',
];

View File

@ -0,0 +1,108 @@
<?php
return [
'items' => 'Item | Items',
'incomes' => 'Betalingen',
'invoices' => 'Factuur | Facturen',
'revenues' => 'Inkomsten | Inkomsten',
'customers' => 'Klant | Klanten',
'expenses' => 'Kosten | Kosten',
'bills' => 'Fakturen | Rekeningen',
'payments' => 'Betaling | Betalingen',
'vendors' => 'Leverancier | Leveranciers',
'accounts' => 'Account | Rekeningen',
'transfers' => 'Transfer | Overdrachten',
'transactions' => 'Transactie | Transacties',
'reports' => 'Verslag | Verslagen',
'settings' => 'Instellen | Instellingen',
'categories' => 'Categorie | Categorieën',
'currencies' => 'Valuta | Valuta \'s',
'tax_rates' => 'Btw-tarief | Belastingtarieven',
'users' => 'Gebruiker | Gebruikers',
'roles' => 'Rol | Rollen',
'permissions' => 'Toestemming | Machtigingen',
'modules' => 'App | Apps',
'companies' => 'Bedrijf | Bedrijven',
'profits' => 'Winst | Winst',
'taxes' => 'Belasting | Btw',
'pictures' => 'Foto | Foto \'s',
'types' => 'Type | Types',
'payment_methods' => 'Betalingsmethode | Betalingsmethoden',
'compares' => 'Inkomen vs kosten | Inkomen vs kosten',
'notes' => 'Opmerking | Notities',
'totals' => 'Totaal | Totalen',
'languages' => 'Taalpakketten',
'updates' => 'Update | Updates',
'numbers' => 'Nummer | Nummers',
'statuses' => 'Status | Statussen',
'dashboard' => 'Dashboard',
'banking' => 'Banken',
'general' => 'Algemeen',
'no_records' => 'Geen gegevens.',
'date' => 'Datum',
'amount' => 'Bedrag',
'enabled' => 'Actief',
'disabled' => 'Uitgeschakeld',
'yes' => 'Ja',
'no' => 'Nee',
'na' => 'N. v. t',
'daily' => 'Dagelijks',
'monthly' => 'Maandelijks',
'yearly' => 'Jaarlijks',
'add' => 'Toevoegen',
'add_new' => 'Nieuw aanmaken',
'show' => 'Weergeven',
'edit' => 'Bewerken',
'delete' => 'Verwijderen',
'send' => 'Verzenden',
'download' => 'Download',
'delete_confirm' => 'Verwijderen bevestigen: naam: type?',
'name' => 'Naam',
'email' => 'Email',
'tax_number' => 'Btw nummer',
'phone' => 'Telefoonnummer',
'address' => 'Adres',
'website' => 'Website',
'actions' => 'Acties',
'description' => 'Beschrijving',
'manage' => 'Beheren',
'code' => 'Code',
'alias' => 'Alias',
'balance' => 'Saldo',
'reference' => 'Referentie',
'attachment' => 'Bijlage',
'change' => 'Wijzigen',
'color' => 'Kleur',
'save' => 'Opslaan',
'cancel' => 'Annuleren',
'from' => 'Van',
'to' => 'Aan',
'print' => 'Afdrukken',
'search' => 'Zoeken',
'search_placeholder' => 'Type om te zoeken..',
'filter' => 'Filter',
'help' => 'Hulp',
'all' => 'Alles',
'all_type' => 'Alle types',
'upcoming' => 'Aankomende',
'created' => 'Aangemaakt',
'id' => 'ID',
'more_actions' => 'Meer acties',
'duplicate' => 'Dupliceren',
'title' => [
'new' => 'Nieuw: type',
'edit' => 'Bewerken: type',
],
'form' => [
'enter' => 'Voer: veld',
'select' => [
'field' => '-Selecteer: veld -',
'file' => 'Selecteer bestand',
],
'no_file_selected' => 'Geen bestand geselecteerd...',
],
];

View File

@ -0,0 +1,15 @@
<?php
return [
'change_language' => 'Taal wijzigen',
'last_login' => 'Laatste login: tijd',
'notifications' => [
'counter' => '{0} je hebt geen melding |{1} je hebt: kennisgeving | [2, *] Je hebt: kennisgevingen',
'overdue_invoices' => '{1}: aantal openstaande factuur | [2, *]: aantal achterstallige facturen',
'upcoming_bills' => '{1}: aantal aankomende faktuur | [2, *]: aantal aankomende facturen',
'items_stock' => '{1}: aantal item niet op voorraad | [2, *]: aantal items niet op voorraad',
'view_all' => 'Alles Weergeven'
],
];

Some files were not shown because too many files have changed in this diff Show More