2013-11-26 13:45:07 +01:00
|
|
|
<?php
|
|
|
|
|
2013-12-04 17:20:14 +01:00
|
|
|
class Invoice extends EntityModel
|
2013-11-26 13:45:07 +01:00
|
|
|
{
|
2013-12-01 21:58:25 +01:00
|
|
|
public function account()
|
|
|
|
{
|
|
|
|
return $this->belongsTo('Account');
|
|
|
|
}
|
2013-11-26 13:45:07 +01:00
|
|
|
|
|
|
|
public function client()
|
|
|
|
{
|
2014-02-19 14:28:29 +01:00
|
|
|
return $this->belongsTo('Client')->withTrashed();
|
2013-11-26 13:45:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function invoice_items()
|
|
|
|
{
|
|
|
|
return $this->hasMany('InvoiceItem');
|
|
|
|
}
|
|
|
|
|
2013-12-01 08:33:17 +01:00
|
|
|
public function invoice_status()
|
|
|
|
{
|
|
|
|
return $this->belongsTo('InvoiceStatus');
|
|
|
|
}
|
|
|
|
|
2013-12-13 10:13:57 +01:00
|
|
|
public function invitations()
|
|
|
|
{
|
|
|
|
return $this->hasMany('Invitation');
|
|
|
|
}
|
|
|
|
|
2013-12-01 21:58:25 +01:00
|
|
|
public function getName()
|
|
|
|
{
|
|
|
|
return $this->invoice_number;
|
|
|
|
}
|
|
|
|
|
2014-02-16 21:32:25 +01:00
|
|
|
public function getLink()
|
|
|
|
{
|
|
|
|
return link_to('invoices/' . $this->public_id, $this->invoice_number);
|
|
|
|
}
|
|
|
|
|
2013-12-01 21:58:25 +01:00
|
|
|
public function getEntityType()
|
|
|
|
{
|
|
|
|
return ENTITY_INVOICE;
|
|
|
|
}
|
2014-01-06 07:48:11 +01:00
|
|
|
|
2013-12-11 12:11:59 +01:00
|
|
|
public function isSent()
|
|
|
|
{
|
|
|
|
return $this->invoice_status_id >= INVOICE_STATUS_SENT;
|
|
|
|
}
|
|
|
|
|
2013-12-31 20:49:54 +01:00
|
|
|
public function isViewed()
|
|
|
|
{
|
|
|
|
return $this->invoice_status_id >= INVOICE_STATUS_VIEWED;
|
|
|
|
}
|
|
|
|
|
2014-04-06 12:18:34 +02:00
|
|
|
public function isPaid()
|
|
|
|
{
|
|
|
|
return $this->invoice_status_id >= INVOICE_STATUS_PAID;
|
|
|
|
}
|
|
|
|
|
2013-12-31 17:38:49 +01:00
|
|
|
public function hidePrivateFields()
|
|
|
|
{
|
2014-04-21 23:39:42 +02:00
|
|
|
$this->setVisible([
|
|
|
|
'invoice_number',
|
|
|
|
'discount',
|
|
|
|
'po_number',
|
|
|
|
'invoice_date',
|
|
|
|
'due_date',
|
|
|
|
'terms',
|
|
|
|
'public_notes',
|
|
|
|
'amount',
|
|
|
|
'balance',
|
|
|
|
'invoice_items',
|
|
|
|
'client',
|
|
|
|
'tax_name',
|
|
|
|
'tax_rate',
|
|
|
|
'account',
|
|
|
|
'invoice_design_id']);
|
2013-12-31 20:49:54 +01:00
|
|
|
|
2014-04-21 23:39:42 +02:00
|
|
|
$this->client->setVisible([
|
|
|
|
'name',
|
|
|
|
'address1',
|
|
|
|
'address2',
|
|
|
|
'city',
|
|
|
|
'state',
|
|
|
|
'postal_code',
|
|
|
|
'work_phone',
|
|
|
|
'payment_terms',
|
|
|
|
'contacts',
|
|
|
|
'country',
|
|
|
|
'currency_id',
|
|
|
|
'custom_value1',
|
|
|
|
'custom_value2']);
|
|
|
|
|
|
|
|
$this->account->setVisible([
|
|
|
|
'name',
|
|
|
|
'address1',
|
|
|
|
'address2',
|
|
|
|
'city',
|
|
|
|
'state',
|
|
|
|
'postal_code',
|
|
|
|
'work_phone',
|
|
|
|
'work_email',
|
|
|
|
'country',
|
|
|
|
'currency_id',
|
|
|
|
'custom_label1',
|
|
|
|
'custom_value1',
|
|
|
|
'custom_label2',
|
|
|
|
'custom_value2',
|
|
|
|
'custom_client_label1',
|
|
|
|
'custom_client_label2']);
|
2013-12-31 17:38:49 +01:00
|
|
|
|
|
|
|
foreach ($this->invoice_items as $invoiceItem)
|
|
|
|
{
|
2014-04-21 23:39:42 +02:00
|
|
|
$invoiceItem->setVisible([
|
|
|
|
'product_key',
|
|
|
|
'notes',
|
|
|
|
'cost',
|
|
|
|
'qty',
|
|
|
|
'tax_name',
|
|
|
|
'tax_rate']);
|
2013-12-31 17:38:49 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
foreach ($this->client->contacts as $contact)
|
|
|
|
{
|
2014-04-21 23:39:42 +02:00
|
|
|
$contact->setVisible([
|
|
|
|
'first_name',
|
|
|
|
'last_name',
|
|
|
|
'email',
|
|
|
|
'phone']);
|
2013-12-31 17:38:49 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2013-12-11 12:11:59 +01:00
|
|
|
public function shouldSendToday()
|
|
|
|
{
|
|
|
|
$dayOfWeekToday = date('w');
|
|
|
|
$dayOfWeekStart = date('w', strtotime($this->start_date));
|
|
|
|
|
|
|
|
$dayOfMonthToday = date('j');
|
|
|
|
$dayOfMonthStart = date('j', strtotime($this->start_date));
|
2014-01-09 14:44:55 +01:00
|
|
|
|
|
|
|
if (!$this->last_sent_date)
|
|
|
|
{
|
2013-12-11 12:11:59 +01:00
|
|
|
$daysSinceLastSent = 0;
|
|
|
|
$monthsSinceLastSent = 0;
|
2014-01-09 14:44:55 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2013-12-11 12:11:59 +01:00
|
|
|
$date1 = new DateTime($this->last_sent_date);
|
|
|
|
$date2 = new DateTime();
|
|
|
|
$diff = $date2->diff($date1);
|
|
|
|
$daysSinceLastSent = $diff->format("%a");
|
|
|
|
$monthsSinceLastSent = ($diff->format('%y') * 12) + $diff->format('%m');
|
|
|
|
|
2014-01-09 14:44:55 +01:00
|
|
|
if ($daysSinceLastSent == 0)
|
|
|
|
{
|
2013-12-11 12:11:59 +01:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
2014-01-09 14:44:55 +01:00
|
|
|
|
2013-12-11 12:11:59 +01:00
|
|
|
switch ($this->frequency_id)
|
|
|
|
{
|
|
|
|
case FREQUENCY_WEEKLY:
|
|
|
|
return $dayOfWeekStart == $dayOfWeekToday;
|
|
|
|
case FREQUENCY_TWO_WEEKS:
|
|
|
|
return $dayOfWeekStart == $dayOfWeekToday && (!$daysSinceLastSent || $daysSinceLastSent == 14);
|
|
|
|
case FREQUENCY_FOUR_WEEKS:
|
|
|
|
return $dayOfWeekStart == $dayOfWeekToday && (!$daysSinceLastSent || $daysSinceLastSent == 28);
|
|
|
|
case FREQUENCY_MONTHLY:
|
|
|
|
return $dayOfMonthStart == $dayOfMonthToday || $daysSinceLastSent > 31;
|
|
|
|
case FREQUENCY_THREE_MONTHS:
|
2014-01-02 18:16:00 +01:00
|
|
|
return ($dayOfMonthStart == $dayOfMonthToday && (!$daysSinceLastSent || $monthsSinceLastSent == 3)) || $daysSinceLastSent > 92;
|
2013-12-11 12:11:59 +01:00
|
|
|
case FREQUENCY_SIX_MONTHS:
|
2014-01-02 18:16:00 +01:00
|
|
|
return ($dayOfMonthStart == $dayOfMonthToday && (!$daysSinceLastSent || $monthsSinceLastSent == 6)) || $daysSinceLastSent > 183;
|
2013-12-11 12:11:59 +01:00
|
|
|
case FREQUENCY_ANNUALLY:
|
2014-01-02 18:16:00 +01:00
|
|
|
return ($dayOfMonthStart == $dayOfMonthToday && (!$daysSinceLastSent || $monthsSinceLastSent == 12)) || $daysSinceLastSent > 365;
|
2013-12-11 12:11:59 +01:00
|
|
|
default:
|
2014-01-02 00:12:33 +01:00
|
|
|
Utils::fatalError("Invalid frequency supplied: " . $this->frequency_id);
|
2013-12-11 12:11:59 +01:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
2013-11-26 22:45:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
Invoice::created(function($invoice)
|
|
|
|
{
|
|
|
|
Activity::createInvoice($invoice);
|
2013-12-30 21:17:45 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
Invoice::updating(function($invoice)
|
|
|
|
{
|
|
|
|
Activity::updateInvoice($invoice);
|
2014-01-09 11:39:20 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
Invoice::deleting(function($invoice)
|
|
|
|
{
|
|
|
|
Activity::archiveInvoice($invoice);
|
2013-11-26 22:45:10 +01:00
|
|
|
});
|