Advertisement
DecaK

Untitled

Dec 9th, 2022
19
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 48.36 KB | None | 0 0
  1. <?php
  2.  
  3. namespace App\Http\Controllers;
  4.  
  5. use App\Http\Controllers\Controller;
  6. use Illuminate\Http\Request;
  7.  
  8. use App\KorisnikPodaci_Magacini;
  9. use App\KorisnikPodaci_Partneri;
  10. use App\KorisnikPodaci_Artikli;
  11.  
  12. use App\KorisnikPodaci_NivelacijeZaglavlja;
  13. use App\KorisnikPodaci_NivelacijeDokumenti;
  14. use App\KorisnikPodaci_NivelacijaArtikli;
  15.  
  16. use App\KorisnikPodaci_ArtikliDokumenti;
  17.  
  18. use App\KorisnikPodaci_ZaliheObjekat;
  19.  
  20. use App\KorisnikPodaci_PopisZaglavlja;
  21. use App\KorisnikPodaci_PopisStavke;
  22.  
  23. use App\OpstiPodaci_PdvStope;
  24.  
  25. use App\KorisnikPodaci_InternaOtpremnicaZaglavlja;
  26. use App\KorisnikPodaci_InternaOtpremnicaArtikli;
  27.  
  28. use App\KorisnikPodaci_FiskalniRacuniArtikli;
  29. use App\KorisnikPodaci_FiskalniRacuniZaglavlja;
  30. use App\KorisnikPodaci_KasaTerminali;
  31.  
  32. use DB;
  33. use \Validator;
  34. use Carbon\Carbon;
  35. use Response;
  36.  
  37.  
  38. class InternaOtpremnicaControllerBojke extends Controller
  39. {
  40. public function napraviInternuOtpremnicu(Request $request) {
  41. //$kompanija_id = $request->session()->get('kompanija_id');
  42. $kompanija_id = 25;
  43. config(['database.connections.mysql2.database' => $kompanija_id]);
  44. if(isset($request->objekat_izlaz_id) && isset($request->objekat_prijem_id) && isset($request->datum_izrade) && isset($request->datum_prometa)) {
  45. $novo_zaglavlje = new KorisnikPodaci_InternaOtpremnicaZaglavlja;
  46. $novo_zaglavlje->objekat_izlaz_id = $request->objekat_izlaz_id;
  47. $novo_zaglavlje->objekat_prijem_id = $request->objekat_prijem_id;
  48. $novo_zaglavlje->datum_izrade = $request->datum_izrade;
  49. $novo_zaglavlje->datum_prometa = $request->datum_prometa;
  50. $novo_zaglavlje->napomena = $request->napomena;
  51. $novo_zaglavlje->status = "U pripremi";
  52. $novo_zaglavlje->save();
  53. return Response::json(['id' => $novo_zaglavlje->id], 200);
  54. }
  55. return Response::json(['message' => 'not set'], 200);
  56. }
  57. public function listaInternihOtpremnica(Request $request) {
  58. $kompanija_id = 25;//$request->session()->get('kompanija_id');
  59. config(['database.connections.mysql2.database' => $kompanija_id]);
  60. $magacini = KorisnikPodaci_Magacini::all();
  61. $zaglavlja = KorisnikPodaci_InternaOtpremnicaZaglavlja::all();
  62. return view('internaotpremnica.listainternihotpremnica')->with('zaglavlja', $zaglavlja)->with('magacini', $magacini->keyBy('id'));
  63. }
  64. public function pretraziInterneOtpremnice_OBRISATI(Request $request) {
  65. $kompanija_id = 25;//$request->session()->get('kompanija_id');
  66. config(['database.connections.mysql2.database' => $kompanija_id]);
  67. $magacini = KorisnikPodaci_Magacini::all();
  68. $zaglavlja = KorisnikPodaci_InternaOtpremnicaZaglavlja::all();
  69. if(isset($request->objekat_prijem_id) && $request->objekat_prijem_id != -1)
  70. $zaglavlja = $zaglavlja->where('objekat_prijem_id', $request->objekat_prijem_id);
  71. if(isset($request->objekat_izlaz_id) && $request->objekat_izlaz_id != -1)
  72. $zaglavlja = $zaglavlja->where('objekat_izlaz_id', $request->objekat_izlaz_id);
  73. return view('internaotpremnica.listainternihotpremnica')->with('zaglavlja', $zaglavlja)->with('magacini', $magacini->keyBy('id'));
  74. }
  75. public function pregledajInternuOtpremnicu_OBRISATI(Request $request) {
  76. $kompanija_id = 25;//$request->session()->get('kompanija_id');
  77. config(['database.connections.mysql2.database' => $kompanija_id]);
  78. if(0) {
  79. if($potvrdjen) {
  80. if(moguce()) {
  81. otkljucaj_internu_otpremnicu($id);
  82. revertuj_promene_interne($id);
  83. }
  84. }
  85. }
  86. $zaglavlje = KorisnikPodaci_InternaOtpremnicaZaglavlja::find($request->internaotpremnica_id)->toArray();
  87. if(!$zaglavlje)
  88. return 'dokument nije pronadjen';
  89. //dd($podaci);
  90. $magacini = KorisnikPodaci_Magacini::all();
  91. //$zaglavlje = KorisnikPodaci_InternaOtpremnicaZaglavlja::find($request->internaotpremnica_id);
  92. return view('internaotpremnica.pregledajiotpr')->with('zaglavlje', $podaci['zaglavlje'])->with('magacini', $magacini)->with('artikli', $podaci['artikli']);
  93. }
  94. public function internaOtpremnicaZaglavlje(Request $request) {
  95. $kompanija_id = 25;//$request->session()->get('kompanija_id');
  96. config(['database.connections.mysql2.database' => $kompanija_id]);
  97. $interna_otpremnica_id = $request->internaotpremnica_id;
  98. $zaglavlje = KorisnikPodaci_InternaOtpremnicaZaglavlja::find($interna_otpremnica_id);
  99. if(!$zaglavlje)
  100. return 'nepostojeci dokument';
  101. if($zaglavlje->status == "U pripremi")
  102. return InternaOtpremnicaControllerBojke::izmeniInternuOtpremnicuBlade($interna_otpremnica_id);
  103. if($zaglavlje->status == "Potvrdjen")
  104. return InternaOtpremnicaControllerBojke::pregledajInternuOtpremnicuBlade($zaglavlje);
  105. }
  106. public function izmeniInternuOtpremnicu(Request $request) {
  107. $kompanija_id = 25;//$request->session()->get('kompanija_id');
  108. config(['database.connections.mysql2.database' => $kompanija_id]);
  109. $interna_otpremnica_id = $request->interna_otpremnica_id;
  110. $zaglavlje = KorisnikPodaci_InternaOtpremnicaZaglavlja::find($interna_otpremnica_id);
  111. if(!$zaglavlje)
  112. return 'nepostojeci dokument';
  113. if($zaglavlje->status == "U pripremi")
  114. return Response::json(['success' => 'true'], 200);
  115. $izmenljiva = InternaOtpremnicaControllerBojke::daLiJeIzmenljivaIO($interna_otpremnica_id);
  116. if(!$izmenljiva)
  117. return Response::json(['success' => 'false', 'message' => 'neizmenljivo'], 200);
  118. if($zaglavlje->status == "Potvrdjen") {
  119. $reverted = InternaOtpremnicaControllerBojke::revertujInternuOtpremnicu($interna_otpremnica_id);
  120. dd($reverted);
  121. return Response::json(['success' => $reverted ? 'true' : 'false'], 200);
  122. }
  123. }
  124. public static function obrisiInternuOtpremnicu($interna_otpremnica_id) {
  125. $zaglavlje = KorisnikPodaci_InternaOtpremnicaZaglavlja::find($interna_otpremnica_id);
  126. if(!$zaglavlje || $zaglavlje->status != 'U pripremi')
  127. return 0;
  128. $obrisani_artikli = KorisnikPodaci_InternaOtpremnicaArtikli::where('internaotpremnica_id', $zaglavlje->id)->delete();
  129. $obrisano_zaglavlje = $zaglavlje->delete();
  130. return 1;
  131. }
  132. public static function daLiJeIzmenljivaIO($interna_otpremnica_id) {
  133. $zaglavlje = KorisnikPodaci_InternaOtpremnicaZaglavlja::findOrFail($interna_otpremnica_id);
  134. $objekat_prijem_id = $zaglavlje->objekat_prijem_id;
  135. $artikli_dokumenti_poslednji_id = $zaglavlje->artikli_dokumenti_poslednji_id;
  136. $interna_otpremnica_artikli = KorisnikPodaci_InternaOtpremnicaArtikli::where('internaotpremnica_id', $zaglavlje->id)->get();
  137. foreach ($interna_otpremnica_artikli as $artikal) {
  138. $imaNestoPosle = KorisnikPodaci_ArtikliDokumenti::where('id', '>', $artikli_dokumenti_poslednji_id)->where('sifra_artikla', $artikal->sifra_artikla)->where('objekat_id', $objekat_prijem_id)->first();
  139. if($imaNestoPosle) return 0;
  140. }
  141. return 1;
  142. }
  143. public static function pregledajInternuOtpremnicuBlade($zaglavlje) {
  144. $magacin_izlaz = KorisnikPodaci_Magacini::find($zaglavlje->objekat_izlaz_id)->naziv;
  145. $magacin_prijem = KorisnikPodaci_Magacini::find($zaglavlje->objekat_prijem_id)->naziv;
  146. $artikli = KorisnikPodaci_InternaOtpremnicaArtikli::where('internaotpremnica_id', $zaglavlje->id)->get();
  147. return view('internaotpremnica.internaotpremnicapregledajzaglavlje')->with('zaglavlje', $zaglavlje)->with('magacin_izlaz', $magacin_izlaz)->with('magacin_prijem', $magacin_prijem)->with('artikli', $artikli);
  148. }
  149. public function fiskalniRacuni(Request $request) {
  150. $kompanija_id = $request->session()->get('kompanija_id');
  151. config(['database.connections.mysql2.database' => $kompanija_id]);
  152. $fiskalni_racuni = KorisnikPodaci_FiskalniRacuniZaglavlja::select('id', 'broj_racuna', 'buyerId', 'timestamp_izdavanja', 'gotovina_iznos', 'kartica_iznos', 'cek_iznos', 'vaucer_iznos', 'instant_iznos', 'ostalo_naziv', 'prenos_iznos', 'ostalo_iznos')->orderBy('id', 'desc')->take(500)->get();
  153. $kase = KorisnikPodaci_KasaTerminali::all();
  154. return view('fiskalniracuni')->with('fiskalni_racuni', $fiskalni_racuni)->with('kase', $kase);
  155. }
  156. public function pretragaFiskalnihRacuna(Request $request) {
  157. $kompanija_id = $request->session()->get('kompanija_id');
  158. config(['database.connections.mysql2.database' => $kompanija_id]);
  159. if($request->broj_racuna != '') {
  160. $fiskalni_racun = KorisnikPodaci_FiskalniRacuniZaglavlja::where('broj_racuna', $request->broj_racuna)->first();
  161. return json_encode(array("success"=> $fiskalni_racun ? "true" : "false", "racuni"=> array($fiskalni_racun)));
  162. }
  163. $fiskalni_racuni = NULL;
  164. if($request->id_kupca != '') {
  165. if(str_contains($request->id_kupca, ':'))
  166. $fiskalni_racuni = KorisnikPodaci_FiskalniRacuniZaglavlja::where('buyerId', $request->id_kupca);
  167. else
  168. $fiskalni_racuni = KorisnikPodaci_FiskalniRacuniZaglavlja::where('buyerId', '10:'.$request->id_kupca)->orWhere('buyerId', '11:'.$request->id_kupca);
  169. }
  170. if($request->uid != 'sve') {
  171. if($fiskalni_racuni == NULL)
  172. $fiskalni_racuni = KorisnikPodaci_FiskalniRacuniZaglavlja::where('uid', $request->uid)->orderBy('id', 'desc')->take(500);
  173. else
  174. $fiskalni_racuni = $fiskalni_racuni->where('uid', $request->uid);
  175. }
  176. elseif($request->uid == 'sve' && $fiskalni_racuni == NULL)
  177. $fiskalni_racuni = KorisnikPodaci_FiskalniRacuniZaglavlja::orderBy('id', 'desc')->take(500);
  178. if($fiskalni_racuni != NULL) {
  179. $fiskalni_racuni = $fiskalni_racuni->get()->toArray();
  180. if(!count($fiskalni_racuni)) $fiskalni_racuni = NULL;
  181. }
  182. //dd($fiskalni_racuni);
  183. return json_encode(array("success"=> $fiskalni_racuni != NULL ? "true" : "false", "racuni" => $fiskalni_racuni));
  184. }
  185. public function pregledajFiskalniRacun(Request $request) {
  186. $broj_racuna = $request->broj_racuna;
  187. $kompanija_id = $request->session()->get('kompanija_id');
  188. config(['database.connections.mysql2.database' => $kompanija_id]);
  189. $racun = KorisnikPodaci_FiskalniRacuniZaglavlja::select('tip_racuna', 'vrsta_transakcije', 'buyerId', 'timestamp_izdavanja', 'gotovina_iznos', 'kartica_iznos', 'cek_iznos', 'vaucer_iznos', 'instant_iznos', 'ostalo_naziv', 'prenos_iznos', 'ostalo_iznos', 'kasir', 'objekat_id')->where('broj_racuna', $request->broj_racuna)->first()->toArray();
  190. $magacin = KorisnikPodaci_Magacini::find($racun['objekat_id']);
  191. $racun['datum_izdavanja'] = \Carbon\Carbon::createFromTimestamp($racun['timestamp_izdavanja'])->toDateTimeString();
  192. $racun['magacin'] = $magacin ? $magacin->naziv : 'OBRISAN MAGACIN';
  193. $artikli = KorisnikPodaci_FiskalniRacuniArtikli::select('naziv', 'kolicina', 'sifra', 'prodajna_cena_sa_pdv', 'pdv_stopa', 'rabat_iznos')->where('broj_racuna', $broj_racuna)->get()->toArray();
  194. return json_encode(array('racun'=>$racun, 'artikli'=>$artikli));
  195. }
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211.  
  212.  
  213. public static function izmeniInternuOtpremnicuBlade($interna_otpremnica_id) {
  214. $podaci = InternaOtpremnicaControllerBojke::podaciInterneOtpremnice($interna_otpremnica_id);
  215. if(!$podaci)
  216. return 'dokument nije pronadjen';
  217. //dd($podaci);
  218. // if($podaci['zaglavlje']['nedovoljno_zaliha']) {
  219. // $artikli_array = array();
  220. // foreach ($podaci['artikli'] as $artikal) {
  221. // $artikal_ubacen = 0;
  222. // foreach ($podaci['zaglavlje']['nedovoljno_zaliha_artikli'] as $artikal_za_zacrveneti) {
  223. // if($artikal['sifra_artikla'] == $artikal_za_zacrveneti['sifra_artikla']) {
  224. // $artikal['zacrveniti'] = 1;
  225. // array_unshift($artikli_array, $artikal);
  226. // $artikal_ubacen = 1;
  227. // break;
  228. // }
  229. // }
  230. // if(!$artikal_ubacen)
  231. // array_push($artikli_array, $artikal);
  232. // }
  233. // }
  234. // else {
  235. // $artikli_array =
  236. // }
  237. $za_zacrveniti = array();
  238. foreach ($podaci['zaglavlje']['nedovoljno_zaliha_artikli'] as $artikal_za_zacrveneti)
  239. array_push($za_zacrveniti, $artikal_za_zacrveneti['sifra_artikla']);
  240. $magacini = KorisnikPodaci_Magacini::all();
  241. $prijemni_magacin = KorisnikPodaci_Magacini::find($podaci['zaglavlje']['objekat_prijem_id']);
  242. $prodajna_cena_sa_pdv_disabled = $prijemni_magacin->tip != "Maloprodaja";
  243. $prodajna_cena_bez_pdv_disabled = $prijemni_magacin->tip != "Veleprodaja";
  244. //$zaglavlje = KorisnikPodaci_InternaOtpremnicaZaglavlja::find($request->internaotpremnica_id);
  245. return view('internaotpremnica.internaotpremnicaizmenizaglavlje')->with('zaglavlje', $podaci['zaglavlje'])->with('magacini', $magacini)->with('artikli', $podaci['artikli'])->with('prodajna_cena_sa_pdv_disabled', $prodajna_cena_sa_pdv_disabled)->with('prodajna_cena_bez_pdv_disabled', $prodajna_cena_bez_pdv_disabled)->with('za_zacrveniti', $za_zacrveniti);
  246. }
  247. public function sacuvajPromeneInterneOtpremnice_OBRISI(Request $request) {
  248. //$kompanija_id = $request->session()->get('kompanija_id');
  249. $kompanija_id = 25;
  250. config(['database.connections.mysql2.database' => $kompanija_id]);
  251. $interna_otpremnica_id = $request->interna_otpremnica_id;
  252. $zaglavlje = KorisnikPodaci_InternaOtpremnicaZaglavlja::find($interna_otpremnica_id);
  253. if(!$zaglavlje)
  254. return Response::json(['message' => 'not found'], 200);
  255. $izlaz_id = $zaglavlje->objekat_izlaz_id;
  256. $prijem_id = $zaglavlj->objekat_prijem_id;
  257. $artikli = KorisnikPodaci_InternaOtpremnicaArtikli::where('internaotpremnica_id', $interna_otpremnica_id)->get();
  258. foreach ($artikli as $artikal) {
  259. $sifra_artikla = $artikal->sifra_artikla;
  260. $kolicina = $artikal->kolicina;
  261. $objekat_izlaz_nabavne_cene_artikla = KorisnikPodaci_ZaliheObjekat::where('sifra_artikla', $sifra_artikla)->where('objekat_id', $izlaz_id)->orderBy('created_at');
  262. $ukupno_na_zalihama_za_objekat_izlaz = array_sum($objekat_izlaz_nabavne_cene_artikla->pluck('trenutna_kolicina')->toArray());
  263. if($kolicina > $ukupno_na_zalihama_za_objekat_izlaz) // PROVERA DA LI POSTOJI DOVOLJNA KOLICINA ARTIKLA U IZLAZNOM MAGACINU
  264. return Response::json(['message' => 'kolicina'], 200);
  265. }
  266. }
  267. public function pregledajArtikakInternaOtpremnica(Request $request) {
  268. if(!isset($request->interna_otpremnica_id) || !isset($request->sifra_artikla))
  269. return Response::json(['message' => 'not set'], 200);
  270. //$kompanija_id = $request->session()->get('kompanija_id');
  271. $kompanija_id = 25;
  272. config(['database.connections.mysql2.database' => $kompanija_id]);
  273. $artikal = KorisnikPodaci_InternaOtpremnicaArtikli::where('internaotpremnica_id', $request->interna_otpremnica_id)->where('sifra_artikla', $request->sifra_artikla)->first();
  274. if(!$artikal) return 0;
  275. $artikal_podaci = InternaOtpremnicaControllerBojke::generisiPodatkeArtikla($request->interna_otpremnica_id, $artikal, $pregled=1);
  276. return $artikal_podaci;
  277. }
  278. public function internaOtpremnicaUcitajPromeneZaglavlja(Request $request) {
  279. if(!isset($request->interna_otpremnica_id))
  280. return Response::json(['message' => 'not set'], 200);
  281. //$kompanija_id = $request->session()->get('kompanija_id');
  282. $kompanija_id = 25;
  283. config(['database.connections.mysql2.database' => $kompanija_id]);
  284. $podaci = InternaOtpremnicaControllerBojke::podaciInterneOtpremnice($request->interna_otpremnica_id);
  285. return $podaci ? $podaci : Response::json(['message' => 'not found'], 200);
  286. }
  287. public static function podaciInterneOtpremnice($interna_otpremnica_id) {
  288. $zaglavlje = KorisnikPodaci_InternaOtpremnicaZaglavlja::find($interna_otpremnica_id);
  289. if(!$zaglavlje)
  290. return 0;
  291. $svi_artikli_za_internu_otpremnicu = KorisnikPodaci_InternaOtpremnicaArtikli::where('internaotpremnica_id', $interna_otpremnica_id)->get();
  292. $info_obracun = InternaOtpremnicaControllerBojke::generisiInfoObracun($interna_otpremnica_id, $svi_artikli_za_internu_otpremnicu);
  293. $artikli = count($svi_artikli_za_internu_otpremnicu) ? $svi_artikli_za_internu_otpremnicu->toArray() : '';
  294. return array('zaglavlje'=>array_merge($zaglavlje->toArray(), $info_obracun), 'artikli'=>$artikli);
  295. }
  296. public function obrisiArtikalUinternojOtpremnici(Request $request) {
  297. if(!isset($request->interna_otpremnica_id) || !isset($request->sifra_artikla))
  298. return Response::json(['message' => 'not set'], 200);
  299. $kompanija_id = 25;
  300. config(['database.connections.mysql2.database' => $kompanija_id]);
  301. $zaglavlje = KorisnikPodaci_InternaOtpremnicaZaglavlja::findOrFail($request->interna_otpremnica_id);
  302. if($zaglavlje->status != "U pripremi")
  303. return 0;
  304. $artikal = KorisnikPodaci_InternaOtpremnicaArtikli::where('internaotpremnica_id', $request->interna_otpremnica_id)->where('sifra_artikla', $request->sifra_artikla)->first();
  305. if($artikal)
  306. $artikal->delete();
  307. return 1;
  308. }
  309. public function dodajIliIzmeniArtikalUinternojOtpremnici(Request $request) {
  310. if(!isset($request->interna_otpremnica_id) || !isset($request->sifra_artikla) || !isset($request->kolicina) || $request->kolicina<=0)
  311. return Response::json(['message' => 'not set'], 200);
  312.  
  313. //$kompanija_id = $request->session()->get('kompanija_id');
  314. $pdv_stope = OpstiPodaci_PdvStope::all();
  315. $kompanija_id = 25;
  316. config(['database.connections.mysql2.database' => $kompanija_id]);
  317. $interna_otpremnica_id = $request->interna_otpremnica_id;
  318. $sifra_artikla = $request->sifra_artikla;
  319. $kolicina = $request->kolicina;
  320. $zaglavlje = KorisnikPodaci_InternaOtpremnicaZaglavlja::findOrFail($interna_otpremnica_id);
  321. if($zaglavlje->status != "U pripremi")
  322. return 0;
  323. $artikal = KorisnikPodaci_InternaOtpremnicaArtikli::where('internaotpremnica_id', $request->interna_otpremnica_id)->where('sifra_artikla', $request->sifra_artikla)->first();
  324. $cena_vec_stavljena = 0;
  325. if(!$artikal) { // ako artikal ne postoji
  326. $artikal_info = KorisnikPodaci_Artikli::where('sifra', $sifra_artikla)->first();
  327. if(!$artikal_info)
  328. return Response::json(['message' => 'artikal'], 200);
  329.  
  330. $artikal = new KorisnikPodaci_InternaOtpremnicaArtikli;
  331. $artikal->internaotpremnica_id = $interna_otpremnica_id;
  332. $artikal->sifra_artikla = $sifra_artikla;
  333. $artikal->naziv_artikla = $artikal_info->naziv;
  334. $artikal->barkod_artikla = $artikal_info->barkod;
  335. $artikal->jedinica_mere = $artikal_info->merna_jedinica;
  336. $cena_uneta = (isset($request->prodajna_cena_sa_pdv) && $request->prodajna_cena_sa_pdv != '') || (isset($request->prodajna_cena_bez_pdv) && $request->prodajna_cena_bez_pdv != '');
  337. if(!$cena_uneta) {
  338. $zaliha = KorisnikPodaci_ZaliheObjekat::where('objekat_id', $zaglavlje->objekat_prijem_id)->where('sifra_artikla', $artikal->sifra_artikla)->first();
  339. if($zaliha) {
  340. $artikal->prodajna_cena_sa_pdv_prijem = $zaliha->prodajna_cena_sa_pdv;
  341. $artikal->prodajna_cena_bez_pdv_prijem = $zaliha->prodajna_cena_bez_pdv;
  342. $cena_vec_stavljena = 1;
  343. }
  344. }
  345. foreach ($pdv_stope as $stopa) {
  346. if($stopa->id == $artikal_info->pdv_tip) {
  347. $artikal->pdv_procenat = $stopa->vrednost;
  348. break;
  349. }
  350. }
  351. }
  352. if(!$cena_vec_stavljena) {
  353. if(isset($request->prodajna_cena_sa_pdv)) {
  354. $artikal->prodajna_cena_sa_pdv_prijem = $request->prodajna_cena_sa_pdv;
  355. $artikal->prodajna_cena_bez_pdv_prijem = $request->prodajna_cena_sa_pdv - $request->prodajna_cena_sa_pdv * ($artikal->pdv_procenat/100 / (1+$artikal->pdv_procenat/100));
  356. }
  357. else if(isset($request->prodajna_cena_bez_pdv)) {
  358. $artikal->prodajna_cena_bez_pdv_prijem = $request->prodajna_cena_bez_pdv;
  359. $artikal->prodajna_cena_sa_pdv_prijem = $request->prodajna_cena_bez_pdv * ($artikal->pdv_procenat/100+1);
  360. }
  361. else {
  362. $artikal->prodajna_cena_sa_pdv_prijem = 0;
  363. $artikal->prodajna_cena_bez_pdv_prijem = 0;
  364. }
  365. }
  366. $artikal->kolicina = $kolicina;
  367. $artikal_podaci = InternaOtpremnicaControllerBojke::generisiPodatkeArtikla($interna_otpremnica_id, $artikal);
  368. if($artikal_podaci == -1)
  369. return Response::json(['message' => 'zalihe'], 200);
  370. //return -1;
  371. $artikal->save();
  372. //return podaciZaPopunjavanjeModala($kompanija_id, $objekat_ulaz=$zaglavlje->objekat_prijem_id, $artikal=$artikal, $interna_otpremnica_id=$request->interna_otpremnica_id, $sifra_artikla=$request->sifra_artikla)
  373. return InternaOtpremnicaControllerBojke::podaciZaPopunjavanjeModala($sifra_artikla=$sifra_artikla, $zaglavlje=$zaglavlje, $kolicina=$kolicina, $artikal_podaci=$artikal_podaci, $zalihe_objekat_izlaz=$artikal_podaci['ukupno_na_zalihama_za_objekat_izlaz']);
  374. //podaciZaPopunjavanjeModala($sifra_artikla, $zaglavlje, $kolicina, $artikal_podaci, $zalihe_objekat_izlaz=-1)
  375. //return $artikal->toJson(); // gotovo cuvanje , vraca podatke za prikaz..
  376. }
  377. public function proveriNivelacije(Request $request) {
  378. $kompanija_id = 25;
  379. config(['database.connections.mysql2.database' => $kompanija_id]);
  380. return InternaOtpremnicaControllerBojke::uporediProdajneCene($request->interna_otpremnica_id);
  381. }
  382. public static function uporediProdajneCene($interna_otpremnica_id) {
  383. $zaglavlje = KorisnikPodaci_InternaOtpremnicaZaglavlja::find($interna_otpremnica_id);
  384. $artikli = KorisnikPodaci_InternaOtpremnicaArtikli::where('internaotpremnica_id', $interna_otpremnica_id)->get();
  385. $prijemni_magacin = KorisnikPodaci_Magacini::find($zaglavlje->objekat_prijem_id);
  386. $tip_prijemnog_magacina = $prijemni_magacin->tip;
  387. $usporedba = array();
  388. foreach ($artikli as $artikal) {
  389. $zaliha = KorisnikPodaci_ZaliheObjekat::where('objekat_id', $zaglavlje->objekat_prijem_id)->where('sifra_artikla', $artikal->sifra_artikla)->first();
  390. if(!$zaliha) continue;
  391. //dd($tip_prijemnog_magacina, $zaliha, $artikal);
  392. if($tip_prijemnog_magacina == "Maloprodaja" && $zaliha->prodajna_cena_sa_pdv != $artikal->prodajna_cena_sa_pdv_prijem)
  393. array_push($usporedba, array(
  394. "sifra_artikla"=>$artikal->sifra_artikla,
  395. "naziv_artikla"=>$artikal->naziv_artikla,
  396. "trenutna_prodajna_cena_sa_pdv"=>$zaliha->prodajna_cena_sa_pdv,
  397. "nova_prodajna_cena_sa_pdv"=>$artikal->prodajna_cena_sa_pdv_prijem
  398. ));
  399. elseif($tip_prijemnog_magacina == "Veleprodaja" && $zaliha->prodajna_cena_bez_pdv != $artikal->prodajna_cena_bez_pdv_prijem)
  400. array_push($usporedba, array(
  401. "sifra_artikla"=>$artikal->sifra_artikla,
  402. "naziv_artikla"=>$artikal->naziv_artikla,
  403. "trenutna_prodajna_cena_bez_pdv"=>$zaliha->prodajna_cena_bez_pdv,
  404. "nova_prodajna_cena_bez_pdv"=>$artikal->prodajna_cena_sa_pdv_prijem
  405. ));
  406. }
  407. return $usporedba;
  408. }
  409. public function potvrdiIO(Request $request) {
  410. if(!isset($request->interna_otpremnica_id))
  411. return Response::json(['message' => 'not set'], 200);
  412. //$kompanija_id = $request->session()->get('kompanija_id');
  413. $kompanija_id = 25;
  414. config(['database.connections.mysql2.database' => $kompanija_id]);
  415. return InternaOtpremnicaControllerBojke::potvrdiInternuOtpremnicu($request->interna_otpremnica_id);
  416. }
  417. public static function revertujInternuOtpremnicu($interna_otpremnica_id) {
  418. $zaglavlje = KorisnikPodaci_InternaOtpremnicaZaglavlja::findOrFail($interna_otpremnica_id);
  419. if($zaglavlje->status != "Potvrdjen")
  420. return 0;
  421. $objekat_izlaz_id = $zaglavlje->objekat_izlaz_id;
  422. $objekat_prijem_id = $zaglavlje->objekat_prijem_id;
  423. $svi_artikli = KorisnikPodaci_InternaOtpremnicaArtikli::where('internaotpremnica_id', $zaglavlje->id)->get();
  424. foreach ($svi_artikli as $artikal) {
  425. foreach (json_decode($artikal->nabavne_cene_json, 1) as $nabavna_cena) {
  426. $zaliha_izlaz = KorisnikPodaci_ZaliheObjekat::where('objekat_id', $objekat_izlaz_id)->where('sifra_artikla', $artikal->sifra_artikla)->where('nabavna_cena_sa_pdv', $nabavna_cena['nabavna_cena_sa_pdv'])->first();
  427. $zaliha_prijem = KorisnikPodaci_ZaliheObjekat::where('objekat_id', $objekat_prijem_id)->where('sifra_artikla', $artikal->sifra_artikla)->where('nabavna_cena_sa_pdv', $nabavna_cena['nabavna_cena_sa_pdv'])->first();
  428. $zaliha_izlaz->trenutna_kolicina += $nabavna_cena['kolicina'];
  429. $zaliha_izlaz->ukupna_kolicina_izlaz -= $nabavna_cena['kolicina'];
  430. $zaliha_prijem->trenutna_kolicina -= $nabavna_cena['kolicina'];
  431. $zaliha_prijem->ukupna_kolicina_ulaz -= $nabavna_cena['kolicina'];
  432. $zaliha_izlaz->save();
  433. $zaliha_prijem->save();
  434. }
  435. }
  436. KorisnikPodaci_ArtikliDokumenti::where('tip_dokumenta', 'Interna Otpremnica')->where('id_dokumenta', $interna_otpremnica_id)->delete();
  437. if($zaglavlje->nivelacija_id != -1) {
  438. (new NivelacijeController)->automatski_izmeniZaglavlje($zaglavlje->nivelacija_id, 25);
  439. (new NivelacijeController)->automatski_deleteNivelacija($zaglavlje->nivelacija_id, 25);
  440. }
  441. $zaglavlje->status = 'U pripremi';
  442. $zaglavlje->nivelacija_id = -1;
  443. $zaglavlje->save();
  444. return 1;
  445. }
  446. public static function potvrdiInternuOtpremnicu($interna_otpremnica_id) { // NAPRAVITI DA NE PRAVI NOVI UNOS AKO SE VALIDACIJA NEGDE TRIGGER ZA NEDOVOLJNO NA ZALIHAMA
  447. $zaglavlje = KorisnikPodaci_InternaOtpremnicaZaglavlja::findOrFail($interna_otpremnica_id);
  448. if($zaglavlje->status != "U pripremi")
  449. return 0;
  450. $objekat_izlaz_id = $zaglavlje->objekat_izlaz_id;
  451. $objekat_prijem_id = $zaglavlje->objekat_prijem_id;
  452. //$svi_artikli = KorisnikPodaci_InternaOtpremnicaArtikli::where('internaotpremnica_id', $zaglavlje->id)->get();
  453. $info_obracun = InternaOtpremnicaControllerBojke::generisiInfoObracun($interna_otpremnica_id, $artikli=0, $vratiArtikle=1);
  454. //$artikli_i_artikal_podaci = array(); // array u koji cu da stavim artikal i njegove podatke, sve odmah generisem da bih izbegao komplikacije
  455. //$io_nabavna_vrednost_sa_pdv_izlaz = 1;
  456. //$io_nabavna_vrednost_bez_pdv_izlaz = 2;
  457. // VALIDACIJE
  458. if($info_obracun['nedovoljno_zaliha'])
  459. return array("nedovoljno_zaliha" => 1, "nema_cene" => 0, "naziv_artikla" => $info_obracun['nedovoljno_zaliha_artikli'][0]['naziv_artikla'], "sifra_artikla" => $info_obracun['nedovoljno_zaliha_artikli'][0]['sifra_artikla']);
  460. foreach ($info_obracun['artikli_i_artikal_podaci'] as $artikal_i_artikal_podaci)
  461. if($artikal_i_artikal_podaci['artikal']->prodajna_cena_sa_pdv_prijem == 0)
  462. return array("nedovoljno_zaliha" => 0, "nema_cene" => 1, "naziv_artikla" => $artikal_i_artikal_podaci['artikal']->naziv_artikla, "sifra_artikla" => $artikal_i_artikal_podaci['artikal']->sifra_artikla);
  463. //$artikal_podaci = InternaOtpremnicaControllerBojke::generisiPodatkeArtikla($interna_otpremnica_id, $artikal);
  464. // if($artikal->prodajna_cena_sa_pdv_prijem == 0)
  465. // return array("nedovoljno_zaliha" => 0, "nema_cene" => 1, "naziv_artikla" => $artikal->naziv_artikla, "sifra_artikla" => $artikal->sifra_artikla);
  466. // if($artikal_podaci == -1)
  467. // return array("nedovoljno_zaliha" => 1, "nema_cene" => 0, "naziv_artikla" => $artikal->naziv_artikla, "sifra_artikla" => $artikal->sifra_artikla);
  468. // array_push($artikli_i_artikal_podaci, array($artikal, $artikal_podaci));
  469.  
  470. // KRAJ VALIDACIJA
  471. $nivelacijaZaglavlje = -1;
  472. $redni_broj_stavke = 0;
  473. $poslednji_iz = -1;
  474. foreach ($info_obracun['artikli_i_artikal_podaci'] as $artikal_i_artikal_podaci) {
  475. $artikal = $artikal_i_artikal_podaci['artikal'];
  476. $artikal_podaci = $artikal_i_artikal_podaci['artikal_podaci'];
  477. $artikal->nabavne_cene_json = json_encode($artikal_podaci['nabavne_cene_json']);
  478. $artikal->prodajna_cena_sa_pdv_prijem = $artikal_podaci['prodajna_cena_sa_pdv_prijem'];
  479. $artikal->prodajna_cena_bez_pdv_prijem = $artikal_podaci['prodajna_cena_bez_pdv_prijem'];
  480. $artikal->prodajna_cena_sa_pdv_izlaz = $artikal_podaci['prodajna_cena_sa_pdv_izlaz'];
  481. $artikal->prodajna_cena_bez_pdv_izlaz = $artikal_podaci['prodajna_cena_bez_pdv_izlaz'];
  482. $artikal->save();
  483. $artikalNivelisan = 0;
  484. foreach ($artikal_podaci['nabavne_cene_json'] as $nabavna_cena) {
  485. $zaliha_izlaz = KorisnikPodaci_ZaliheObjekat::where('objekat_id', $objekat_izlaz_id)->where('sifra_artikla', $artikal->sifra_artikla)->where('nabavna_cena_sa_pdv', $nabavna_cena['nabavna_cena_sa_pdv'])->first();
  486. $zaliha_prijem = KorisnikPodaci_ZaliheObjekat::where('objekat_id', $objekat_prijem_id)->where('sifra_artikla', $artikal->sifra_artikla)->where('nabavna_cena_sa_pdv', $nabavna_cena['nabavna_cena_sa_pdv'])->first();
  487. $zaliha_prijem_druga_nabavna_cena = KorisnikPodaci_ZaliheObjekat::where('objekat_id', $objekat_prijem_id)->where('sifra_artikla', $artikal->sifra_artikla)->where('nabavna_cena_sa_pdv', '!=', $nabavna_cena['nabavna_cena_sa_pdv'])->first(); // da li u magacinu postoji vec neka zaliha, nebitno po kojoj nabavnoj ceni
  488. if(!$zaliha_prijem) {
  489. $zaliha_prijem = new KorisnikPodaci_ZaliheObjekat;
  490. $zaliha_prijem->trenutna_kolicina = 0;
  491. $zaliha_prijem->sifra_artikla = $artikal->sifra_artikla;
  492. $zaliha_prijem->naziv_artikla = $artikal->naziv_artikla;
  493. $zaliha_prijem->kataloska_oznaka = $zaliha_izlaz->kataloska_oznaka;
  494. $zaliha_prijem->barkod = $artikal->barkod;
  495. $zaliha_prijem->merna_jedinica = $artikal->merna_jedinica;
  496. $zaliha_prijem->nabavna_cena_bez_pdv = $nabavna_cena['nabavna_cena_bez_pdv'];
  497. $zaliha_prijem->nabavna_cena_sa_pdv = $nabavna_cena['nabavna_cena_sa_pdv'];
  498. $zaliha_prijem->prodajna_cena_sa_pdv = $artikal->prodajna_cena_sa_pdv_prijem;
  499. $zaliha_prijem->prodajna_cena_bez_pdv = $artikal->prodajna_cena_bez_pdv_prijem;
  500. $objekat_za_prijem = KorisnikPodaci_Magacini::findOrFail($objekat_prijem_id);
  501. $zaliha_prijem->tip_objekta = $objekat_za_prijem->tip;
  502. $zaliha_prijem->objekat_id = $objekat_prijem_id;
  503. }
  504. if($zaliha_prijem && $zaliha_prijem->prodajna_cena_sa_pdv != $artikal->prodajna_cena_sa_pdv_prijem || $zaliha_prijem_druga_nabavna_cena && $zaliha_prijem_druga_nabavna_cena->prodajna_cena_sa_pdv != $artikal->prodajna_cena_sa_pdv_prijem) {
  505. // odraditi nivelaciju ako se prodajna cena razlikuje od nove ILI ako ima druga prodajna cena po nekoj drugoj nabavnoj ceni u magacinu
  506. if(!$artikalNivelisan) {
  507. $artikalNivelisan = 1;
  508. if($nivelacijaZaglavlje==-1)
  509. $nivelacijaZaglavlje = (new NivelacijeController)->automatskaNivelacija_CreateZaglavljeiDokument($kompanija_id=25, $magacin_id=$objekat_prijem_id, $ulazni_dokument_id=NULL, $interna_otpremnica_id=$interna_otpremnica_id);
  510. $redni_broj_stavke++;
  511. //dd($nivelacijaZaglavlje, $nivelacijaZaglavlje['novi_dokument'], $nivelacijaZaglavlje['novi_dokument']->id);
  512. //dd($artikal)
  513. (new NivelacijeController)->automatskaNivelacija_novaStavka($kompanija_id=25, $id_dokumenta=$nivelacijaZaglavlje['novi_dokument']->id_dokumenta, $redni_broj_stavke=$redni_broj_stavke, $novi_dokument=$nivelacijaZaglavlje['novi_dokument'], $sifra_artikla=$artikal->sifra_artikla, $sa_pdv=$nivelacijaZaglavlje['sa_pdv'], $ns_cena= $nivelacijaZaglavlje['sa_pdv'] ? $artikal->prodajna_cena_sa_pdv_prijem : $artikal->prodajna_cena_bez_pdv_prijem);
  514. //if($artikal_nivelacija != 'true') dd($artikal);
  515. }
  516. }
  517. $zaliha_izlaz->trenutna_kolicina -= $nabavna_cena['kolicina'];
  518. $zaliha_izlaz->ukupna_kolicina_izlaz += $nabavna_cena['kolicina'];
  519. $zaliha_prijem->trenutna_kolicina += $nabavna_cena['kolicina'];
  520. $zaliha_prijem->ukupna_kolicina_ulaz += $nabavna_cena['kolicina'];
  521.  
  522.  
  523. // OVDE PROVERITI NIVELACIJU / PROMENU CENE, IZNIVELISATI AKO TREBA ILI SAMO PROMENITI CENU AKO TREBA
  524.  
  525.  
  526.  
  527. $zaliha_izlaz->save();
  528. $zaliha_prijem->save();
  529. // artikli_dokumenti, obavezno nakon promene cene
  530. //IZLAZ ARTIKLI DOKUMENTI OVO FIX
  531.  
  532. $artikli_dokumenti_izlaz = new KorisnikPodaci_ArtikliDokumenti;
  533. $artikli_dokumenti_izlaz->sifra_artikla = $zaliha_izlaz->sifra_artikla;
  534. $artikli_dokumenti_izlaz->datum_prometa = $zaglavlje->datum_prometa;
  535. $artikli_dokumenti_izlaz->id_dokumenta = $zaglavlje->id;
  536. $artikli_dokumenti_izlaz->tip_dokumenta = "Interna Otpremnica";
  537. $artikli_dokumenti_izlaz->tip_promene = "Izlaz";
  538. $artikli_dokumenti_izlaz->objekat_id = $objekat_izlaz_id;
  539. $artikli_dokumenti_izlaz->kolicina = $nabavna_cena['kolicina'];
  540. $artikli_dokumenti_izlaz->nabavna_cena = $nabavna_cena['nabavna_cena_bez_pdv'];
  541. $artikli_dokumenti_izlaz->prodajna_cena_sa_pdv = $zaliha_izlaz->prodajna_cena_sa_pdv;
  542. $artikli_dokumenti_izlaz->prodajna_cena_bez_pdv = $zaliha_izlaz->prodajna_cena_bez_pdv;
  543. $artikli_dokumenti_izlaz->trenutna_kolicina = $zaliha_izlaz->trenutna_kolicina;
  544. $artikli_dokumenti_izlaz->status = "Potvrdjen";
  545. $artikli_dokumenti_izlaz->save();
  546.  
  547. //ULAZ ARTIKLI DOKUMENTI OVO FIX
  548.  
  549. $artikli_dokumenti_ulaz = new KorisnikPodaci_ArtikliDokumenti;
  550. $artikli_dokumenti_ulaz->sifra_artikla = $zaliha_prijem->sifra_artikla;
  551. $artikli_dokumenti_ulaz->datum_prometa = $zaglavlje->datum_prometa;
  552. $artikli_dokumenti_ulaz->id_dokumenta = $zaglavlje->id;
  553. $artikli_dokumenti_ulaz->tip_dokumenta = "Interna Otpremnica";
  554. $artikli_dokumenti_ulaz->tip_promene = "Ulaz";
  555. $artikli_dokumenti_ulaz->objekat_id = $objekat_prijem_id;
  556. $artikli_dokumenti_ulaz->kolicina = $nabavna_cena['kolicina'];
  557. $artikli_dokumenti_ulaz->nabavna_cena = $nabavna_cena['nabavna_cena_bez_pdv'];
  558. $artikli_dokumenti_ulaz->prodajna_cena_sa_pdv = $artikal->prodajna_cena_sa_pdv_prijem;
  559. $artikli_dokumenti_ulaz->prodajna_cena_bez_pdv = $artikal->prodajna_cena_bez_pdv_prijem;
  560. $artikli_dokumenti_ulaz->trenutna_kolicina = $zaliha_prijem->trenutna_kolicina;
  561. $artikli_dokumenti_ulaz->status = "Potvrdjen";
  562. $artikli_dokumenti_ulaz->save();
  563.  
  564. $poslednji_id = $artikli_dokumenti_ulaz->id;
  565. }
  566. }
  567. // OVDE IDE UPIS INFO POLJA U ZAGLAVLJE
  568. if($nivelacijaZaglavlje != -1) {
  569. //dd($nivelacijaZaglavlje['nova_nivelacija_zaglavlje']->id, $nivelacijaZaglavlje['novi_dokument']->id);
  570. $nivelacija_obracun = (new NivelacijeController)->automatskaNivelacija_sacuvajinfoobracunzaglavlje($kompanija_id=25, $tip_dokumenta=9, $nivelacija_id=$nivelacijaZaglavlje['nova_nivelacija_zaglavlje']->id, $id_dokumenta=$nivelacijaZaglavlje['novi_dokument']->id_dokumenta);
  571. $poslednji_id = (new NivelacijeController)->automatskaNivelacija_potvrdiZaglavlje($kompanija_id=25, $nivelacijaZaglavlje['nova_nivelacija_zaglavlje']->id);
  572. }
  573. $zaglavlje->io_nabavna_vrednost_bez_pdv_izlaz = $info_obracun['io_nabavna_vrednost_bez_pdv_izlaz'];
  574. $zaglavlje->io_ukalkulisana_razlika_u_ceni_izlaz = $info_obracun['io_ukalkulisana_razlika_u_ceni_izlaz'];
  575. $zaglavlje->io_prodajna_vrednost_bez_pdv_izlaz = $info_obracun['io_prodajna_vrednost_bez_pdv_izlaz'];
  576. $zaglavlje->io_prodajna_vrednost_sa_pdv_izlaz = $info_obracun['io_prodajna_vrednost_sa_pdv_izlaz'];
  577. $zaglavlje->io_nabavna_vrednost_bez_pdv_prijem = $info_obracun['io_nabavna_vrednost_bez_pdv_prijem'];
  578. $zaglavlje->io_ukalkulisana_razlika_u_ceni_prijem = $info_obracun['io_ukalkulisana_razlika_u_ceni_prijem'];
  579. $zaglavlje->io_prodajna_vrednost_bez_pdv_prijem = $info_obracun['io_prodajna_vrednost_bez_pdv_prijem'];
  580. $zaglavlje->io_prodajna_vrednost_sa_pdv_prijem = $info_obracun['io_prodajna_vrednost_sa_pdv_prijem'];
  581. $zaglavlje->izlazni_pdv_opsta_prijem = $info_obracun['izlazni_pdv_opsta_prijem'];
  582. $zaglavlje->izlazni_pdv_posebna_prijem = $info_obracun['izlazni_pdv_posebna_prijem'];
  583. $zaglavlje->izlazni_pdv_povlascena_prijem = $info_obracun['izlazni_pdv_povlascena_prijem'];
  584. $zaglavlje->izlazni_pdv_opsta_izlaz = $info_obracun['izlazni_pdv_opsta_izlaz'];
  585. $zaglavlje->izlazni_pdv_posebna_izlaz = $info_obracun['izlazni_pdv_posebna_izlaz'];
  586. $zaglavlje->izlazni_pdv_povlascena_izlaz = $info_obracun['izlazni_pdv_povlascena_izlaz'];
  587. $zaglavlje->nivelacija_id = $nivelacijaZaglavlje == -1 ? -1 : $nivelacijaZaglavlje['nova_nivelacija_zaglavlje']->id;
  588. $zaglavlje->artikli_dokumenti_poslednji_id = $poslednji_id;
  589. $zaglavlje->status = "Potvrdjen";
  590. $zaglavlje->save();
  591. //dd($potvrda, $potvrda2, $nivelacijaZaglavlje);
  592. return array('nedovoljno_zaliha' => 0, 'nema_cene' => 0);
  593. }
  594. public static function generisiInfoObracun($interna_otpremnica_id, $artikli=0, $vratiArtikle=0) {
  595. if(!$artikli)
  596. $artikli = KorisnikPodaci_InternaOtpremnicaArtikli::where('internaotpremnica_id', $interna_otpremnica_id)->get();
  597. $nedovoljno_zaliha = 0;
  598. $nedovoljno_zaliha_artikli = array();
  599. $nabavna_vrednost_bez_pdv = 0;
  600.  
  601. $razlika_u_ceni_izlaz = 0;
  602. $prodajna_vrednost_bez_pdv_izlaz = 0;
  603. $prodajna_vrednost_sa_pdv_izlaz = 0;
  604.  
  605. $razlika_u_ceni_prijem = 0;
  606. $prodajna_vrednost_bez_pdv_prijem = 0;
  607. $prodajna_vrednost_sa_pdv_prijem = 0;
  608.  
  609. $izlazni_pdv_opsta_prijem = 0;
  610. $izlazni_pdv_posebna_prijem = 0;
  611. $izlazni_pdv_povlascena_prijem = 0;
  612.  
  613. $artikli_i_artikal_podaci = array();
  614.  
  615. foreach ($artikli as $artikal) {
  616. $artikal_podaci = InternaOtpremnicaControllerBojke::generisiPodatkeArtikla($interna_otpremnica_id, $artikal);
  617. if($artikal_podaci == -1) {
  618. $nedovoljno_zaliha = 1;
  619. array_push($nedovoljno_zaliha_artikli, array("naziv_artikla" => $artikal->naziv_artikla, "sifra_artikla" => $artikal->sifra_artikla));
  620. continue;
  621. }
  622. array_push($artikli_i_artikal_podaci, array('artikal' => $artikal, 'artikal_podaci' => $artikal_podaci));
  623.  
  624. $nabavna_vrednost_bez_pdv += $artikal_podaci['nabavna_vrednost_bez_pdv'];
  625.  
  626. $razlika_u_ceni_izlaz += $artikal_podaci['razlika_u_ceni_izlaz'];
  627. $prodajna_vrednost_bez_pdv_izlaz += $artikal_podaci['prodajna_vrednost_bez_pdv_izlaz'];
  628. $prodajna_vrednost_sa_pdv_izlaz += $artikal_podaci['prodajna_vrednost_sa_pdv_izlaz'];
  629.  
  630. $razlika_u_ceni_prijem += $artikal_podaci['razlika_u_ceni_prijem'];
  631. $prodajna_vrednost_bez_pdv_prijem += $artikal_podaci['prodajna_vrednost_bez_pdv_prijem'];
  632. $prodajna_vrednost_sa_pdv_prijem += $artikal_podaci['prodajna_vrednost_sa_pdv_prijem'];
  633.  
  634. switch ($artikal_podaci['pdv_procenat']) {
  635. case 20:
  636. $izlazni_pdv_opsta_prijem += $artikal_podaci['pdv_izlazni_prijem'];
  637. break;
  638. case 10:
  639. $izlazni_pdv_posebna_prijem += $artikal_podaci['pdv_izlazni_prijem'];
  640. break;
  641. case 8:
  642. $izlazni_pdv_povlascena_prijem += $artikal_podaci['pdv_izlazni_prijem'];
  643. break;
  644. }
  645. }
  646. return array(
  647. "io_nabavna_vrednost_bez_pdv_izlaz" => $nabavna_vrednost_bez_pdv,
  648. "io_ukalkulisana_razlika_u_ceni_izlaz" => $razlika_u_ceni_izlaz,
  649. "io_prodajna_vrednost_bez_pdv_izlaz" => $prodajna_vrednost_bez_pdv_izlaz,
  650. "io_prodajna_vrednost_sa_pdv_izlaz" => $prodajna_vrednost_sa_pdv_izlaz,
  651. "io_nabavna_vrednost_bez_pdv_prijem" => $nabavna_vrednost_bez_pdv,
  652. "io_ukalkulisana_razlika_u_ceni_prijem" => $razlika_u_ceni_prijem,
  653. "io_prodajna_vrednost_bez_pdv_prijem" => $prodajna_vrednost_bez_pdv_prijem,
  654. "io_prodajna_vrednost_sa_pdv_prijem" => $prodajna_vrednost_sa_pdv_prijem,
  655. "izlazni_pdv_opsta_prijem" => $izlazni_pdv_opsta_prijem,
  656. "izlazni_pdv_posebna_prijem" => $izlazni_pdv_posebna_prijem,
  657. "izlazni_pdv_povlascena_prijem" => $izlazni_pdv_povlascena_prijem,
  658. "izlazni_pdv_opsta_izlaz" => 0,
  659. "izlazni_pdv_posebna_izlaz" => 0,
  660. "izlazni_pdv_povlascena_izlaz" => 0,
  661. "nedovoljno_zaliha" => $nedovoljno_zaliha,
  662. "nedovoljno_zaliha_artikli" => $nedovoljno_zaliha_artikli,
  663. "artikli_i_artikal_podaci" => $vratiArtikle ? $artikli_i_artikal_podaci : 0
  664. );
  665. }
  666. public static function generisiPodatkeArtikla($interna_otpremnica_id, $artikal, $pregled=0) {
  667. $sifra_artikla = $artikal->sifra_artikla;
  668. $kolicina = $artikal->kolicina;
  669. $pdv_koeficijent = $artikal->pdv_procenat/100;
  670. $prodajna_cena_sa_pdv_prijem = $artikal->prodajna_cena_sa_pdv_prijem;
  671. $prodajna_cena_bez_pdv_prijem = $artikal->prodajna_cena_bez_pdv_prijem;
  672. if(!$pregled) {
  673. $objekat_izlaz = KorisnikPodaci_InternaOtpremnicaZaglavlja::findOrFail($interna_otpremnica_id)->objekat_izlaz_id;
  674. $objekat_izlaz_nabavne_cene_artikla = KorisnikPodaci_ZaliheObjekat::where('sifra_artikla', $sifra_artikla)->where('objekat_id', $objekat_izlaz)->orderBy('created_at');
  675. $ukupno_na_zalihama_za_objekat_izlaz = array_sum($objekat_izlaz_nabavne_cene_artikla->pluck('trenutna_kolicina')->toArray());
  676. if($kolicina > $ukupno_na_zalihama_za_objekat_izlaz)
  677. return -1;
  678. $nabavne_cene_artikla = $objekat_izlaz_nabavne_cene_artikla->get();
  679. }
  680. else {
  681. $nabavne_cene_artikla = json_decode($artikal->nabavne_cene_json, 1);
  682. $ukupno_na_zalihama_za_objekat_izlaz = 0;
  683. }
  684. $prodajna_cena_sa_pdv_izlaz = 0;
  685. $prodajna_cena_bez_pdv_izlaz = 0;
  686. // PROVERI PO KOJIM NABAVNIM CENAMA CE KOJA KOLICINA DA UZIMA IZ MAGACINA
  687. $artikal_nabavne_cene_json = array();
  688. $ostalo_kolicina = $kolicina;
  689. $nabavna_vrednost_sa_pdv = 0;
  690. $nabavna_vrednost_bez_pdv = 0;
  691. $prekini_sledeci_put = 0;
  692. //dd($nabavne_cene_artikla);
  693. foreach($nabavne_cene_artikla as $nabavna_cena) {
  694. if($prekini_sledeci_put) break;
  695. $prodajna_cena_sa_pdv_prijem = $artikal->prodajna_cena_sa_pdv_prijem;
  696. $prodajna_cena_bez_pdv_prijem = $artikal->prodajna_cena_bez_pdv_prijem;
  697. if(!$pregled) {
  698. $nabavna_cena_kolicina = $nabavna_cena->trenutna_kolicina;
  699. $nabavna_cena_sa_pdv = $nabavna_cena->nabavna_cena_sa_pdv;
  700. $nabavna_cena_bez_pdv = $nabavna_cena->nabavna_cena_bez_pdv;
  701. $prodajna_cena_sa_pdv_izlaz = $nabavna_cena->prodajna_cena_sa_pdv;
  702. $prodajna_cena_bez_pdv_izlaz = $nabavna_cena->prodajna_cena_bez_pdv;
  703. }
  704. else {
  705. //dd($nabavna_cena);
  706. $nabavna_cena_kolicina = $nabavna_cena['kolicina'];
  707. $nabavna_cena_sa_pdv = $nabavna_cena['nabavna_cena_sa_pdv'];
  708. $nabavna_cena_bez_pdv = $nabavna_cena['nabavna_cena_bez_pdv'];
  709. $prodajna_cena_sa_pdv_izlaz = $artikal->prodajna_cena_sa_pdv_izlaz;
  710. $prodajna_cena_bez_pdv_izlaz = $artikal->prodajna_cena_bez_pdv_izlaz;
  711. }
  712. if($ostalo_kolicina <= $nabavna_cena_kolicina) {
  713. $iskoriscena_kolicina_za_nabavnu_cenu = $ostalo_kolicina;
  714. $prekini_sledeci_put = 1;
  715. }
  716. else {
  717. $iskoriscena_kolicina_za_nabavnu_cenu = $nabavna_cena_kolicina;
  718. $ostalo_kolicina -= $nabavna_cena_kolicina;
  719. }
  720.  
  721. array_push($artikal_nabavne_cene_json, array("kolicina"=>$iskoriscena_kolicina_za_nabavnu_cenu, "nabavna_cena_sa_pdv"=>$nabavna_cena_sa_pdv, "nabavna_cena_bez_pdv"=>$nabavna_cena_bez_pdv));
  722.  
  723. // if($prodajna_cena_sa_pdv_prijem == -1 && $prodajna_cena_bez_pdv_prijem == -1) { // -1 je ako nije promenjena cena pri prebacivanju u drugi magacin. ako nije promenjena tj -1, koristiti cenu iz magacina iz koga se prebacuje
  724. // $prodajna_cena_sa_pdv_prijem = $prodajna_cena_sa_pdv_izlaz;
  725. // $artikal->prodajna_cena_sa_pdv_prijem = $prodajna_cena_sa_pdv_prijem;
  726. // $prodajna_cena_bez_pdv_prijem = $prodajna_cena_bez_pdv_izlaz;
  727. // $artikal->prodajna_cena_bez_pdv_prijem = $prodajna_cena_bez_pdv_prijem;
  728. // }
  729. $nabavna_vrednost_sa_pdv += $nabavna_cena_sa_pdv*$iskoriscena_kolicina_za_nabavnu_cenu;
  730. $nabavna_vrednost_bez_pdv += $nabavna_cena_bez_pdv*$iskoriscena_kolicina_za_nabavnu_cenu;
  731. }
  732.  
  733. $pdv_iznos_preneseni = $nabavna_vrednost_sa_pdv - $nabavna_vrednost_bez_pdv;
  734.  
  735. // IZLAZNI MAGACIN
  736. $prodajna_vrednost_sa_pdv_izlaz = $prodajna_cena_sa_pdv_izlaz * $kolicina;
  737. $prodajna_vrednost_bez_pdv_izlaz = $prodajna_cena_bez_pdv_izlaz * $kolicina;
  738. $pdv_iznos_izlaz_izlazni = $prodajna_vrednost_sa_pdv_izlaz - $prodajna_vrednost_bez_pdv_izlaz;
  739. $razlika_u_ceni_izlaz = $prodajna_vrednost_bez_pdv_izlaz - $nabavna_vrednost_bez_pdv;
  740.  
  741. // PRIJEMNI MAGACIN
  742. $prodajna_vrednost_sa_pdv_prijem = $prodajna_cena_sa_pdv_prijem * $kolicina;
  743. $prodajna_vrednost_bez_pdv_prijem = $prodajna_cena_bez_pdv_prijem * $kolicina;
  744. $pdv_iznos_prijem_izlazni = $prodajna_vrednost_sa_pdv_prijem - $prodajna_vrednost_bez_pdv_prijem;
  745. $razlika_u_ceni_prijem = $prodajna_vrednost_bez_pdv_prijem - $nabavna_vrednost_bez_pdv;
  746. $pdv_po_jedinici_prijem= $prodajna_cena_sa_pdv_prijem - $prodajna_cena_bez_pdv_prijem;
  747. // KRAJ PROVERE, NAKON OVOGA JE FORMIRAN artikal_nabavne_cene_json
  748.  
  749.  
  750. // SRACUNAJ INFO POLJA, PDV, ITD ITD
  751. return array(
  752. "prodajna_cena_bez_pdv_prijem" => $prodajna_cena_bez_pdv_prijem,
  753. "prodajna_cena_sa_pdv_prijem" => $prodajna_cena_sa_pdv_prijem,
  754. "prodajna_vrednost_bez_pdv_prijem" => $prodajna_vrednost_bez_pdv_prijem,
  755. "prodajna_vrednost_sa_pdv_prijem" => $prodajna_vrednost_sa_pdv_prijem,
  756. "razlika_u_ceni_prijem" => $razlika_u_ceni_prijem,
  757. "pdv_izlazni_prijem" => $pdv_iznos_prijem_izlazni,
  758. "pdv_po_jedinici_prijem" => $pdv_po_jedinici_prijem,
  759. "prodajna_cena_bez_pdv_izlaz" => $prodajna_cena_bez_pdv_izlaz,
  760. "prodajna_cena_sa_pdv_izlaz" => $prodajna_cena_sa_pdv_izlaz,
  761. "prodajna_vrednost_bez_pdv_izlaz" => $prodajna_vrednost_bez_pdv_izlaz,
  762. "prodajna_vrednost_sa_pdv_izlaz" => $prodajna_vrednost_sa_pdv_izlaz,
  763. "razlika_u_ceni_izlaz" => $razlika_u_ceni_izlaz,
  764. "pdv_izlazni_izlaz" => $pdv_iznos_izlaz_izlazni,
  765. "nabavna_vrednost_bez_pdv" => $nabavna_vrednost_bez_pdv,
  766. "nabavna_vrednost_sa_pdv" => $nabavna_vrednost_sa_pdv,
  767. "pdv_preneseni" => $pdv_iznos_preneseni,
  768. "pdv_procenat" => $artikal->pdv_procenat,
  769. "nabavne_cene_json" => $artikal_nabavne_cene_json,
  770. "ukupno_na_zalihama_za_objekat_izlaz" => $ukupno_na_zalihama_za_objekat_izlaz
  771. );
  772. }
  773. // KRAJ SRACUNAVANJA
  774. public static function podaciZaPopunjavanjeModala($sifra_artikla, $zaglavlje, $kolicina, $artikal_podaci, $zalihe_objekat_izlaz=-1) {
  775. if($zalihe_objekat_izlaz==-1) {
  776. $objekat_izlaz_nabavne_cene_artikla = KorisnikPodaci_ZaliheObjekat::where('sifra_artikla', $sifra_artikla)->where('objekat_id', $zaglavlje->objekat_izlaz_id)->orderBy('created_at'); // PITATI GORANA DA POTVRDI PO CEMU SORTIRATI !!
  777. $zalihe_objekat_izlaz = array_sum($objekat_izlaz_nabavne_cene_artikla->pluck('trenutna_kolicina')->toArray()); // SRACUNATI UKUPNO NA ZALIHAMA
  778. }
  779. $objekat_ulaz_nabavne_cene_artikla = KorisnikPodaci_ZaliheObjekat::where('sifra_artikla', $sifra_artikla)->where('objekat_id', $zaglavlje->objekat_prijem_id);
  780. $zalihe_objekat_ulaz = array_sum($objekat_ulaz_nabavne_cene_artikla->pluck('trenutna_kolicina')->toArray());
  781.  
  782. $zalihe_objekat_izlaz_novo = $zalihe_objekat_izlaz - $kolicina;
  783. $zalihe_objekat_ulaz_novo = $zalihe_objekat_ulaz + $kolicina;
  784.  
  785. return array(
  786. "artikal_podaci" => $artikal_podaci,
  787. "zalihe_izlaz_staro" => $zalihe_objekat_izlaz,
  788. "zalihe_izlaz_novo" => $zalihe_objekat_izlaz_novo,
  789. "zalihe_ulaz_staro" => $zalihe_objekat_ulaz,
  790. "zalihe_ulaz_novo" => $zalihe_objekat_ulaz_novo
  791. );
  792. }
  793. }
  794.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement