/**
  * Store a newly created resource in storage.
  *
  * @return Response
  */
 public function store()
 {
     $validator = Validator::make(Input::all(), Sales::$rules);
     if ($validator->passes()) {
         // Create customer if required
         $customer = new Customers();
         if (Input::get('name')) {
             $customer->name = Input::get('name');
             $customer->address = Input::get('address');
             $customer->contact = Input::get('contact');
             $customer->save();
         }
         $sale = new Sales();
         $sale->reference_no = '';
         $sale->customer_id = $customer->id ? $customer->id : 0;
         $sale->outlet_id = $this->user->outlet_id;
         $sale->discount = Input::get('discount');
         $sale->paid = Input::get('paid');
         $sale->total = Input::get('grandtotal');
         $sale->notes = Input::get('notes');
         $sale->status = Input::get('paid') == Input::get('grandtotal') ? 'completed' : 'credit';
         if ($sale->save()) {
             $sale->reference_no = 'SALE-' . date('Ymd') . '-' . str_pad($sale->id, 3, 0, STR_PAD_LEFT);
             $sale->save();
             foreach (Input::get('cart') as $productId => $item) {
                 $itemDiscount = 0;
                 if ($item['discount_type'] == 'fixed') {
                     $itemDiscount = $item['discount_amount'] * $item['quantity'];
                 } elseif ($item['discount_type'] == 'percentage') {
                     $itemDiscount = $item['discount_amount'] / 100 * $item['sp'] * $item['quantity'];
                 }
                 $salesItem = new SalesItems();
                 $salesItem->sales_id = $sale->id;
                 $salesItem->product_id = $productId;
                 $salesItem->cp = $item['cp'];
                 $salesItem->sp = $item['sp'];
                 $salesItem->quantity = $item['quantity'];
                 $salesItem->total = $item['quantity'] * $item['sp'] - $itemDiscount;
                 $salesItem->discount_type = $item['discount_type'];
                 $salesItem->discount_amount = $item['discount_amount'];
                 $salesItem->discount_total = $itemDiscount;
                 $salesItem->save();
                 if ($this->user->outlet_id != 0) {
                     $outletstock = OutletsStocks::where('product_id', '=', $productId)->where('outlet_id', '=', $this->user->outlet_id)->first();
                     $outletstock->quantity = $outletstock->quantity - $salesItem->quantity;
                     $outletstock->save();
                 } else {
                     // Update product stock
                     $product = Products::find($productId);
                     $product->quantity = $product->quantity - $salesItem->quantity;
                     $product->save();
                 }
             }
         }
         return Redirect::route('sales.edit', $sale->id)->with('success', 'New sale added successfully');
     } else {
         return Redirect::route('sales.create')->withErrors($validator)->withInput(Input::all());
     }
 }
Example #2
0
 public static function index()
 {
     return function ($request, $response) {
         if ($request->session('admin')) {
             switch ($request->method()) {
                 case 'GET':
                     #echo "GET";
                     $sales = Sales::all();
                     $response->json($sales->as_array());
                     break;
                 case 'POST':
                     $data = $request->data();
                     $sales = new Sales();
                     $sales->date = $data->date;
                     $sales->order = $data->order_id;
                     $sales->amount = $data->amount;
                     $sales->save();
                     $response->json($sales->as_array());
                     break;
                 case 'DELETE':
                     # code...
                     echo "DELETE";
                     break;
                 case 'PUT':
                     # code...
                     echo "PUT";
                     break;
                 default:
                     # code...
                     break;
             }
         } else {
             $response->code(403);
         }
     };
 }
