Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
$output) { $obj[$output] = $item[$input]; } $return[] = $obj; } return $return; } private static function _buildObjectsReturn($data, $columns) { $return = array(); foreach ($data as $item) { $obj = new \stdClass(); foreach ($columns as $input => $output) { $obj->{$output} = $item->{$input}; } $return[] = $obj; } return $return; } private static function _buildSingleReturn($data, $columns) { $return = new \stdClass(); foreach ($columns as $input => $output) { $return->{$output} = $data->{$input}; } return $return; } private static function _buildSingleReturnAsArray($data, $columns) { $return = array(); foreach ($columns as $input => $output) { $return[$output] = $data[$input]; } return $return; } public static function getAddressByID($addressID) { $inputOutput = array( 'NOMER' => 'NOMER', 'IME' => 'IME', 'MOL' => 'MOL', 'POST_KOD' => 'POST_KOD', 'ADRES' => 'ADRES', 'TEL' => 'TEL', 'KOMENTAR' => 'KOMENTAR', 'GRAD' => 'GRAD', ); $address = Services::firebird()->table('KONTRAGENTI_OBEKTI')->select(implode(', ', $inputOutput))->where('NOMER', $addressID)->get()->getRow(); $return = self::_buildSingleReturn($address, $inputOutput); unset($addresses); return $return; } public static function getAddressesByCompanyID($companyID) { $inputOutput = array( 'NOMER' => 'NOMER', 'IME' => 'IME', 'POST_KOD' => 'POST_KOD', 'ADRES' => 'ADRES', 'TEL' => 'TEL', 'KOMENTAR' => 'KOMENTAR', 'GRAD' => 'GRAD', ); $addresses = Services::firebird()->table('KONTRAGENTI_OBEKTI') ->select(implode(', ', ($inputOutput))) ->where('KONTRAGENT_NOMER', $companyID) ->get() ->getResult(); $return = self::_buildObjectsReturn($addresses, $inputOutput); unset($addresses); return $return; } public static function getCompanies($companyIDs = array()) { $inputOutput = array( 'COM_NOMER' => 'COM_NOMER', 'NOMER' => 'NOMER', 'KONTR_GRUPA_NOMER' => 'KONTR_GRUPA_NOMER', 'KONTRAGENT' => 'KONTRAGENT', 'CENOVA_LISTA_NOMER' => 'CENOVA_LISTA_NOMER', 'TIP_CENA_NOMER' => 'TIP_CENA_NOMER', 'TIP_CENA_NOMER2' => 'TIP_CENA_NOMER2', 'TIP_CENA_NOMER3' => 'TIP_CENA_NOMER3', 'GRUPIKONTR_KOD' => 'GRUPIKONTR_KOD', 'NACHIN_PLASHTANE' => 'NACHIN_PLASHTANE', 'ZABRANA_ZA_PRODAZBA' => 'ZABRANA_ZA_PRODAZBA', 'PREDUPREZDENIE_PRODAZBA' => 'PREDUPREZDENIE_PRODAZBA', 'MOL' => 'MOL', 'DDSNOMER' => 'DDSNOMER', 'BULSTAT' => 'BULSTAT', 'SEDALISHTE_ADRES' => 'SEDALISHTE_ADRES', 'SEDALISHTE_GRAD' => 'SEDALISHTE_GRAD', 'CREATED_ON' => 'CREATED_ON', 'SROK_NA_PLASHTANE_DNI' => 'SROK_NA_PLASHTANE_DNI' ); // Fetching Data $select = array( 'COM_NOMER' => 'KONTRAGENTI.COM_NOMER', 'NOMER' => 'KONTRAGENTI.NOMER', 'KONTR_GRUPA_NOMER' => 'KONTR_GRUPA_NOMER', 'KONTRAGENT' => 'KONTRAGENT', 'CENOVA_LISTA_NOMER' => 'CENOVA_LISTA_NOMER', 'TIP_CENA_NOMER' => 'TIP_CENA_NOMER', 'TIP_CENA_NOMER2' => 'TIP_CENA_NOMER2', 'TIP_CENA_NOMER3' => 'TIP_CENA_NOMER3', 'GRUPIKONTR_KOD' => 'GRUPIKONTR_KOD', 'NACHIN_PLASHTANE' => 'NACHIN_PLASHTANE', 'ZABRANA_ZA_PRODAZBA' => 'ZABRANA_ZA_PRODAZBA', 'PREDUPREZDENIE_PRODAZBA' => 'PREDUPREZDENIE_PRODAZBA', 'MOL' => 'MOL', 'DDSNOMER' => 'DDSNOMER', 'BULSTAT' => 'BULSTAT', 'SEDALISHTE_ADRES' => 'SEDALISHTE_ADRES', 'SEDALISHTE_GRAD' => 'SEDALISHTE_GRAD', 'CREATED_ON' => 'CREATED_ON', 'SROK_NA_PLASHTANE_DNI' => 'SROK_NA_PLASHTANE_DNI' ); $firebird = Services::firebird()->table('KONTRAGENTI')->select(implode(',', $select)) ->join('GRUPIKONTR', 'GRUPIKONTR.NOMER = KONTRAGENTI.KONTR_GRUPA_NOMER', 'LEFT'); if (!empty($companyIDs)) { $firebird->whereIn('KONTRAGENTI.NOMER', $companyIDs); } $companies = $firebird->get()->getResult(); // End fetching data if (count($companyIDs) == 1) { $return = self::_buildSingleReturn(current($companies), $inputOutput); } else { $return = self::_buildObjectsReturn($companies, $inputOutput); } unset($companies); return $return; } /** * @param $start * @param $end * @return void */ public static function filterAccountsByDateRange($start, $end) { // Shutdown die(); return Services::firebird()->table('KONTRAGENTI_LICA') ->where('CREATED_ON >=', $start) ->where('CREATED_ON <=', $end) ->where('EMAIL IS NOT NULL', NULL, NULL) ->get() ->getResult(); } public static function getCompanyWithPriceType3() { $select = array( 'KONTRAGENTI.NOMER', 'KONTRAGENTI.COM_NOMER', 'KONTRAGENTI.CREATED_BY', 'KONTRAGENTI.CREATED_ON', 'KONTRAGENTI.KONTRAGENT', 'KONTRAGENTI.KRIME', 'KONTRAGENTI.BULSTAT', 'KONTRAGENTI.DDSNOMER', 'KONTRAGENTI.CL_USER_FIELD_1', 'KONTRAGENTI.NACHIN_PLASHTANE', 'TIPOVE_CENI.FULLNAME AS TIP_CENA_NOMER3', ); return Services::firebird() ->table('KONTRAGENTI') ->select(implode(',', $select)) ->join('TIPOVE_CENI', 'TIPOVE_CENI.NOMER = KONTRAGENTI.TIP_CENA_NOMER3', 'LEFT') ->get() ->getResult(); } public static function getCompaniesExcept($companyID = array()) { return Services::firebird()->table('KONTRAGENTI')->select('NOMER')->whereNotIn('NOMER', $companyID)->get()->getResult(); } public static function getCompanyByEmail($email) { return Services::firebird()->table('KONTRAGENTI_LICA') ->select('IME AS Names') ->where('UPPER(EMAIL)', strtoupper($email)) ->get() ->getRow(); } public static function getCompanyDebts($date, $companyIDs) { $allDebSelect = 'KONTRAGENT_NOMER, DALG, DOCUMENT_NOMER, OBEKT_NOMER'; $sql = "SELECT {$allDebSelect} FROM SPRAVKA_DALGOVE_OT_PRODAZBI(NULL, '{$date}', NULL, 'IN({$companyIDs})', NULL, 0) as price"; return Services::firebird()->query($sql)->getResult(); } public static function getCompanyOverDueSales($date, $companyIDs) { $overDueSalesSelect = 'DOCUMENT_NOMER, DOCUMENT_DATA, OBEKT_NOMER, KONTRAGENT_NOMER, STOINOST_BEZ_DDS, STOINOST_S_DDS, SROK_NA_PLASHTANE, PLATENI, DALG'; $sql = "SELECT {$overDueSalesSelect} FROM SPRAVKA_DALGOVE_OT_PRODAZBI(NULL, '{$date}', NULL, 'IN({$companyIDs})', NULL, 1) as price"; return Services::firebird()->query($sql)->getResult(); } public static function getCompanyPaidProfit($date, $companyIDs) { $sql = "SELECT KONTRAGENT_NOMER,OBEKT_NOMER,PLATENI FROM SPRAVKA_DALG_KONTRAGENTI_VIDOVE(NULL, '{$date}', 1, NULL, 'IN({$companyIDs})', 1, NULL, NULL) as price"; return Services::firebird()->query($sql)->getResult(); } public static function getProductByID($productID, $asArray = false) { $inputOutput = array( 'NOMER' => 'NOMER', 'IME' => 'IME', 'IME$1' => 'IME$1', 'OPISANIE_HTML' => 'OPISANIE_HTML', ); $firebird = Services::firebird()->table('POZICII')->select(implode(', ', ($inputOutput)))->where('NOMER', $productID); if ($asArray) { $product = $firebird->get()->getRowArray(); $return = self::_buildSingleReturnAsArray($product, $inputOutput); } else { $product = $firebird->get()->getRow(); $return = self::_buildSingleReturn($product, $inputOutput); } unset($product); return $return; } public static function getProducts($asArray = false) { $cacheName = 'ErpUtils_getProducts' . intval($asArray); if (!$return = cache($cacheName)) { $inputOutput = array( 'NOMER' => 'NOMER', 'IME' => 'IME', 'IME$1' => 'IME$1', 'IME$2' => 'IME$2', 'IZKLUCHEN' => 'IZKLUCHEN', 'BEZNALICHEN' => 'BEZNALICHEN', 'OPISANIE_HTML' => 'OPISANIE_HTML', 'MIARKA_COEF' => 'MIARKA_COEF', 'MATERIAL' => 'MATERIAL', 'USER_FIELD_6' => 'USER_FIELD_6', 'USER_FIELD_5' => 'USER_FIELD_5', 'USER_FIELD_3' => 'USER_FIELD_3', 'GRUPA_NOMER' => 'GRUPA_NOMER', 'PREDUPREZDENIE_MESTENE' => 'PREDUPREZDENIE_MESTENE', 'PREDUPREZDENIE_ZAIAVKA_MESTENE' => 'PREDUPREZDENIE_ZAIAVKA_MESTENE', 'PREDUPREZDENIE_DOSTAVKA' => 'PREDUPREZDENIE_DOSTAVKA', 'PREDUPREZDENIE_ZAIAVKA_DOST' => 'PREDUPREZDENIE_ZAIAVKA_DOST', ); $firebird = Services::firebird()->table('POZICII')->select(implode(', ', ($inputOutput))); if ($asArray) { $products = $firebird->get()->getResultArray(); $return = self::_buildArrayReturn($products, $inputOutput); } else { $products = $firebird->get()->getResult(); $return = self::_buildObjectsReturn($products, $inputOutput); } unset($products); cache()->save($cacheName, $return, 300); } return $return; } public static function getProductMeasures() { $products = self::getProducts(); $return = array(); foreach ($products as $key => $product) { $item = new \stdClass(); $item->ProductCode = $product->NOMER; $item->Divider = $product->MIARKA_COEF; $return[] = $item; } $products = null; unset($products); return $return; } public static function getNoProductsTurnover() { $products = self::getProducts(); $return = array(); foreach ($products as $key => $product) { $item = new \stdClass(); $item->NOMER = $product->NOMER; $item->USER_FIELD_6 = $product->USER_FIELD_6; $item->USER_FIELD_5 = $product->USER_FIELD_5; $item->USER_FIELD_3 = $product->USER_FIELD_3; $item->PREDUPREZDENIE_MESTENE = $product->PREDUPREZDENIE_MESTENE; $item->PREDUPREZDENIE_ZAIAVKA_MESTENE = $product->PREDUPREZDENIE_ZAIAVKA_MESTENE; $item->PREDUPREZDENIE_DOSTAVKA = $product->PREDUPREZDENIE_DOSTAVKA; $item->PREDUPREZDENIE_ZAIAVKA_DOST = $product->PREDUPREZDENIE_ZAIAVKA_DOST; $return[] = $item; } $products = null; unset($products); return $return; } public static function getAverageDeliveryPrice() { $sql = "select t1.SREDNA_DOST_CENA, t1.POS_NOMER from dost_ceni t1 inner join ( select MAX(data) as t2Date, POS_NOMER as t2Nomer from dost_ceni group by dost_ceni.pos_nomer ) as t2 on t1.pos_nomer = t2.t2Nomer AND t1.data = t2.t2Date"; return Services::firebird()->query($sql)->getResult(); } public static function getProductGroups() { $products = self::getProducts(); $return = array(); foreach ($products as $key => $product) { $item = new \stdClass(); $item->NOMER = $product->NOMER; $item->GRUPA_NOMER = $product->GRUPA_NOMER; $return[] = $item; } $products = null; unset($products); return $return; } public static function getProductsForTurnover() { $products = self::getProducts(); $return = array(); foreach ($products as $key => $product) { if ($product->IZKLUCHEN == 0 and $product->BEZNALICHEN == 0 and $product->MATERIAL == 0) { $item = new \stdClass(); $item->NOMER = $product->NOMER; $item->IME = $product->IME; $return[] = $item; } } $products = null; unset($products); return $return; } public static function getProductsByCategoryID($categoryID) { $select[] = 'GRUPIPOS2.NOMER AS ProductBrandCode'; $select[] = 'GRUPIPOS2.FULLNAME AS ProviderBrandName'; $select[] = 'POZICII.IME AS ProductName'; $select[] = 'POZICII.IME$1 AS ProductNameWebsite'; $select[] = 'POZICII.IME$2 AS ProductNameWebsiteEN'; $select[] = 'POZICII.OPISANIE_HTML AS ProductDescription'; $select[] = 'POZICII.USER_FIELD_1 AS CatalogNumber'; $select[] = 'POZICII.USER_FIELD_3 AS Label'; $select[] = 'BARCODES.BARCODE_LIST AS Barcodes'; $select[] = 'POZICII.NOMER AS ProductCode'; $select[] = 'POZICII.USER_FIELD_4 AS SelmaticRank'; $select[] = 'POZICII.GOL_OP_X AS SizeX'; $select[] = 'POZICII.GOL_OP_Y AS SizeY'; $select[] = 'POZICII.GOL_OP_Z AS SizeZ'; $select[] = 'POZICII.GOL_OP_BRUTO AS Weight'; $select[] = 'POZICII.USER_FIELD_6 AS Available'; $select[] = 'POZICII.USER_FIELD_5 AS ProductCategoryCode'; $select[] = 'POZICII.USER_FIELD_5 AS ExportWebsites'; $select[] = 'POZICII.OSNOVEN_DOSTAVCHIK_NOMER AS DefaultProvider'; $select[] = 'GRUPIPOS.GRUPIPOS_KOD AS CategoryGroupCode'; $select[] = 'POZICII.DDS_PROC AS Vat'; $select[] = 'POZICII.MIARKA_COEF AS SmallPackage'; $select[] = 'MIARKI.MIARKA AS FirstMeasureName'; $select[] = 'MIARKI2.MIARKA AS SecondMeasureName'; return Services::firebird() ->table('POZICII') ->select(implode(',', $select)) ->join('GRUPIPOS', 'GRUPIPOS.NOMER = POZICII.GRUPA_NOMER', 'LEFT') ->join('GRUPIPOS2', 'GRUPIPOS2.NOMER = POZICII.GRUPA_NOMER2', 'LEFT') ->join('MIARKI', 'MIARKI.NOMER = POZICII.MIARKA_NOMER', 'LEFT') ->join('MIARKI AS MIARKI2', 'MIARKI2.NOMER = POZICII.MIARKA_NOMER2', 'LEFT') ->join('(SELECT LIST(BARCODE_POSNOMER.BARCODE) AS BARCODE_LIST, POS_NOMER AS B_NOMER FROM BARCODE_POSNOMER GROUP BY POS_NOMER) AS BARCODES', 'BARCODES.B_NOMER = POZICII.NOMER', 'LEFT', false) ->groupStart() ->orLike('USER_FIELD_5', '1#' . $categoryID) ->orLike('USER_FIELD_5', '2#' . $categoryID) ->orLike('USER_FIELD_5', '12#' . $categoryID) ->groupEnd() ->where('IZKLUCHEN', 0) ->where('BEZNALICHEN', 0) ->get() ->getResult(); } public static function getProductCategories() { $inputOutput = array( 'ID' => 'ID', 'GROUP_NAME' => 'GROUP_NAME', 'PARRENT_GROUP' => 'PARRENT_GROUP', 'SORTINDEX' => 'SORTINDEX', 'NOMER' => 'NOMER', 'CATEGORY_LEFT' => 'CATEGORY_LEFT', 'CATEGORY_RIGHT' => 'CATEGORY_RIGHT', ); $categories = Services::firebird()->table('W_WEBSHOPPRODUCTGROUPS')->select(implode(', ', ($inputOutput)))->get()->getResult(); $return = self::_buildObjectsReturn($categories, $inputOutput); unset($categories); return $return; } public static function getProductDeliveryPrice($productID) { $query = "select * from GET_DOST_CENA(NULL, current_date, {$productID}) as price"; return Services::firebird()->query($query)->getRow(); } public static function getProductGroupSortingCode() { return Services::firebird()->table('POZICII') ->select('GRUPIPOS.GRUPIPOS_KOD, POZICII.NOMER') ->join('GRUPIPOS', 'GRUPIPOS.NOMER = POZICII.GRUPA_NOMER', 'INNER') ->groupStart() ->orLike('USER_FIELD_5', '1#') ->orLike('USER_FIELD_5', '2#') ->orLike('USER_FIELD_5', '12#') ->groupEnd() ->where('IZKLUCHEN', 0) ->where('BEZNALICHEN', 0) ->get() ->getResult(); } public static function getProductRelativeProducts($productID) { return self::singleton()->firebird ->table('POZICII_RELATED') ->where('POZICII_RELATED.POS_NOMER', $productID) ->get() ->getResult(); } public static function getOfferByID($offerID) { $inputOutput = array( 'POS_NOMER' => 'POS_NOMER', ); $offerProducts = Services::firebird()->table('OFERTI') ->select(implode(', ', ($inputOutput))) ->join('OFERTI_DE', 'OFERTI.NOMER = OFERTI_DE.OFERTA_NOMER') ->where('OFERTI.NOMER', $offerID) ->get() ->getResult(); $return = self::_buildObjectsReturn($offerProducts, $inputOutput); unset($offerProducts); return $return; } // Неизпълнени оферти/заявки // TIP_OFERTA 2 - Заявка - Заявката е ангажиращ документ, с който в склада се "запазват" количествата от съответните артикули, като информацията за това какво е заявено е достъпна от съответните справки и е сравнима с текущо наличните количества. // STATUS 0 - Неизпълнена public static function getUnfulfilledRequest($startDate, $endDate, $storeID) { return self::singleton()->firebird ->table('OFERTI') ->select('OFERTI.NOMER, OFERTI_DE.POS_NOMER, OFERTI_DE.KOL') ->join('OFERTI_DE', 'OFERTI_DE.OFERTA_NOMER = OFERTI.NOMER', 'INNER') ->join('POZICII', 'POZICII.NOMER = OFERTI_DE.POS_NOMER') ->where('OFERTI.STATUS', 0) ->where('OFERTI.TIP_OFERTA ', 2) ->where('OFERTI.DATA >', $startDate) ->where('OFERTI.DATA <=', $endDate) ->where('OFERTI.OBEKT_NOMER', $storeID) ->where('POZICII.BEZNALICHEN', 0) ->where('POZICII.IZKLUCHEN', 0) ->where('POZICII.MATERIAL', 0) ->get() ->getResult(); } // Продажби които са в склана и не са взети // STATUS_PRODAZBA 1 - стоката е още в склада, не е взета от клиента // TIP 0 3 - Обикновена, По заявка public static function getUnPickedSales($startDate, $endDate, $storeID) { return Services::firebird()->table('PRODAZBI') ->select('PRODAZBI.NOMER, PRODAZBI_DE.POS_NOMER, PRODAZBI_DE.KOL') ->join('PRODAZBI_DE', 'PRODAZBI_DE.PRODAZBA_NOMER = PRODAZBI.NOMER', 'INNER') ->join('POZICII', 'POZICII.NOMER = PRODAZBI_DE.POS_NOMER') ->where('PRODAZBI.STATUS_PRODAZBA ', 1) ->where('PRODAZBI.ANULIRAN ', 0) ->where('PRODAZBI.DATA >', $startDate) ->where('PRODAZBI.DATA <=', $endDate) ->where('PRODAZBI.OBEKT_NOMER', $storeID) ->where('POZICII.BEZNALICHEN', 0) ->where('POZICII.IZKLUCHEN', 0) ->where('POZICII.MATERIAL', 0) ->groupStart() ->orWhere('PRODAZBI.TIP', 0) ->orWhere('PRODAZBI.TIP', 3) ->groupEnd() ->get() ->getResult(); } // STATUS // 0, Неизпълнена // 1, Изпълнена // 2, Отказана public static function getOutstandingRequests($startDate, $endDate, $storeID) { return self::singleton()->firebird ->table('ZAIAVKI') ->select('ZAIAVKI.NOMER, ZAIAVKI_DE.POS_NOMER, ZAIAVKI_DE.KOL') ->join('ZAIAVKI_DE', 'ZAIAVKI_DE.ZAIAVKA_NOMER = ZAIAVKI.NOMER', 'INNER') ->join('POZICII', 'POZICII.NOMER = ZAIAVKI_DE.POS_NOMER') ->where('ZAIAVKI.STATUS', 0) ->where('ZAIAVKI.DATA >', $startDate) ->where('ZAIAVKI.DATA <=', $endDate) ->where('ZAIAVKI.OBEKT_NOMER', $storeID) ->where('POZICII.BEZNALICHEN', 0) ->where('POZICII.IZKLUCHEN', 0) ->where('POZICII.MATERIAL', 0) ->get() ->getResult(); } // STATUS_DOSTAVKA // null пристигнал // 1 непристигнал public static function getUnfinishedDeliveries($startDate, $endDate, $storeID) { return self::singleton()->firebird ->table('DOSTAVKI') ->select('DOSTAVKI_DE.POS_NOMER, (DOSTAVKI_DE.KOL)') ->join('DOSTAVKI_DE', 'DOSTAVKI_DE.DOSTAVKA_NOMER = DOSTAVKI.NOMER', 'INNER') ->join('POZICII', 'POZICII.NOMER = DOSTAVKI_DE.POS_NOMER') ->where('DOSTAVKI.STATUS_DOSTAVKA', 1) ->where('DOSTAVKI.DATA >', $startDate) ->where('DOSTAVKI.DATA <=', $endDate) ->where('DOSTAVKI.OBEKT_NOMER', $storeID) ->where('POZICII.BEZNALICHEN', 0) ->where('POZICII.IZKLUCHEN', 0) ->where('POZICII.MATERIAL', 0) ->get() ->getResult(); } public static function getSalesByObjectExcludingCompanies($startDate, $endDate, $storeID, $excludeCompanies = array()) { $builder = self::singleton()->firebird->table('PRODAZBI') ->select('PRODAZBI_DE.POS_NOMER, OBEKT_NOMER, PRODAZBI_DE.KOL, DATA') ->join('PRODAZBI_DE', 'PRODAZBI_DE.PRODAZBA_NOMER = PRODAZBI.NOMER', 'INNER') ->where('PRODAZBI.STATUS_PRODAZBA IS NULL', NULL, NULL) ->where('PRODAZBI.DATA >', $startDate) ->where('PRODAZBI.DATA <=', $endDate) ->where('OBEKT_NOMER', $storeID); if (!empty($excludeCompanies)) { $excludeContragents = array_filter(array_unique(array_map('intval', explode(',', $excludeCompanies)))); if (!empty($excludeContragents)) { $builder->whereNotIn('PRODAZBI.KONTRAGENT_NOMER', $excludeContragents); } } return $builder->get()->getResult(); } public static function getSalesRepresentative() { $inputOutput = array( 'REF_KONTRAGENTI' => 'REF_KONTRAGENTI', 'LIST' => 'LIST' ); return Services::firebird()->table('PROPERTIES_LOG') ->select('REF_KONTRAGENTI, LIST((CAST(IME as varchar(30000)) || \' - \' || CAST(STOINOST as varchar(30000))))') ->join('PROPERTIES', 'PROPERTIES.NOMER = PROPERTIES_LOG.PROPERTY_NOMER') ->whereIn('PROPERTY_NOMER', array(1, 2)) ->where('REF_KONTRAGENTI >', 1) ->groupBy('REF_KONTRAGENTI') ->get() ->getResult(); } public static function getDateSalesRange($startDate, $endDate) { $select = array( 'PRODAZBI.DATA', 'KONTRAGENT_NOMER' ); return Services::firebird() ->table('PRODAZBI') ->select(implode(',', $select)) ->where('PRODAZBI.STATUS_PRODAZBA IS NULL', NULL, NULL) ->where('PRODAZBI.DATA >=', $startDate) ->where('PRODAZBI.DATA <=', $endDate) ->get() ->getResult(); } public static function getSalesProductsBySaleIDs($sales) { $select = array( 'PRODAZBI_DE.NOMER', 'PRODAZBA_NOMER', 'POS_NOMER', 'POZICII.IME', 'KOL', 'TO_PROC', 'MIARKA_NOMER', 'ED_CENA', 'ED_CENA_TO', 'ED_CENA_S_DDS', 'STOINOST_S_DDS', 'STOINOST_BEZ_DDS', 'GRUPIPOS.FULLNAME' ); if (empty($sales)) { return array(); } $result = Services::firebird()->table('PRODAZBI_DE') ->select(implode(',', $select)) ->join('POZICII', 'PRODAZBI_DE.POS_NOMER = POZICII.NOMER') ->join('GRUPIPOS', 'GRUPIPOS.NOMER = POZICII.GRUPA_NOMER') ->whereIn('PRODAZBI_DE.PRODAZBA_NOMER', $sales) ->get() ->getResult(); $return = array(); foreach ($result as $item) { $return[$item->PRODAZBA_NOMER][] = $item; } return $return; } public static function getSaleProductsByOfferIDs($offersIDs) { return Services::firebird()->table('PRODAZBI') ->select('PRODAZBI.NOMER, PRODAZBI.STATUS_PRODAZBA, PRODAZBI_DE.POS_NOMER, ED_CENA_TO, PRODAZBI_DE.DDS_PROC, PRODAZBI_DE.STOINOST_S_DDS, PRODAZBI_DE.STOINOST_BEZ_DDS, KOL, METRO_PORACHKA_NOMER, POZICII.IME, PRODAZBI.CREATED_ON') ->join('PRODAZBI_DE', 'PRODAZBI.NOMER = PRODAZBI_DE.PRODAZBA_NOMER') ->join('POZICII', 'POZICII.NOMER = PRODAZBI_DE.POS_NOMER') ->whereIn('METRO_PORACHKA_NOMER', $offersIDs) ->where('PRODAZBI.STATUS_PRODAZBA IS NULL', false, false) ->orderBy('PRODAZBI.NOMER', 'DESC') ->orderBy('PRODAZBI_DE.POS_NOMER', 'DESC') ->get() ->getResult(); } public static function getSelmaticTotals($offersIDs) { $dataResults = self::getSaleProductsByOfferIDs($offersIDs); $return = array(); foreach ($dataResults as $dataResult) { $return[$dataResult->METRO_PORACHKA_NOMER]['NOMER'] = $dataResult->NOMER; $return[$dataResult->METRO_PORACHKA_NOMER]['METRO_PORACHKA_NOMER'] = $dataResult->METRO_PORACHKA_NOMER; $return[$dataResult->METRO_PORACHKA_NOMER]['STATUS_PRODAZBA'] = $dataResult->STATUS_PRODAZBA; $return[$dataResult->METRO_PORACHKA_NOMER]['PRODUCTS'][] = (object)array( 'PRODAZBA_NOMER' => $dataResult->NOMER, 'STOINOST_S_DDS' => $dataResult->STOINOST_S_DDS, 'STOINOST_BEZ_DDS' => $dataResult->STOINOST_BEZ_DDS, ); @$return[$dataResult->METRO_PORACHKA_NOMER]['TOTAL_WITH_VAT'] += number_format($dataResult->STOINOST_S_DDS, 4, '.', ''); @$return[$dataResult->METRO_PORACHKA_NOMER]['TOTAL_WITHOUT_VAT'] += number_format($dataResult->STOINOST_BEZ_DDS, 4, '.', ''); } return $return; } public static function getSalesGetIncludedSales($sales) { $select = array( 'PRODAZBI.NOMER AS NOMER', 'PRODAZBI.KONTRAGENT_NOMER AS KONTRAGENT_NOMER', 'PRODAZBI.PRIKLUCHEN AS PRIKLUCHEN', 'PRODAZBI.FAKTURA_NOMER AS FAKTURA_NOMER', 'PRODAZBI.FAKTURA_DATA AS FAKTURA_DATA', 'PRODAZBI.NACHIN_PLASHTANE AS NACHIN_PLASHTANE', 'PRODAZBI.SROK_NA_PLASHTANE AS SROK_NA_PLASHTANE', 'PRODAZBI.SASTAVITEL AS SASTAVITEL', 'PRODAZBI.SASTAVITEL_NOMER AS SASTAVITEL_NOMER', 'PRODAZBI.STATUS_PRODAZBA AS STATUS_PRODAZBA', 'PRODAZBI.METRO_PORACHKA_NOMER AS METRO_PORACHKA_NOMER', 'PRODAZBI.KOMENTAR AS KOMENTAR', 'KONTRAGENTI_OBEKTI.IME AS OBEKT_IME', 'KONTRAGENTI_OBEKTI.ADRES AS ADRES', 'KONTRAGENTI_OBEKTI.GRAD AS OBEKT_GRAD', 'KONTRAGENTI_OBEKTI.MOL AS OBEKT_MOL', 'KONTRAGENTI_OBEKTI.KONTRAGENT_NOMER AS KONTRAGENT_NOMER', ); $sales = Services::firebird()->table('PRODAZBI') ->select(implode(',', $select)) ->whereIn('PRODAZBI.NOMER', $sales) ->join('KONTRAGENTI_OBEKTI', 'PRODAZBI.KONTRAGENT_OBEKT_NOMER = KONTRAGENTI_OBEKTI.NOMER', 'LEFT') ->where('PRODAZBI.PRIKLUCHEN', 1) ->get() ->getResult(); return $sales; } public static function getInvoices($companyID) { $select = array( 'PRODAZBI.NOMER AS NOMER', 'PRODAZBI.KONTRAGENT_NOMER AS KONTRAGENT_NOMER', 'PRODAZBI.PRIKLUCHEN AS PRIKLUCHEN', 'PRODAZBI.FAKTURA_NOMER AS FAKTURA_NOMER', 'PRODAZBI.FAKTURA_DATA AS FAKTURA_DATA', 'PRODAZBI.NACHIN_PLASHTANE AS NACHIN_PLASHTANE', 'PRODAZBI.SROK_NA_PLASHTANE AS SROK_NA_PLASHTANE', 'PRODAZBI.SASTAVITEL AS SASTAVITEL', 'PRODAZBI.SASTAVITEL_NOMER AS SASTAVITEL_NOMER', 'PRODAZBI.STATUS_PRODAZBA AS STATUS_PRODAZBA', 'PRODAZBI.METRO_PORACHKA_NOMER AS METRO_PORACHKA_NOMER', 'PRODAZBI.KOMENTAR AS KOMENTAR', 'KONTRAGENTI_OBEKTI.IME AS OBEKT_IME', 'KONTRAGENTI_OBEKTI.ADRES AS ADRES', 'KONTRAGENTI_OBEKTI.GRAD AS OBEKT_GRAD', 'KONTRAGENTI_OBEKTI.MOL AS OBEKT_MOL', 'KONTRAGENTI_OBEKTI.KONTRAGENT_NOMER AS KONTRAGENT_NOMER', ); $masterIncludedSales = array(); $includedSales = Services::firebird()->table('PRODAZBI') ->select(implode(',', $select)) ->join('KONTRAGENTI_OBEKTI', 'PRODAZBI.KONTRAGENT_OBEKT_NOMER = KONTRAGENTI_OBEKTI.NOMER', 'LEFT') ->where('PRODAZBI.KONTRAGENT_NOMER', $companyID) ->where('PRODAZBI.PRIKLUCHEN', 1) ->like('PRODAZBI.KOMENTAR', iconv('UTF-8', 'windows-1251', 'Включена в Продажба №')) ->orderBy('PRODAZBI.DATA_DAN', 'DESC') ->orderBy('PRODAZBI.METRO_PORACHKA_NOMER', 'ASC') ->get() ->getResult(); foreach ($includedSales as $includedSale) { $matches = array(); preg_match('/Включена в Продажба №.*?;/', $includedSale->KOMENTAR, $matches); if (!empty($matches)) { $code = str_replace('Включена в Продажба №', '', $matches[0]); $code = trim($code, ';'); $masterIncludedSales[$code][$includedSale->NOMER] = $includedSale; } } $invoices = Services::firebird()->table('PRODAZBI') ->select(implode(',', $select)) ->join('KONTRAGENTI_OBEKTI', 'PRODAZBI.KONTRAGENT_OBEKT_NOMER = KONTRAGENTI_OBEKTI.NOMER', 'LEFT') ->where('PRODAZBI.KONTRAGENT_NOMER', $companyID) ->where('PRODAZBI.PRIKLUCHEN', 1) ->where('PRODAZBI.FAKTURA_NOMER IS NOT NULL', null, false) ->orderBy('PRODAZBI.DATA_DAN', 'DESC') ->orderBy('PRODAZBI.METRO_PORACHKA_NOMER', 'ASC') ->get() ->getResult(); $reverse = array(); foreach ($invoices as $laKey => $invoice) { $includedSaleIDs = array(); $includedSales = array(); if (strval($invoice->STATUS_PRODAZBA) === '') { $includedSales[$invoice->NOMER] = current(self::getSalesGetIncludedSales([$invoice->NOMER])); $includedSaleIDs[] = $invoice->NOMER; } if (isset($masterIncludedSales[$invoice->NOMER])) { foreach ($masterIncludedSales[$invoice->NOMER] as $key => $masterIncludedSale) { $includedSales[$key] = $masterIncludedSale; } } if (empty($includedSales)) { $invoice->FAKTURA_NOMER; $reverseMatches = array(); preg_match('/Включва Продажби №.*?;/', $invoice->KOMENTAR, $reverseMatches); if (!empty($reverseMatches)) { $reverseCodes = str_replace('Включва Продажби №', '', $reverseMatches[0]); $reverseCodes = trim($reverseCodes, ';'); $reverseCodes = explode(',', $reverseCodes); echo '
' . print_r($invoice, true) . '
'; $reverseSales = self::getSalesGetIncludedSales($reverseCodes); if (!empty($reverseSales)) { foreach ($reverseSales as $reverseSale) { $includedSales[$reverseSale->NOMER] = $reverseSale; } } } } $salesProducts = self::getSalesProductsBySaleIDs(array_keys($includedSales)); $return[$invoice->FAKTURA_NOMER]['Date'] = $invoice->FAKTURA_DATA; $return[$invoice->FAKTURA_NOMER]['Company'] = $companyID; $return[$invoice->FAKTURA_NOMER]['TotalWithVat'] = 0; $return[$invoice->FAKTURA_NOMER]['TotalWithoutVat'] = 0; foreach ($includedSales as $includedSale) { $website = 0; $budget = null; $userName = null; $costs = null; if ($includedSale->METRO_PORACHKA_NOMER) { $websiteID = self::singleton()->db->table('orders') ->select('orders.OrderID, BudgetName,order_account_snippets.Names, Costs') ->where('OfferID', str_replace('99$', '', $includedSale->METRO_PORACHKA_NOMER)) ->join('order_account_snippets', 'order_account_snippets.OrderID = orders.OrderID') ->join('hierarchy_budgets', 'hierarchy_budgets.HierarchyBudgetID = orders.HierarchyBudgetID', 'LEFT') ->get() ->getRow(); if ($websiteID) { $website = $websiteID->OrderID; $budget = $websiteID->BudgetName; $userName = $websiteID->Names; $costs = $websiteID->Costs; } } $return[$invoice->FAKTURA_NOMER]['Sales'][$includedSale->NOMER]['TotalWithVat'] = 0; $return[$invoice->FAKTURA_NOMER]['Sales'][$includedSale->NOMER]['TotalWithoutVat'] = 0; $products = @$salesProducts[$includedSale->NOMER]; if (!empty($products)) { foreach ($products as $product) { $return[$invoice->FAKTURA_NOMER]['TotalWithVat'] += $product->STOINOST_S_DDS; $return[$invoice->FAKTURA_NOMER]['TotalWithoutVat'] += $product->STOINOST_BEZ_DDS; $return[$invoice->FAKTURA_NOMER]['Sales'][$includedSale->NOMER]['TotalWithVat'] += $product->STOINOST_S_DDS; $return[$invoice->FAKTURA_NOMER]['Sales'][$includedSale->NOMER]['TotalWithoutVat'] += $product->STOINOST_BEZ_DDS; } } $return[$invoice->FAKTURA_NOMER]['Sales'][$includedSale->NOMER]['WebsiteSaleID'] = $website; $return[$invoice->FAKTURA_NOMER]['Sales'][$includedSale->NOMER]['BudgetName'] = $budget; $return[$invoice->FAKTURA_NOMER]['Sales'][$includedSale->NOMER]['UserName'] = $userName; $return[$invoice->FAKTURA_NOMER]['Sales'][$includedSale->NOMER]['Costs'] = $costs; $return[$invoice->FAKTURA_NOMER]['Sales'][$includedSale->NOMER]['FAKTURA_DATA'] = $includedSale->FAKTURA_DATA; $return[$invoice->FAKTURA_NOMER]['Sales'][$includedSale->NOMER]['FAKTURA_NOMER'] = $invoice->FAKTURA_NOMER; $return[$invoice->FAKTURA_NOMER]['Sales'][$includedSale->NOMER]['NACHIN_PLASHTANE'] = $includedSale->NACHIN_PLASHTANE; $return[$invoice->FAKTURA_NOMER]['Sales'][$includedSale->NOMER]['SROK_NA_PLASHTANE'] = $includedSale->SROK_NA_PLASHTANE; $return[$invoice->FAKTURA_NOMER]['Sales'][$includedSale->NOMER]['SASTAVITEL'] = $includedSale->SASTAVITEL; $return[$invoice->FAKTURA_NOMER]['Sales'][$includedSale->NOMER]['SASTAVITEL_NOMER'] = $includedSale->SASTAVITEL_NOMER; $return[$invoice->FAKTURA_NOMER]['Sales'][$includedSale->NOMER]['OBEKT_GRAD'] = $includedSale->OBEKT_GRAD; $return[$invoice->FAKTURA_NOMER]['Sales'][$includedSale->NOMER]['OBEKT_MOL'] = $includedSale->OBEKT_MOL; $return[$invoice->FAKTURA_NOMER]['Sales'][$includedSale->NOMER]['OBEKT_IME'] = $includedSale->OBEKT_IME; $return[$invoice->FAKTURA_NOMER]['Sales'][$includedSale->NOMER]['ADRES'] = $includedSale->ADRES; $return[$invoice->FAKTURA_NOMER]['Sales'][$includedSale->NOMER]['sale_number'] = $includedSale->NOMER; $return[$invoice->FAKTURA_NOMER]['Sales'][$includedSale->NOMER]['metro'] = $includedSale->METRO_PORACHKA_NOMER; $return[$invoice->FAKTURA_NOMER]['Sales'][$includedSale->NOMER]['products'] = $products; } } if (is_array($return) and !empty($return)) { foreach ($return as $laKey => $invoice) { if (!isset($invoice['Sales'])) { unset($return[$laKey]); } } } return $return; } public static function getInvoiceByNumber($invoiceID) { return Services::firebird()->table('PRODAZBI') ->select('PRODAZBI.*') ->where('FAKTURA_NOMER', $invoiceID) ->get() ->getRow(); } public static function getSalesObjectByDateRange($startDate, $endDate) { return Services::firebird() ->table('PRODAZBI') ->select('KONTRAGENT_NOMER, LIST(OBEKTI.OBEKT)') ->join('OBEKTI', 'OBEKTI.NOMER = PRODAZBI.OBEKT_NOMER') ->where('PRODAZBI.STATUS_PRODAZBA IS NULL', NULL, NULL) ->where('PRODAZBI.DATA >=', $startDate) ->where('PRODAZBI.DATA <=', $endDate) ->groupBy('KONTRAGENT_NOMER') ->get() ->getResult(); } //стоката е взета от клиента public static function getFinalSalesGroupByCompany($startDate, $endDate) { return Services::firebird() ->table('PRODAZBI') ->select('KONTRAGENT_NOMER, SUM(STOINOST_BEZ_DDS)') ->join('PRODAZBI_DE', 'PRODAZBI.NOMER = PRODAZBI_DE.PRODAZBA_NOMER') ->where('PRODAZBI.STATUS_PRODAZBA IS NULL', NULL, NULL) ->where('PRODAZBI.DATA >=', $startDate) ->where('PRODAZBI.DATA <=', $endDate) ->like('METRO_PORACHKA_NOMER', '99$') ->groupBy('KONTRAGENT_NOMER') ->get() ->getResult(); } public static function getSalesByCompanyID($companyID, $saleID) { $select = array( 'PRODAZBI.NOMER AS PRODAZBI_NOMER', 'PRODAZBI.FAKTURA_NOMER AS PRODAZBI_FAKTURA_NOMER', 'PRODAZBI.OBEKT_NOMER AS PRODAZBI_OBEKT_NOMER', 'PRODAZBI.OFERTA_NOMER AS PRODAZBI_OFERTA_NOMER', 'PRODAZBI.KOMENTAR AS PRODAZBI_KOMENTAR', 'PRODAZBI.DATA AS PRODAZBI_DATA', 'PRODAZBI.KONTRAGENT_IME', 'PRODAZBI.KONTRAGENT_SEDALISHTE_ADRES', 'PRODAZBI.KONTRAGENT_SEDALISHTE_GRAD', 'PRODAZBI.KONTRAGENT_DANNOMER', 'PRODAZBI.KONTRAGENT_BULSTAT', 'PRODAZBI.KONTRAGENT_DDSNOMER', 'PRODAZBI.METRO_PORACHKA_NOMER' ); $builder = Services::firebird()->table('PRODAZBI'); $builder->select(implode(',', $select)); $builder->where('PRODAZBI.KONTRAGENT_NOMER', $companyID); $builder->where('PRODAZBI.PRIKLUCHEN', 1); $builder->where('PRODAZBI.STATUS_PRODAZBA IS NULL', false, false); $builder->where('PRODAZBI.DATA >= ', date('Y-m-d', strtotime('-1 Year'))); if ($saleID) { $builder->where('PRODAZBI.NOMER', $saleID); } $builder->orderBy('DATA', 'DESC'); $sales = $builder->get()->getResult(); return $sales; } public static function getPeakSales($startDate, $endDate, $storeID) { return Services::firebird()->table('PRODAZBI') ->select('PRODAZBI.NOMER, PRODAZBI_DE.POS_NOMER, PRODAZBI_DE.KOL, PRODAZBI.DATA') ->join('PRODAZBI_DE', 'PRODAZBI_DE.PRODAZBA_NOMER = PRODAZBI.NOMER', 'INNER') ->join('POZICII', 'POZICII.NOMER = PRODAZBI_DE.POS_NOMER') ->where('PRODAZBI.STATUS_PRODAZBA IS NULL', NULL, NULL) ->where('PRODAZBI.DATA >', $startDate) ->where('PRODAZBI.DATA <=', $endDate) ->where('PRODAZBI.OBEKT_NOMER', $storeID) ->where('POZICII.BEZNALICHEN', 0) ->where('POZICII.IZKLUCHEN', 0) ->where('POZICII.MATERIAL', 0) ->get() ->getResult(); } // STATUS_OT_OBEKT // null изпратен // 1 неизпратен // STATUS_KAM_OBEKT // null пристигнал // 1 непристигнал public static function getMovements($startDate, $endDate, $storeID) { return Services::firebird() ->table('MESTENE') ->select('MESTENE_DE.POS_NOMER, SUM(MESTENE_DE.KOL) AS KOL') ->join('MESTENE_DE', 'MESTENE_DE.MESTENE_NOMER = MESTENE.NOMER', 'INNER') ->where('OT_OBEKT_NOMER', $storeID) ->where('MESTENE.DATA >', $startDate) ->where('MESTENE.DATA <=', $endDate) ->where('STATUS_OT_OBEKT IS NULL', NULL, NULL) ->where('STATUS_KAM_OBEKT IS NULL', NULL, NULL) ->groupBy('MESTENE_DE.POS_NOMER') ->get() ->getResult(); } public static function getMovementsTurnover($startDate, $endDate, $storeID) { return Services::firebird()->table('MESTENE') ->select('MESTENE.NOMER, MESTENE_DE.POS_NOMER, MESTENE_DE.KOL, OT_OBEKT_NOMER') ->join('MESTENE_DE', 'MESTENE_DE.MESTENE_NOMER = MESTENE.NOMER', 'INNER') ->join('POZICII', 'POZICII.NOMER = MESTENE_DE.POS_NOMER') ->where('MESTENE.DATA >', $startDate) ->where('MESTENE.DATA <=', $endDate) ->where('MESTENE.KAM_OBEKT_NOMER', $storeID) ->where('POZICII.BEZNALICHEN', 0) ->where('POZICII.IZKLUCHEN', 0) ->where('POZICII.MATERIAL', 0) ->groupStart() ->where('MESTENE.STATUS_OT_OBEKT IS NULL', NULL, NULL) ->where('MESTENE.STATUS_KAM_OBEKT', 1) ->groupEnd() ->get() ->getResult(); } public static function getMovementsTurnover2($startDate, $endDate, $fromStoreID, $toStoreID = array()) { return Services::firebird() ->table('MESTENE') ->select('OT_OBEKT_NOMER, KAM_OBEKT_NOMER, POS_NOMER, KOL') ->join('MESTENE_DE', 'MESTENE_DE.MESTENE_NOMER = MESTENE.NOMER', 'INNER') ->groupStart() ->where('STATUS_OT_OBEKT IS NULL', NULL, NULL) ->orWhere('STATUS_OT_OBEKT', 1) ->groupEnd() ->where('OT_OBEKT_NOMER', $fromStoreID) ->whereIn('KAM_OBEKT_NOMER', $toStoreID) ->where('MESTENE.DATA >', $startDate) ->where('MESTENE.DATA <=', $endDate) ->get() ->getResult(); } public static function expectedFromRequestТransfer($startDate, $endDate, $storeID) { return Services::firebird()->table('ZAIAVKI_MESTENE') ->select('ZAIAVKI_MESTENE.NOMER, ZAIAVKI_MESTENE_DE.POS_NOMER, ZAIAVKI_MESTENE_DE.KOL, OT_OBEKT_NOMER') ->join('ZAIAVKI_MESTENE_DE', 'ZAIAVKI_MESTENE_DE.ZAIAVKI_MESTENE_NOMER = ZAIAVKI_MESTENE.NOMER', 'INNER') ->join('POZICII', 'POZICII.NOMER = ZAIAVKI_MESTENE_DE.POS_NOMER') ->where('ZAIAVKI_MESTENE.DATA >', $startDate) ->where('ZAIAVKI_MESTENE.DATA <=', $endDate) ->where('ZAIAVKI_MESTENE.OT_OBEKT_NOMER', $storeID) ->where('POZICII.BEZNALICHEN', 0) ->where('POZICII.IZKLUCHEN', 0) ->where('POZICII.MATERIAL', 0) ->where('ZAIAVKI_MESTENE.STATUS', 0) ->get() ->getResult(); } public static function expectedToRequestТransfer($startDate, $endDate, $storeID) { return Services::firebird()->table('ZAIAVKI_MESTENE') ->select('ZAIAVKI_MESTENE.NOMER, ZAIAVKI_MESTENE_DE.POS_NOMER, ZAIAVKI_MESTENE_DE.KOL, OT_OBEKT_NOMER') ->join('ZAIAVKI_MESTENE_DE', 'ZAIAVKI_MESTENE_DE.ZAIAVKI_MESTENE_NOMER = ZAIAVKI_MESTENE.NOMER', 'INNER') ->join('POZICII', 'POZICII.NOMER = ZAIAVKI_MESTENE_DE.POS_NOMER') ->where('ZAIAVKI_MESTENE.DATA >', $startDate) ->where('ZAIAVKI_MESTENE.DATA <=', $endDate) ->where('ZAIAVKI_MESTENE.KAM_OBEKT_NOMER', $storeID) ->where('POZICII.BEZNALICHEN', 0) ->where('POZICII.IZKLUCHEN', 0) ->where('POZICII.MATERIAL', 0) ->where('ZAIAVKI_MESTENE.STATUS', 0) ->get() ->getResult(); } public static function getWarehouseOperations($startDate, $endDate, $storeID, $type) { return Services::firebird()->table('VATR_SKLAD') ->select('VATR_SKLAD.NOMER, OBEKT_NOMER, POS_NOMER, KOL') ->join('VATR_SKLAD_DE', 'VATR_SKLAD.NOMER = VATR_SKLAD_DE.VATR_SKLAD_NOMER', 'INNER') ->where('VATR_SKLAD.DATA >', $startDate) ->where('VATR_SKLAD.DATA <=', $endDate) ->where('OBEKT_NOMER', $storeID) ->whereIn('TIP_VATR_OPER_NOMER', $type) ->get() ->getResult(); } public static function getDeliveries($startDate, $endDate, $storeID) { return Services::firebird() ->table('DOSTAVKI') ->select('DOSTAVKI_DE.POS_NOMER') ->join('DOSTAVKI_DE', 'DOSTAVKI_DE.DOSTAVKA_NOMER = DOSTAVKI.NOMER', 'INNER') ->where("DOSTAVKI.DATA between '{$startDate}' AND '{$endDate}'") ->where('DOSTAVKI.OBEKT_NOMER', $storeID) ->where('STATUS_DOSTAVKA', NULL, NULL) ->get() ->getResult(); } public static function getNewProducts($startDate, $endDate, $storeID) { $sqls = array(); $sqls[] = Services::firebird() ->table('MESTENE') ->select('MESTENE_DE.POS_NOMER') ->join('MESTENE_DE', 'MESTENE_DE.MESTENE_NOMER = MESTENE.NOMER', 'INNER') ->where("MESTENE.DATA between '{$startDate}' AND '{$endDate}'") ->where('MESTENE.KAM_OBEKT_NOMER', $storeID) ->getCompiledSelect(); $sqls[] = Services::firebird() ->table('DOSTAVKI') ->select('DOSTAVKI_DE.POS_NOMER') ->join('DOSTAVKI_DE', 'DOSTAVKI_DE.DOSTAVKA_NOMER = DOSTAVKI.NOMER', 'INNER') ->where("DOSTAVKI.DATA between '{$startDate}' AND '{$endDate}'") ->where('DOSTAVKI.OBEKT_NOMER', $storeID) ->where('STATUS_DOSTAVKA', NULL, NULL) ->getCompiledSelect(); return Services::firebird()->query(implode(' UNION ', $sqls))->getResult(); } public static function getSalesLines($salesIDs = array()) { sort($salesIDs); $select = array( 'PRODAZBI_DE.NOMER', 'PRODAZBI_DE.PRODAZBA_NOMER', 'PRODAZBI_DE.POS_NOMER', 'PRODAZBI_DE.KOL', 'PRODAZBI_DE.ED_CENA', 'PRODAZBI_DE.ED_CENA_TO', 'PRODAZBI_DE.TO_PROC', 'PRODAZBI_DE.ED_CENA_S_DDS', 'PRODAZBI_DE.STOINOST_DDS', 'PRODAZBI_DE.STOINOST_BEZ_DDS', 'PRODAZBI_DE.STOINOST_S_DDS', 'PRODAZBI_DE.DDS_PROC', 'POZICII.IME', 'MIARKI.MIARKA', 'VALUTI.VALUTA', ); $chunks = array_chunk($salesIDs, 100); $return = array(); foreach ($chunks as $chunk) { $lines = Services::firebird()->table('PRODAZBI_DE') ->select(implode(',', $select)) ->join('POZICII', 'PRODAZBI_DE.POS_NOMER = POZICII.NOMER') ->join('MIARKI', 'MIARKI.NOMER = POZICII.MIARKA_NOMER') ->join('VALUTI', 'VALUTI.NOMER = POZICII.VALUTA_NOMER') ->whereIn('PRODAZBI_DE.PRODAZBA_NOMER', $chunk) ->get() ->getResult(); foreach ($lines as $line) { $line->ED_CENA = str_replace(',', '.', $line->ED_CENA); $line->ED_CENA_TO = str_replace(',', '.', $line->ED_CENA_TO); $line->ED_CENA_S_DDS = str_replace(',', '.', $line->ED_CENA_S_DDS); $line->STOINOST_DDS = str_replace(',', '.', $line->STOINOST_DDS); $line->STOINOST_BEZ_DDS = str_replace(',', '.', $line->STOINOST_BEZ_DDS); $line->STOINOST_S_DDS = str_replace(',', '.', $line->STOINOST_S_DDS); $return[$line->PRODAZBA_NOMER][] = $line; } } return $return; } public static function getOffersByCompanyID($companyID) { $inputOutput = array( 'OFERTI_NOMER' => 'OFERTI_NOMER', 'OFERTI_KOMENTAR' => 'OFERTI_KOMENTAR', 'OFERTI_KOMENTAR2' => 'OFERTI_KOMENTAR2', ); $select = array( 'OFERTI.NOMER as OFERTI_NOMER', 'OFERTI.KOMENTAR as OFERTI_KOMENTAR', 'OFERTI.KOMENTAR2 as OFERTI_KOMENTAR2', ); $builder = Services::firebird()->table('OFERTI'); $builder->select(implode(',', $select)); $builder->where('KONTRAGENT_NOMER', $companyID); $builder->where('OFERTI.DATA >= ', date('Y-m-d', strtotime('-1 Year'))); $builder->orderBy('DATA', 'DESC'); $offers = $builder->get()->getResult(); $return = array(); foreach ($offers as $offer) { $return[$offer->OFERTI_NOMER] = $offer; } $offers = NULL; unset($offers); return $return; } public static function getWebsiteOffersByDateRange($startDate, $endDate) { $select = array( 'OFERTI.DATA', 'OFERTI.KONTRAGENT_NOMER' ); return Services::firebird() ->table('OFERTI') ->select(implode(',', $select)) ->where('OFERTI.DATA >=', $startDate) ->where('OFERTI.DATA <=', $endDate) ->where('OFERTI.OBEKT_NOMER', 11) ->where('OFERTI.KONTRAGENT_NOMER IS NOT NULL', false, false) ->orderBy('OFERTI.KONTRAGENT_NOMER') ->get() ->getResult(); } public static function getPriceTypes() { $inputOutput = array( 'NOMER' => 'NOMER', 'TIP_CENA_KOD' => 'TIP_CENA_KOD', 'FULLNAME' => 'FULLNAME', ); $priceTypes = Services::firebird()->table('TIPOVE_CENI')->select(implode(', ', ($inputOutput)))->get()->getResult(); $return = self::_buildObjectsReturn($priceTypes, $inputOutput); unset($priceTypes); return $return; } public static function getWholesalePriceTypes() { return Services::firebird()->table('TIPOVE_CENI') ->like('TIP_CENA_KOD', '2.6.', 'LEFT') ->orderBy('TIP_CENA_KOD') ->get() ->getResult(); } public static function getPriceLists() { $inputOutput = array( 'NOMER' => 'NOMER', 'IME' => 'IME', ); $priceTypes = Services::firebird()->table('CENOVA_LISTA')->select(implode(', ', ($inputOutput)))->get()->getResult(); $return = self::_buildObjectsReturn($priceTypes, $inputOutput); unset($priceTypes); return $return; } /** * @return array */ public static function getStoreObjects() { $inputOutput = array( 'NOMER' => 'NOMER', 'OBEKT' => 'OBEKT', ); $priceTypes = Services::firebird()->table('OBEKTI')->select(implode(', ', ($inputOutput)))->get()->getResult(); $return = self::_buildObjectsReturn($priceTypes, $inputOutput); unset($priceTypes); return $return; } public static function getWarehouseTypeOperations() { return Services::firebird()->table('TIPOVE_VATR_OPER')->get()->getResult(); } public static function getAccountByID($id) { $inputOutput = array( 'NOMER' => 'NOMER', 'KONTRAGENT_NOMER' => 'KONTRAGENT_NOMER', ); $account = Services::firebird()->table('KONTRAGENTI_LICA')->where('NOMER', $id)->get()->getRow(); $return = self::_buildSingleReturn($account, $inputOutput); unset($account); return $return; } public static function getBarcodes() { $inputOutput = array( 'POS_NOMER' => 'POS_NOMER', 'BARCODE' => 'BARCODE', ); $barcodes = Services::firebird()->table('BARCODE_POSNOMER')->get()->getResult(); $return = self::_buildObjectsReturn($barcodes, $inputOutput); unset($barcodes); return $return; } public static function getBrands() { return Services::firebird()->table('GRUPIPOS2')->get()->getResult(); } public static function getBrandByName($search) { $brands = self::getBrands(); foreach ($brands as $brand) { if ($brand->IME == $search) { return $brand; } } return []; } public static function getDiscountGroups() { $inputOutput = array( 'KOD_GRUPA_POZICII' => 'KOD_GRUPA_POZICII', 'KOD_GRUPA_KONTRAGENT' => 'KOD_GRUPA_KONTRAGENT', 'VID_CENA_NOMER' => 'VID_CENA_NOMER', 'TO_PROC' => 'TO_PROC', ); $discounts = Services::firebird()->table('Z$_GRUPI_OTSTAPKI', false) ->get() ->getResult(); $return = self::_buildObjectsReturn($discounts, $inputOutput); unset($discounts); return $return; } // Идеята е да се сложат редирект линкове public static function getDisabledProducts() { $inputOutput = array( 'NOMER' => 'NOMER', 'IME$1' => 'IME$1', 'IME$2' => 'IME$2', ); $return = array(); $disabledProducts = Services::firebird()->table('POZICII') ->select(implode(',', $inputOutput)) ->where('IME$1 IS NOT NULL', false, false) ->where('IME$2 IS NOT NULL', false, false) ->where('BEZNALICHEN', 0) ->where('IZKLUCHEN', 1) ->get() ->getResult(); foreach ($disabledProducts as $disabledProduct) { $return[$disabledProduct->NOMER] = $disabledProduct; } return $return; } public static function getActiveNoneVisibleToWebsiteProducts() { $inputOutput = array( 'NOMER' => 'NOMER', 'IME$1' => 'IME$1', 'IME$2' => 'IME$2', ); $disabledProducts = Services::firebird()->table('POZICII') ->select(implode(',', $inputOutput)) ->where('IME$1 IS NOT NULL', false, false) ->where('IME$2 IS NOT NULL', false, false) ->where('USER_FIELD_5 IS NULL', false, false) ->where('BEZNALICHEN', 0) ->where('IZKLUCHEN', 0) ->get() ->getResult(); foreach ($disabledProducts as $disabledProduct) { $return[$disabledProduct->NOMER] = $disabledProduct; } return $return; } public static function updatePassword($password, $email) { Services::firebird()->table('KONTRAGENTI_LICA')->set('PASSWRD', $password)->where('EMAIL', $email)->update(); } public static function login($email, $password) { $inputOutput = array( 'K_NOMER' => 'K_NOMER', 'KONTRAGENT' => 'KONTRAGENT', 'BULSTAT' => 'BULSTAT', 'DDSNOMER' => 'DDSNOMER', 'DANNOMER' => 'DANNOMER', 'MOL' => 'MOL', 'KONTR_GRUPA_NOMER' => 'KONTR_GRUPA_NOMER', 'CENOVA_LISTA_NOMER' => 'CENOVA_LISTA_NOMER', 'TIP_CENA_NOMER' => 'TIP_CENA_NOMER', 'SEDALISHTE_ADRES' => 'SEDALISHTE_ADRES', 'SEDALISHTE_GRAD' => 'SEDALISHTE_GRAD', 'SEDALISHTE_DYRZAVA' => 'SEDALISHTE_DYRZAVA', 'SEDALISHTE_TEL' => 'SEDALISHTE_TEL', 'SEDALISHTE_EMAIL' => 'SEDALISHTE_EMAIL', 'KORESP_ADRES' => 'KORESP_ADRES', 'KORESP_GRAD' => 'KORESP_GRAD', 'TIP_CENA_NOMER2' => 'TIP_CENA_NOMER2', 'TIP_CENA_NOMER3' => 'TIP_CENA_NOMER3', 'SEDALISHTE_POST_KOD' => 'SEDALISHTE_POST_KOD', 'KORESP_POST_KOD' => 'KORESP_POST_KOD', 'KL_NOMER' => 'KL_NOMER', 'IME' => 'IME', 'DLAZNOST' => 'DLAZNOST', 'T
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)