1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-11-10 05:02:36 +01:00

Sync with main repo

This commit is contained in:
rafael.sisweb 2015-11-16 06:26:47 -05:00
commit d2290203cc
36 changed files with 849 additions and 258 deletions

View File

@ -107,10 +107,13 @@ class ImportExportController extends BaseController
if ($request->input(ENTITY_CLIENT)) {
$data['clients'] = Client::scope()
->with('user', 'contacts', 'country')
->withTrashed()
->where('is_deleted', '=', false)
->get();
$data['contacts'] = Contact::scope()
->with('user', 'client.contacts')
->withTrashed()
->get();
$data['credits'] = Credit::scope()
@ -121,18 +124,24 @@ class ImportExportController extends BaseController
if ($request->input(ENTITY_TASK)) {
$data['tasks'] = Task::scope()
->with('user', 'client.contacts')
->withTrashed()
->where('is_deleted', '=', false)
->get();
}
if ($request->input(ENTITY_INVOICE)) {
$data['invoices'] = Invoice::scope()
->with('user', 'client.contacts', 'invoice_status')
->withTrashed()
->where('is_deleted', '=', false)
->where('is_quote', '=', false)
->where('is_recurring', '=', false)
->get();
$data['quotes'] = Invoice::scope()
->with('user', 'client.contacts', 'invoice_status')
->withTrashed()
->where('is_deleted', '=', false)
->where('is_quote', '=', true)
->where('is_recurring', '=', false)
->get();
@ -140,6 +149,8 @@ class ImportExportController extends BaseController
if ($request->input(ENTITY_PAYMENT)) {
$data['payments'] = Payment::scope()
->withTrashed()
->where('is_deleted', '=', false)
->with('user', 'client.contacts', 'payment_type', 'invoice', 'account_gateway.gateway')
->get();
}

View File

@ -49,7 +49,7 @@ class PublicClientController extends BaseController
}
$invoice = $invitation->invoice;
$query = $this->activityRepo->findByClientId($invoice->client_id);
$query = $this->activityRepo->findByClientPublicId($invoice->client->public_id);
$query->where('activities.adjustment', '!=', 0);
return Datatable::query($query)

View File

@ -61,14 +61,6 @@ class ReportController extends BaseController
$enableChart = true;
}
$displayData = [];
$exportData = [];
$reportTotals = [
'amount' => [],
'balance' => [],
'paid' => [],
];
$dateTypes = [
'DAYOFYEAR' => 'Daily',
'WEEK' => 'Weekly',
@ -111,6 +103,17 @@ class ReportController extends BaseController
if ($enableChart) {
$params = array_merge($params, self::generateChart($groupBy, $startDate, $endDate));
}
} else {
$params['columns'] = [];
$params['displayData'] = [];
$params['reportTotals'] = [
'amount' => [],
'balance' => [],
'paid' => [],
];
$params['labels'] = [];
$params['datasets'] = [];
$params['scaleStepWidth'] = 100;
}
return View::make('reports.chart_builder', $params);
@ -183,7 +186,7 @@ class ReportController extends BaseController
if ($entityType == ENTITY_INVOICE) {
$labelFormat = $groupBy == 'DAYOFYEAR' ? 'j' : ($groupBy == 'WEEK' ? 'W' : 'F');
$label = $d->format($labelFormat);
$label = $d->format($labelFormat);
$labels[] = $label;
}
}
@ -256,6 +259,14 @@ class ReportController extends BaseController
$lastInvoiceId = null;
$sameAsLast = false;
$displayData = [];
$exportData = [];
$reportTotals = [
'amount' => [],
'balance' => [],
'paid' => [],
];
foreach ($data as $record) {
$sameAsLast = ($lastInvoiceId == $record->invoice_public_id);

View File

@ -1,5 +1,6 @@
<?php
/*
|--------------------------------------------------------------------------
| Application Routes

View File

@ -847,7 +847,7 @@ class Utils
$today = new DateTime('now');
$datePaid = DateTime::createFromFormat('Y-m-d', $date);
$interval = $today->diff($date);
$interval = $today->diff($datePaid);
return $interval->y == 0;
}

View File

@ -60,6 +60,11 @@ class Account extends Eloquent
return $this->hasMany('App\Models\Client');
}
public function contacts()
{
return $this->hasMany('App\Models\Contact');
}
public function invoices()
{
return $this->hasMany('App\Models\Invoice');

View File

@ -34,7 +34,7 @@ class Contact extends EntityModel
public function client()
{
return $this->belongsTo('App\Models\Client');
return $this->belongsTo('App\Models\Client')->withTrashed();
}
public function getPersonType()

View File

@ -70,6 +70,7 @@ class ActivityRepository
->leftJoin('invoices', 'invoices.id', '=', 'activities.invoice_id')
->leftJoin('payments', 'payments.id', '=', 'activities.payment_id')
->leftJoin('credits', 'credits.id', '=', 'activities.credit_id')
->where('clients.account_id', '=', Auth::user()->account_id)
->where('clients.public_id', '=', $clientPublicId)
->where('contacts.is_primary', '=', 1)
->whereNull('contacts.deleted_at')

View File

@ -2,6 +2,7 @@
use App\Models\Account;
use App\Models\AccountToken;
use App\Models\Contact;
use League\Fractal;
use League\Fractal\TransformerAbstract;
@ -10,6 +11,8 @@ class AccountTransformer extends TransformerAbstract
protected $defaultIncludes = [
'users',
'clients',
'invoices',
'contacts'
];
public function includeUsers(Account $account)
@ -22,6 +25,16 @@ class AccountTransformer extends TransformerAbstract
return $this->collection($account->clients, new ClientTransformer($account));
}
public function includeInvoices(Account $account)
{
return $this->collection($account->invoices, new InvoiceTransformer($account));
}
public function includeContacts(Account $account)
{
return $this->collection($account->contacts, new ContactTransformer($account));
}
public function transform(Account $account)
{
return [

View File

@ -41,9 +41,9 @@ class ClientTransformer extends EntityTransformer
*/
protected $defaultIncludes = [
'contacts',
'invoices',
'quotes',
// 'contacts',
// 'invoices',
// 'quotes',
];
public function includeContacts(Client $client)
@ -64,7 +64,7 @@ class ClientTransformer extends EntityTransformer
public function transform(Client $client)
{
return [
'public_id' => (int) $client->public_id,
'id' => (int) $client->public_id,
'name' => $client->name,
'balance' => (float) $client->balance,
'paid_to_date' => (float) $client->paid_to_date,

View File

@ -9,7 +9,7 @@ class ContactTransformer extends EntityTransformer
public function transform(Contact $contact)
{
return [
'public_id' => (int) $contact->public_id,
'id' => (int) $contact->public_id,
'first_name' => $contact->first_name,
'last_name' => $contact->last_name,
'email' => $contact->email,
@ -19,7 +19,8 @@ class ContactTransformer extends EntityTransformer
'is_primary' => (bool) $contact->is_primary,
'phone' => $contact->phone,
'last_login' => $contact->last_login,
'account_key' => $this->account->account_key
'account_key' => $this->account->account_key,
'client_id' => $contact->client_id
];
}
}

View File

@ -9,7 +9,7 @@ class InvoiceItemTransformer extends EntityTransformer
public function transform(InvoiceItem $item)
{
return [
'public_id' => (int) $item->public_id,
'id' => (int) $item->public_id,
'product_key' => $item->product_key,
'account_key' => $this->account->account_key,
'user_id' => (int) $item->user_id,

View File

@ -20,13 +20,11 @@ class InvoiceTransformer extends EntityTransformer
* @SWG\Property(property="invoice_status_id", type="integer", example=1)
*/
protected $client;
public function __construct(Account $account, Client $client)
public function __construct(Account $account)
{
parent::__construct($account);
$this->client = $client;
}
protected $defaultIncludes = [
@ -42,10 +40,9 @@ class InvoiceTransformer extends EntityTransformer
{
return [
'id' => (int) $invoice->public_id,
'invoice_number' => $invoice->invoice_number,
'amount' => (float) $invoice->amount,
'balance' => (float) $invoice->balance,
'client_id' => (int) $this->client->public_id,
'client_id' => (int) $invoice->client->public_id,
'invoice_status_id' => (int) $invoice->invoice_status_id,
'updated_at' => $invoice->updated_at,
'deleted_at' => $invoice->deleted_at,
@ -71,7 +68,8 @@ class InvoiceTransformer extends EntityTransformer
'invoice_footer' => $invoice->invoice_footer,
'partial' => (float) $invoice->partial,
'has_tasks' => (bool) $invoice->has_tasks,
'auto_bill' => (bool) $invoice->auto_bill
'auto_bill' => (bool) $invoice->auto_bill,
'account_key' => $this->account->account_key
];
}
}

View File

@ -17,7 +17,7 @@ class QuoteTransformer extends EntityTransformer
public function transform(Invoice $invoice)
{
return [
'public_id' => (int) $invoice->public_id,
'id' => (int) $invoice->public_id,
'quote_number' => $invoice->invoice_number,
'amount' => (float) $invoice->amount,
];

View File

@ -9,7 +9,7 @@ class UserTransformer extends EntityTransformer
public function transform(User $user)
{
return [
'public_id' => (int) ($user->public_id + 1),
'id' => (int) ($user->public_id + 1),
'first_name' => $user->first_name,
'last_name' => $user->last_name,
'email' => $user->email,

View File

@ -29,7 +29,7 @@ class BaseService
public function createDatatable($entityType, $query, $showCheckbox = true, $hideClient = false)
{
$columns = $this->getDatatableColumns($entityType, $hideClient);
$columns = $this->getDatatableColumns($entityType, !$showCheckbox);
$actions = $this->getDatatableActions($entityType);
return $this->datatableService->createDatatable($entityType, $query, $columns, $actions, $showCheckbox);

View File

@ -101,7 +101,7 @@ class PaymentLibrariesSeeder extends Seeder
['name' => 'Norske Kroner', 'code' => 'NOK', 'symbol' => 'kr ', 'precision' => '2', 'thousand_separator' => '.', 'decimal_separator' => ','],
['name' => 'New Zealand Dollar', 'code' => 'NZD', 'symbol' => '$', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'],
['name' => 'Vietnamese Dong', 'code' => 'VND', 'symbol' => 'VND ', 'precision' => '0', 'thousand_separator' => '.', 'decimal_separator' => ','],
['name' => 'Swiss Franc', 'code' => 'CHF', 'symbol' => 'CHF ', 'precision' => '2', 'thousand_separator' => '\'', 'decimal_separator' => ','],
['name' => 'Swiss Franc', 'code' => 'CHF', 'symbol' => 'CHF ', 'precision' => '2', 'thousand_separator' => '\'', 'decimal_separator' => '.'],
['name' => 'Guatemalan Quetzal', 'code' => 'GTQ', 'symbol' => 'Q', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'],
['name' => 'Malaysian Ringgit', 'code' => 'MYR', 'symbol' => 'RM', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'],
['name' => 'Brazilian Real', 'code' => 'BRL', 'symbol' => 'R$', 'precision' => '2', 'thousand_separator' => '.', 'decimal_separator' => ','],
@ -115,6 +115,7 @@ class PaymentLibrariesSeeder extends Seeder
['name' => 'Mexican Peso', 'code' => 'MXN', 'symbol' => '$', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'],
['name' => 'Egyptian Pound', 'code' => 'EGP', 'symbol' => '£', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'],
['name' => 'Colombian Peso', 'code' => 'COP', 'symbol' => '$', 'precision' => '2', 'thousand_separator' => '.', 'decimal_separator' => ','],
['name' => 'West African Franc', 'code' => 'XOF', 'symbol' => 'CFA ', 'precision' => '2', 'thousand_separator' => '.', 'decimal_separator' => ','],
];
foreach ($currencies as $currency) {

View File

@ -18,7 +18,7 @@ If you'd like to use our code to sell your own invoicing app email us for detail
### Features
* Built using Laravel 5
* Live PDF generation using [pdfmake](http://pdfmake.org/)
* Integrates with 30+ payment providers with [OmniPay](https://github.com/thephpleague/omnipay)
* Integrates with 50+ payment providers with [OmniPay](https://github.com/thephpleague/omnipay)
* Recurring invoices with auto-billing
* Tasks with time-tracking
* Multi-user/multi-company support

View File

@ -909,5 +909,14 @@
'archived' => 'Archived',
'untitled_account' => 'Untitled Company',
'before' => 'Before',
'after' => 'After',
'reset_terms_help' => 'Reset to the default account terms',
'reset_footer_help' => 'Reset to the default account footer',
'export_data' => 'Export Data',
'user' => 'User',
'country' => 'Country',
'include' => 'Include',
);

View File

@ -841,7 +841,7 @@ return array(
'default_tax_rate_id' => 'Standard Steuersatz',
'tax_rate' => 'Steuersatz',
'recurring_hour' => 'Recurring Hour',
'recurring_hour' => 'Wiederholende Stunde',
'pattern' => 'Schema',
'pattern_help_title' => 'Schema-Hilfe',
'pattern_help_1' => 'Erstelle angepasste Rechnungs- und Angebotsnummern mittels Nummernschema',
@ -852,9 +852,9 @@ return array(
'quote_counter' => 'Angebotszähler',
'type' => 'Typ',
'activity_1' => ':user erstellte Klient :client',
'activity_2' => ':user archivierte Klient :client',
'activity_3' => ':user löschte Klient :client',
'activity_1' => ':user erstellte Kunde :client',
'activity_2' => ':user archivierte Kunde :client',
'activity_3' => ':user löschte Kunde :client',
'activity_4' => ':user erstellte Rechnung :invoice',
'activity_5' => ':user aktualisierte Rechnung :invoice',
'activity_6' => ':user mailte Rechnung :invoice an :contact',
@ -864,11 +864,11 @@ return array(
'activity_10' => ':contact gab Zahlungsinformation :payment für :invoice ein',
'activity_11' => ':user aktualisierte Zahlung :payment',
'activity_12' => ':user archivierte Zahlung :payment',
'activity_13' => ':user deleted Zahlung :payment',
'activity_14' => ':user entered :credit credit',
'activity_15' => ':user updated :credit credit',
'activity_16' => ':user archived :credit credit',
'activity_17' => ':user deleted :credit credit',
'activity_13' => ':user löschte Zahlung :payment',
'activity_14' => ':user gab :credit Guthaben ein',
'activity_15' => ':user aktualisierte :credit Guthaben',
'activity_16' => ':user archivierte :credit Guthaben',
'activity_17' => ':user löschte :credit Guthaben',
'activity_18' => ':user löschte Angebot :quote',
'activity_19' => ':user aktualisierte Angebot :quote',
'activity_20' => ':user mailte Angebot :quote an :contact',
@ -877,12 +877,12 @@ return array(
'activity_23' => ':user löschte Angebot :quote',
'activity_24' => ':user stellte Angebot :quote wieder her',
'activity_25' => ':user stellte Rechnung :invoice wieder her',
'activity_26' => ':user stellte Klient :client wieder her',
'activity_26' => ':user stellte Kunde :client wieder her',
'activity_27' => ':user stellte Zahlung :payment wieder her',
'activity_28' => ':user restored :credit credit',
'activity_29' => ':contact akzeptiert Angebot :quote',
'activity_28' => ':user stellte Guthaben :credit wieder her',
'activity_29' => ':contact akzeptierte Angebot :quote',
'payment' => 'Payment',
'payment' => 'Zahlung',
'system' => 'System',
'signature' => 'Email-Signatur',
'default_messages' => 'Standardnachrichten',
@ -895,7 +895,7 @@ return array(
'quote_is_approved' => 'This quote is approved',
'apply_credit' => 'Apply Credit',
'system_settings' => 'System Settings',
'system_settings' => 'Systemeinstellungen',
'archive_token' => 'Archive Token',
'archived_token' => 'Successfully archived token',
'archive_user' => 'Archive User',
@ -908,7 +908,16 @@ return array(
'deleted_recurring_invoice' => 'Successfully deleted recurring invoice',
'restore_recurring_invoice' => 'Restore Recurring Invoice',
'restored_recurring_invoice' => 'Successfully restored recurring invoice',
'archived' => 'Archived',
'archived' => 'Archiviert',
'untitled_account' => 'Untitled Company',
'before' => 'Before',
'after' => 'After',
'reset_terms_help' => 'Reset to the default account terms',
'reset_footer_help' => 'Reset to the default account footer',
'export_data' => 'Export Data',
'user' => 'User',
'country' => 'Country',
'include' => 'Include',
);

View File

@ -887,5 +887,14 @@ return array(
'archived' => 'Archived',
'untitled_account' => 'Untitled Company',
'before' => 'Before',
'after' => 'After',
'reset_terms_help' => 'Reset to the default account terms',
'reset_footer_help' => 'Reset to the default account footer',
'export_data' => 'Export Data',
'user' => 'User',
'country' => 'Country',
'include' => 'Include',
);

View File

@ -908,4 +908,13 @@ return array(
'archived' => 'Archived',
'untitled_account' => 'Untitled Company',
'before' => 'Before',
'after' => 'After',
'reset_terms_help' => 'Reset to the default account terms',
'reset_footer_help' => 'Reset to the default account footer',
'export_data' => 'Export Data',
'user' => 'User',
'country' => 'Country',
'include' => 'Include',
);

View File

@ -69,7 +69,7 @@ return array(
'delete_invoice' => 'Supprimer la facture',
'email_invoice' => 'Envoyer la facture par courriel',
'enter_payment' => 'Saisissez un paiement',
'tax_rates' => 'Taux de taxe',
'tax_rates' => 'Taxes',
'rate' => 'Taux',
'settings' => 'Paramètres',
'enable_invoice_tax' => 'Spécifier une <br>taxe pour la facture</b>',
@ -602,7 +602,7 @@ return array(
'logo' => 'Logo',
'subdomain' => 'Sous-domaine',
'provide_name_or_email' => 'Merci d\'indiquer un nom ou une adresse email',
'charts_and_reports' => 'Charts & Reports',
'charts_and_reports' => 'Graphiques & rapports',
'chart' => 'Graphique',
'report' => 'Rapport',
'group_by' => 'Grouper par',
@ -789,10 +789,10 @@ return array(
'sign_up_using' => 'Connexion avec',
'invalid_credentials' => 'These credentials do not match our records',
'show_all_options' => 'Show all options',
'user_details' => 'User Details',
'oneclick_login' => 'One-Click Login',
'disable' => 'Disable',
'invoice_quote_number' => 'Invoice and Quote Numbers',
'user_details' => 'Utilisateur',
'oneclick_login' => 'Connexion en 1 clic',
'disable' => 'Désactiver',
'invoice_quote_number' => 'Numéro des devis & factures',
'invoice_charges' => 'Invoice Charges',
'invitation_status' => [
@ -884,22 +884,31 @@ return array(
'quote_footer' => 'Pied de page des devis',
'free' => 'Gratuit',
'quote_is_approved' => 'This quote is approved',
'apply_credit' => 'Apply Credit',
'quote_is_approved' => 'Ce devis est approuvé',
'apply_credit' => 'Appliquer crédit',
'system_settings' => 'Paramètres système',
'archive_token' => 'Archive Token',
'archived_token' => 'Successfully archived token',
'archive_token' => 'Archiver jeton',
'archived_token' => 'Jeton archivé avec succès',
'archive_user' => 'Archiver utilisateur',
'archived_user' => 'Successfully archived user',
'archive_account_gateway' => 'Archive Gateway',
'archived_account_gateway' => 'Successfully archived gateway',
'archive_recurring_invoice' => 'Archive Recurring Invoice',
'archived_recurring_invoice' => 'Successfully archived recurring invoice',
'delete_recurring_invoice' => 'Delete Recurring Invoice',
'deleted_recurring_invoice' => 'Successfully deleted recurring invoice',
'restore_recurring_invoice' => 'Restore Recurring Invoice',
'restored_recurring_invoice' => 'Successfully restored recurring invoice',
'archived_user' => 'Utilisateur archivé avec succès',
'archive_account_gateway' => 'Archiver passerelle',
'archived_account_gateway' => 'Passerelle archivée avec succès',
'archive_recurring_invoice' => 'Archiver facture récurrente',
'archived_recurring_invoice' => 'Facture récurrente archivée avec succès',
'delete_recurring_invoice' => 'Supprimer archive récurrente',
'deleted_recurring_invoice' => 'Facture récurrente supprimée avec succès',
'restore_recurring_invoice' => 'Restaurer facture récurrence',
'restored_recurring_invoice' => 'Facture récurrente restaurée avec succès',
'archived' => 'Archivé',
'untitled_account' => 'Société sans nom',
'before' => 'Avant',
'after' => 'Après',
'reset_terms_help' => 'Remettre les conditions par défaut',
'reset_footer_help' => 'Remettre le pied de facture par défaut',
'export_data' => 'Exporter données',
'user' => 'Utilisateur',
'country' => 'Pays',
'include' => 'Inclure',
);

View File

@ -902,4 +902,13 @@ return array(
'archived' => 'Archived',
'untitled_account' => 'Untitled Company',
'before' => 'Before',
'after' => 'After',
'reset_terms_help' => 'Reset to the default account terms',
'reset_footer_help' => 'Reset to the default account footer',
'export_data' => 'Export Data',
'user' => 'User',
'country' => 'Country',
'include' => 'Include',
);

View File

@ -903,5 +903,14 @@ return array(
'restored_recurring_invoice' => 'Successfully restored recurring invoice',
'archived' => 'Archived',
'untitled_account' => 'Untitled Company',
'before' => 'Before',
'after' => 'After',
'reset_terms_help' => 'Reset to the default account terms',
'reset_footer_help' => 'Reset to the default account footer',
'export_data' => 'Export Data',
'user' => 'User',
'country' => 'Country',
'include' => 'Include',
);

View File

@ -910,6 +910,15 @@ return array(
'restored_recurring_invoice' => 'Successfully restored recurring invoice',
'archived' => 'Archived',
'untitled_account' => 'Untitled Company',
'before' => 'Before',
'after' => 'After',
'reset_terms_help' => 'Reset to the default account terms',
'reset_footer_help' => 'Reset to the default account footer',
'export_data' => 'Export Data',
'user' => 'User',
'country' => 'Country',
'include' => 'Include',
);

View File

@ -908,5 +908,14 @@ return array(
'restored_recurring_invoice' => 'Suksessfullt gjenopprettet gjentakende faktura',
'archived' => 'Arkivert',
'untitled_account' => 'Selskap Uten Navn',
'before' => 'Before',
'after' => 'After',
'reset_terms_help' => 'Reset to the default account terms',
'reset_footer_help' => 'Reset to the default account footer',
'export_data' => 'Export Data',
'user' => 'User',
'country' => 'Country',
'include' => 'Include',
);

View File

@ -903,5 +903,14 @@ return array(
'restored_recurring_invoice' => 'Successfully restored recurring invoice',
'archived' => 'Archived',
'untitled_account' => 'Untitled Company',
'before' => 'Before',
'after' => 'After',
'reset_terms_help' => 'Reset to the default account terms',
'reset_footer_help' => 'Reset to the default account footer',
'export_data' => 'Export Data',
'user' => 'User',
'country' => 'Country',
'include' => 'Include',
);

View File

@ -905,4 +905,10 @@ return array(
'after' => 'Depois',
'reset_terms_help' => 'Resetar para as condições padrões',
'reset_footer_help' => 'Resetar para o rodapé padrão',
'reset_terms_help' => 'Reset to the default account terms',
'reset_footer_help' => 'Reset to the default account footer',
'export_data' => 'Exportar Dados',
'user' => 'Usuário',
'country' => 'País',
'include' => 'Incluir',
);

View File

@ -906,5 +906,14 @@ return array(
'restored_recurring_invoice' => 'Successfully restored recurring invoice',
'archived' => 'Archived',
'untitled_account' => 'Untitled Company',
'before' => 'Before',
'after' => 'After',
'reset_terms_help' => 'Reset to the default account terms',
'reset_footer_help' => 'Reset to the default account footer',
'export_data' => 'Export Data',
'user' => 'User',
'country' => 'Country',
'include' => 'Include',
);

View File

@ -10,16 +10,18 @@
</tr>
@foreach ($contacts as $contact)
<tr>
<td>{{ $contact->client->getDisplayName() }}</td>
@if ($multiUser)
<td>{{ $contact->user->getDisplayName() }}</td>
@endif
<td>{{ $contact->first_name }}</td>
<td>{{ $contact->last_name }}</td>
<td>{{ $contact->email }}</td>
<td>{{ $contact->phone }}</td>
</tr>
@if (!$contact->client->is_deleted)
<tr>
<td>{{ $contact->client->getDisplayName() }}</td>
@if ($multiUser)
<td>{{ $contact->user->getDisplayName() }}</td>
@endif
<td>{{ $contact->first_name }}</td>
<td>{{ $contact->last_name }}</td>
<td>{{ $contact->email }}</td>
<td>{{ $contact->phone }}</td>
</tr>
@endif
@endforeach
<tr><td></td></tr>

View File

@ -9,15 +9,17 @@
</tr>
@foreach ($credits as $credit)
<tr>
<td>{{ $credit->client->getDisplayName() }}</td>
@if ($multiUser)
<td>{{ $credit->user->getDisplayName() }}</td>
@endif
<td>{{ $credit->present()->amount }}</td>
<td>{{ $credit->present()->balance }}</td>
<td>{{ $credit->present()->credit_date }}</td>
</tr>
@if (!$credit->client->is_deleted)
<tr>
<td>{{ $credit->client->getDisplayName() }}</td>
@if ($multiUser)
<td>{{ $credit->user->getDisplayName() }}</td>
@endif
<td>{{ $credit->present()->amount }}</td>
<td>{{ $credit->present()->balance }}</td>
<td>{{ $credit->present()->credit_date }}</td>
</tr>
@endif
@endforeach
<tr><td></td></tr>

View File

@ -161,27 +161,31 @@
$('#action').val('');
}
var ctx = document.getElementById('monthly-reports').getContext('2d');
var chart = {
labels: {!! json_encode($labels) !!},
datasets: [
@foreach ($datasets as $dataset)
{
data: {!! json_encode($dataset['totals']) !!},
fillColor : "rgba({!! $dataset['colors'] !!},0.5)",
strokeColor : "rgba({!! $dataset['colors'] !!},1)",
},
@endforeach
]
}
@if ($enableChart)
var ctx = document.getElementById('monthly-reports').getContext('2d');
var chart = {
labels: {!! json_encode($labels) !!},
datasets: [
@foreach ($datasets as $dataset)
{
data: {!! json_encode($dataset['totals']) !!},
fillColor : "rgba({!! $dataset['colors'] !!},0.5)",
strokeColor : "rgba({!! $dataset['colors'] !!},1)",
},
@endforeach
]
}
var options = {
scaleOverride: true,
scaleSteps: 10,
scaleStepWidth: {!! $scaleStepWidth !!},
scaleStartValue: 0,
scaleLabel : "<%=value%>",
};
var options = {
scaleOverride: true,
scaleSteps: 10,
scaleStepWidth: {!! $scaleStepWidth !!},
scaleStartValue: 0,
scaleLabel : "<%=value%>",
};
new Chart(ctx).{!! $chartType !!}(chart, options);
@endif
$(function() {
$('.start_date .input-group-addon').click(function() {
@ -192,7 +196,6 @@
});
})
new Chart(ctx).{!! $chartType !!}(chart, options);
</script>

View File

@ -1,4 +1,4 @@
<?php //[STAMP] 69e45a9997e207a2465b88d46d4f9fcb
<?php //[STAMP] f6d69edc5937bdfc3f7eeb6538ccd9ba
namespace _generated;
// This class was automatically generated by build task
@ -17,6 +17,17 @@ trait AcceptanceTesterActions
abstract protected function getScenario();
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Print out latest Selenium Logs in debug mode
* @see \Codeception\Module\WebDriver::debugWebDriverLogs()
*/
public function debugWebDriverLogs() {
return $this->getScenario()->runStep(new \Codeception\Step\Action('debugWebDriverLogs', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
@ -249,7 +260,6 @@ trait AcceptanceTesterActions
* $I->amOnPage('/');
* // opens /register page
* $I->amOnPage('/register');
* ?>
* ```
*
* @param $page
@ -263,16 +273,31 @@ trait AcceptanceTesterActions
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Checks that the current page contains the given string.
* Specify a locator as the second parameter to match a specific region.
* Checks that the current page contains the given string (case insensitive).
*
* You can specify a specific HTML element (via CSS or XPath) as the second
* parameter to only search within that element.
*
* ``` php
* <?php
* $I->see('Logout'); // I can suppose user is logged in
* $I->see('Sign Up','h1'); // I can suppose it's a signup page
* $I->see('Sign Up','//body/h1'); // with XPath
* ?>
* $I->see('Logout'); // I can suppose user is logged in
* $I->see('Sign Up', 'h1'); // I can suppose it's a signup page
* $I->see('Sign Up', '//body/h1'); // with XPath
* ```
*
* Note that the search is done after stripping all HTML tags from the body,
* so `$I->see('strong')` will return true for strings like:
*
* - `<p>I am Stronger than thou</p>`
* - `<script>document.createElement('strong');</script>`
*
* But will *not* be true for strings like:
*
* - `<strong>Home</strong>`
* - `<div class="strong">Home</strong>`
* - `<!-- strong -->`
*
* For checking the raw source code, use `seeInSource()`.
*
* @param $text
* @param null $selector
@ -285,16 +310,31 @@ trait AcceptanceTesterActions
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Checks that the current page contains the given string.
* Specify a locator as the second parameter to match a specific region.
* Checks that the current page contains the given string (case insensitive).
*
* You can specify a specific HTML element (via CSS or XPath) as the second
* parameter to only search within that element.
*
* ``` php
* <?php
* $I->see('Logout'); // I can suppose user is logged in
* $I->see('Sign Up','h1'); // I can suppose it's a signup page
* $I->see('Sign Up','//body/h1'); // with XPath
* ?>
* $I->see('Logout'); // I can suppose user is logged in
* $I->see('Sign Up', 'h1'); // I can suppose it's a signup page
* $I->see('Sign Up', '//body/h1'); // with XPath
* ```
*
* Note that the search is done after stripping all HTML tags from the body,
* so `$I->see('strong')` will return true for strings like:
*
* - `<p>I am Stronger than thou</p>`
* - `<script>document.createElement('strong');</script>`
*
* But will *not* be true for strings like:
*
* - `<strong>Home</strong>`
* - `<div class="strong">Home</strong>`
* - `<!-- strong -->`
*
* For checking the raw source code, use `seeInSource()`.
*
* @param $text
* @param null $selector
@ -308,16 +348,29 @@ trait AcceptanceTesterActions
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Checks that the current page doesn't contain the text specified.
* Checks that the current page doesn't contain the text specified (case insensitive).
* Give a locator as the second parameter to match a specific region.
*
* ```php
* <?php
* $I->dontSee('Login'); // I can suppose user is already logged in
* $I->dontSee('Sign Up','h1'); // I can suppose it's not a signup page
* $I->dontSee('Sign Up','//body/h1'); // with XPath
* ?>
* $I->dontSee('Login'); // I can suppose user is already logged in
* $I->dontSee('Sign Up','h1'); // I can suppose it's not a signup page
* $I->dontSee('Sign Up','//body/h1'); // with XPath
* ```
*
* Note that the search is done after stripping all HTML tags from the body,
* so `$I->dontSee('strong')` will fail on strings like:
*
* - `<p>I am Stronger than thou</p>`
* - `<script>document.createElement('strong');</script>`
*
* But will ignore strings like:
*
* - `<strong>Home</strong>`
* - `<div class="strong">Home</strong>`
* - `<!-- strong -->`
*
* For checking the raw source code, use `seeInSource()`.
*
* @param $text
* @param null $selector
@ -330,16 +383,29 @@ trait AcceptanceTesterActions
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Checks that the current page doesn't contain the text specified.
* Checks that the current page doesn't contain the text specified (case insensitive).
* Give a locator as the second parameter to match a specific region.
*
* ```php
* <?php
* $I->dontSee('Login'); // I can suppose user is already logged in
* $I->dontSee('Sign Up','h1'); // I can suppose it's not a signup page
* $I->dontSee('Sign Up','//body/h1'); // with XPath
* ?>
* $I->dontSee('Login'); // I can suppose user is already logged in
* $I->dontSee('Sign Up','h1'); // I can suppose it's not a signup page
* $I->dontSee('Sign Up','//body/h1'); // with XPath
* ```
*
* Note that the search is done after stripping all HTML tags from the body,
* so `$I->dontSee('strong')` will fail on strings like:
*
* - `<p>I am Stronger than thou</p>`
* - `<script>document.createElement('strong');</script>`
*
* But will ignore strings like:
*
* - `<strong>Home</strong>`
* - `<div class="strong">Home</strong>`
* - `<!-- strong -->`
*
* For checking the raw source code, use `seeInSource()`.
*
* @param $text
* @param null $selector
@ -350,6 +416,80 @@ trait AcceptanceTesterActions
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Checks that the current page contains the given string in its
* raw source code.
*
* ``` php
* <?php
* $I->seeInSource('<h1>Green eggs &amp; ham</h1>');
* ```
*
* @param $raw
* Conditional Assertion: Test won't be stopped on fail
* @see \Codeception\Module\WebDriver::seeInSource()
*/
public function canSeeInSource($raw) {
return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeInSource', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Checks that the current page contains the given string in its
* raw source code.
*
* ``` php
* <?php
* $I->seeInSource('<h1>Green eggs &amp; ham</h1>');
* ```
*
* @param $raw
* @see \Codeception\Module\WebDriver::seeInSource()
*/
public function seeInSource($raw) {
return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeInSource', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Checks that the current page contains the given string in its
* raw source code.
*
* ```php
* <?php
* $I->dontSeeInSource('<h1>Green eggs &amp; ham</h1>');
* ```
*
* @param $raw
* Conditional Assertion: Test won't be stopped on fail
* @see \Codeception\Module\WebDriver::dontSeeInSource()
*/
public function cantSeeInSource($raw) {
return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeInSource', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Checks that the current page contains the given string in its
* raw source code.
*
* ```php
* <?php
* $I->dontSeeInSource('<h1>Green eggs &amp; ham</h1>');
* ```
*
* @param $raw
* @see \Codeception\Module\WebDriver::dontSeeInSource()
*/
public function dontSeeInSource($raw) {
return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeInSource', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
@ -1999,13 +2139,13 @@ trait AcceptanceTesterActions
* ```
* Note that "2" will be the submitted value for the "plan" field, as it is
* the selected option.
*
*
* Also note that this differs from PhpBrowser, in that
* ```'user' => [ 'login' => 'Davert' ]``` is not supported at the moment.
* Named array keys *must* be included in the name as above.
*
*
* Pair this with seeInFormFields for quick testing magic.
*
*
* ``` php
* <?php
* $form = [
@ -2048,20 +2188,20 @@ trait AcceptanceTesterActions
*
* Mixing string and boolean values for a checkbox's value is not supported
* and may produce unexpected results.
*
* Field names ending in "[]" must be passed without the trailing square
*
* Field names ending in "[]" must be passed without the trailing square
* bracket characters, and must contain an array for its value. This allows
* submitting multiple values with the same name, consider:
*
*
* ```php
* $I->submitForm('#my-form', [
* 'field[]' => 'value',
* 'field[]' => 'another value', // 'field[]' is already a defined key
* ]);
* ```
*
*
* The solution is to pass an array value:
*
*
* ```php
* // this way both values are submitted
* $I->submitForm('#my-form', [
@ -2528,7 +2668,7 @@ trait AcceptanceTesterActions
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Inserts SQL record into database. This record will be erased after the test.
* Inserts an SQL record into a database. This record will be erased after the test.
*
* ``` php
* <?php
@ -2550,7 +2690,7 @@ trait AcceptanceTesterActions
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Checks if a row with given column values exists.
* Asserts that a row with the given column values exists.
* Provide table name and column values.
*
* Example:
@ -2578,7 +2718,7 @@ trait AcceptanceTesterActions
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Checks if a row with given column values exists.
* Asserts that a row with the given column values exists.
* Provide table name and column values.
*
* Example:
@ -2607,7 +2747,7 @@ trait AcceptanceTesterActions
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Asserts that found number of records in database
* Asserts that the given number of records were found in the database.
*
* ``` php
* <?php
@ -2627,7 +2767,7 @@ trait AcceptanceTesterActions
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Asserts that found number of records in database
* Asserts that the given number of records were found in the database.
*
* ``` php
* <?php
@ -2650,7 +2790,7 @@ trait AcceptanceTesterActions
*
* Effect is opposite to ->seeInDatabase
*
* Checks if there is no record with such column values in database.
* Asserts that there is no record with the given column values in a database.
* Provide table name and column values.
*
* Example:
@ -2680,7 +2820,7 @@ trait AcceptanceTesterActions
*
* Effect is opposite to ->seeInDatabase
*
* Checks if there is no record with such column values in database.
* Asserts that there is no record with the given column values in a database.
* Provide table name and column values.
*
* Example:

View File

@ -1,4 +1,4 @@
<?php //[STAMP] 62f79ae9e6d23b1ab98027060c9e03e4
<?php //[STAMP] a0d5cd84d7074a41bde1bd3fc123f1cf
namespace _generated;
// This class was automatically generated by build task
@ -164,7 +164,6 @@ trait FunctionalTesterActions
* $I->amOnPage('/');
* // opens /register page
* $I->amOnPage('/register');
* ?>
* ```
*
* @param $page
@ -217,16 +216,31 @@ trait FunctionalTesterActions
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Checks that the current page contains the given string.
* Specify a locator as the second parameter to match a specific region.
* Checks that the current page contains the given string (case insensitive).
*
* You can specify a specific HTML element (via CSS or XPath) as the second
* parameter to only search within that element.
*
* ``` php
* <?php
* $I->see('Logout'); // I can suppose user is logged in
* $I->see('Sign Up','h1'); // I can suppose it's a signup page
* $I->see('Sign Up','//body/h1'); // with XPath
* ?>
* $I->see('Logout'); // I can suppose user is logged in
* $I->see('Sign Up', 'h1'); // I can suppose it's a signup page
* $I->see('Sign Up', '//body/h1'); // with XPath
* ```
*
* Note that the search is done after stripping all HTML tags from the body,
* so `$I->see('strong')` will return true for strings like:
*
* - `<p>I am Stronger than thou</p>`
* - `<script>document.createElement('strong');</script>`
*
* But will *not* be true for strings like:
*
* - `<strong>Home</strong>`
* - `<div class="strong">Home</strong>`
* - `<!-- strong -->`
*
* For checking the raw source code, use `seeInSource()`.
*
* @param $text
* @param null $selector
@ -239,16 +253,31 @@ trait FunctionalTesterActions
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Checks that the current page contains the given string.
* Specify a locator as the second parameter to match a specific region.
* Checks that the current page contains the given string (case insensitive).
*
* You can specify a specific HTML element (via CSS or XPath) as the second
* parameter to only search within that element.
*
* ``` php
* <?php
* $I->see('Logout'); // I can suppose user is logged in
* $I->see('Sign Up','h1'); // I can suppose it's a signup page
* $I->see('Sign Up','//body/h1'); // with XPath
* ?>
* $I->see('Logout'); // I can suppose user is logged in
* $I->see('Sign Up', 'h1'); // I can suppose it's a signup page
* $I->see('Sign Up', '//body/h1'); // with XPath
* ```
*
* Note that the search is done after stripping all HTML tags from the body,
* so `$I->see('strong')` will return true for strings like:
*
* - `<p>I am Stronger than thou</p>`
* - `<script>document.createElement('strong');</script>`
*
* But will *not* be true for strings like:
*
* - `<strong>Home</strong>`
* - `<div class="strong">Home</strong>`
* - `<!-- strong -->`
*
* For checking the raw source code, use `seeInSource()`.
*
* @param $text
* @param null $selector
@ -262,16 +291,29 @@ trait FunctionalTesterActions
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Checks that the current page doesn't contain the text specified.
* Checks that the current page doesn't contain the text specified (case insensitive).
* Give a locator as the second parameter to match a specific region.
*
* ```php
* <?php
* $I->dontSee('Login'); // I can suppose user is already logged in
* $I->dontSee('Sign Up','h1'); // I can suppose it's not a signup page
* $I->dontSee('Sign Up','//body/h1'); // with XPath
* ?>
* $I->dontSee('Login'); // I can suppose user is already logged in
* $I->dontSee('Sign Up','h1'); // I can suppose it's not a signup page
* $I->dontSee('Sign Up','//body/h1'); // with XPath
* ```
*
* Note that the search is done after stripping all HTML tags from the body,
* so `$I->dontSee('strong')` will fail on strings like:
*
* - `<p>I am Stronger than thou</p>`
* - `<script>document.createElement('strong');</script>`
*
* But will ignore strings like:
*
* - `<strong>Home</strong>`
* - `<div class="strong">Home</strong>`
* - `<!-- strong -->`
*
* For checking the raw source code, use `seeInSource()`.
*
* @param $text
* @param null $selector
@ -284,16 +326,29 @@ trait FunctionalTesterActions
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Checks that the current page doesn't contain the text specified.
* Checks that the current page doesn't contain the text specified (case insensitive).
* Give a locator as the second parameter to match a specific region.
*
* ```php
* <?php
* $I->dontSee('Login'); // I can suppose user is already logged in
* $I->dontSee('Sign Up','h1'); // I can suppose it's not a signup page
* $I->dontSee('Sign Up','//body/h1'); // with XPath
* ?>
* $I->dontSee('Login'); // I can suppose user is already logged in
* $I->dontSee('Sign Up','h1'); // I can suppose it's not a signup page
* $I->dontSee('Sign Up','//body/h1'); // with XPath
* ```
*
* Note that the search is done after stripping all HTML tags from the body,
* so `$I->dontSee('strong')` will fail on strings like:
*
* - `<p>I am Stronger than thou</p>`
* - `<script>document.createElement('strong');</script>`
*
* But will ignore strings like:
*
* - `<strong>Home</strong>`
* - `<div class="strong">Home</strong>`
* - `<!-- strong -->`
*
* For checking the raw source code, use `seeInSource()`.
*
* @param $text
* @param null $selector
@ -304,6 +359,80 @@ trait FunctionalTesterActions
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Checks that the current page contains the given string in its
* raw source code.
*
* ``` php
* <?php
* $I->seeInSource('<h1>Green eggs &amp; ham</h1>');
* ```
*
* @param $raw
* Conditional Assertion: Test won't be stopped on fail
* @see \Codeception\Lib\InnerBrowser::seeInSource()
*/
public function canSeeInSource($raw) {
return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeInSource', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Checks that the current page contains the given string in its
* raw source code.
*
* ``` php
* <?php
* $I->seeInSource('<h1>Green eggs &amp; ham</h1>');
* ```
*
* @param $raw
* @see \Codeception\Lib\InnerBrowser::seeInSource()
*/
public function seeInSource($raw) {
return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeInSource', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Checks that the current page contains the given string in its
* raw source code.
*
* ```php
* <?php
* $I->dontSeeInSource('<h1>Green eggs &amp; ham</h1>');
* ```
*
* @param $raw
* Conditional Assertion: Test won't be stopped on fail
* @see \Codeception\Lib\InnerBrowser::dontSeeInSource()
*/
public function cantSeeInSource($raw) {
return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeInSource', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Checks that the current page contains the given string in its
* raw source code.
*
* ```php
* <?php
* $I->dontSeeInSource('<h1>Green eggs &amp; ham</h1>');
* ```
*
* @param $raw
* @see \Codeception\Lib\InnerBrowser::dontSeeInSource()
*/
public function dontSeeInSource($raw) {
return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeInSource', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
@ -1076,13 +1205,25 @@ trait FunctionalTesterActions
* Submits the given form on the page, optionally with the given form
* values. Give the form fields values as an array.
*
* Skipped fields will be filled by their values from the page.
* Although this function can be used as a short-hand version of
* `fillField()`, `selectOption()`, `click()` etc. it has some important
* differences:
*
* * Only field *names* may be used, not CSS/XPath selectors nor field labels
* * If a field is sent to this function that does *not* exist on the page,
* it will silently be added to the HTTP request. This is helpful for testing
* some types of forms, but be aware that you will *not* get an exception
* like you would if you called `fillField()` or `selectOption()` with
* a missing field.
*
* Fields that are not provided will be filled by their values from the page,
* or from any previous calls to `fillField()`, `selectOption()` etc.
* You don't need to click the 'Submit' button afterwards.
* This command itself triggers the request to form's action.
*
* You can optionally specify what button's value to include
* in the request with the last parameter as an alternative to
* explicitly setting its value in the second parameter, as
* You can optionally specify which button's value to include
* in the request with the last parameter (as an alternative to
* explicitly setting its value in the second parameter), as
* button values are not otherwise included in the request.
*
* Examples:
@ -1156,7 +1297,8 @@ trait FunctionalTesterActions
* );
* ```
*
* Pair this with seeInFormFields for quick testing magic.
* This function works well when paired with `seeInFormFields()`
* for quickly testing CRUD interfaces and form validation logic.
*
* ``` php
* <?php
@ -1166,15 +1308,14 @@ trait FunctionalTesterActions
* 'checkbox1' => true,
* // ...
* ];
* $I->submitForm('//form[@id=my-form]', $form, 'submitButton');
* $I->submitForm('#my-form', $form, 'submitButton');
* // $I->amOnPage('/path/to/form-page') may be needed
* $I->seeInFormFields('//form[@id=my-form]', $form);
* ?>
* $I->seeInFormFields('#my-form', $form);
* ```
*
* Parameter values can be set to arrays for multiple input fields
* of the same name, or multi-select combo boxes. For checkboxes,
* either the string value can be used, or boolean values which will
* you can use either the string value or boolean `true`/`false` which will
* be replaced by the checkbox's value in the DOM.
*
* ``` php
@ -1183,7 +1324,7 @@ trait FunctionalTesterActions
* 'field1' => 'value',
* 'checkbox' => [
* 'value of first checkbox',
* 'value of second checkbox,
* 'value of second checkbox',
* ],
* 'otherCheckboxes' => [
* true,
@ -1195,27 +1336,29 @@ trait FunctionalTesterActions
* 'second option value'
* ]
* ]);
* ?>
* ```
*
* Mixing string and boolean values for a checkbox's value is not supported
* and may produce unexpected results.
*
* Field names ending in "[]" must be passed without the trailing square
* Field names ending in `[]` must be passed without the trailing square
* bracket characters, and must contain an array for its value. This allows
* submitting multiple values with the same name, consider:
*
* ```php
* <?php
* // This will NOT work correctly
* $I->submitForm('#my-form', [
* 'field[]' => 'value',
* 'field[]' => 'another value', // 'field[]' is already a defined key
* 'field[]' => 'another value', // 'field[]' is already a defined key
* ]);
* ```
*
* The solution is to pass an array value:
*
* ```php
* // this way both values are submitted
* <?php
* // This way both values are submitted
* $I->submitForm('#my-form', [
* 'field' => [
* 'value',
@ -2017,6 +2160,19 @@ trait FunctionalTesterActions
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Moves back in history.
*
* @param int $numberOfSteps (default value 1)
* @see \Codeception\Lib\InnerBrowser::moveBack()
*/
public function moveBack($numberOfSteps = null) {
return $this->getScenario()->runStep(new \Codeception\Step\Action('moveBack', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
@ -2116,16 +2272,78 @@ trait FunctionalTesterActions
*
* ``` php
* <?php
* $I->expectEvents('App\MyEvent');
* $I->expectEvents('App\MyEvent', 'App\MyOtherEvent');
* $I->expectEvents(['App\MyEvent', 'App\MyOtherEvent']);
* $I->seeEventTriggered('App\MyEvent');
* $I->seeEventTriggered(new App\Events\MyEvent());
* $I->seeEventTriggered('App\MyEvent', 'App\MyOtherEvent');
* $I->seeEventTriggered(['App\MyEvent', 'App\MyOtherEvent']);
* ?>
* ```
* @param $events
* @see \Codeception\Module\Laravel5::expectEvents()
* Conditional Assertion: Test won't be stopped on fail
* @see \Codeception\Module\Laravel5::seeEventTriggered()
*/
public function expectEvents($events) {
return $this->getScenario()->runStep(new \Codeception\Step\Action('expectEvents', func_get_args()));
public function canSeeEventTriggered($events) {
return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeEventTriggered', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Make sure events fired during the test.
*
* ``` php
* <?php
* $I->seeEventTriggered('App\MyEvent');
* $I->seeEventTriggered(new App\Events\MyEvent());
* $I->seeEventTriggered('App\MyEvent', 'App\MyOtherEvent');
* $I->seeEventTriggered(['App\MyEvent', 'App\MyOtherEvent']);
* ?>
* ```
* @param $events
* @see \Codeception\Module\Laravel5::seeEventTriggered()
*/
public function seeEventTriggered($events) {
return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeEventTriggered', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Make sure events did not fire during the test.
*
* ``` php
* <?php
* $I->dontSeeEventTriggered('App\MyEvent');
* $I->dontSeeEventTriggered(new App\Events\MyEvent());
* $I->dontSeeEventTriggered('App\MyEvent', 'App\MyOtherEvent');
* $I->dontSeeEventTriggered(['App\MyEvent', 'App\MyOtherEvent']);
* ?>
* ```
* @param $events
* Conditional Assertion: Test won't be stopped on fail
* @see \Codeception\Module\Laravel5::dontSeeEventTriggered()
*/
public function cantSeeEventTriggered($events) {
return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeEventTriggered', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Make sure events did not fire during the test.
*
* ``` php
* <?php
* $I->dontSeeEventTriggered('App\MyEvent');
* $I->dontSeeEventTriggered(new App\Events\MyEvent());
* $I->dontSeeEventTriggered('App\MyEvent', 'App\MyOtherEvent');
* $I->dontSeeEventTriggered(['App\MyEvent', 'App\MyOtherEvent']);
* ?>
* ```
* @param $events
* @see \Codeception\Module\Laravel5::dontSeeEventTriggered()
*/
public function dontSeeEventTriggered($events) {
return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeEventTriggered', func_get_args()));
}
@ -2149,6 +2367,41 @@ trait FunctionalTesterActions
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Checks that current url matches route
*
* ``` php
* <?php
* $I->seeCurrentRouteIs('posts.index');
* ?>
* ```
* @param $routeName
* Conditional Assertion: Test won't be stopped on fail
* @see \Codeception\Module\Laravel5::seeCurrentRouteIs()
*/
public function canSeeCurrentRouteIs($routeName) {
return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeCurrentRouteIs', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Checks that current url matches route
*
* ``` php
* <?php
* $I->seeCurrentRouteIs('posts.index');
* ?>
* ```
* @param $routeName
* @see \Codeception\Module\Laravel5::seeCurrentRouteIs()
*/
public function seeCurrentRouteIs($routeName) {
return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeCurrentRouteIs', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
@ -2169,43 +2422,6 @@ trait FunctionalTesterActions
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Checks that current url matches route
*
* ``` php
* <?php
* $I->seeCurrentRouteIs('posts.index');
* ?>
* ```
* @param $route
* @param array $params
* Conditional Assertion: Test won't be stopped on fail
* @see \Codeception\Module\Laravel5::seeCurrentRouteIs()
*/
public function canSeeCurrentRouteIs($route, $params = null) {
return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeCurrentRouteIs', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Checks that current url matches route
*
* ``` php
* <?php
* $I->seeCurrentRouteIs('posts.index');
* ?>
* ```
* @param $route
* @param array $params
* @see \Codeception\Module\Laravel5::seeCurrentRouteIs()
*/
public function seeCurrentRouteIs($route, $params = null) {
return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeCurrentRouteIs', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
@ -2218,11 +2434,10 @@ trait FunctionalTesterActions
* ```
*
* @param $action
* @param array $params
* Conditional Assertion: Test won't be stopped on fail
* @see \Codeception\Module\Laravel5::seeCurrentActionIs()
*/
public function canSeeCurrentActionIs($action, $params = null) {
public function canSeeCurrentActionIs($action) {
return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeCurrentActionIs', func_get_args()));
}
/**
@ -2237,10 +2452,9 @@ trait FunctionalTesterActions
* ```
*
* @param $action
* @param array $params
* @see \Codeception\Module\Laravel5::seeCurrentActionIs()
*/
public function seeCurrentActionIs($action, $params = null) {
public function seeCurrentActionIs($action) {
return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeCurrentActionIs', func_get_args()));
}
@ -2408,14 +2622,14 @@ trait FunctionalTesterActions
*
* Assert that specific form error messages are set in the view.
*
* Useful for validation messages e.g.
* return `Redirect::to('register')->withErrors($validator);`
*
* Example of Usage
* This method calls `seeFormErrorMessage` for each entry in the `$bindings` array.
*
* ``` php
* <?php
* $I->seeFormErrorMessages(array('username'=>'Invalid Username'));
* $I->seeFormErrorMessages([
* 'username' => 'Invalid Username',
* 'password' => null,
* ]);
* ?>
* ```
* @param array $bindings
@ -2430,14 +2644,14 @@ trait FunctionalTesterActions
*
* Assert that specific form error messages are set in the view.
*
* Useful for validation messages e.g.
* return `Redirect::to('register')->withErrors($validator);`
*
* Example of Usage
* This method calls `seeFormErrorMessage` for each entry in the `$bindings` array.
*
* ``` php
* <?php
* $I->seeFormErrorMessages(array('username'=>'Invalid Username'));
* $I->seeFormErrorMessages([
* 'username' => 'Invalid Username',
* 'password' => null,
* ]);
* ?>
* ```
* @param array $bindings
@ -2451,48 +2665,50 @@ trait FunctionalTesterActions
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Assert that specific form error message is set in the view.
* Assert that a specific form error message is set in the view.
*
* Useful for validation messages and generally messages array
* e.g.
* return `Redirect::to('register')->withErrors($validator);`
* If you want to assert that there is a form error message for a specific key
* but don't care about the actual error message you can omit `$expectedErrorMessage`.
*
* Example of Usage
* If you do pass `$expectedErrorMessage`, this method checks if the actual error message for a key
* contains `$expectedErrorMessage`.
*
* ``` php
* <?php
* $I->seeFormErrorMessage('username');
* $I->seeFormErrorMessage('username', 'Invalid Username');
* ?>
* ```
* @param string $key
* @param string $errorMessage
* @param string|null $expectedErrorMessage
* Conditional Assertion: Test won't be stopped on fail
* @see \Codeception\Module\Laravel5::seeFormErrorMessage()
*/
public function canSeeFormErrorMessage($key, $errorMessage) {
public function canSeeFormErrorMessage($key, $expectedErrorMessage = null) {
return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeFormErrorMessage', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Assert that specific form error message is set in the view.
* Assert that a specific form error message is set in the view.
*
* Useful for validation messages and generally messages array
* e.g.
* return `Redirect::to('register')->withErrors($validator);`
* If you want to assert that there is a form error message for a specific key
* but don't care about the actual error message you can omit `$expectedErrorMessage`.
*
* Example of Usage
* If you do pass `$expectedErrorMessage`, this method checks if the actual error message for a key
* contains `$expectedErrorMessage`.
*
* ``` php
* <?php
* $I->seeFormErrorMessage('username');
* $I->seeFormErrorMessage('username', 'Invalid Username');
* ?>
* ```
* @param string $key
* @param string $errorMessage
* @param string|null $expectedErrorMessage
* @see \Codeception\Module\Laravel5::seeFormErrorMessage()
*/
public function seeFormErrorMessage($key, $errorMessage) {
public function seeFormErrorMessage($key, $expectedErrorMessage = null) {
return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeFormErrorMessage', func_get_args()));
}
@ -2504,8 +2720,6 @@ trait FunctionalTesterActions
* Takes either an object that implements the User interface or
* an array of credentials.
*
* Example of Usage
*
* ``` php
* <?php
* // provide array of credentials
@ -2530,7 +2744,7 @@ trait FunctionalTesterActions
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Logs user out
* Logout user.
* @see \Codeception\Module\Laravel5::logout()
*/
public function logout() {
@ -2541,7 +2755,7 @@ trait FunctionalTesterActions
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Checks that user is authenticated
* Checks that a user is authenticated
* Conditional Assertion: Test won't be stopped on fail
* @see \Codeception\Module\Laravel5::seeAuthentication()
*/
@ -2551,7 +2765,7 @@ trait FunctionalTesterActions
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Checks that user is authenticated
* Checks that a user is authenticated
* @see \Codeception\Module\Laravel5::seeAuthentication()
*/
public function seeAuthentication() {
@ -2586,7 +2800,6 @@ trait FunctionalTesterActions
* Return an instance of a class from the IoC Container.
* (http://laravel.com/docs/ioc)
*
* Example
* ``` php
* <?php
* // In Laravel
@ -2735,4 +2948,88 @@ trait FunctionalTesterActions
public function grabRecord($tableName, $attributes = null) {
return $this->getScenario()->runStep(new \Codeception\Step\Action('grabRecord', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Use Laravel's model factory to create a model.
* Can only be used with Laravel 5.1 and later.
*
* ``` php
* <?php
* $I->haveModel('App\User');
* $I->haveModel('App\User', ['name' => 'John Doe']);
* $I->haveModel('App\User', [], 'admin');
* $I->haveModel('App\User', [], 'admin', 3);
* ?>
* ```
*
* @see http://laravel.com/docs/5.1/testing#model-factories
* @param string $model
* @param array $attributes
* @param string $name
* @param int $times
* @return mixed
* @see \Codeception\Module\Laravel5::haveModel()
*/
public function haveModel($model, $attributes = null, $name = null, $times = null) {
return $this->getScenario()->runStep(new \Codeception\Step\Action('haveModel', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Use Laravel's model factory to create a model.
* Can only be used with Laravel 5.1 and later.
*
* ``` php
* <?php
* $I->createModel('App\User');
* $I->createModel('App\User', ['name' => 'John Doe']);
* $I->createModel('App\User', [], 'admin');
* $I->createModel('App\User', [], 'admin', 3);
* ?>
* ```
*
* @see http://laravel.com/docs/5.1/testing#model-factories
* @param string $model
* @param array $attributes
* @param string $name
* @param int $times
* @return mixed
* @see \Codeception\Module\Laravel5::createModel()
*/
public function createModel($model, $attributes = null, $name = null, $times = null) {
return $this->getScenario()->runStep(new \Codeception\Step\Action('createModel', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Use Laravel's model factory to make a model.
* Can only be used with Laravel 5.1 and later.
*
* ``` php
* <?php
* $I->makeModel('App\User');
* $I->makeModel('App\User', ['name' => 'John Doe']);
* $I->makeModel('App\User', [], 'admin');
* $I->makeModel('App\User', [], 'admin', 3);
* ?>
* ```
*
* @see http://laravel.com/docs/5.1/testing#model-factories
* @param string $model
* @param array $attributes
* @param string $name
* @param int $times
* @return mixed
* @see \Codeception\Module\Laravel5::makeModel()
*/
public function makeModel($model, $attributes = null, $name = null, $times = null) {
return $this->getScenario()->runStep(new \Codeception\Step\Action('makeModel', func_get_args()));
}
}

BIN
vendor.zip Normal file

Binary file not shown.