Example #3
0
 public function executeCheckout()
 {
     $this->user = $this->getUser()->getRaykuUser();
     $voucher_id = $this->getUser()->getAttribute('voucher_id');
     $offer = OfferVoucherPeer::retrieveByPK($voucher_id);
     //$_SESSION['offerid'] = $offer->getId();
     if ($this->getRequest()->getMethod() == sfRequest::POST) {
         $c = new Criteria();
         $c->add(ShoppingCartPeer::IS_ACTIVE, true);
         $c->add(ShoppingCartPeer::USER_ID, $this->user->getId());
         $c->addDescendingOrderByColumn(ShoppingCartPeer::CREATED_AT);
         $this->cart_items = ShoppingCartPeer::doSelect($c);
         $purchase_detail = $this->getRequestParameter('purchase');
         foreach ($purchase_detail as $index => $value) {
             $purchaseDetail[$index] = trim($value);
         }
         if ($purchaseDetail['name'] == '' || $purchaseDetail['email'] == '' || $purchaseDetail['address_1'] == '' || $purchaseDetail['city'] == '' || $purchaseDetail['state'] == '' || $purchaseDetail['zip'] == '' || $purchaseDetail['country'] == '' || $purchaseDetail['tel'] == '') {
             sfProjectConfiguration::getActive()->loadHelpers(array('Url', 'Tag'));
             $this->msg = "<p>Please fill in all additional information on the <b>Purchase Cart</b> page.</p>";
             $this->msg .= "<p>" . link_to('Go back to the <b>Purchase Cart</b> page.', 'shop/checkoutPage') . "</p>";
         } else {
             if (count($this->cart_items) > 0) {
                 $count = 0;
                 $tot_price = 0;
                 $tot_item_price = 0;
                 $tot_shipping_price = 0;
                 $tot_quantity = 0;
                 foreach ($this->cart_items as $cart_item) {
                     $tot_price = $tot_price + $cart_item->getTotalPrice() + $cart_item->getTotalShippingCharge();
                     if ($tot_price > $this->user->getPoints()) {
                         break;
                     }
                     $sales_detail = new SalesDetail();
                     $sales_detail->setItemId($cart_item->getItemId());
                     $sales_detail->setTotalPrice($cart_item->getTotalPrice());
                     $sales_detail->setTotalShippingCharge($cart_item->getTotalShippingCharge());
                     $sales_detail->setQuantity($cart_item->getQuantity());
                     $sales_detail->save();
                     $count++;
                     $tot_item_price = $tot_item_price + $cart_item->getTotalPrice();
                     $tot_shipping_price = $tot_shipping_price + $cart_item->getTotalShippingCharge();
                     $tot_quantity = $tot_quantity + $cart_item->getQuantity();
                     $itemPurchased = ItemPeer::retrieveByPK($cart_item->getItemId());
                     if (empty($purchasedItems)) {
                         $purchasedItems = $itemPurchased->getTitle();
                     } else {
                         $purchasedItems = $purchasedItems . "," . $itemPurchased->getTitle();
                     }
                     $cart_item->delete();
                 }
                 $sales = new Sales();
                 if ($offer instanceof OfferVoucher) {
                     $tot_price = $tot_price - $offer->getPrice();
                     //$sales->setOfferVoucherId($offer->getId());
                     $offer->setIsUsed(true);
                     $offer->save();
                 }
                 $sales->setTotalSalePrice($tot_price);
                 $sales->setTotalItemPrice($tot_item_price);
                 $sales->setTotalShippingCharge($tot_shipping_price);
                 $sales->setQuantity($tot_quantity);
                 $sales->setStatusId(1);
                 $sales->save();
                 $this->user->setPoints($this->user->getPoints() - $tot_price);
                 $this->user->save();
                 $full_name = htmlentities($purchase_detail['name']);
                 $email = htmlentities($purchase_detail['email']);
                 $address_1 = htmlentities($purchase_detail['address_1']);
                 $address_2 = htmlentities($purchase_detail['address_2']);
                 $city = htmlentities($purchase_detail['city']);
                 $state = htmlentities($purchase_detail['state']);
                 $zip = htmlentities($purchase_detail['zip']);
                 $country = htmlentities($purchase_detail['country']);
                 $tel = htmlentities($purchase_detail['tel']);
                 $purchase_detail = new PurchaseDetail();
                 $purchase_detail->setFullName($full_name);
                 $purchase_detail->setUserId($this->user->getId());
                 $purchase_detail->setEmail($email);
                 $purchase_detail->setAddress1($address_1);
                 $purchase_detail->setAddress2($address_2);
                 $purchase_detail->setCity($city);
                 $purchase_detail->setZip($zip);
                 $purchase_detail->setState($state);
                 $purchase_detail->setCountry($country);
                 $purchase_detail->setSalesId($sales->getId());
                 $purchase_detail->save();
                 $user = $this->getUser()->getRaykuUser();
                 $this->mail = Mailman::createCleanMailer();
                 $this->mail->setSubject('Rayku.com Shoping Item Purchase Details');
                 $this->mail->setFrom($user->getName() . ' <' . $user->getEmail() . '>');
                 $to = "*****@*****.**";
                 $items = "<b>" . $purchasedItems . "</b>";
                 sfProjectConfiguration::getActive()->loadHelpers(array('Partial'));
                 $this->mail->setBody(get_partial('purchaseitem', array('name' => $user->getName(), 'user' => $user, 'items' => $items)));
                 $this->mail->setContentType('text/html');
                 $this->mail->addAddress($to);
                 $this->mail->send();
                 $this->msg = "<p style='font-size:14px;color:#444444'>You have just spent " . $tot_price . "RP to purchase " . $count . " item(s).<br /><br />A Rayku administrator has been notified, and will deliver your purchase as soon as possible. Once your order has been processed, you will be notified by private message here on Rayku.<br /><br />Thanks!<br />Rayku.com Staff</p>";
                 $this->getUser()->setAttribute('voucher_id', null);
             } else {
                 $this->msg = "<p style='font-size:14px;color:#444444'>No items in cart</p>";
             }
         }
     } else {
         $this->msg = "<p style='font-size:14px;color:#444444'>Unauthorized access.</p>";
     }
 }
