public function xuatHangHoaAction()
 {
     $request = $this->getRequest();
     if ($request->isPost()) {
         $san_pham_table = $this->getServiceLocator()->get('Application\\Model\\SanPhamTable');
         $hoa_don_table = $this->getServiceLocator()->get('Application\\Model\\HoaDonTable');
         $ct_hoa_don_table = $this->getServiceLocator()->get('Application\\Model\\CtHoaDonTable');
         $id_user = $this->AuthService()->getUserId();
         $post = $request->getPost();
         $id_hoa_don = '';
         $danh_sach_san_pham = array();
         foreach ($post['id_san_pham'] as $key => $id_san_pham) {
             $form = $this->getServiceLocator()->get('Application\\Form\\XuatHangHoaForm');
             $data = array();
             $data['id_khach_hang'] = $post['id_khach_hang'];
             $data['id_san_pham'] = $id_san_pham;
             $data['so_luong'] = round($post['so_luong'][$key], 0, PHP_ROUND_HALF_DOWN);
             $data['gia_nhap'] = ceil($post['gia_nhap'][$key]);
             $data['gia_xuat'] = ceil($post['gia_xuat'][$key]);
             $san_pham = $san_pham_table->getSanPhamByArrayConditionAndArrayColumn(array('id_san_pham' => $id_san_pham), array());
             $danh_sach_san_pham[$id_san_pham] = $san_pham[0];
             $co_kiem_tra_so_luong = 0;
             if ($san_pham[0]['ton_kho'] < $data['so_luong']) {
                 $co_kiem_tra_so_luong = 1;
             } else {
                 $danh_sach_san_pham[$id_san_pham]['ton_kho'] = $san_pham[0]['ton_kho'] - $data['so_luong'];
             }
             $form->setData($data);
             if ($form->isValid() and $co_kiem_tra_so_luong == 0) {
                 // tạo hóa đơn
                 if (!$id_hoa_don) {
                     $hoa_don_moi = new HoaDon();
                     $hoa_don_moi->setIdKhachHang($post['id_khach_hang']);
                     $hoa_don_moi->setIdUser($id_user);
                     $date = date('Y-m-d h:i:s a', time());
                     $hoa_don_moi->setNgayXuat($date);
                     $hoa_don_moi->setState(0);
                     $ma_hoa_don = $this->TaoMaTuDong()->taoMaHoaDon();
                     $hoa_don_moi->setMaHoaDon($ma_hoa_don);
                     $hoa_don_table->saveHoaDon($hoa_don_moi);
                     $hoa_don = $hoa_don_table->getHoaDonByArrayConditionAndArrayColumn(array('ma_hoa_don' => $ma_hoa_don), array('id_hoa_don'));
                     $id_hoa_don = $hoa_don[0]['id_hoa_don'];
                 }
                 // tạo chi tiết hóa đơn
                 $ct_hoa_don_moi = new CtHoaDon();
                 $ct_hoa_don_moi->exchangeArray($data);
                 $ct_hoa_don_moi->setGia($data['gia_xuat']);
                 $ct_hoa_don_moi->setIdHoaDon($id_hoa_don);
                 $ct_hoa_don_moi->setState(0);
                 $ct_hoa_don_moi->setSoLuongTra(0);
                 $ct_hoa_don_table->saveCtHoaDon($ct_hoa_don_moi);
             } else {
                 // xóa dữ liệu hóa đơn
                 if ($id_hoa_don) {
                     $hoa_don_table->xoaHoaDon(array('id_hoa_don' => $id_hoa_don));
                 }
                 // chuyển trang thông báo lỗi
                 $this->flashMessenger()->addErrorMessage('Lỗi, không thể xuất hàng hóa!');
                 return $this->redirect()->toRoute('hang_hoa', array('action' => 'xuat-hang-hoa'));
             }
         }
         // cập nhật lại số lượng trong csdl
         foreach ($danh_sach_san_pham as $key => $san_pham) {
             $san_pham_moi = new SanPham();
             $san_pham_moi->exchangeArray($san_pham);
             $san_pham_table->saveSanPham($san_pham_moi);
         }
         // kiểm tra bảng công nợ nhà cung cấp, nếu chưa tồn tại dòng công nợ nào của nhà cung cấp thì thêm vào, vì nếu ko có dòng công nợ đó thì phần ( thanh_toan => nhà cung cấp ) chạy sai
         $cong_no_khach_hang_table = $this->getServiceLocator()->get('Application\\Model\\CongNoKhachHangTable');
         $cong_no_exist = $cong_no_khach_hang_table->getCongNoKhachHangByArrayConditionAndArrayColumn(array('id_khach_hang' => $post['id_khach_hang']), array('id_cong_no' => new Expression('max(id_cong_no)')));
         if (!$cong_no_exist[0]['id_cong_no']) {
             $cong_no_moi = new CongNoKhachHang();
             $cong_no_moi->setIdKhachHang($post['id_khach_hang']);
             $date = date('Y-m-d h:i:s a', time());
             $cong_no_moi->setKi($date);
             $cong_no_moi->setNoDauKi(0);
             $cong_no_moi->setNoPhatSinh(0);
             $cong_no_moi->setDuNo(0);
             $cong_no_khach_hang_table->saveCongNo($cong_no_moi);
         }
         // xuất hàng hóa thành công
         $this->flashMessenger()->addSuccessMessage('Chúc mừng, xuất hàng hóa thành công!');
         return $this->redirect()->toRoute('hang_hoa', array('action' => 'in-hoa-don', 'id' => $id_hoa_don));
     }
 }
 public function saveHoaDon(HoaDon $hoa_don)
 {
     $data = array('id_user' => $hoa_don->getIdUser(), 'id_khach_hang' => $hoa_don->getIdKhachHang(), 'ma_hoa_don' => $hoa_don->getMaHoaDon(), 'ngay_xuat' => $hoa_don->getNgayXuat(), 'state' => $hoa_don->getState());
     $id_hoa_don = (int) $hoa_don->getIdHoaDon();
     if ($id_hoa_don == 0) {
         $this->tableGateway->insert($data);
     } else {
         if ($this->getHoaDonByArrayConditionAndArrayColumn(array('id_hoa_don' => $id_hoa_don), array('ma_hoa_don'))) {
             $this->tableGateway->update($data, array('id_hoa_don' => $id_hoa_don));
         } else {
             return false;
         }
     }
     return true;
 }