/** * * @param null|string $name */ public function __construct($serviceLocator) { parent::__construct('transactionFilter'); $this->setServiceLocator($serviceLocator); $this->setAttribute('method', 'GET'); $filter = $this->getInputFilter(); $id = new Text('id'); $id->setAttributes(['placeholder' => 'ID']); $this->add($id); $filter->add(array('name' => 'id', 'required' => false, 'filters' => array(array('name' => 'StringTrim'), array('name' => 'Digits')))); $companyId = $this->addElementCompany('companyId', null, ['required' => false]); $transaction = new \Accounting\Model\Transaction(); $status = new Select('status'); $status->setValueOptions(['' => '- Trạng thái -'] + $transaction->getStatuses()); $this->add($status); $filter->add(array('name' => 'status', 'required' => false, 'filters' => array(array('name' => 'StringTrim'), array('name' => 'Digits')))); $type = new Select('type'); $type->setValueOptions(['' => '- Loại phiếu -'] + $transaction->getTypes()); $this->add($type); $filter->add(array('name' => 'type', 'required' => false, 'filters' => array(array('name' => 'StringTrim'), array('name' => 'Digits')))); $applyDateRange = new Text('applyDateRange'); $applyDateRange->setAttributes(array('placeholder' => 'Ngày hạch toán', 'class' => 'date-range-picker')); $this->add($applyDateRange); $filter->add(array('name' => 'applyDateRange', 'required' => false, 'filters' => array(array('name' => 'StringTrim')))); $createdByName = new Text('createdByName'); $createdByName->setAttributes(array('placeholder' => 'Người tạo')); $this->add($createdByName); $filter->add(array('name' => 'createdByName', 'required' => false, 'filters' => array(array('name' => 'StringTrim')))); $createdById = new Hidden('createdById'); $this->add($createdById); $filter->add(array('name' => 'createdById', 'required' => false, 'filters' => array(array('name' => 'StringTrim'), array('name' => 'Digits')))); $this->add(array('name' => 'submit', 'options' => array(), 'attributes' => array('type' => 'submit', 'value' => 'Lọc', 'id' => 'btnFilterCompanyContact', 'class' => 'btn btn-primary'))); }
/** * @author KienNN * @param \Accounting\Model\Transaction $item */ public function fetchAll($item) { $select = $this->getDbSql()->select(['t' => self::TABLE_NAME]); if ($item->getItemId()) { $select->where(['t.itemId' => $item->getItemId()]); } if ($item->getItemType()) { $select->where(['t.itemType' => $item->getItemType()]); } $select->order(['t.id DESC']); $rows = $this->getDbAdapter()->query($this->getDbSql()->buildSqlString($select), Adapter::QUERY_MODE_EXECUTE); $result = []; if ($rows->count()) { foreach ($rows->toArray() as $row) { $model = new \Accounting\Model\Transaction(); $model->exchangeArray($row); $result[] = $model; } } return $result; // Nếu muốn load cái j ra nữa thì nhớ check option, vì cái này dùng chung nhiều, load nhiều nặng lắm }
public function paymentAction() { $id = $this->getRequest()->getQuery('id'); if (!$id) { return $this->getViewModel()->setVariable('errorMsg', ['Không tìm thấy phiếu thu chi']); } $transaction = new \Accounting\Model\Transaction(); $transaction->setId($id); $transactionMapper = $this->getServiceLocator()->get('\\Accounting\\Model\\TransactionMapper'); if (!$transactionMapper->get($transaction)) { return $this->getViewModel()->setVariable('errorMsg', ['Không tìm thấy phiếu thu chi']); } if (!in_array($transaction->getStatus(), [\Accounting\Model\Transaction::STATUS_ACCOUNTING])) { return $this->getViewModel()->setVariable('errorMsg', ['Phiếu chưa được hạch toán, không thể kí chi thu']); } $form = new \Accounting\Form\Transaction\ApproveReq($this->getServiceLocator()); $form->setData($transaction->toFormValue()); $form->setCompanyId($transaction->getCompanyId()); $form->setId($transaction->getId()); $this->getViewModel()->setVariable('form', $form); if ($this->getRequest()->isPost()) { $form->setData($this->getRequest()->getPost()); if ($form->isValid()) { $formData = $form->getData(); $transaction->exchangeArray($formData); $transaction->setPaymentById($this->user()->getIdentity()); $transaction->setPaymentDateTime(DateBase::getCurrentDateTime()); $transaction->setStatus(\Accounting\Model\Transaction::STATUS_PAYMENT); $transactionMapper->save($transaction); if (isset($formData['itemData']) && count($formData['itemData'])) { $transactionItemMapper = $this->getServiceLocator()->get('\\Accounting\\Model\\Transaction\\ItemMapper'); foreach ($formData['itemData'] as $itemData) { $transactionItem = new \Accounting\Model\Transaction\Item(); $transactionItem->exchangeArray($itemData); $transactionItem->setTransactionDate($transaction->getApplyDate()); $transactionItem->setTransactionId($transaction->getId()); $transactionItem->setStatus($transaction->getStatus()); $transactionItemMapper->save($transactionItem); } } return $this->redirect()->toUrl('/accounting/transaction/index?id=' . $transaction->getId()); } } $this->getViewModel()->setVariable('transaction', $transaction); $transactionItem = new \Accounting\Model\Transaction\Item(); $transactionItem->setTransactionId($transaction->getId()); $transactionItem->addOption('loadAccountId', true); $transactionItem->addOption('loadExpenseCategory', true); $transactionItemMapper = $this->getServiceLocator()->get('\\Accounting\\Model\\Transaction\\ItemMapper'); $items = $transactionItemMapper->fetchAll($transactionItem); $this->getViewModel()->setVariable('items', $items); $company = new \Company\Model\Company(); $company->setId($transaction->getCompanyId()); $companyMapper = $this->getServiceLocator()->get('\\Company\\Model\\CompanyMapper'); if ($companyMapper->get($company)) { $this->getViewModel()->setVariable('company', $company); } $userMapper = $this->getServiceLocator()->get('\\User\\Model\\UserMapper'); $this->getViewModel()->setVariable('createdBy', $userMapper->get($transaction->getCreatedById())); if ($transaction->getApprovedById()) { $this->getViewModel()->setVariable('approveBy', $userMapper->get($transaction->getApprovedById())); } if ($transaction->getAccountingById()) { $this->getViewModel()->setVariable('accountingBy', $userMapper->get($transaction->getAccountingById())); } $expenseCategory = new \Accounting\Model\ExpenseCategory(); $expenseCategory->setCompanyId($transaction->getCompanyId()); $expenseCategoryMapper = $this->getServiceLocator()->get('\\Accounting\\Model\\ExpenseCategoryMapper'); $tree = new \Home\Model\Tree(); $this->getViewModel()->setVariable('categories', $tree->toArrayRecusived($expenseCategoryMapper->fetchAll($expenseCategory))); $account = new \Accounting\Model\Account(); $account->setCompanyId($transaction->getCompanyId()); $account->addOption('sort', ['sort' => 'c.id', 'dir' => 'ASC']); $accountMapper = $this->getServiceLocator()->get('\\Accounting\\Model\\AccountMapper'); $this->getViewModel()->setVariable('accounts', $tree->toArrayRecusived($accountMapper->fetchAll($account))); return $this->getViewModel(); }
/** * Chỉ rà soát trong 1 khoảng thời gian nhất định * Rà soát các transaction trong thời gian quy định * Tình toán ra commission theo từng nhân viên * Xóa các payment có transactionId=transaction.id * Tạo mới payment * */ public function recalculatepaymentAction() { $fromDate = '2015-08-01'; $transactionId = $this->getRequest()->getQuery('transactionId'); $dbAdapter = $this->getServiceLocator()->get('dbAdapter'); $dbSql = $this->getServiceLocator()->get('dbSql'); $select = $dbSql->select(['t' => \Accounting\Model\TransactionMapper::TABLE_NAME]); $select->join(['ti' => \Accounting\Model\Transaction\ItemMapper::TABLE_NAME], 't.id=ti.transactionId', ['accountingAccountId' => new Expression('IFNULL(ti.creditAccountId, ti.debitAccountId)')]); $select->where(['createdDate >= ?' => $fromDate]); if ($transactionId) { $select->where(['t.id' => $transactionId]); } $query = $dbSql->buildSqlString($select); //echo $query;die; $rows = $dbAdapter->query($query, Adapter::QUERY_MODE_EXECUTE); $commissionMapper = $this->getServiceLocator()->get('\\Crm\\Model\\Contract\\CommissionMapper'); $productMapper = $this->getServiceLocator()->get('\\Crm\\Model\\Contract\\ProductMapper'); $employeeMapper = $this->getServiceLocator()->get('\\Hrm\\Model\\EmployeeMapper'); $paymentMapper = $this->getServiceLocator()->get('\\Crm\\Model\\Contract\\PaymentMapper'); $accountingAccountMapper = $this->getServiceLocator()->get('\\Accounting\\Model\\AccountMapper'); if ($rows->count()) { foreach ($rows->toArray() as $row) { $transaction = new \Accounting\Model\Transaction(); $transaction->exchangeArray($row); $accountingAccount = new \Accounting\Model\Account(); $accountingAccount->setId($row['accountingAccountId']); $accountingAccountMapper->get($accountingAccount); /** tính toán commission */ // lấy ra các sản phẩm trong hợp đồng $product = new \Crm\Model\Contract\Product(); $product->setContractId($transaction->getItemId()); $products = $productMapper->fetchAll($product); // lấy commission $commission = new \Crm\Model\Contract\Commission(); $commission->setContractId($transaction->getItemId()); $commissions = $commissionMapper->fetchAll($commission); $paymentAmounts = \Crm\Model\Contract\Payment::breakToCommission($transaction->getAmount(), $products, $commissions); /** Xóa các payment có transactionId=transaction.id */ $delete = $dbSql->delete(\Crm\Model\Contract\PaymentMapper::TABLE_NAME); $delete->where(['transactionId' => $transaction->getId()]); $dbAdapter->query($dbSql->buildSqlString($delete), Adapter::QUERY_MODE_EXECUTE); /** Tạo mới payment */ echo '<b>Tạo payment từ transaction ' . $transaction->getId() . '</b><br/>'; foreach ($paymentAmounts as $employeeId => $amount) { // lấy ra user của employee $employee = new \Hrm\Model\Employee(); $employee->setId($employeeId); $employeeMapper->get($employee); if ($employee->getUserId()) { $select = $dbSql->select(['p' => \Crm\Model\Contract\PaymentMapper::TABLE_NAME]); $select->where(['transactionId' => $transaction->getId()]); $select->where(['salemanId' => $employee->getUserId()]); $select->limit(1); $rowP = $dbAdapter->query($dbSql->buildSqlString($select), Adapter::QUERY_MODE_EXECUTE); if ($rowP->count()) { $rowP = (array) $rowP->current(); $payment = new \Crm\Model\Contract\Payment(); $payment->exchangeArray($rowP); $payment->setAmount($amount); $paymentMapper->save($payment); echo '<p style="">Update payment ' . $payment->getId() . ' - amount: ' . $rowP['amount'] . ' -> ' . $payment->getAmount() . '</p><br/>'; } else { $payment = new \Crm\Model\Contract\Payment(); $payment->setAmount($amount); $payment->setSalemanId($employee->getUserId()); $payment->setAccountingAccountId($accountingAccount->getId()); $payment->setTransactionId($transaction->getId()); $payment->setDescription($transaction->getDescription()); $payment->setCompanyId($employee->getCompanyId()); $payment->setDepartmentId($employee->getDepartmentId()); $payment->setContractId($transaction->getItemId()); if ($accountingAccount->getType() == \Accounting\Model\Account::TYPE_CASH) { $payment->setType(\Crm\Model\Contract\Payment::TYPE_CASH); } else { $payment->setType(\Crm\Model\Contract\Payment::TYPE_MONEY_TRANSFER); } if (in_array($transaction->getStatus(), [\Accounting\Model\Transaction::STATUS_ACCOUNTING, \Accounting\Model\Transaction::STATUS_PAYMENT])) { $payment->setStatus(\Crm\Model\Contract\Payment::STATUS_CHECKED); } elseif (in_array($transaction->getStatus(), [\Accounting\Model\Transaction::STATUS_NEW, \Accounting\Model\Transaction::STATUS_APPROVED])) { $payment->setStatus(\Crm\Model\Contract\Payment::STATUS_UNCHECKED); } else { $payment->setStatus(\Crm\Model\Contract\Payment::STATUS_DELETED); } $payment->setCheckedById($transaction->getAccountingById()); $payment->setCheckedDate($transaction->getApplyDate()); $payment->setCheckedDateTime($transaction->getAccountingDateTime()); $payment->setCreatedById($transaction->getAccountingById() ?: $transaction->getCreatedById()); $payment->setCreatedDateTime($transaction->getAccountingDateTime() ?: $transaction->getCreatedDate() . ' ' . $transaction->getCreatedTime()); $paymentMapper->save($payment); echo '--<span style="color:red;">Tạo mới payment ' . $payment->getId() . '</span></br/>'; echo '--------User: '******'<br/>'; echo '--------Amount: ' . $payment->getAmount() . '/ ' . $transaction->getAmount() . '<br/>'; } } } } } die; }