Example #4
0
 /**
  * Performs the work of inserting or updating the row in the database.
  *
  * If the object is new, it inserts it; otherwise an update is performed.
  * All related objects are also updated in this method.
  *
  * @param      PropelPDO $con
  * @return     int The number of rows affected by this insert/update and any referring fk objects' save() operations.
  * @throws     PropelException
  * @see        save()
  */
 protected function doSave(PropelPDO $con)
 {
     $affectedRows = 0;
     // initialize var to track total num of affected rows
     if (!$this->alreadyInSave) {
         $this->alreadyInSave = true;
         // We call the save method on the following object(s) if they
         // were passed to this object by their coresponding set
         // method.  This object relates to these object(s) by a
         // foreign key reference.
         if ($this->aUser !== null) {
             if ($this->aUser->isModified() || $this->aUser->isNew()) {
                 $affectedRows += $this->aUser->save($con);
             }
             $this->setUser($this->aUser);
         }
         if ($this->aSales !== null) {
             if ($this->aSales->isModified() || $this->aSales->isNew()) {
                 $affectedRows += $this->aSales->save($con);
             }
             $this->setSales($this->aSales);
         }
         if ($this->isNew()) {
             $this->modifiedColumns[] = PurchaseDetailPeer::ID;
         }
         // If this object has been modified, then save it to the database.
         if ($this->isModified()) {
             if ($this->isNew()) {
                 $pk = PurchaseDetailPeer::doInsert($this, $con);
                 $affectedRows += 1;
                 // we are assuming that there is only 1 row per doInsert() which
                 // should always be true here (even though technically
                 // BasePeer::doInsert() can insert multiple rows).
                 $this->setId($pk);
                 //[IMV] update autoincrement primary key
                 $this->setNew(false);
             } else {
                 $affectedRows += PurchaseDetailPeer::doUpdate($this, $con);
             }
             $this->resetModified();
             // [HL] After being saved an object is no longer 'modified'
         }
         $this->alreadyInSave = false;
     }
     return $affectedRows;
 }
 public function actionAddSales()
 {
     $pid = $_POST['pid'];
     $saleDate = $_POST['saleDate'];
     $saleCount = $_POST['saleCount'];
     // $pid = 9;
     // $saleDate = '2012-03-10';
     // $saleCount = 7;
     $sql = "SELECT * FROM product WHERE id=" . $pid;
     $product = Product::model()->findBySql($sql);
     $result = false;
     if ($product) {
         // $sql = "SELECT * FROM sales WHERE pid=".$pid." AND timestamp=".$saleDate;
         $sql = "SELECT * FROM sales WHERE pid=" . $pid . " AND timestamp='" . $saleDate . "'";
         $haveSale = Sales::model()->findBySql($sql);
         // echo var_dump($haveSale);
         // die();
         if (null == $haveSale) {
             // echo "yes";
             $newSale = new Sales();
             $newSale->pid = $pid;
             $newSale->count = $saleCount;
             $newSale->timestamp = $saleDate;
             $newSale->save();
             $result = true;
         }
     }
     echo $result;
 }