{"version":3,"sources":["app.js"],"names":["requirejs","require","define","undef","hasProp","obj","prop","hasOwn","call","normalize","name","baseName","nameParts","nameSegment","mapValue","foundMap","lastIndex","foundI","foundStarMap","starI","i","j","part","baseParts","split","map","config","starMap","charAt","slice","length","nodeIdCompat","jsSuffixRegExp","test","replace","concat","splice","join","indexOf","substring","makeRequire","relName","forceSync","req","apply","aps","arguments","makeNormalize","makeLoad","depName","value","defined","callDep","waiting","args","defining","main","Error","splitPrefix","prefix","index","makeConfig","makeMap","handlers","Object","prototype","hasOwnProperty","plugin","parts","f","n","pr","p","exports","e","module","id","uri","deps","callback","cjsModule","ret","usingExports","callbackType","load","undefined","alt","setTimeout","cfg","_defined","amd","jQuery","t","r","o","this","path","keys","fns","params","regex","a","addHandler","push","removeHandler","run","match","exec","decodeURIComponent","toURL","RegExp","Array","optional","s","h","reload","navigate","lookup","remove","removeAll","silent","l","window","location","hash","noConflict","c","u","addEventListener","attachEvent","removeEventListener","detachEvent","show","render_sub_stack","_subs","scope","get_app_scope","substr","parsed","parse_parts","webix","extend","url_string","app","parent","stack","url","start","layout","page","params_string","str","key","subui","ui","run_plugins","url_plugins","create_temp_ui","on","create_temp_event","destroy","_init","_destroy","$layout","subview","copy","$scope","create","root","_ui","$$","sub","ui_plugins","$onurlchange","chunks","shift","result","pos","objmode","dchunk","target","$oninit","$ondestroy","$subview","tname","$ui","$init","isArray","method","isDate","render_stack","line","issubpage","fullname","require_plugins","next","$freeze","resize","plugins","code","_handlers","container","view","temp","_uis","run_handlers","arr","uis","destructor","delete_ids","views","childs","getChildViews","invalid_url","err","debug","console","log","requireModules","message","type","expire","text","version","document","body","add","EventSystem","ready","node","html","addCss","removeCss","router","options","routie","use","handler","$onurl","$onui","trigger","data","callEvent","action","onError","select_menu","menu_id","menu","setValue","select","exists","get_menu","$menu","reconstruct","parse","title","details","$menuid","Polyglot","phrases","currentLocale","locale","allowMissing","warn","langToTypeMap","mapping","langs","trim","trimRe","choosePluralForm","count","texts","chosenText","delimeter","pluralTypeIndex","pluralTypeName","langToPluralType","pluralTypeToLanguages","en","pluralTypes","interpolate","phrase","arg","clone","source","VERSION","newLocale","morePhrases","clear","newPhrases","smart_count","_","chinese","german","french","russian","czech","polish","icelandic","saveSetting","current_user","settings","user","credentials","host","Cookies","getJSON","getDvcsID","cookie","getAppCookie","ma_dvcs","getCurrentUser","username","getLanguage","language","getAccessToken","access_token","expires_in","timestamp","Date","now","getRefreshToken","refresh_token","ajax","headers","Content-type","post","wb_user_id","JSON","error","getCredentials","token","baseUrl","href","startsWith","storage","local","put","set","get","setCurrentUser","userId","login","password","component","ProgressBar","disable","showProgress","is_sso_login","enable","hideProgress","querySelector","classList","token_type","noti_sso","notes_sso","is_link_sso","is_weak_pass","isWeakPass","then","loginsso","sso_code","redirect_uri","id_token","sid","logout","to","session","status","Promise","resolve","_get_lang","defaultlang","_set_lang","lang","create_locale","current_lang","poly","bind","template","setLang","getLang","isNow","val","users","_get_theme","theme","current_theme","_set_theme","setTheme","getTheme","_isUndefined","computeStackTraceWrapper","b","XMLHttpRequest","ActiveXObject","open","send","responseText","d","domain","g","UNKNOWN_FUNCTION","Math","floor","max","min","column","lastIndexOf","getElementsByTagName","k","m","src","q","func","context","mode","useragent","navigator","userAgent","stacktrace","innerText","v","w","x","y","z","incomplete","unshift","partial","caller","toString","description","sourceURL","fileName","lineNumber","remoteFetching","linesOfContext","tracekitReport","augmentStackTraceWithInitialElement","guessFunctionName","gatherContext","ofCaller","Notifier","_topLevelNotifier","protocol","DEFAULT_ENDPOINT","enabled","endpoint","environment","scrubFields","Util","DEFAULT_SCRUB_FIELDS","checkIgnore","logLevel","DEFAULT_LOG_LEVEL","reportLevel","DEFAULT_REPORT_LEVEL","uncaughtErrorLevel","DEFAULT_UNCAUGHT_ERROR_LEVEL","payload","lastError","parentNotifier","logger","notifier","configure","_wrapNotifierFn","_guessErrorClass","ERR_CLASS_REGEXP","_payloadProcessorTimer","_rollbarPayloadQueue","_processPayload","endpointUrl","accessToken","payloadProcessorTimeout","getTime","rateLimitStartTime","rateLimitPerMinCounter","_globalRollbarOptions","maxItems","itemsPerMinute","ignoreRateLimit","rateLimitCounter","_log","XHR","_rollbarWindowOnError","_rollbarWrappedError","globalNotifier","uncaughtError","_extendListenerPrototype","wrap","_wrapped","setupCustomJSON","quote","escapable","meta","charCodeAt","gap","toJSON","rep","isFinite","String","indent","valueOf","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Number","Boolean","cx","\b","\t","\n","\f","\r","\"","\\","stringify","","reviver","walk","eval","SyntaxError","merge","constructor","parseUriOptions","strictMode","parser","strict","loose","parseUri","sanitizeUrl","anchor","query","traverse","redact","uuid4","random","RollbarJSON","XMLHttpFactories","createXMLHTTPObject","readyState","setRequestHeader","onreadystatechange","XDomainRequest","onprogress","ontimeout","onerror","onload","NOTIFIER_VERSION","DEFAULT_ITEMS_PER_MIN","DEFAULT_MAX_ITEMS","LEVELS","info","warning","critical","startTime","TK","_generateLogFn","_getLogArgs","level","custom","_route","_processShimQueue","shim","parentShim","shimId","_buildPayload","uuid","platform","framework","_buildBody","request","query_string","search","user_ip","client","runtime_ms","round","javascript","browser","cookie_enabled","cookieEnabled","screen","width","height","_getBrowserPlugins","server","_scrub","_buildPayloadBodyTrace","_buildPayloadBodyMessage","extra","exception","class","frames","filename","lineno","colno","pre","trace","_browserPlugins","_getScrubFieldRegexs","_getScrubQueryParamRegexs","_urlIsWhitelisted","hostWhiteList","_messageIsIgnored","ignoredMessages","_enqueuePayload","_internalCheckIgnore","verbose","logFunction","transform","jquery","ignoreAjaxErrors","messagejquery_ajax_error","_tkStackTrace","global","_isWrap","_rollbarContext","_wrappedSource","processPayloads","init","captureUncaught","ping","try_to_logout","afterLogout","try_to_login","afterLogin","newconfig","setInterval","response","delay","core","tracker","skin","$active","inputHeight","menuHeight","listItemHeight","buttonHeight","rowHeight","codebase","i18n","dateFormat","setLocale","disabled","rules","isEmail","patt","isPositiveNumbers","isSpecialCharacter","isPhoneNumber","isTaxCode","number","env","touch","scrollSize","CustomScroll","port","hostname","onkeydown","event","keyCode","ctrlKey","cancelBubble","returnValue","UIManager","addHotKey","ev","getTopParentView","topParent","elButtons","$view","getElementsByClassName","element","viewId","attributes","button","shortcut","app_cache","subviewT","refresh","subviewQ","date","_month","getMonth","firstDay","getFullYear","lastDay","modal","position","head","paddingY","paddingX","elementsConfig","labelWidth","complexData","margin","elements","label","required","invalidMessage","suggest","selectAll","onChange","newValue","urlLoad","comp","getPopup","getList","clearAll","cols","newv","quarter","quarter1","option","getValue","thang","nam","quy","firstDate","lastDate","year","month","date1","firstDay1","lastDay1","validate","isNotEmpty","align","onClick","self","tableHoadon","tungay","denngay","focus","form","getParentView","win","item","getValues","load_event","close","click","hotkey","setValues","getDecimalPlace","fmHoaDon123","keyValue","replaceAll","dsFieldFormat","decimalSizeLeght","numToStr","groupDelimiter","groupSize","decimalDelimiter","decimalSize","fmHoaDon123number","roundNumber","num","decimals","toFixed","numberFormat","edit","NaN","isNaN","CheckKhacNull","clear_filter","table","eachColumn","filter","getFilter","validate_HD_ReturnListHdonId","tableHdon","datafrmAll","serialize","lsthdon_id","lstDataChoose","chon","tthai","check","today","nlap","$","hdon_id","validate_HD_ReturnListHdonId_notSign","validate_HD_ReturnListHdonKhongMaVaCoMaId","lsthdon_id_coMa","lsthdon_id_khongMa","lstDataChooseKhongRoMa","is_hdcma","lstDataChooseCoMa","lstDataChooseKhongMa","validate_HD_ReturnListHdonKhongMaVaCoMaVaMTTId","khieu","lstDataChooseMTT","validate_BL_ReturnListHdonKhongMaVaCoMaId","ExcuteHoaDon","checkGuiCQT","checkHasCode","tagSign","isCompleted","Content-Type","kytaptrung","listcerts","modalbox","buttons","top","hide","cert","begin","begin_date","end","end_date","postData","branch_code","cer_serial","type_cmd","guiCQT","dataPut","timeout","ok","fail","xhr","statusText","borderless","resizeColumn","columns","header","checkValue","uncheckValue","tblInvoice","checkSigHSM","promise","all","resultscheckSigHSM","excuteHdPlugin","results","json","idhoadon","InvoiceXmlData","hub","hubconnect","conn","state","off","parameters","xml","xmlbangke","_listcerts","_cert","so_serial","ngaybatdau","ngayketthuc","issuer","subjectname","subject_name","idData","shdon","idSigner","dvky","dateKy","invoke","done","res","ExcuteHoaDonMTT","SignMTTToKenHSM","TongHopHoaDonMTT","editmode","XmlHttpRequest","success","postDataMTT","CheckHSM","KyTongHopXml","ids","forEach","excuteHdPluginMTT","ExcuteHoaDonMTT_NotSign","havesign","cert_serial","mltdiep","ExcuteHoaDonForHasCodeAndNotHaveAnyCode","lsCoMa","lsKhongMa","dsHoaDon","urlApi","hoadon","AllHoaDon","dsHoaDonXL","CommonOnclickTaskOfHD","CommonOnclickTaskOfHDTT32","CreatItemFromData","field","tab","isFmNumber","format","formatNumberDetails","formatNumberArray","subCol","column_name","caption","editor","type_editor","hidden","value_change","formatOriginal","read_only","column_type","dateToStr","removeTimeZoneT","css","text-align","data_decimal","numericConfig","decimalPlaces","column_width","fillspace","ref_id","optionslist","list_column","editors","$popup","timepicker","icons","listColumns","popup","refid","$proxy","listToTree","filterMode","showSubItems","textValue","display_field","tableId","table_name","onSearchIconClick","getFormView","fieldExpression","datapost","masothue","toUpperCase","onIconButtonClick","getAttribute","tableShowEditWindow","value_suggest","field_expression","displayField","columnName","scroll","autoheight","datatype","dataFeed","filtervalue","pathUrl","urldata","encodeURIComponent","onValueSuggest","selectedItem","getSelectedItem","fields","array","updateItem","fn","Function","CreatItemMaterFromData","windowno","timeStamp","labelPosition","label_position","label_width","data_width","placeholder","formatNumberMaster","formatdvtt","decimal","parseInt","maxlength","styleinput","style","readonly","labelRight","inputAlign","valid_rule","rule","onKeyPress","alert","REF_ID","master","parentItem","mst","icon","showEditWindow","sql","command","parameter","editorId","formId","res_a","searchId","valueField","windowconfig","txtSearch","selectwindow","initUI","getHead","setHTML","oldv","ExeCuteCheckReadCurencyTV","checkReadTV","total_amount","type_curency","sync","c_result","tthdon","CanhBaoTinhTien","tong_tien_all","tong_tien","canh_bao","lech","lech2","table_t","isVisible","entry","kmai","tgtttbso","decimalDigits","includes","abs","tgtttbso_last","GetBienLaiChon","GetHoaDonChon","GetHoaDonChonOfTableId","ExcuteShowPopupNotifyErrorInvoice","huyhoadon","datafrm","cungshd","loai","ladhddt","tctbao","setEditMode","tongquat","so","stbao","ntbccqt","ntbao","setValuesTongQuat","mcqtcap","mccqthue","khieu_temp","shdon_temp","ngay","nlap_temp","hdon_id_old","ExcuteReplaceInvoice","kyHieuHoaDon","invoiceForms","invoiceFormsCode","invoiceFormsCodeMTT","arrayString","tblMatHang","chons","detailForm","cctbao_id_temp","cctbao_id","tthdon_old","tthdon_original","tthai_old","nky","loaihdlq","tgia","sdhang","tienthuegtgtgiam","tiletienthuegtgtgiam","giamthuebanhang20","initUINew","tableDetail_phi","refreshColumns","tableDetail","cthdon_id","uid","content","editable","ExcuteChonInvoice","itemSL","assign","sbmat","setModeChangeView","copyValues","ExcuteReplaceInvoice_32","ExcuteIncreaseChangeInvoice_32","ExcuteReduceChangeInvoice_32","ghichu","ExcuteInfoChangeInvoice_32","obj_detail","ten","shdclquan","moment","nlhdclquan","khhdclquan","ExcuteIncreaseChangeInvoice","ExcuteReduceChangeInvoice","note","ExcuteInfoChangeInvoice","ngay_hoa_don","ExcuteCancellingInvoice","totalHuy","strHoaDonSelect","confirm","cancel","hoaDonHuy","idHoaDon","ExcuteCancellingInvoicetncn","ExcuteHUyInvoicebienlai","ExcuteCancellingInvoicebienlai","DuyetHoaDon","renderFormat","changeValue","table_chitiet","table_phi","arrayString_chitiet","field_name","decimal_format","format_numeric","formatSoDefault","formatSo","format_config","getColumnConfig","row","editStop","clearSelection","isNumber","CheckExistKeySession","getAllHD_ValidateHD","returnData","commonHD","mau04","fmNumber","mess","tooltip","fullscreen","move","onBeforeShow","rows","onTimedKeyPress","re","scrollX","tabbar","cells","padding-bottom","onItemClick","isUndefined","getEditState","unselect","showColumn","hideColumn","drag","data->onStoreUpdated","each","stt","onAfterLoad","ck","onCheck","onAfterAdd","tong_tien_tt_dp","tong_tien_thue_dp","tong_tien_ck_dp","tong_tien_dp","onAfterDelete","tien_tt_all","tien_thue_all","tien_ck_all","tien_tt_10","tien_thue_10","tien_ck_10","tong_tien_10","tien_tt_5","tien_thue_5","tien_ck_5","tong_tien_5","tien_tt_0","tien_thue_0","tien_ck_0","tong_tien_0","tien_tt_k","tien_thue_k","tien_ck_k","tong_tien_k","tien_tt_kct","tien_thue_kct","tien_ck_kct","tong_tien_kct","tien_tt_kkk","tien_thue_kkk","tien_ck_kkk","tong_tien_kkk","tien_chietkhauthuongmai","onAfterEditStop","table_inv_views","item_inv","item_note","getItem","columnId","so_luong","sluong","don_gia","dgia","tien_tt","thtien","pt_ck","tlckhau","tien_ck","stckhau","pt_thue","tsuat","tien_thue","tthue","tgtien","parseFloat","tsuatstr","tienphi","tien_phi_moi","padding-left","font-weight","background-color","labelAlign","oldValue","tong_tien_cu","record","it","bool","phi","item1","data_post","sign","nguoinhan","email","tieude","idMau04","_res","winconfig","tablePhi","urlPhi","getFormat","values","footer","scheme","sort","bangmotaloiCQT","rowLineHeight","fullScreen","fixedRowHeight","ShowResponseMessage","cell","time","mltdiep_gui","adjustRowHeight","row_id","getFirstId","bangkebanraForm","controls","rpParameter","box","file","Blob","fileURL","URL","createObjectURL","download","common","$level","treetable","$count","ky_hieu","colspan","so_hd","decimalOptional","pager","$group","by","openAll","size","group","convertTypeToFileFormat","fileFormat","handleProcessFileInfo","processFileInfo","fileInfo","loadingIcon","statusProcess","loading","actionIcon","actionProcess","process","fileType","clickAction","sucessEvent","listFileProcess","onSuccess","errorEvent","paramRequest","param","me","choose","removeItem","onDownLoad","checkFileProcess","rs","itemId","getIdByIndex","checkItemLoading","isLoading","closeWindow","genHeader","headerComp","manager-file-down","className","htmlElement","contains","manager-file-close-button","DataCollection","getIconFile","bodyComp","elementId","closest","handleFileDownLoad","fileProcessInfor","isCheckAdd","headerTitle","autohide","handleFile","formatDate","dd","getDate","padStart","MM","YYYY","hh","getHours","mm","getMinutes","ss","getSeconds","formattedDate","textErr","newWindow","revokeObjectURL","startYear","endYear","years","newYear","currentFromDate","currentToDate","setFullYear","isquy","danhsachgiamtru","fm","decimalSizeDefault","lstTemp","putData","lhhoa","errorMessenger","frm","tong_gt","tong_phi","minWidth","minHeight","setParams","bangdanhsachhoadon","getNgay","day","ds_hdon","limit","apiIndex","tgtcthue","tgtthue","tgtttoan","tgtkhac","tgtphi","lanDau","loaiHangHoa","bangtonghopform","hoadonHistory","exportExcelMulti","selectedItems","idItems","par","datafetch","continue","property","columnType","filterType","urlTemp","tax_code","trang_thai","$el","databth","datachon","khData","btnRefresh","newWin","write","dataTable","selectedRecords","exportType","ldau","ket_qua","tableexcel","urlget","toExcel","rawValues","tableDK","layoutDK","data_id","data_id_xd","parameters_list","DowloadBTHLDRep","InBTHDLRep","ShowHistory","onItemDblClick","btnEdit","loai_tbao","closed","batch","groupText","loaibth","xml_nhan","setId","bangtonghop_id","bangtonghopdl_68_id","tel","address","connectToSignalR","urlIndex","urls","hubConnection","useDefaultPath","createHubProxy","disconnected","isConnected","isLocked","connection","userApp","chon1","isWindowXP","ws","WebSocket","onclose","onClose","str2","onopen","execCommand","OPEN","fn_in","onmessage","onOpen","setLocked","locked","getLocked","autowidth","ttchuc","seri","tngay","dngay","hthuc","ctsHSM","ltkhai","cks","manage","dangkysudung","mau01_id","dowloadXmlDKSD","btndowloadXMLRep","btndowloadXMLRepTiepNhan","ketqua_tiepnhan","InMau01","InMau02","InMau03","onBeforeLoad","showOverlay","hideOverlay","report_id","infoWindowId","infoparam","infowindow_id","tlhdunhiem","khmhdon","khhdunhiem","mstunhiem","ttcdunhiem","mdunhiem","thunhiem","pttthdunhiem","tableUyNhiem","uynhiems","urlUyNhiem","xml_thongdiep","grid","tlbParams","childViews","child","historyid","reg_id","datatable","items","onblur","ldo","onBeforeEditStart","check_HSM","cqt_ql","city","manage_tax_authorities","controls2","dateFormatStr","pagination","ttthue_total","tckhau_total","tthue_total","ttsthue_total","mau04form","huyhoadonchitietform","hoadonform","multiview","onBeforeTabClick","builder","onAfterRender","huyhoadon_1","subChucNang","padding","btnPlus","$template","ExceptionMessage","sendemail","nguoi_gui","sender","subject","noidung","mat_khau","pass","inv_invoiceauth_id","his_email","lst_email","hdon68","alias","invs","tlbparam_s","countkyHieu","urlMiniDashBoard","onColumnResize","onSubViewCreate","subView","fitBiggest","error_status","rcheckbox","checked","mini_dashboard","combo","uploadForm","excel_id","onChangeKhmbl","dt","yearlast","khhdon","loaikh","onchange","khm","khhd","kyhieuForm","selectedselectedItem","value_field","tt_sd","qlkhsdung_id","regText","lhdon","khdon","donginmau","sdmau","kyhieu","dataPost","loaihd","signMode","cqt","setValuesEdit","form_0405","headerRowHeight","Dowload0405","Dowload0405Rep","InMau0405","InMau0405Rep","checkHD78","table1","detail","is_hdon78","arrid","errarr","erri","hasError","tttnhan","cqtphoi","link","accept","autosend","multiple","onUploadComplete","onFileUploadError","mauthietkeform","loaimau","dmmauhoadon_id","checkmaubangke","donVi","tlbParam","subBangKe","subPhieuThu","checkmauphieuthu","decimal_point","thousand_point","phanhoadon_78_id","isActiveDbClick","arrayParam","branchcode","sosudung","total","find","used","available","removeView","addView","tien","toLocaleString","kyhieu_id","columnlst","arrcolumn","exporttype","preventDefault","stopPropagation","lsHodonId","ttthdon","htmlSoBanGhi","first","prev","last","startDate","hoursDiff","getTimezoneOffset","minutesDiff","setHours","setMinutes","endDate","dataCount","window_type","email_sso","itemData","dtChuKySo","dtMauHoaDon","dtDonvi","is_new_user","is_sign_invoice","is_sign_invoice_hsm","is_view_user","is_edit_user","is_del_user","resizeRow","ngay_bd_sd","dtMauHoaDon68","ckspermission","invtemppermission","invoicepermission","issigninvoice","issigninvoicehsm","isviewuser","isedituser","isdeluser","isnewuser","dmwindowform","account_hsm","accountpermission","cb","is_sso","store_code","inputNode","getInputNode","inputType","onBlur","passwordRegex","errorLabel","createElement","color","marginTop","appendChild","newpass","confirmpass","proxy","gravity","string","ten_dvcs","ms_thue","nguoi_lien_he","sdt","teamview","noi_dung","sdt_nguoi_lien_he","ultra_teamview","getWarning","getInfocompany","getMST","GetSchema","otp","apiUrl","sso","userData","userInfo","changepass","chat","hotroform","link_sso","autofit","dataList","tgian_gui","contentnotify","borderRadius","showNotify","Touch","background","padding-top","openAction","onMenuItemClick","getMenuItem","window_id","_URL","subsign","getApiHost","protoUI","$skin","defaults","aheight","_set_inner_size","tree","folder","dir","profile","notify","menuBar","apiHost","dvcs","bear","owner","Message","mainToolbar","js","_originalShow","bangkebanra","wininfoparam","_date","wb_infowindow_id","window_width","window_height","view_extension","formValues","rows_max","el","default_value","defaultValue","wb_references_id","radio_id","win_id","radio","menuitem","formvalues","setParentValue","windowId","formParent","col","rp","max_row","vc_window","tabs","Tabs","after_save","COLUMN_TYPE","tab_type","subCols","Fields","parentView","childview","DEFAULT_VALUE","tab_table","tab_id","select_change","list","old","onSelectChange","getSelectedId","tab_row","windowid","tableParent","setFocus","toolbar","btnChon","masterTab","hide_in_grid","type_filter","getObjects","objects","findAndReplace","object","getKeys","editwindow","findJson","REFID","editorvalue","res_b","doc_id","model","generateGUID","parentCodeParam","wb_excel_id","keepViews","detail_layout","layoutdetail","layout_element","json_layout","jsonElement","topParentView","field_express","font-size","formData","cell_editstop","after_addrow","after_delrow","oncheck","btnMinus","btnCopy","myJsonString","before_save","focusFirstElement","dataParam","infowindow","windowform","initData","parentParamter","parentParameter","parentRow","PARAMETERS","getContext","MA_CT","WINDOW_ID","DOC_ID","a_result","ctx","detailreport","MENU_ID","$change","BOLD","$css","onBeforeContextMenu","mn","setTableId","REPORT_ID","CAPTION","attachTo","REPORTCOLUMN_FIELD","REPORTCOLUMN_NAME","REPORTCOLUMN_WIDTH","HIDDEN","HEADER","hd","initTable","wb_report_id","isFooter","header_title","data_type","cbReport","reportItem","export_name","getText","headermenu","tu_ngay","den_ngay","server_cert","popupText","certs","paddingTop","tokenSerial","upload","phone","pathAPI","user_id","lstError","pop","CSS","p_id","dien_giai","quyen","barWidth","radius","gradient","preset","xAxis","lines","yAxis","step","legend","valign","marker","eventRadius","series","alpha","borderColor","linkSSO","dashline_license","dashline78new","dashline_bienlai","dashline_chungtu","chart","thongbaosso","changeweakpass","noti","notes","form_filter","border-radius","lastday","loadUrl_HD","loadUrl_BL","loadUrl_CT","winthongbaosso","template_code","invoice_series","item3","remaining","datecert","convertcert","checkdatecert","datenow","convernow","checkdatenow","ngayhethan","checkdate","lisence_to","SetData","GetData","ClearData","listKey","dmfieldform","loadData","tabId","submenu","numberRow","wb_tab_id","tabCombo","loadahead","dmhvform","ten_hv","dmtabform","language_code","key_lang","op","ID","WINDOW_NAME","wb_window_id","tab_name","loadDmWindowData","signOnServerFile","refUri","certSerial","signId","signTag","inv_InvoiceAuth_id","gia_tri","signOnServer","exportExcel","exportFormat","KyHoaDon","wintable","cert_type","resultTime","origin","lstCert","laySoHoaDon","TuChoiHoaDon","invoice_issued_date","ngay_hd","showPopup","ma","btnReject","fName","WinParams","loaichuyendai_id","hoadonSaveChangePath","hoadonSaveChange","saveCustomerPath","saveCustomer","hoadon68CallApis","customerCallApis","dataFormHd78","modeChangeView","tongtienHDonBke","tongtienthueHDonBke","isSaveCustomerInfo","tongtienBangKeCT","tongtienthueBangKeCT","mauso","tudongtinhtien","isHasDiscount","mnmuaValue","tenValue","mstValue","dchiValue","checkMessage","showConfirmUI","afterSaveInvoiceSuccess","afterSaveInvoiceError","TTKhac","ttruong","kdlieu","dlieu","TTKhacItem","buyer_name","bank_account","bank_name","name_label","address_label","catch","editgiatri","docngoaitetv","urlKhac","setValuesBangKe","setNewInvoice","newInvoice","foreign_key","item_inf","ignore","SetDefaultValue","onresize","once","onBeforeRender","StringToFunc","funcReg","StringToFunc2","svban","nvban","lydo","setValuesBienBan","setHideBtnDelete","btnPrint","dowloadXml","bienbanForm","hoadonlq","on_click","checksobangke","excel_id_param","hasBienBan","after_new","after_edit","lstDataChooseSort","ShowHistory2","sizeToContent","donvitien","sub_col","kihieuRefId","initComponents","_windowconfig","columnAlias","column_alias","columnFormat","value_filter","isDefault","has_default","comboId","validateFunc","onEnter","loadUrl","menus","is_group_function","btnChucNang","khID","$onDestruct","Clear","lhdclquan","khmshdclquan","case","dvtte","htttoan","isn","hdonids","_hdonids","countObj","inputWidth","_countObj","countAll","countSuccess","countFailure","winForm","maxsoluong","newselectedItem","list_number","head_name","col1","hvData","tlkthu","setcompany","phanloaihd","record_phi","checkmtt","showWarningMessage","inv_InvoiceCode_id","promises","arrays","cerSerial","txtCer","signCertFile","inv","d1","tableHD","sl_dk_them","interVal","clearInterval","key_license","sl_hd","checkHasComp","multiComboBranch","multiComboKH","toLowerCase","files","fileDialog","onBeforeFileAdd","typeList","onAfterFileAdd","reader","FileReader","arrayBuffer","Uint8Array","array1","from","ten_file","file_data","loai_file","readAsArrayBuffer","apiOnly","txtHinhThuc","sttMau","ten_cty","dia_chi","unbind","stopUpload","sizetext","fileSize","txtSolien","sl_invoice_type_id","txtMauso","so_lien","mau_so","txtLoaihd","hinhthuc","ma_loai","wb_nhomquyen_id","idKey","parentId","trtChucNang","wb_role_id","checkItem","trtBaoCao","threeState","checkbox","onHeaderClick","chk","getElementById","uncheckItem","tblChucnang","tblBaoCao","checkedItems","getChecked","wb_ctquyen","wb_ctquyenrp","wb_menu_id","them","sua","xoa","box-shadow","quantity","createdondate","toUTCString","pl_licence_branch_id","fitMaster","itemdoc","newValues","separator","window_name","WINDOWNO","TAB_TYPE","row_tab","borderWidth","tokhai_thang","tokhai_quy","mau_312","mau_310","nguoi_dai_dien","nguoi_lap","Conten-type","editaction","render","dataBC","ngay_lap","input","bc_soluong","urlCheck","uploader","removeChild","endsWith","checkTien","fileData","workbook","XLSX","read","firstSheetName","SheetNames","firstSheet","Sheets","range","utils","decode_range","totalColumns","cellAddress","encode_cell","checkErro","isGiamTru","columnIds","parent_code","schema","schema_name","content-type","ma_dt","code_customer","image","serialNumber","signOnCertFile","invoice_number","ngayvb","sovb","ghi_chu","xmlData","nhom","licenseForm","framePdf","floderId","isEmpty","quenmk","rememberme","_ma_dvcs","host_name","realm_name","client_id","response_type","temlate","getParameterByName","currentUrl","urlParams","URLSearchParams","login_type","redirect_uri_api","invoiceNumber","fileUrl","clearTimeout","totalAmountWithoutVat","vatAmount","trang_thai_mau","template_status","newwin","c_results","token_serial","invoice_type","copy_number","row_print_template","queryView","$obj","tableAlias","inv_content","activeTitle","onBeforeSelect","onAfterSelect","itemValue","branch_id","tblData","branchCode","btnEditRegister","setItemValue","loadDataReport","reportTable","searchForm","paramFilter","typingFilter","ma_ct","parentToolBar","toolBarParams","vc_infowindow_id","cbMauIn","CODE","detailTables","onSubViewOpen","getSubView","notEditMode","tinhhinhsudungform","donvi","thangcb","cbnam","ssk","year2","month2","date2","firstDay2","lastDay2","tokens","serial_number","tlbparam","url1","loadDataCustom","defaultBody","mergeObject","obj1","obj2","mergedObj","dataParams","url_help","isPlusIcon","formatColumn","FORMAT","prCodeComp","parent_id","nodeId","margin-top","formUpdate","tabview","MA","TEN_DM","TEN_CT","_waitEditor","defer","_init_ckeditor_once","tid","textAreaID","innerHTML","_3rd_editor","CKEDITOR","$width","$height","_render_ckeditor","initMethod","editorType","disableAutoInline","barHeight","$setSize","setData","getData","_focus_await","getEditor","waitEditor","EditAbility","templateCommon","dataview","_contentobj","firstChild","$ready","google","maps","_initMap","script","Map","zoom","center","LatLng","mapTypeId","MapTypeId","mapType","_ldGMap","center_setter","setCenter","mapType_setter","setMapTypeId","zoom_setter","setZoom","printf","changeMultiChoice","toArray","insertAt","removeAt","deleteMultiChoice","eachRow","colMultiChoice","fix_left","fix_right","original_invoice_id","buyer_email","cbTypeIn","wb_mauin_id","mimetype","trang_thai_hd","dadung","cloneItem","suffix","mauin","leftSplit","rightSplit","hover","hideItem","showItem","insert_cmd","update_cmd","delete_cmd","decimal_place","maximumValue","minValue","codewindow","TUCHOI","dangnhap","DONVI","DANGKY","QUENMK","USERNAME","PASSWORD","REMEMBERME","DANGNHAP","DANGNHAPSSO","THEM","SUA","XOA","COPY","MAU_HD","KY_HIEU","MAUIN","SO_HDON","NGAY_HDON","TEN_DON_VI","TEN_NGUOI_MUA","SO_DH","MA_DT","MS_THUE","DIA_CHI","TK_BEN_MUA","NGAN_HANG_BEN_MUA","TK_BEN_BAN","NGAN_HANG_BEN_BAN","HT_TT","PRINT","MA_HV","TEN_HV","DVT","SO_LUONG","GIA","TIEN","PT_CK","TIEN_CK","MA_THUE","TIEN_THUE","THANH_TIEN","TEN","DUYET","PHAN_QUYEN","CHUC_NANG","BAO_CAO","TEN_CHUC_NANG","TEN_MAU","LOAI_HOA_DON","HINH_THUC","MAU_SO","SO_LIEN","DA_KY","TRANG_THAI_MAU","NGAY_TB","NGUOI_DAI_DIEN_PL","DON_VI_CHU_QUAN","CO_QUAN_THUE_NHAN_TB","TRANG_THAI","MA_LOAI","TEN_LOAI","TU_SO","DEN_SO","NGAY_BD_SD","DN_IN","MAU_HDON","TEN_DT","CHUC_VU","DIEN_THOAI","DAI_DIEN","SU_DUNG","EXPORT_XML","NGUOI_KY","SO_SERIAL","MA_DVT","TEN_DVT","CHU_KY_SO","CHON","TINH_THANH","NGAY_BD_NAM_TC","TAI_KHOAN","TAI_NH","EMAIL","SUBJECTNAME","SIGN","KY_HOA_DON","DC_DINH_DANH","SOVB","NGAYVB","DIEN_GIAI","SEARCH","TIM_CHI_TIET","NGUOI_LAP","TRANG_THAI_HDON","TU_NGAY","DEN_NGAY","NGUOI_NHAN","TIEU_DE","NOI_DUNG","SEND_EMAIL_INVOICE","KHUYEN_MAI","TIEU_THUC","DC_TANG","DC_GIAM","HDON_THAY_THE","REFRESH","EXPORT","EXPORT_EXCEL","XOA_BO","MST_BEN_BAN","MST_BEN_MUA","HDON_CT_BRA","TIEN_TRUOC_THUE","TIEN_THUE_10","TIEN_THUE_05","TIEN_THUE_00","KHONG_CHIU_THUE","KHONG_KK","GHI_CHU","IMPORT_EXCEL","NGUOI_GUI","KY_HOA_DON_CHO_KY","SMTP_SERVER","SMTP_PORT","enableSSL","LOAI","SEND_EMAIL_CONFIRM","NHOM","GIA_BAN","DANG_KY","SL_HD_DK","KEY_LICENSE","SL_HD_THEM","GIA_TRI","NGAY_BAT_DAU","NGAY_KET_THUC","TOKEN_SERIAL","CHUYEN_DOI","SO_TK","from_number","to_number","amount_to_word","INVOICE_STATUS","buyer_taxcode","buyer_legal_name","total_amount_without_vat","discount_amount","vat_amount","buyer_bank_account","buyer_bank_name","buyer_address_line","customer_code","item_name","item_code","unit_code","unit_price","discount_percentage","tax_type","promotion","buyer_display_name","payment_method_name","NAME","PL_CUSTOMER_GROUP_ID","TAX_CODE","BUYER_NAME","TEL","MOBILE","ADDRESS","PL_GOODS_GROUP_ID","UNIT_CODE","VAT_TYPE","UNIT_PRICE","VAT_PERCENTAGE","BANK_ACCOUNT","BANK_NAME","COMPANY_NAME","NOTIFICATION_DATE","TAXCODE","INVOICE_TYPE","QUANTITY","INVOICE_SERIES","FROM_NUMBER","TO_NUMBER","TEMPLATE_CODE","QUANTITY_DECIMAL","PRICE_DECIMAL","BEGIN_DATE","MST","TEN_NCC","THUONG_HIEU","LINK_TRACUU","Bạn chưa chọn hóa đơn","IMPORT_EXCEL_CT","ten_dt","BRANCH_CODE","REGISTER_LICENCE","NGAY_HET_HAN","CHON_BOCHON","QUYEN_TRUY_CAP_HD","IS_VIEW_USER","IS_EDIT_USER","IS_DEL_USER","IS_NEW_USER","KY_HOA_DON_HSM","DANG_KY_LAN_DAU","DANG_KY_THEM","THONG_BAO","TAI_FILE_MAU","MA_NT","TEN_NT","TY_GIA","TEN_NH","IN_CHUYEN_DOI","NGUOI_IN_CDOI","NGAY_IN_CDOI","PHAN_CACH_HANG_NGHIN","PHAN_CACH_THAP_PHAN","PRINT_INVOICE_HTML","DEL_CACHE","LOGOUT","CHANGE_PASS","CHANGE_PASS_SSO","SO_BANG_KE","TAO_HD","LIST_DATE","LIST_NUMBER","MA_CHUNGTU","NGAY_CHUNGTU","SO_CHUNGTU","PT_THUE","TEN_DV","TONG_TIEN","MA_DVCS","TEN_NHV","USER_TRACUU","MA_HANG","TEN_HANG","DON_GIA","DOANH_THU","THUE_SUAT","GIO_TB","PHUONG_PHAP_HUY","NGAY_LAP_TB","NGUOI_LAP_BIEU","PATH","KET_XUAT_EXCEL","PARENT_ID","CURRENT_NUMBER","is_main","LINK_SSO"],"mappings":"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","file":"app.js","sourcesContent":["\n/**\r\n * @license almond 0.2.9 Copyright (c) 2011-2014, The Dojo Foundation All Rights Reserved.\r\n * Available via the MIT or new BSD license.\r\n * see: http://github.com/jrburke/almond for details\r\n */\r\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\r\n//be followed.\r\n/*jslint sloppy: true */\r\n/*global setTimeout: false */\r\n\r\nvar requirejs, require, define;\r\n(function (undef) {\r\n var main, req, makeMap, handlers,\r\n defined = {},\r\n waiting = {},\r\n config = {},\r\n defining = {},\r\n hasOwn = Object.prototype.hasOwnProperty,\r\n aps = [].slice,\r\n jsSuffixRegExp = /\\.js$/;\r\n\r\n function hasProp(obj, prop) {\r\n return hasOwn.call(obj, prop);\r\n }\r\n\r\n /**\r\n * Given a relative module name, like ./something, normalize it to\r\n * a real name that can be mapped to a path.\r\n * @param {String} name the relative name\r\n * @param {String} baseName a real name that the name arg is relative\r\n * to.\r\n * @returns {String} normalized name\r\n */\r\n function normalize(name, baseName) {\r\n var nameParts, nameSegment, mapValue, foundMap, lastIndex,\r\n foundI, foundStarMap, starI, i, j, part,\r\n baseParts = baseName && baseName.split(\"/\"),\r\n map = config.map,\r\n starMap = (map && map['*']) || {};\r\n\r\n //Adjust any relative paths.\r\n if (name && name.charAt(0) === \".\") {\r\n //If have a base name, try to normalize against it,\r\n //otherwise, assume it is a top-level require that will\r\n //be relative to baseUrl in the end.\r\n if (baseName) {\r\n //Convert baseName to array, and lop off the last part,\r\n //so that . matches that \"directory\" and not name of the baseName's\r\n //module. For instance, baseName of \"one/two/three\", maps to\r\n //\"one/two/three.js\", but we want the directory, \"one/two\" for\r\n //this normalization.\r\n baseParts = baseParts.slice(0, baseParts.length - 1);\r\n name = name.split('/');\r\n lastIndex = name.length - 1;\r\n\r\n // Node .js allowance:\r\n if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\r\n name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\r\n }\r\n\r\n name = baseParts.concat(name);\r\n\r\n //start trimDots\r\n for (i = 0; i < name.length; i += 1) {\r\n part = name[i];\r\n if (part === \".\") {\r\n name.splice(i, 1);\r\n i -= 1;\r\n } else if (part === \"..\") {\r\n if (i === 1 && (name[2] === '..' || name[0] === '..')) {\r\n //End of the line. Keep at least one non-dot\r\n //path segment at the front so it can be mapped\r\n //correctly to disk. Otherwise, there is likely\r\n //no path mapping for a path starting with '..'.\r\n //This can still fail, but catches the most reasonable\r\n //uses of ..\r\n break;\r\n } else if (i > 0) {\r\n name.splice(i - 1, 2);\r\n i -= 2;\r\n }\r\n }\r\n }\r\n //end trimDots\r\n\r\n name = name.join(\"/\");\r\n } else if (name.indexOf('./') === 0) {\r\n // No baseName, so this is ID is resolved relative\r\n // to baseUrl, pull off the leading dot.\r\n name = name.substring(2);\r\n }\r\n }\r\n\r\n //Apply map config if available.\r\n if ((baseParts || starMap) && map) {\r\n nameParts = name.split('/');\r\n\r\n for (i = nameParts.length; i > 0; i -= 1) {\r\n nameSegment = nameParts.slice(0, i).join(\"/\");\r\n\r\n if (baseParts) {\r\n //Find the longest baseName segment match in the config.\r\n //So, do joins on the biggest to smallest lengths of baseParts.\r\n for (j = baseParts.length; j > 0; j -= 1) {\r\n mapValue = map[baseParts.slice(0, j).join('/')];\r\n\r\n //baseName segment has config, find if it has one for\r\n //this name.\r\n if (mapValue) {\r\n mapValue = mapValue[nameSegment];\r\n if (mapValue) {\r\n //Match, update name to the new value.\r\n foundMap = mapValue;\r\n foundI = i;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (foundMap) {\r\n break;\r\n }\r\n\r\n //Check for a star map match, but just hold on to it,\r\n //if there is a shorter segment match later in a matching\r\n //config, then favor over this star map.\r\n if (!foundStarMap && starMap && starMap[nameSegment]) {\r\n foundStarMap = starMap[nameSegment];\r\n starI = i;\r\n }\r\n }\r\n\r\n if (!foundMap && foundStarMap) {\r\n foundMap = foundStarMap;\r\n foundI = starI;\r\n }\r\n\r\n if (foundMap) {\r\n nameParts.splice(0, foundI, foundMap);\r\n name = nameParts.join('/');\r\n }\r\n }\r\n\r\n return name;\r\n }\r\n\r\n function makeRequire(relName, forceSync) {\r\n return function () {\r\n //A version of a require function that passes a moduleName\r\n //value for items that may need to\r\n //look up paths relative to the moduleName\r\n return req.apply(undef, aps.call(arguments, 0).concat([relName, forceSync]));\r\n };\r\n }\r\n\r\n function makeNormalize(relName) {\r\n return function (name) {\r\n return normalize(name, relName);\r\n };\r\n }\r\n\r\n function makeLoad(depName) {\r\n return function (value) {\r\n defined[depName] = value;\r\n };\r\n }\r\n\r\n function callDep(name) {\r\n if (hasProp(waiting, name)) {\r\n var args = waiting[name];\r\n delete waiting[name];\r\n defining[name] = true;\r\n main.apply(undef, args);\r\n }\r\n\r\n if (!hasProp(defined, name) && !hasProp(defining, name)) {\r\n throw new Error('No ' + name);\r\n }\r\n return defined[name];\r\n }\r\n\r\n //Turns a plugin!resource to [plugin, resource]\r\n //with the plugin being undefined if the name\r\n //did not have a plugin prefix.\r\n function splitPrefix(name) {\r\n var prefix,\r\n index = name ? name.indexOf('!') : -1;\r\n if (index > -1) {\r\n prefix = name.substring(0, index);\r\n name = name.substring(index + 1, name.length);\r\n }\r\n return [prefix, name];\r\n }\r\n\r\n /**\r\n * Makes a name map, normalizing the name, and using a plugin\r\n * for normalization if necessary. Grabs a ref to plugin\r\n * too, as an optimization.\r\n */\r\n makeMap = function (name, relName) {\r\n var plugin,\r\n parts = splitPrefix(name),\r\n prefix = parts[0];\r\n\r\n name = parts[1];\r\n\r\n if (prefix) {\r\n prefix = normalize(prefix, relName);\r\n plugin = callDep(prefix);\r\n }\r\n\r\n //Normalize according\r\n if (prefix) {\r\n if (plugin && plugin.normalize) {\r\n name = plugin.normalize(name, makeNormalize(relName));\r\n } else {\r\n name = normalize(name, relName);\r\n }\r\n } else {\r\n name = normalize(name, relName);\r\n parts = splitPrefix(name);\r\n prefix = parts[0];\r\n name = parts[1];\r\n if (prefix) {\r\n plugin = callDep(prefix);\r\n }\r\n }\r\n\r\n //Using ridiculous property names for space reasons\r\n return {\r\n f: prefix ? prefix + '!' + name : name, //fullName\r\n n: name,\r\n pr: prefix,\r\n p: plugin\r\n };\r\n };\r\n\r\n function makeConfig(name) {\r\n return function () {\r\n return (config && config.config && config.config[name]) || {};\r\n };\r\n }\r\n\r\n handlers = {\r\n require: function (name) {\r\n return makeRequire(name);\r\n },\r\n exports: function (name) {\r\n var e = defined[name];\r\n if (typeof e !== 'undefined') {\r\n return e;\r\n } else {\r\n return (defined[name] = {});\r\n }\r\n },\r\n module: function (name) {\r\n return {\r\n id: name,\r\n uri: '',\r\n exports: defined[name],\r\n config: makeConfig(name)\r\n };\r\n }\r\n };\r\n\r\n main = function (name, deps, callback, relName) {\r\n var cjsModule, depName, ret, map, i,\r\n args = [],\r\n callbackType = typeof callback,\r\n usingExports;\r\n\r\n //Use name if no relName\r\n relName = relName || name;\r\n\r\n //Call the callback to define the module, if necessary.\r\n if (callbackType === 'undefined' || callbackType === 'function') {\r\n //Pull out the defined dependencies and pass the ordered\r\n //values to the callback.\r\n //Default to [require, exports, module] if no deps\r\n deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\r\n for (i = 0; i < deps.length; i += 1) {\r\n map = makeMap(deps[i], relName);\r\n depName = map.f;\r\n\r\n //Fast path CommonJS standard dependencies.\r\n if (depName === \"require\") {\r\n args[i] = handlers.require(name);\r\n } else if (depName === \"exports\") {\r\n //CommonJS module spec 1.1\r\n args[i] = handlers.exports(name);\r\n usingExports = true;\r\n } else if (depName === \"module\") {\r\n //CommonJS module spec 1.1\r\n cjsModule = args[i] = handlers.module(name);\r\n } else if (hasProp(defined, depName) ||\r\n hasProp(waiting, depName) ||\r\n hasProp(defining, depName)) {\r\n args[i] = callDep(depName);\r\n } else if (map.p) {\r\n map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\r\n args[i] = defined[depName];\r\n } else {\r\n throw new Error(name + ' missing ' + depName);\r\n }\r\n }\r\n\r\n ret = callback ? callback.apply(defined[name], args) : undefined;\r\n\r\n if (name) {\r\n //If setting exports via \"module\" is in play,\r\n //favor that over return value and exports. After that,\r\n //favor a non-undefined return value over exports use.\r\n if (cjsModule && cjsModule.exports !== undef &&\r\n cjsModule.exports !== defined[name]) {\r\n defined[name] = cjsModule.exports;\r\n } else if (ret !== undef || !usingExports) {\r\n //Use the return value from the function.\r\n defined[name] = ret;\r\n }\r\n }\r\n } else if (name) {\r\n //May just be an object definition for the module. Only\r\n //worry about defining if have a module name.\r\n defined[name] = callback;\r\n }\r\n };\r\n\r\n requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\r\n if (typeof deps === \"string\") {\r\n if (handlers[deps]) {\r\n //callback in this case is really relName\r\n return handlers[deps](callback);\r\n }\r\n //Just return the module wanted. In this scenario, the\r\n //deps arg is the module name, and second arg (if passed)\r\n //is just the relName.\r\n //Normalize module name, if it contains . or ..\r\n return callDep(makeMap(deps, callback).f);\r\n } else if (!deps.splice) {\r\n //deps is a config object, not an array.\r\n config = deps;\r\n if (config.deps) {\r\n req(config.deps, config.callback);\r\n }\r\n if (!callback) {\r\n return;\r\n }\r\n\r\n if (callback.splice) {\r\n //callback is an array, which means it is a dependency list.\r\n //Adjust args if there are dependencies\r\n deps = callback;\r\n callback = relName;\r\n relName = null;\r\n } else {\r\n deps = undef;\r\n }\r\n }\r\n\r\n //Support require(['a'])\r\n callback = callback || function () {};\r\n\r\n //If relName is a function, it is an errback handler,\r\n //so remove it.\r\n if (typeof relName === 'function') {\r\n relName = forceSync;\r\n forceSync = alt;\r\n }\r\n\r\n //Simulate async callback;\r\n if (forceSync) {\r\n main(undef, deps, callback, relName);\r\n } else {\r\n //Using a non-zero value because of concern for what old browsers\r\n //do, and latest browsers \"upgrade\" to 4 if lower value is used:\r\n //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\r\n //If want a value immediately, use require('id') instead -- something\r\n //that works in almond on the global level, but not guaranteed and\r\n //unlikely to work in other AMD implementations.\r\n setTimeout(function () {\r\n main(undef, deps, callback, relName);\r\n }, 4);\r\n }\r\n\r\n return req;\r\n };\r\n\r\n /**\r\n * Just drops the config on the floor, but returns req in case\r\n * the config return value is used.\r\n */\r\n req.config = function (cfg) {\r\n return req(cfg);\r\n };\r\n\r\n /**\r\n * Expose module registry for debugging and tooling\r\n */\r\n requirejs._defined = defined;\r\n\r\n define = function (name, deps, callback) {\r\n\r\n //This module may not have dependencies\r\n if (!deps.splice) {\r\n //deps is not an array, so probably means\r\n //an object literal or factory function for\r\n //the value. Adjust args.\r\n callback = deps;\r\n deps = [];\r\n }\r\n\r\n if (!hasProp(defined, name) && !hasProp(waiting, name)) {\r\n waiting[name] = [name, deps, callback];\r\n }\r\n };\r\n\r\n define.amd = {\r\n jQuery: true\r\n };\r\n}());\ndefine(\"libs/almond.js\", function(){});\n\n/*!\r\n * routie - a tiny hash router\r\n * v0.3.2\r\n * http://projects.jga.me/routie\r\n * copyright Greg Allen 2013\r\n * MIT License\r\n*/\r\n(function(n){var e=[],t={},r=\"routie\",o=n[r],i=function(n,e){this.name=e,this.path=n,this.keys=[],this.fns=[],this.params={},this.regex=a(this.path,this.keys,!1,!1)};i.prototype.addHandler=function(n){this.fns.push(n)},i.prototype.removeHandler=function(n){for(var e=0,t=this.fns.length;t>e;e++){var r=this.fns[e];if(n==r)return this.fns.splice(e,1),void 0}},i.prototype.run=function(n){for(var e=0,t=this.fns.length;t>e;e++)this.fns[e].apply(this,n)},i.prototype.match=function(n,e){var t=this.regex.exec(n);if(!t)return!1;for(var r=1,o=t.length;o>r;++r){var i=this.keys[r-1],a=\"string\"==typeof t[r]?decodeURIComponent(t[r]):t[r];i&&(this.params[i.name]=a),e.push(a)}return!0},i.prototype.toURL=function(n){var e=this.path;for(var t in n)e=e.replace(\"/:\"+t,\"/\"+n[t]);if(e=e.replace(/\\/:.*\\?/g,\"/\").replace(/\\?/g,\"\"),-1!=e.indexOf(\":\"))throw Error(\"missing parameters for url: \"+e);return e};var a=function(n,e,t,r){return n instanceof RegExp?n:(n instanceof Array&&(n=\"(\"+n.join(\"|\")+\")\"),n=n.concat(r?\"\":\"/?\").replace(/\\/\\(/g,\"(?:/\").replace(/\\+/g,\"__plus__\").replace(/(\\/)?(\\.)?:(\\w+)(?:(\\(.*?\\)))?(\\?)?/g,function(n,t,r,o,i,a){return e.push({name:o,optional:!!a}),t=t||\"\",\"\"+(a?\"\":t)+\"(?:\"+(a?t:\"\")+(r||\"\")+(i||r&&\"([^/.]+?)\"||\"([^/]+?)\")+\")\"+(a||\"\")}).replace(/([\\/.])/g,\"\\\\$1\").replace(/__plus__/g,\"(.+)\").replace(/\\*/g,\"(.*)\"),RegExp(\"^\"+n+\"$\",t?\"\":\"i\"))},s=function(n,r){var o=n.split(\" \"),a=2==o.length?o[0]:null;n=2==o.length?o[1]:o[0],t[n]||(t[n]=new i(n,a),e.push(t[n])),t[n].addHandler(r)},h=function(n,e){if(\"function\"==typeof e)s(n,e),h.reload();else if(\"object\"==typeof n){for(var t in n)s(t,n[t]);h.reload()}else e===void 0&&h.navigate(n)};h.lookup=function(n,t){for(var r=0,o=e.length;o>r;r++){var i=e[r];if(i.name==n)return i.toURL(t)}},h.remove=function(n,e){var r=t[n];r&&r.removeHandler(e)},h.removeAll=function(){t={},e=[]},h.navigate=function(n,e){e=e||{};var t=e.silent||!1;t&&l(),setTimeout(function(){window.location.hash=n,t&&setTimeout(function(){p()},1)},1)},h.noConflict=function(){return n[r]=o,h};var f=function(){return window.location.hash.substring(1)},c=function(n,e){var t=[];return e.match(n,t)?(e.run(t),!0):!1},u=h.reload=function(){for(var n=f(),t=0,r=e.length;r>t;t++){var o=e[t];if(c(n,o))return}},p=function(){n.addEventListener?n.addEventListener(\"hashchange\",u,!1):n.attachEvent(\"onhashchange\",u)},l=function(){n.removeEventListener?n.removeEventListener(\"hashchange\",u):n.detachEvent(\"onhashchange\",u)};p(),n[r]=h})(window);\ndefine(\"libs/routie\", function(){});\n\ndefine('libs/core',[\r\n\t\"libs/routie\"\r\n],function(){\r\n\r\n\tfunction show(path, config){\r\n\t\tif (config == -1)\r\n\t\t\treturn render_sub_stack(this, path);\r\n\t\tif (this._subs[path])\r\n\t\t\treturn render_sub_stack(this._subs[path], config);\r\n\t\t\r\n\r\n\t\tvar scope = get_app_scope(this);\r\n\t\tvar index = this.index;\r\n\r\n\t\tif (typeof path == \"string\"){\r\n\t\t\tvar index = index;\r\n\r\n\t\t\t//child page\r\n\t\t\tif (path.indexOf(\"./\") === 0){\r\n\t\t\t\tindex++;\r\n\t\t\t\tpath = path.substr(2);\r\n\t\t\t}\r\n\r\n\t\t\t//route to page\r\n\t\t\tvar parsed = parse_parts(path);\r\n\t\t\tscope.path = scope.path.slice(0, index).concat(parsed);\r\n\t\t} else {\r\n\t\t\t//set parameters\r\n\t\t\twebix.extend(scope.path[index].params, path, true);\r\n\t\t}\r\n\r\n\t\tscope.show(url_string(scope.path), -1);\r\n\t}\r\n\r\n\tfunction get_app_scope(scope){\r\n\t\twhile(scope){\r\n\t\t\tif (scope.app)\r\n\t\t\t\treturn scope;\r\n\t\t\tscope = scope.parent;\r\n\t\t}\r\n\t\treturn app;\r\n\t}\r\n\r\n\tfunction url_string(stack){\r\n\t\tvar url = [];\r\n\t\tvar start = app.config.layout ? 1 : 0;\r\n\r\n\t\tfor (; start -1 ? test.substr(0, pos) : test), params:result };\r\n\t\t}\r\n\r\n\t\t//return array of page objects\r\n\t\treturn chunks;\r\n\t}\r\n\r\n\tfunction copy(obj, target, config){\r\n\t\tif (obj.$oninit)\r\n\t\t\tconfig._init.push(obj.$oninit);\r\n\t\tif (obj.$ondestroy)\r\n\t\t\tconfig._destroy.push(obj.$ondestroy);\r\n\t\tif (obj.$subview){\r\n\t\t\tif (typeof obj.$subview == \"string\"){\r\n\t\t\t\tvar tname = (config.name + \":subview:\"+obj.$subview);\r\n\t\t\t\tvar tobj = config._subs[obj.$subview] = { \r\n\t\t\t\t\tparent:this,\r\n\t\t\t\t\troot: tname,\r\n\t\t\t\t\tsub:subui,\r\n\t\t\t\t\tindex:0,\r\n\t\t\t\t\tapp:true\r\n\t\t\t\t};\r\n\r\n\t\t\t\tobj.id = tname;\r\n\t\t\t} else {\r\n\t\t\t\tobj = { id: (config.name + \":subview\") };\r\n\t\t\t\tconfig.$layout = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (obj.$ui)\r\n\t\t\tobj = obj.$ui;\r\n\t\tif (obj.$init){\r\n\t\t\treturn obj;\r\n\t\t}\r\n\t\r\n\t\ttarget = target || (webix.isArray(obj)?[]:{});\r\n\t\tfor (var method in obj){\r\n\t\t\tif(obj[method] && typeof obj[method] == \"object\" && !webix.isDate(obj[method])){\r\n\t\t\t\ttarget[method] = copy(obj[method], (webix.isArray(obj[method])?[]:{}), config);\r\n\t\t\t} else {\r\n\t\t\t\ttarget[method] = obj[method];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn target;\r\n\t}\r\n\r\n\tfunction render_sub_stack(scope, path){\r\n\t\tif (scope.root)\r\n\t\t\tscope.root = webix.$$(scope.root);\r\n\r\n\t\tvar parts = parse_parts(path);\r\n\t\tscope.path = [].concat(parts);\r\n\t\trender_stack(scope, parts);\r\n\t}\r\n\r\n\tfunction render_stack(layout, stack){\r\n\t\tvar line = stack[0];\r\n\t\tif (line){\r\n\t\t\tvar url = line.page;\r\n\t\t\tvar issubpage = url.indexOf(\".\") === 0;\r\n\r\n\t\t\tif (issubpage)\r\n\t\t\t\turl = (layout.fullname||\"\")+url;\r\n\t\t\turl = url.replace(/\\./g,\"/\");\r\n\r\n\t\t\tif (run_plugins(require_plugins, url, line, stack, layout) === false) return;\r\n\r\n\t\t\trequire([\"views/\" + url], function(ui){\r\n\t\t\t\tstack.shift();\r\n\r\n\t\t\t\tvar next = layout.sub(ui, line, stack);\r\n\t\t\t\tif (next){\r\n\t\t\t\t\tnext.fullname = (issubpage ? (layout.fullname || \"\") : \"\") + line.page;\r\n\t\t\t\t\trender_stack(next, stack);\r\n\t\t\t\t} else {\r\n\t\t\t\t\twebix.ui.$freeze = false;\r\n\t\t\t\t\twebix.ui.resize();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\twebix.ui.$freeze = false;\r\n\t\t\twebix.ui.resize();\r\n\t\t}\r\n\t}\r\n\r\n\tvar ui_plugins = [];\r\n\tvar url_plugins = [];\r\n\tvar require_plugins = [];\r\n\tfunction run_plugins(plugins, ui, name, stack, scope){\r\n\t\tfor (var i = 0; i < plugins.length; i++)\r\n\t\t\tif (plugins[i](ui, name, stack, scope) === false) return false;\r\n\t\treturn true;\r\n\t}\r\n\r\n\tvar app = {\r\n\t\tcreate:function(config){\r\n\t\t\t//init config\r\n\t\t\tapp.config = webix.extend({\r\n\t\t\t\tname:\"App\",\r\n\t\t\t\tversion:\"1.0\",\r\n\t\t\t\tcontainer: document.body,\r\n\t\t\t\tstart:\"/home\"\r\n\t\t\t}, config, true);\r\n\r\n\t\t\t//init self\r\n\t\t\tapp.debug = config.debug;\r\n\t\t\tapp.$layout = {\r\n\t\t\t\tsub:subui,\r\n\t\t\t\troot: app.config.container,\r\n\t\t\t\tindex:0,\r\n\t\t\t\tadd:true\r\n\t\t\t};\r\n\t\t\twebix.extend(app, webix.EventSystem);\r\n\r\n\t\t\t//show start page\r\n\t\t\tsetTimeout(function(){\r\n\t\t\t\twebix.ready(function(){\r\n\t\t\t\t\tapp.start();\r\n\t\t\t\t});\r\n\t\t\t},1);\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\tvar node = app.config.container;\r\n\t\t\twebix.html.addCss(node, \"webixappstart\");\r\n\t\t\tsetTimeout(function(){\r\n\t\t\t\twebix.html.removeCss(node, \"webixappstart\");\r\n\t\t\t\twebix.html.addCss(node, \"webixapp\");\r\n\t\t\t}, 10);\r\n\r\n\t\t\treturn app;\r\n\t\t},\r\n\r\n\t\tui:create_temp_ui,\r\n\r\n\r\n\t\t//navigation\r\n\t\trouter:function(name){\r\n\t\t\tvar parts = parse_parts(name);\r\n\t\t\tapp.path = [].concat(parts);\r\n\r\n\t\t\t//webix.ui.$freeze = true;\r\n\t\t\trender_stack(app.$layout, parts);\r\n\t\t},\r\n\t\tshow:function(name, options){\r\n\t\t\troutie.navigate(\"!\"+name, options);\r\n\t\t},\r\n\t\tstart:function(name){\r\n\t\t\t//init routing\r\n\t\t\troutie(\"!*\",\t\tapp.router);\r\n\r\n\t\t\tif (!window.location.hash)\r\n\t\t\t\tapp.show(app.config.start);\r\n\t\t\t else {\r\n\t\t\t\twebix.ui.$freeze = false;\r\n\t\t\t\twebix.ui.resize();\r\n \t\t\t}\r\n \t\t},\r\n\r\n\r\n\t\t//plugins\r\n\t\tuse:function(handler, config){\r\n\t\t\tif (handler.$oninit)\r\n\t\t\t\thandler.$oninit(this, (config || {}) );\r\n\r\n\t\t\tif (handler.$onurlchange)\r\n\t\t\t\turl_plugins.push(handler.$onurlchange);\r\n\t\t\tif (handler.$onurl)\r\n\t\t\t\trequire_plugins.push(handler.$onurl);\r\n\t\t\tif (handler.$onui)\r\n\t\t\t\tui_plugins.push(handler.$onui);\r\n\t\t},\r\n\r\n\r\n\t\t//event helpers\r\n\t\ttrigger:function(name){\r\n\t\t\tapp.apply(name, [].splice.call(arguments, 1));\r\n\t\t},\r\n\t\tapply:function(name, data){\r\n\t\t\tapp.callEvent(name, data);\r\n\t\t},\r\n\t\taction:function(name){\r\n\t\t\treturn function(){\r\n\t\t\t\tapp.apply(name, arguments);\r\n\t\t\t};\r\n\t\t},\r\n\t\ton:function(name, handler){\r\n\t\t\tthis.attachEvent(name, handler);\r\n\t\t},\r\n\r\n\t\t_uis:[],\r\n\t\t_handlers:[]\r\n\t};\r\n\r\n\tfunction create_temp_event(obj, name, code){\r\n\t\tvar id = obj.attachEvent(name, code);\r\n\t\tthis._handlers.push({ obj:obj, id:id });\r\n\t\treturn id;\r\n\t}\r\n\r\n\tfunction create_temp_ui(module, container){\r\n\t\tvar view;\r\n\t\tvar temp = { _init:[], _destroy:[] };\r\n\t\tvar ui = copy(module, null, temp);\r\n\t\t\tui.$scope = this;\r\n\r\n\t\tif (ui.id)\r\n\t\t\tview = $$(ui.id);\r\n\t\t\t\r\n\t\tif (!view){\r\n\t\t\tview = webix.ui(ui, container);\r\n\t\t\tthis._uis.push(view);\r\n\t\t\trun_handlers(temp._init, view, this);\r\n\t\t}\r\n\r\n\t\treturn view;\r\n\t}\r\n\r\n\tfunction run_handlers(arr, view, scope){\r\n\t\tif (arr)\r\n\t\t\tfor (var i = 0; i < arr.length; i++)\r\n\t\t\t\tarr[i](view, scope);\r\n\t}\r\n\r\n\tfunction destroy(){\r\n\t\tif (!this._ui) return;\r\n\r\n\t\tif (this.$layout)\r\n\t\t\tdestroy.call(this.$layout);\r\n\r\n\t\tvar handlers = this._handlers;\r\n\t\tfor (var i = handlers.length - 1; i >= 0; i--)\r\n\t\t\thandlers[i].obj.detachEvent( handlers[i].id );\r\n\t\tthis._handlers = [];\r\n\r\n\t\tvar uis = this._uis;\r\n\t\tfor (var i = uis.length - 1; i >= 0; i--)\r\n\t\t\tif (uis[i] && uis[i].destructor) uis[i].destructor();\r\n\t\tthis._uis = [];\r\n\r\n\t\trun_handlers(this._destroy, this._ui, this);\r\n\r\n\t\tif (!this.parent && this._ui)\r\n\t\t\tthis._ui.destructor();\r\n\t}\r\n\r\n\r\n\tfunction delete_ids(view){\r\n\t\tdelete webix.ui.views[view.config.id];\r\n\t\tview.config.id = \"\";\r\n\t\tvar childs = view.getChildViews();\r\n\t\tfor (var i = childs.length - 1; i >= 0; i--)\r\n\t\t\tdelete_ids(childs[i]);\r\n\t}\r\n\tfunction create(subview){\r\n\t\tthis._uis=[];\r\n\t\tthis._handlers=[];\r\n\r\n\t\t//naive solution for id dupplication\r\n\t\tif (this.root && this.root.config)\r\n\t\t\tdelete_ids(this.root);\r\n\r\n\t\tthis._ui = webix.ui(subview, this.root);\r\n\t\tif (this.parent)\r\n\t\t\tthis.root = this._ui;\r\n\r\n\t\trun_handlers(this._init, this._ui, this);\r\n\t}\r\n\r\n\tfunction invalid_url(err){\r\n\t\tif (app.debug)\r\n\t\t\tconsole.log(err.stack);\r\n\r\n\t\tif (!err.requireModules) throw(err);\r\n\t\tif (app.debug)\r\n\t\t\twebix.message({ type:\"error\", expire:5000, text:\"Can't load \"+err.requireModules.join(\", \") });\r\n\r\n\t\tapp.show(app.config.start);\r\n\t}\r\n\r\n\trequirejs.onError = invalid_url;\r\n\treturn app;\r\n});\ndefine('helpers/menu',[], function () {\r\n function select_menu(menu_id, id) {\r\n var menu = $$(menu_id);\r\n if (menu.setValue) menu.setValue(id);\r\n else if (menu.select && menu.exists(id)) menu.select(id);\r\n }\r\n\r\n function get_menu(scope) {\r\n if (scope.parent) return scope.parent.module.$menu || get_menu(scope.parent);\r\n }\r\n\r\n return {\r\n $onurlchange: function (ui, name, url, scope) {\r\n if ($$(\"head-title\") !== undefined) $$(\"head-title\").reconstruct();\r\n if ($$(\"title\") !== undefined) $$(\"title\").parse({ title: \"\", details: \"\" });\r\n //menu handling\r\n if (ui.$menuid) {\r\n var id = ui.$menuid.call ? ui.$menuid.call(ui, ui, name, url) : ui.$menuid;\r\n var menu = get_menu(scope);\r\n if (menu && id) select_menu(menu, id);\r\n }\r\n },\r\n\r\n $onui: function (ui, name, url, scope) {\r\n //menu handling\r\n if (ui.$menu && url.length) select_menu(ui.$menu, url[0].page);\r\n },\r\n };\r\n});\r\n\n// (c) 2012 Airbnb, Inc.\r\n//\r\n// polyglot.js may be freely distributed under the terms of the BSD\r\n// license. For all licensing information, details, and documention:\r\n// http://airbnb.github.com/polyglot.js\r\n//\r\n//\r\n// Polyglot.js is an I18n helper library written in JavaScript, made to\r\n// work both in the browser and in Node. It provides a simple solution for\r\n// interpolation and pluralization, based off of Airbnb's\r\n// experience adding I18n functionality to its Backbone.js and Node apps.\r\n//\r\n// Polylglot is agnostic to your translation backend. It doesn't perform any\r\n// translation; it simply gives you a way to manage translated phrases from\r\n// your client- or server-side JavaScript application.\r\n//\r\n\r\n!function(root) {\r\n \r\n\r\n // ### Polyglot class constructor\r\n function Polyglot(options) {\r\n options = options || {};\r\n this.phrases = {};\r\n this.extend(options.phrases || {});\r\n this.currentLocale = options.locale || 'en';\r\n this.allowMissing = !!options.allowMissing;\r\n this.warn = options.warn || warn;\r\n }\r\n\r\n // ### Version\r\n Polyglot.VERSION = '0.4.1';\r\n\r\n // ### polyglot.locale([locale])\r\n //\r\n // Get or set locale. Internally, Polyglot only uses locale for pluralization.\r\n Polyglot.prototype.locale = function(newLocale) {\r\n if (newLocale) this.currentLocale = newLocale;\r\n return this.currentLocale;\r\n };\r\n\r\n // ### polyglot.extend(phrases)\r\n //\r\n // Use `extend` to tell Polyglot how to translate a given key.\r\n //\r\n // polyglot.extend({\r\n // \"hello\": \"Hello\",\r\n // \"hello_name\": \"Hello, %{name}\"\r\n // });\r\n //\r\n // The key can be any string. Feel free to call `extend` multiple times;\r\n // it will override any phrases with the same key, but leave existing phrases\r\n // untouched.\r\n //\r\n // It is also possible to pass nested phrase objects, which get flattened\r\n // into an object with the nested keys concatenated using dot notation.\r\n //\r\n // polyglot.extend({\r\n // \"nav\": {\r\n // \"hello\": \"Hello\",\r\n // \"hello_name\": \"Hello, %{name}\",\r\n // \"sidebar\": {\r\n // \"welcome\": \"Welcome\"\r\n // }\r\n // }\r\n // });\r\n //\r\n // console.log(polyglot.phrases);\r\n // // {\r\n // // 'nav.hello': 'Hello',\r\n // // 'nav.hello_name': 'Hello, %{name}',\r\n // // 'nav.sidebar.welcome': 'Welcome'\r\n // // }\r\n //\r\n // `extend` accepts an optional second argument, `prefix`, which can be used\r\n // to prefix every key in the phrases object with some string, using dot\r\n // notation.\r\n //\r\n // polyglot.extend({\r\n // \"hello\": \"Hello\",\r\n // \"hello_name\": \"Hello, %{name}\"\r\n // }, \"nav\");\r\n //\r\n // console.log(polyglot.phrases);\r\n // // {\r\n // // 'nav.hello': 'Hello',\r\n // // 'nav.hello_name': 'Hello, %{name}'\r\n // // }\r\n //\r\n // This feature is used internally to support nested phrase objects.\r\n Polyglot.prototype.extend = function(morePhrases, prefix) {\r\n var phrase;\r\n\r\n for (var key in morePhrases) {\r\n if (morePhrases.hasOwnProperty(key)) {\r\n phrase = morePhrases[key];\r\n if (prefix) key = prefix + '.' + key;\r\n if (typeof phrase === 'object') {\r\n this.extend(phrase, key);\r\n } else {\r\n this.phrases[key] = phrase;\r\n }\r\n }\r\n }\r\n };\r\n\r\n // ### polyglot.clear()\r\n //\r\n // Clears all phrases. Useful for special cases, such as freeing\r\n // up memory if you have lots of phrases but no longer need to\r\n // perform any translation. Also used internally by `replace`.\r\n Polyglot.prototype.clear = function() {\r\n this.phrases = {};\r\n };\r\n\r\n // ### polyglot.replace(phrases)\r\n //\r\n // Completely replace the existing phrases with a new set of phrases.\r\n // Normally, just use `extend` to add more phrases, but under certain\r\n // circumstances, you may want to make sure no old phrases are lying around.\r\n Polyglot.prototype.replace = function(newPhrases) {\r\n this.clear();\r\n this.extend(newPhrases);\r\n };\r\n\r\n\r\n // ### polyglot.t(key, options)\r\n //\r\n // The most-used method. Provide a key, and `t` will return the\r\n // phrase.\r\n //\r\n // polyglot.t(\"hello\");\r\n // => \"Hello\"\r\n //\r\n // The phrase value is provided first by a call to `polyglot.extend()` or\r\n // `polyglot.replace()`.\r\n //\r\n // Pass in an object as the second argument to perform interpolation.\r\n //\r\n // polyglot.t(\"hello_name\", {name: \"Spike\"});\r\n // => \"Hello, Spike\"\r\n //\r\n // If you like, you can provide a default value in case the phrase is missing.\r\n // Use the special option key \"_\" to specify a default.\r\n //\r\n // polyglot.t(\"i_like_to_write_in_language\", {\r\n // _: \"I like to write in %{language}.\",\r\n // language: \"JavaScript\"\r\n // });\r\n // => \"I like to write in JavaScript.\"\r\n //\r\n Polyglot.prototype.t = function(key, options) {\r\n var result;\r\n options = options == null ? {} : options;\r\n // allow number as a pluralization shortcut\r\n if (typeof options === 'number') {\r\n options = {smart_count: options};\r\n }\r\n var phrase = this.phrases[key] || options._ || (this.allowMissing ? key : '');\r\n if (phrase === '') {\r\n this.warn('Missing translation for key: \"'+key+'\"');\r\n result = key;\r\n } else {\r\n options = clone(options);\r\n result = choosePluralForm(phrase, this.currentLocale, options.smart_count);\r\n result = interpolate(result, options);\r\n }\r\n return result;\r\n };\r\n\r\n\r\n // #### Pluralization methods\r\n // The string that separates the different phrase possibilities.\r\n var delimeter = '||||';\r\n\r\n // Mapping from pluralization group plural logic.\r\n var pluralTypes = {\r\n chinese: function(n) { return 0; },\r\n german: function(n) { return n !== 1 ? 1 : 0; },\r\n french: function(n) { return n > 1 ? 1 : 0; },\r\n russian: function(n) { return n % 10 === 1 && n % 100 !== 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2; },\r\n czech: function(n) { return (n === 1) ? 0 : (n >= 2 && n <= 4) ? 1 : 2; },\r\n polish: function(n) { return (n === 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2); },\r\n icelandic: function(n) { return (n % 10 !== 1 || n % 100 === 11) ? 1 : 0; }\r\n };\r\n\r\n // Mapping from pluralization group to individual locales.\r\n var pluralTypeToLanguages = {\r\n chinese: ['fa', 'id', 'ja', 'ko', 'lo', 'ms', 'th', 'tr', 'zh'],\r\n german: ['da', 'de', 'en', 'es', 'fi', 'el', 'he', 'hu', 'it', 'nl', 'no', 'pt', 'sv'],\r\n french: ['fr', 'tl', 'pt-br'],\r\n russian: ['hr', 'ru', 'be'],\r\n czech: ['cs'],\r\n polish: ['pl'],\r\n icelandic: ['is']\r\n };\r\n\r\n function langToTypeMap(mapping) {\r\n var type, langs, l, ret = {};\r\n for (type in mapping) {\r\n if (mapping.hasOwnProperty(type)) {\r\n langs = mapping[type];\r\n for (l in langs) {\r\n ret[langs[l]] = type;\r\n }\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n // Trim a string.\r\n function trim(str){\r\n var trimRe = /^\\s+|\\s+$/g;\r\n return str.replace(trimRe, '');\r\n }\r\n\r\n // Based on a phrase text that contains `n` plural forms separated\r\n // by `delimeter`, a `locale`, and a `count`, choose the correct\r\n // plural form, or none if `count` is `null`.\r\n function choosePluralForm(text, locale, count){\r\n var ret, texts, chosenText;\r\n if (count != null && text) {\r\n texts = text.split(delimeter);\r\n chosenText = texts[pluralTypeIndex(locale, count)] || texts[0];\r\n ret = trim(chosenText);\r\n } else {\r\n ret = text;\r\n }\r\n return ret;\r\n }\r\n\r\n function pluralTypeName(locale) {\r\n var langToPluralType = langToTypeMap(pluralTypeToLanguages);\r\n return langToPluralType[locale] || langToPluralType.en;\r\n }\r\n\r\n function pluralTypeIndex(locale, count) {\r\n return pluralTypes[pluralTypeName(locale)](count);\r\n }\r\n\r\n // ### interpolate\r\n //\r\n // Does the dirty work. Creates a `RegExp` object for each\r\n // interpolation placeholder.\r\n function interpolate(phrase, options) {\r\n for (var arg in options) {\r\n if (arg !== '_' && options.hasOwnProperty(arg)) {\r\n // We create a new `RegExp` each time instead of using a more-efficient\r\n // string replace so that the same argument can be replaced multiple times\r\n // in the same phrase.\r\n phrase = phrase.replace(new RegExp('%\\\\{'+arg+'\\\\}', 'g'), options[arg]);\r\n }\r\n }\r\n return phrase;\r\n }\r\n\r\n // ### warn\r\n //\r\n // Provides a warning in the console if a phrase key is missing.\r\n function warn(message) {\r\n root.console && root.console.warn && root.console.warn('WARNING: ' + message);\r\n }\r\n\r\n // ### clone\r\n //\r\n // Clone an object.\r\n function clone(source) {\r\n var ret = {};\r\n for (var prop in source) {\r\n ret[prop] = source[prop];\r\n }\r\n return ret;\r\n }\r\n\r\n\r\n // Export for Node, attach to `window` for browser.\r\n if (typeof module !== 'undefined' && module.exports) {\r\n module.exports = Polyglot;\r\n } else {\r\n root.Polyglot = Polyglot;\r\n }\r\n\r\n}(this);\r\n\ndefine(\"libs/polyglot\", function(){});\n\ndefine('models/user',[], function () {\r\n var user = null,\r\n credentials = {},\r\n oauthUrl = \"\";\r\n var host = \"\";\r\n var start = \"\";\r\n\r\n require([\"app\"], function (app) {\r\n host = app.config.host;\r\n start = app.config.start;\r\n });\r\n\r\n credentials = Cookies.getJSON(\"appCookie\") || {};\r\n\r\n function saveSetting(key, value, reload) {\r\n if (current_user) {\r\n var id = current_user.id,\r\n settings = current_user.settings;\r\n\r\n if (!settings[key] || value != settings[key]) {\r\n if (reload) document.location.reload();\r\n }\r\n }\r\n }\r\n\r\n return {\r\n saveSetting: saveSetting,\r\n getDvcsID: function () {\r\n var cookie = this.getAppCookie();\r\n\r\n if (cookie == null) {\r\n return null;\r\n }\r\n\r\n return cookie.ma_dvcs;\r\n },\r\n getCurrentUser: function () {\r\n var cookie = this.getAppCookie();\r\n\r\n if (cookie == null) {\r\n return null;\r\n }\r\n\r\n return cookie.username;\r\n },\r\n getLanguage: function () {\r\n var cookie = this.getAppCookie();\r\n\r\n if (cookie == null) {\r\n return null;\r\n }\r\n\r\n return cookie.language;\r\n },\r\n getAccessToken: function () {\r\n var cookie = this.getAppCookie();\r\n\r\n if (cookie === null || cookie === undefined) {\r\n return null;\r\n }\r\n\r\n if (cookie.access_token === undefined) {\r\n return null;\r\n }\r\n\r\n if (cookie.expires_in + cookie.timestamp < Date.now() / 1000) {\r\n return null;\r\n }\r\n\r\n return cookie.access_token;\r\n },\r\n getRefreshToken: function () {\r\n var cookie = this.getAppCookie();\r\n\r\n if (cookie === null || cookie === undefined) {\r\n return;\r\n }\r\n\r\n if (cookie.refresh_token === undefined) {\r\n return;\r\n }\r\n\r\n if (5400 + cookie.timestamp < Date.now() / 1000) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n host + \"/Account/GetTokenByRefreshToken\",\r\n {\r\n refresh_token: cookie.wb_user_id,\r\n wb_user_id: cookie.wb_user_id\r\n },\r\n function (text, data) {\r\n var result = JSON.parse(text);\r\n \r\n if (result.error != null) {\r\n //webix.message(result.error, \"error\");\r\n return;\r\n }\r\n var credentials = getCredentials();\r\n\r\n credentials.timestamp = (Date.now() / 1000) | 0;\r\n\r\n credentials.access_token = result.token;\r\n\r\n var baseUrl = document.location.href;\r\n\r\n if (baseUrl.startsWith(\"file\")) {\r\n webix.storage.local.put(\"appCookie\", credentials);\r\n } else {\r\n Cookies.set(\"appCookie\", credentials);\r\n }\r\n }\r\n );\r\n }\r\n },\r\n getCredentials: function () {\r\n return credentials;\r\n },\r\n getAppCookie: function () {\r\n var baseUrl = document.location.href;\r\n\r\n if (baseUrl.startsWith(\"file\")) {\r\n var cookie = webix.storage.local.get(\"appCookie\");\r\n return cookie;\r\n } else {\r\n var cookie = Cookies.getJSON(\"appCookie\");\r\n return cookie;\r\n }\r\n },\r\n setCurrentUser: function (userId) {\r\n user = userId;\r\n return true;\r\n },\r\n login: function (username, password, ma_dvcs, language, component) {\r\n webix.extend(component, webix.ProgressBar);\r\n component.disable();\r\n component.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .post(\r\n host + \"/Account/Login\",\r\n {\r\n username: username,\r\n password: password,\r\n ma_dvcs: ma_dvcs,\r\n is_sso_login: \"0\"\r\n },\r\n function (text, data) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.error != null) {\r\n webix.message(result.error, \"error\");\r\n component.enable();\r\n component.hideProgress();\r\n return;\r\n }\r\n\r\n var action = document.querySelector(\".showLogin\");\r\n action.classList.remove(\"inactive\");\r\n\r\n webix.storage.local.remove(\"APP_CACHE\");\r\n webix.storage.local.put(\"APP_CACHE\", {});\r\n\r\n credentials = {\r\n access_token: result.token,\r\n refresh_token: result.refresh_token,\r\n expires_in: 86400,\r\n token_type: \"Bearer\",\r\n scope: null,\r\n username: username,\r\n language: language,\r\n ma_dvcs: ma_dvcs,\r\n wb_user_id: result.wb_user_id,\r\n noti_sso: result.noti_sso,\r\n notes_sso: result.notes_sso,\r\n is_link_sso: result.is_link_sso,\r\n is_weak_pass: result.isWeakPass\r\n };\r\n\r\n if (result.ma_dvcs != null) {\r\n credentials.ma_dvcs = result.ma_dvcs;\r\n }\r\n\r\n credentials.timestamp = (Date.now() / 1000) | 0;\r\n\r\n var baseUrl = document.location.href;\r\n\r\n if (baseUrl.startsWith(\"file\")) {\r\n webix.storage.local.put(\"appCookie\", credentials);\r\n } else {\r\n Cookies.set(\"appCookie\", credentials);\r\n }\r\n\r\n component.$scope.show(\"./\" + start);\r\n }\r\n )\r\n .then(null, function () {\r\n component.enable();\r\n component.hideProgress();\r\n });\r\n },\r\n loginsso: function (sso_code, redirect_uri, ma_dvcs, language) {\r\n webix\r\n .ajax()\r\n .post(\r\n host + \"/Account/LoginSSO\",\r\n {\r\n sso_code: sso_code,\r\n redirect_uri: redirect_uri\r\n },\r\n function (text, data) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.error != null) {\r\n webix.message(result.error, \"error\");\r\n window.location.href = \"/#!\" + start;\r\n return;\r\n }\r\n\r\n var action = document.querySelector(\".showLogin\");\r\n action.classList.remove(\"inactive\");\r\n\r\n webix.storage.local.remove(\"APP_CACHE\");\r\n webix.storage.local.put(\"APP_CACHE\", {});\r\n\r\n credentials = {\r\n access_token: result.token,\r\n refresh_token: result.refresh_token,\r\n expires_in: 86400,\r\n token_type: \"Bearer\",\r\n scope: null,\r\n username: result.username,\r\n language: language,\r\n ma_dvcs: ma_dvcs,\r\n wb_user_id: result.wb_user_id,\r\n id_token: result.id_token,\r\n sid: result.sid\r\n };\r\n\r\n if (result.ma_dvcs != null) {\r\n credentials.ma_dvcs = result.ma_dvcs;\r\n }\r\n\r\n credentials.timestamp = (Date.now() / 1000) | 0;\r\n\r\n var baseUrl = document.location.href;\r\n\r\n if (baseUrl.startsWith(\"file\")) {\r\n webix.storage.local.put(\"appCookie\", credentials);\r\n } else {\r\n Cookies.set(\"appCookie\", credentials);\r\n }\r\n window.location.href = \"/#!\" + start;\r\n }\r\n )\r\n .then(null, function () {\r\n window.location.href = \"/#!\" + start;\r\n });\r\n },\r\n\r\n logout: function () {\r\n credentials = {};\r\n var cookie = this.getAppCookie();\r\n debugger\r\n if (cookie != null) {\r\n var id_token = cookie.to;\r\n var refresh_token = cookie.refresh_token;\r\n var expires_in = cookie.expires_in;\r\n var access_token = cookie.access_token;\r\n webix\r\n .ajax()\r\n .post(\r\n host + \"/Account/Logout\",\r\n {\r\n id_token: id_token,\r\n refresh_token : refresh_token,\r\n expires_in : expires_in,\r\n access_token: access_token\r\n },\r\n function (text, data) {\r\n var result = JSON.parse(text);\r\n \r\n if (result.error != null) {\r\n webix.message(result.error, \"error\");\r\n return;\r\n }\r\n var baseUrl = document.location.href;\r\n if (baseUrl.startsWith(\"file\")) {\r\n webix.storage.local.remove(\"appCookie\");\r\n } else {\r\n Cookies.remove(\"appCookie\");\r\n }\r\n document.location.reload();\r\n }\r\n );\r\n } else {\r\n debugger;\r\n var baseUrl = document.location.href;\r\n if (baseUrl.startsWith(\"file\")) {\r\n webix.storage.local.remove(\"appCookie\");\r\n } else {\r\n Cookies.remove(\"appCookie\");\r\n }\r\n document.location.reload();\r\n }\r\n\r\n },\r\n session: {\r\n status: function () {\r\n return new Promise(function (resolve, reject) {\r\n console.log(\"Getting user-status\");\r\n resolve(true);\r\n });\r\n },\r\n },\r\n };\r\n});\r\n\ndefine('helpers/locale',[\r\n\t\"libs/polyglot\",\r\n\t\"models/user\"\t\r\n], function(polyglot, users){\r\n\r\n\tvar defaultlang = \"vi\";\r\n\tvar key = \"--:app:lang\";\r\n\tvar current_lang = \"\";\r\n\r\n\tfunction _get_lang(){\r\n\t\treturn webix.storage.local.get(key) || defaultlang;\r\n\t}\r\n\r\n\tfunction _set_lang(lang, init){\r\n\t\twebix.storage.local.put(key, lang);\r\n\t\tdocument.location.reload();\r\n\t}\r\n\r\n\tfunction create_locale(lang,host){\r\n\t\tcurrent_lang = lang;\r\n\t\tdefine(\"locale\", [\r\n\t\t\t\"locales/\"+lang\r\n\t\t], function(data){\r\n\t\t\tvar poly = new Polyglot({ phrases:data });\r\n\t\t\t\tpoly.locale(lang);\r\n\r\n\t\t\tvar t = webix.bind(poly.t, poly);\r\n\t\t\tt.template = function(a){\r\n\t\t\t\treturn a.replace(/%([a-zA-Z0-9.]+)%/g, function(_, match){\r\n\t\t\t\t\treturn poly.t(match);\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\treturn t;\r\n\t\t});\t\r\n\t\t\t\t\r\n\t\t\r\n\t}\r\n\r\n\treturn {\r\n\t\t$oninit:function(app, config){\r\n\t\t\tkey = (app.config.id || \"\")+key;\r\n\r\n\t\t\tvar lang = _get_lang();\r\n\t\t\tcreate_locale(lang,app.config.host);\r\n\t\t},\r\n\t\tsetLang: _set_lang,\r\n\t\tgetLang: _get_lang,\r\n\t\tisNow:function(val){ return val == current_lang; }\r\n\t};\r\n});\ndefine('helpers/theme',[\r\n\t\"models/user\"\r\n], function(users){\r\n\r\n\tvar key = \"--:app:theme\";\r\n\tvar current_theme = webix.storage.local.get(key) || \"siberia:webix\";\r\n\r\n\tfunction _get_theme(){\r\n\t\tif(users.getCurrentUser())\r\n\t\t\treturn users.getCurrentUser().settings.theme;\r\n\r\n\t\treturn current_theme;\r\n\t}\r\n\r\n\tfunction _set_theme(theme){\r\n\t\twebix.storage.local.put(key, theme);\r\n\t\tif(users.getCurrentUser())\r\n\t\t\tusers.saveSetting(\"theme\", theme, theme != current_theme);\r\n\t\telse\r\n\t\t\tdocument.location.reload();\r\n\r\n\t\tcurrent_theme = theme;\r\n\t}\r\n\r\n\treturn {\r\n\t\tsetTheme: _set_theme,\r\n\t\tgetTheme: _get_theme,\r\n\t\tisNow:function(val){ return val == current_theme; }\r\n\t};\r\n});\ndefine('libs/rollbar',['require','exports','module'],function(require,exports,module){function _isUndefined(a){return\"undefined\"==typeof a}function computeStackTraceWrapper(a){function b(a){if(!t)return\"\";try{var b=function(){try{return new window.XMLHttpRequest}catch(a){return new window.ActiveXObject(\"Microsoft.XMLHTTP\")}},c=b();return c.open(\"GET\",a,!1),c.send(\"\"),c.responseText}catch(d){return\"\"}}function c(a){if(!s.hasOwnProperty(a)){var c=\"\";-1!==a.indexOf(document.domain)&&(c=b(a)),s[a]=c?c.split(\"\\n\"):[]}return s[a]}function d(a,b){var d,e=/function ([^(]*)\\(([^)]*)\\)/,f=/['\"]?([0-9A-Za-z$_]+)['\"]?\\s*[:=]\\s*(function|eval|new Function)/,g=\"\",h=10,i=c(a);if(!i.length)return UNKNOWN_FUNCTION;for(var j=0;h>j;++j)if(g=i[b-j]+g,!_isUndefined(g)){if(d=f.exec(g))return d[1];if(d=e.exec(g))return d[1]}return UNKNOWN_FUNCTION}function e(a,b){var d=c(a);if(!d.length)return null;var e=[],f=Math.floor(u/2),g=f+u%2,h=Math.max(0,b-f-1),i=Math.min(d.length,b+g-1);b-=1;for(var j=h;i>j;++j)_isUndefined(d[j])||e.push(d[j]);return e.length>0?e:null}function f(a){return a.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#]/g,\"\\\\$&\")}function g(a){return f(a).replace(\"<\",\"(?:<|<)\").replace(\">\",\"(?:>|>)\").replace(\"&\",\"(?:&|&)\").replace('\"','(?:\"|")').replace(/\\s+/g,\"\\\\s+\")}function h(a,b){for(var d,e,f=0,g=b.length;g>f;++f)if((d=c(b[f])).length&&(d=d.join(\"\\n\"),e=a.exec(d)))return{url:b[f],line:d.substring(0,e.index).split(\"\\n\").length,column:e.index-d.lastIndexOf(\"\\n\",e.index)-1};return null}function i(a,b,d){var e,g=c(b),h=new RegExp(\"\\\\b\"+f(a)+\"\\\\b\");return d-=1,g&&g.length>d&&(e=h.exec(g[d]))?e.index:null}function j(a){for(var b,c,d,e,i=[window.location.href],j=document.getElementsByTagName(\"script\"),k=\"\"+a,l=/^function(?:\\s+([\\w$]+))?\\s*\\(([\\w\\s,]*)\\)\\s*\\{\\s*(\\S[\\s\\S]*\\S)\\s*\\}\\s*$/,m=/^function on([\\w$]+)\\s*\\(event\\)\\s*\\{\\s*(\\S[\\s\\S]*\\S)\\s*\\}\\s*$/,n=0;nl;++l){if(b=g.exec(h[l]))c={url:b[3],func:b[1]||UNKNOWN_FUNCTION,args:b[2]?b[2].split(\",\"):\"\",line:+b[4],column:b[5]?+b[5]:null};else{if(!(b=f.exec(h[l])))continue;c={url:b[2],func:b[1]||UNKNOWN_FUNCTION,line:+b[3],column:b[4]?+b[4]:null}}!c.func&&c.line&&(c.func=d(c.url,c.line)),c.line&&(c.context=e(c.url,c.line)),j.push(c)}return j[0]&&j[0].line&&!j[0].column&&k&&(j[0].column=i(k[1],j[0].url,j[0].line)),j.length?{mode:\"stack\",name:a.name,message:a.message,url:document.location.href,stack:j,useragent:navigator.userAgent}:null}function l(a){for(var b,c=a.stacktrace,f=/ line (\\d+), column (\\d+) in (?:]+)>|([^\\)]+))\\((.*)\\) in (.*):\\s*$/i,g=c.split(\"\\n\"),h=[],i=0,j=g.length;j>i;i+=2)if(b=f.exec(g[i])){var k={line:+b[1],column:+b[2],func:b[3]||b[4],args:b[5]?b[5].split(\",\"):[],url:b[6]};if(!k.func&&k.line&&(k.func=d(k.url,k.line)),k.line)try{k.context=e(k.url,k.line)}catch(l){}k.context||(k.context=[g[i+1]]),h.push(k)}return h.length?{mode:\"stacktrace\",name:a.name,message:a.message,url:document.location.href,stack:h,useragent:navigator.userAgent}:null}function m(a){var b=a.message.split(\"\\n\");if(b.length<4)return null;var f,i,j,k,l=/^\\s*Line (\\d+) of linked script ((?:file|http|https)\\S+)(?:: in function (\\S+))?\\s*$/i,m=/^\\s*Line (\\d+) of inline#(\\d+) script in ((?:file|http|https)\\S+)(?:: in function (\\S+))?\\s*$/i,n=/^\\s*Line (\\d+) of function script\\s*$/i,o=[],p=document.getElementsByTagName(\"script\"),q=[];for(i in p)p.hasOwnProperty(i)&&!p[i].src&&q.push(p[i]);for(i=2,j=b.length;j>i;i+=2){var r=null;if(f=l.exec(b[i]))r={url:f[2],func:f[3],line:+f[1]};else if(f=m.exec(b[i])){r={url:f[3],func:f[4]};var s=+f[1],t=q[f[2]-1];if(t&&(k=c(r.url))){k=k.join(\"\\n\");var u=k.indexOf(t.innerText);u>=0&&(r.line=s+k.substring(0,u).split(\"\\n\").length)}}else if(f=n.exec(b[i])){var v=window.location.href.replace(/#.*$/,\"\"),w=f[1],x=new RegExp(g(b[i+1]));k=h(x,[v]),r={url:v,line:k?k.line:w,func:\"\"}}if(r){r.func||(r.func=d(r.url,r.line));var y=e(r.url,r.line),z=y?y[Math.floor(y.length/2)]:null;r.context=y&&z.replace(/^\\s*/,\"\")===b[i+1].replace(/^\\s*/,\"\")?y:[b[i+1]],o.push(r)}}return o.length?{mode:\"multiline\",name:a.name,message:b[0],url:document.location.href,stack:o,useragent:navigator.userAgent}:null}function n(a,b,c,f){var g={url:b,line:c};if(g.url&&g.line){a.incomplete=!1,g.func||(g.func=d(g.url,g.line)),g.context||(g.context=e(g.url,g.line));var h=/ '([^']+)' /.exec(f);if(h&&(g.column=i(h[1],g.url,g.line)),a.stack.length>0&&a.stack[0].url===g.url){if(a.stack[0].line===g.line)return!1;if(!a.stack[0].line&&a.stack[0].func===g.func)return a.stack[0].line=g.line,a.stack[0].context=g.context,!1}return a.stack.unshift(g),a.partial=!0,!0}return a.incomplete=!0,!1}function o(a,b){for(var c,e,f,g=/function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,h=[],k={},l=!1,m=o.caller;m&&!l;m=m.caller)if(m!==p&&m!==v){if(e={url:null,func:UNKNOWN_FUNCTION,line:null,column:null},m.name?e.func=m.name:(c=g.exec(m.toString()))&&(e.func=c[1]),f=j(m)){e.url=f.url,e.line=f.line,e.func===UNKNOWN_FUNCTION&&(e.func=d(e.url,e.line));var q=/ '([^']+)' /.exec(a.message||a.description);q&&(e.column=i(q[1],f.url,f.line))}k[\"\"+m]?l=!0:k[\"\"+m]=!0,h.push(e)}b&&h.splice(0,b);var r={mode:\"callers\",name:a.name,message:a.message,url:document.location.href,stack:h,useragent:navigator.userAgent};return n(r,a.sourceURL||a.fileName,a.line||a.lineNumber,a.message||a.description),r}function p(a,b){var c=null;b=null==b?0:+b;try{if(c=l(a))return c}catch(d){if(r)throw d}try{if(c=k(a))return c}catch(d){if(r)throw d}try{if(c=m(a))return c}catch(d){if(r)throw d}try{if(c=o(a,b+1))return c}catch(d){if(r)throw d}return{mode:\"failed\"}}function q(a){a=(null==a?0:+a)+1;try{throw new Error}catch(b){return p(b,a+1)}}var r=!1,s={},t=a.remoteFetching,u=a.linesOfContext,v=a.tracekitReport;return p.augmentStackTraceWithInitialElement=n,p.guessFunctionName=d,p.gatherContext=e,p.ofCaller=q,p}function Notifier(a){_topLevelNotifier=_topLevelNotifier||this;var b=window.location.protocol;0!==b.indexOf(\"http\")&&(b=\"https:\");var c=b+\"//\"+Notifier.DEFAULT_ENDPOINT;this.options={enabled:!0,endpoint:c,environment:\"production\",scrubFields:Util.copy(Notifier.DEFAULT_SCRUB_FIELDS),checkIgnore:null,logLevel:Notifier.DEFAULT_LOG_LEVEL,reportLevel:Notifier.DEFAULT_REPORT_LEVEL,uncaughtErrorLevel:Notifier.DEFAULT_UNCAUGHT_ERROR_LEVEL,payload:{}},this.lastError=null,this.plugins={},this.parentNotifier=a,this.logger=function(){if(window.console&&\"function\"==typeof window.console.log){var a=[\"Rollbar:\"].concat(Array.prototype.slice.call(arguments,0));window.console.log(a)}},a&&(a.hasOwnProperty(\"shimId\")?a.notifier=this:(this.logger=a.logger,this.configure(a.options)))}function _wrapNotifierFn(a,b){return function(){var c=b||this;try{return a.apply(c,arguments)}catch(d){c&&c.logger(d)}}}function _guessErrorClass(a){if(!a)return[\"Unknown error. There was no error message to display.\",\"\"];var b=a.match(ERR_CLASS_REGEXP),c=\"(unknown)\";return b&&(c=b[b.length-1],a=a.replace((b[b.length-2]||\"\")+c+\":\",\"\"),a=a.replace(/(^[\\s]+|[\\s]+$)/g,\"\")),[c,a]}function _payloadProcessorTimer(a){for(var b;b=window._rollbarPayloadQueue.shift();)_processPayload(b.endpointUrl,b.accessToken,b.payload,b.callback);a||(payloadProcessorTimeout=setTimeout(_payloadProcessorTimer,1e3))}function _processPayload(a,b,c,d){d=d||function(){};var e=(new Date).getTime();e-rateLimitStartTime>=6e4&&(rateLimitStartTime=e,rateLimitPerMinCounter=0);var f=window._globalRollbarOptions.maxItems,g=window._globalRollbarOptions.itemsPerMinute,h=function(){return!c.ignoreRateLimit&&f>=1&&rateLimitCounter>=f},i=function(){return!c.ignoreRateLimit&&g>=1&&rateLimitPerMinCounter>=g};return h()?(d(new Error(f+\" max items reached\")),void 0):i()?(d(new Error(g+\" items per minute reached\")),void 0):(rateLimitCounter++,rateLimitPerMinCounter++,h()&&_topLevelNotifier._log(_topLevelNotifier.options.uncaughtErrorLevel,\"maxItems has been hit. Ignoring errors for the remainder of the current page load.\",null,{maxItems:f},null,!1,!0),c.ignoreRateLimit&&delete c.ignoreRateLimit,XHR.post(a,b,c,function(a,b){return a?d(a):d(null,b)}),void 0)}function _rollbarWindowOnError(a,b,c){!c[4]&&window._rollbarWrappedError&&(c[4]=window._rollbarWrappedError,window._rollbarWrappedError=null),globalNotifier.uncaughtError.apply(globalNotifier,c),b&&b.apply(window,c)}function _extendListenerPrototype(a,b){if(b.hasOwnProperty&&b.hasOwnProperty(\"addEventListener\")){var c=b.addEventListener;b.addEventListener=function(b,d,e){c.call(this,b,a.wrap(d),e)};var d=b.removeEventListener;b.removeEventListener=function(a,b,c){d.call(this,a,b._wrapped||b,c)}}}var setupCustomJSON=function(JSON){function f(a){return 10>a?\"0\"+a:a}function quote(a){return escapable.lastIndex=0,escapable.test(a)?'\"'+a.replace(escapable,function(a){var b=meta[a];return\"string\"==typeof b?b:\"\\\\u\"+(\"0000\"+a.charCodeAt(0).toString(16)).slice(-4)})+'\"':'\"'+a+'\"'}function str(a,b){var c,d,e,f,g,h=gap,i=b[a];switch(i&&\"object\"==typeof i&&\"function\"==typeof i.toJSON&&(i=i.toJSON(a)),\"function\"==typeof rep&&(i=rep.call(b,a,i)),typeof i){case\"string\":return quote(i);case\"number\":return isFinite(i)?String(i):\"null\";case\"boolean\":case\"null\":return String(i);case\"object\":if(!i)return\"null\";if(gap+=indent,g=[],\"[object Array]\"===Object.prototype.toString.apply(i)){for(f=i.length,c=0;f>c;c+=1)g[c]=str(c,i)||\"null\";return e=0===g.length?\"[]\":gap?\"[\\n\"+gap+g.join(\",\\n\"+gap)+\"\\n\"+h+\"]\":\"[\"+g.join(\",\")+\"]\",gap=h,e}if(rep&&\"object\"==typeof rep)for(f=rep.length,c=0;f>c;c+=1)\"string\"==typeof rep[c]&&(d=rep[c],e=str(d,i),e&&g.push(quote(d)+(gap?\": \":\":\")+e));else for(d in i)Object.prototype.hasOwnProperty.call(i,d)&&(e=str(d,i),e&&g.push(quote(d)+(gap?\": \":\":\")+e));return e=0===g.length?\"{}\":gap?\"{\\n\"+gap+g.join(\",\\n\"+gap)+\"\\n\"+h+\"}\":\"{\"+g.join(\",\")+\"}\",gap=h,e}}\"function\"!=typeof Date.prototype.toJSON&&(Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+\"-\"+f(this.getUTCMonth()+1)+\"-\"+f(this.getUTCDate())+\"T\"+f(this.getUTCHours())+\":\"+f(this.getUTCMinutes())+\":\"+f(this.getUTCSeconds())+\"Z\":null},String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(){return this.valueOf()});var cx=/[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,escapable=/[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,gap,indent,meta={\"\\b\":\"\\\\b\",\"\t\":\"\\\\t\",\"\\n\":\"\\\\n\",\"\\f\":\"\\\\f\",\"\\r\":\"\\\\r\",'\"':'\\\\\"',\"\\\\\":\"\\\\\\\\\"},rep;\"function\"!=typeof JSON.stringify&&(JSON.stringify=function(a,b,c){var d;if(gap=\"\",indent=\"\",\"number\"==typeof c)for(d=0;c>d;d+=1)indent+=\" \";else\"string\"==typeof c&&(indent=c);if(rep=b,b&&\"function\"!=typeof b&&(\"object\"!=typeof b||\"number\"!=typeof b.length))throw new Error(\"JSON.stringify\");return str(\"\",{\"\":a})}),\"function\"!=typeof JSON.parse&&(JSON.parse=function(text,reviver){function walk(a,b){var c,d,e=a[b];if(e&&\"object\"==typeof e)for(c in e)Object.prototype.hasOwnProperty.call(e,c)&&(d=walk(e,c),void 0!==d?e[c]=d:delete e[c]);return reviver.call(a,b,e)}var j;if(text=String(text),cx.lastIndex=0,cx.test(text)&&(text=text.replace(cx,function(a){return\"\\\\u\"+(\"0000\"+a.charCodeAt(0).toString(16)).slice(-4)})),/^[\\],:{}\\s]*$/.test(text.replace(/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,\"@\").replace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,\"]\").replace(/(?:^|:|,)(?:\\s*\\[)+/g,\"\")))return j=eval(\"(\"+text+\")\"),\"function\"==typeof reviver?walk({\"\":j},\"\"):j;throw new SyntaxError(\"JSON.parse\")})},UNKNOWN_FUNCTION=\"?\",Util={merge:function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!0;for(\"object\"!=typeof g&&\"function\"!=typeof g&&(g={});i>h;h++)if(null!==(a=arguments[h]))for(b in a)a.hasOwnProperty(b)&&(c=g[b],d=a[b],g!==d&&(j&&d&&(d.constructor==Object||(e=d.constructor==Array))?(e?(e=!1,f=[]):f=c&&c.constructor==Object?c:{},g[b]=Util.merge(f,d)):void 0!==d&&(g[b]=d)));return g},copy:function(a){var b;return\"object\"==typeof a&&(a.constructor==Object?b={}:a.constructor==Array&&(b=[])),Util.merge(b,a),b},parseUriOptions:{strictMode:!1,key:[\"source\",\"protocol\",\"authority\",\"userInfo\",\"user\",\"password\",\"host\",\"port\",\"relative\",\"path\",\"directory\",\"file\",\"query\",\"anchor\"],q:{name:\"queryKey\",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/}},parseUri:function(a){if(!a||\"string\"!=typeof a&&!(a instanceof String))throw new Error(\"Util.parseUri() received invalid input\");for(var b=Util.parseUriOptions,c=b.parser[b.strictMode?\"strict\":\"loose\"].exec(a),d={},e=14;e--;)d[b.key[e]]=c[e]||\"\";return d[b.q.name]={},d[b.key[12]].replace(b.q.parser,function(a,c,e){c&&(d[b.q.name][c]=e)}),d},sanitizeUrl:function(a){if(!a||\"string\"!=typeof a&&!(a instanceof String))throw new Error(\"Util.sanitizeUrl() received invalid input\");var b=Util.parseUri(a);return\"\"===b.anchor&&(b.source=b.source.replace(\"#\",\"\")),a=b.source.replace(\"?\"+b.query,\"\")},traverse:function(a,b){var c,d,e,f=\"object\"==typeof a,g=[];if(f)if(a.constructor===Object)for(c in a)a.hasOwnProperty(c)&&g.push(c);else if(a.constructor===Array)for(e=0;ea;a++)try{b=c[a]();break}catch(e){}return b},post:function(a,b,c,d){if(\"object\"!=typeof c)throw new Error(\"Expected an object to POST\");c=RollbarJSON.stringify(c),d=d||function(){};var e=XHR.createXMLHTTPObject();if(e)try{try{var f=function(){try{f&&4===e.readyState&&(f=void 0,200===e.status?d(null,RollbarJSON.parse(e.responseText)):\"number\"==typeof e.status&&e.status>=400&&e.status<600?d(new Error(e.status.toString())):d(new Error))}catch(a){var b;b=\"object\"==typeof a&&a.stack?a:new Error(a),d(b)}};e.open(\"POST\",a,!0),e.setRequestHeader&&(e.setRequestHeader(\"Content-Type\",\"application/json\"),e.setRequestHeader(\"X-Rollbar-Access-Token\",b)),e.onreadystatechange=f,e.send(c)}catch(g){if(\"undefined\"!=typeof XDomainRequest){var h=function(){d(new Error)},i=function(){d(new Error)},j=function(){d(null,RollbarJSON.parse(e.responseText))};e=new XDomainRequest,e.onprogress=function(){},e.ontimeout=h,e.onerror=i,e.onload=j,e.open(\"POST\",a,!0),e.send(c)}}}catch(k){d(k)}}};Notifier.NOTIFIER_VERSION=\"1.1.9\",Notifier.DEFAULT_ENDPOINT=\"api.rollbar.com/api/1/\",Notifier.DEFAULT_SCRUB_FIELDS=[\"passwd\",\"password\",\"secret\",\"confirm_password\",\"password_confirmation\"],Notifier.DEFAULT_LOG_LEVEL=\"debug\",Notifier.DEFAULT_REPORT_LEVEL=\"debug\",Notifier.DEFAULT_UNCAUGHT_ERROR_LEVEL=\"warning\",Notifier.DEFAULT_ITEMS_PER_MIN=60,Notifier.DEFAULT_MAX_ITEMS=0,Notifier.LEVELS={debug:0,info:1,warning:2,error:3,critical:4},window._rollbarPayloadQueue=[],window._globalRollbarOptions={startTime:(new Date).getTime(),maxItems:Notifier.DEFAULT_MAX_ITEMS,itemsPerMinute:Notifier.DEFAULT_ITEMS_PER_MIN};var TK=computeStackTraceWrapper({remoteFetching:!1,linesOfContext:3}),_topLevelNotifier;Notifier._generateLogFn=function(a){return _wrapNotifierFn(function(){var b=this._getLogArgs(arguments);return this._log(a||b.level||this.options.logLevel||Notifier.DEFAULT_LOG_LEVEL,b.message,b.err,b.custom,b.callback)})},Notifier.prototype._getLogArgs=function(a){for(var b,c,d,e,f,g,h,i=this.options.logLevel||Notifier.DEFAULT_LOG_LEVEL,j=0;jb;++b)a=c[b],e.push({name:a.name,description:a.description});this._browserPlugins=e}return this._browserPlugins},Notifier.prototype._scrub=function(a){function b(a,b,c,d,e,f){return b+Util.redact(f)}function c(a){var c;if(\"string\"==typeof a)for(c=0;cj;j++){if(d=c.frames[j],e=d.filename,\"string\"!=typeof e)return!0;for(k=0;h>k;k++)if(g=b[k],i=new RegExp(g),i.test(e))return!0}}catch(l){return this.configure({hostWhiteList:null}),this.error(\"Error while reading your configuration's hostWhiteList option. Removing custom hostWhiteList.\",l),!0}return!1},Notifier.prototype._messageIsIgnored=function(a){var b,c,d,e,f,g,h;try{if(f=!1,d=this.options.ignoredMessages,h=a.data.body.trace,!d||0===d.length)return!1;if(!h)return!1;for(b=h.exception.message,e=d.length,c=0;e>c&&(g=new RegExp(d[c],\"gi\"),!(f=g.test(b)));c++);}catch(i){this.configure({ignoredMessages:null}),this.error(\"Error while reading your configuration's ignoredMessages option. Removing custom ignoredMessages.\")}return f},Notifier.prototype._enqueuePayload=function(a,b,c,d){var e={callback:d,accessToken:this.options.accessToken,endpointUrl:this._route(\"item/\"),payload:a},f=function(){if(d){var a=\"This item was not sent to Rollbar because it was ignored. This can happen if a custom checkIgnore() function was used or if the item's level was less than the notifier' reportLevel. See https://rollbar.com/docs/notifier/rollbar.js/configuration for more details.\";d(null,{err:0,result:{id:null,uuid:null,message:a}})}};if(this._internalCheckIgnore(b,c,a))return f(),void 0;try{if(this.options.checkIgnore&&\"function\"==typeof this.options.checkIgnore&&this.options.checkIgnore(b,c,a))return f(),void 0}catch(g){this.configure({checkIgnore:null}),this.error(\"Error while calling custom checkIgnore() function. Removing custom checkIgnore().\",g)}if(this._urlIsWhitelisted(a)&&!this._messageIsIgnored(a)){if(this.options.verbose){if(a.data&&a.data.body&&a.data.body.trace){var h=a.data.body.trace,i=h.exception.message;this.logger(i)}this.logger(\"Sending payload -\",e)}\"function\"==typeof this.options.logFunction&&this.options.logFunction(e);try{\"function\"==typeof this.options.transform&&this.options.transform(a)}catch(g){this.configure({transform:null}),this.error(\"Error while calling custom transform() function. Removing custom transform().\",g)}this.options.enabled&&window._rollbarPayloadQueue.push(e)}},Notifier.prototype._internalCheckIgnore=function(a,b,c){var d=b[0],e=Notifier.LEVELS[d]||0,f=Notifier.LEVELS[this.options.reportLevel]||0;if(f>e)return!0;var g=this.options?this.options.plugins:{};return g&&g.jquery&&g.jquery.ignoreAjaxErrors&&c.body.message?c.body.messagejquery_ajax_error:!1},Notifier.prototype._log=function(a,b,c,d,e,f,g){var h=null;if(c){if(h=c._tkStackTrace?c._tkStackTrace:TK(c),c===this.lastError)return;this.lastError=c}var i=this._buildPayload(new Date,a,b,h,d);g&&(i.ignoreRateLimit=!0),this._enqueuePayload(i,f?!0:!1,[a,b,c,d],e)},Notifier.prototype.log=Notifier._generateLogFn(),Notifier.prototype.debug=Notifier._generateLogFn(\"debug\"),Notifier.prototype.info=Notifier._generateLogFn(\"info\"),Notifier.prototype.warn=Notifier._generateLogFn(\"warning\"),Notifier.prototype.warning=Notifier._generateLogFn(\"warning\"),Notifier.prototype.error=Notifier._generateLogFn(\"error\"),Notifier.prototype.critical=Notifier._generateLogFn(\"critical\"),Notifier.prototype.uncaughtError=_wrapNotifierFn(function(a,b,c,d,e,f){if(f=f||null,e&&e.stack)return this._log(this.options.uncaughtErrorLevel,a,e,f,null,!0),void 0;if(b&&b.stack)return this._log(this.options.uncaughtErrorLevel,a,b,f,null,!0),void 0;var g={url:b||\"\",line:c};g.func=TK.guessFunctionName(g.url,g.line),g.context=TK.gatherContext(g.url,g.line);var h={mode:\"onerror\",message:a||\"uncaught exception\",url:document.location.href,stack:[g],useragent:navigator.userAgent};e&&(h=e._tkStackTrace||TK(e));var i=this._buildPayload(new Date,this.options.uncaughtErrorLevel,a,h);this._enqueuePayload(i,!0,[this.options.uncaughtErrorLevel,a,b,c,d,e])}),Notifier.prototype.global=_wrapNotifierFn(function(a){a=a||{},Util.merge(window._globalRollbarOptions,a),void 0!==a.maxItems&&(rateLimitCounter=0),void 0!==a.itemsPerMinute&&(rateLimitPerMinCounter=0)}),Notifier.prototype.configure=_wrapNotifierFn(function(a){Util.merge(this.options,a)}),Notifier.prototype.scope=_wrapNotifierFn(function(a){var b=new Notifier(this);return Util.merge(b.options.payload,a),b}),Notifier.prototype.wrap=function(a,b){var c;if(c=\"function\"==typeof b?b:function(){return b||{}},\"function\"!=typeof a)return a;if(a._isWrap)return a;if(!a._wrapped){a._wrapped=function(){try{a.apply(this,arguments)}catch(b){throw b.stack||(b._tkStackTrace=TK(b)),b._rollbarContext=c(),b._rollbarContext._wrappedSource=a.toString(),window._rollbarWrappedError=b,b}},a._wrapped._isWrap=!0;for(var d in a)a.hasOwnProperty(d)&&(a._wrapped[d]=a[d])}return a._wrapped};var ERR_CLASS_REGEXP=new RegExp(\"^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): \"),payloadProcessorTimeout;Notifier.processPayloads=function(a){(!payloadProcessorTimeout||a)&&_payloadProcessorTimer(a)};var rateLimitStartTime=(new Date).getTime(),rateLimitCounter=0,rateLimitPerMinCounter=0,globalNotifier=new Notifier;window._rollbarWrappedError=null,globalNotifier.init=function(a){if(this.configure(a),a.captureUncaught){var b=window.onerror;window.onerror=function(){var a=Array.prototype.slice.call(arguments,0);_rollbarWindowOnError(globalNotifier,b,a)};var c,d,e=[\"EventTarget\",\"Window\",\"Node\",\"ApplicationCache\",\"AudioTrackList\",\"ChannelMergerNode\",\"CryptoOperation\",\"EventSource\",\"FileReader\",\"HTMLUnknownElement\",\"IDBDatabase\",\"IDBRequest\",\"IDBTransaction\",\"KeyOperation\",\"MediaController\",\"MessagePort\",\"ModalWindow\",\"Notification\",\"SVGElementInstance\",\"Screen\",\"TextTrack\",\"TextTrackCue\",\"TextTrackList\",\"WebSocket\",\"WebSocketWorker\",\"Worker\",\"XMLHttpRequest\",\"XMLHttpRequestEventTarget\",\"XMLHttpRequestUpload\"];for(c=0;c= 0;\r\n };\r\n\r\n webix.rules.isSpecialCharacter = function (value) {\r\n var patt = /^[a-zA-Z0-9\\$%\\^\\&*\\)\\(+=._-]+$/;\r\n return patt.test(value);\r\n };\r\n\r\n webix.rules.isPhoneNumber = function (value) {\r\n if (value == \"\") return true;\r\n\r\n var patt = /^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\\s\\./0-9]*$/;\r\n return patt.test(value);\r\n };\r\n\r\n webix.rules.isTaxCode = function (value) {\r\n var patt = /^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$/;\r\n\r\n if (value.length > 10) {\r\n patt = /^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][-][0-9][0-9][0-9]$/;\r\n }\r\n\r\n if (value == \"\") return true;\r\n\r\n if (patt.test(value) == false) {\r\n return false;\r\n }\r\n\r\n var number =\r\n Number(value.charAt(0)) * 31 +\r\n Number(value.charAt(1)) * 29 +\r\n Number(value.charAt(2)) * 23 +\r\n Number(value.charAt(3)) * 19 +\r\n Number(value.charAt(4)) * 17 +\r\n Number(value.charAt(5)) * 13 +\r\n Number(value.charAt(6)) * 7 +\r\n Number(value.charAt(7)) * 5 +\r\n Number(value.charAt(8)) * 3;\r\n\r\n return 10 - (number % 11) == Number(value.charAt(9));\r\n };\r\n\r\n if (!webix.env.touch && webix.ui.scrollSize && webix.CustomScroll) webix.CustomScroll.init();\r\n\r\n //configuration\r\n var app = core.create({\r\n id: \"admin-demo\",\r\n name: \"Webix Admin\",\r\n version: \"0.1\",\r\n debug: true,\r\n start: \"/app/dashboard\",\r\n host: \"http://localhost:18374\",\r\n //host:\t\"http://apiketoan.vacom.vn\"\r\n });\r\n\r\n var port = \"\";\r\n\r\n if (document.location.protocol == \"file:\") {\r\n app.config.host = \"http://localhost:18374\";\r\n } else if (document.location.hostname == \"localhost\" || document.location.hostname == \"127.0.0.1\") {\r\n app.config.host = \"http://localhost:18374\";\r\n } else {\r\n if (document.location.port != 80 && document.location.port != 445) {\r\n port = \":\" + document.location.port.toString();\r\n }\r\n\r\n app.config.host = document.location.protocol + \"//\" + document.location.hostname + port + \"/api\";\r\n }\r\n\r\n //alert(app.host);\r\n\r\n document.onkeydown = function () {\r\n var x = event.keyCode;\r\n if (((x == 70 || x == 78 || x == 79 || x == 80) && event.ctrlKey) || (x > 111 && x < 124)) {\r\n //alert (\"No new window\")\r\n event.cancelBubble = true;\r\n event.returnValue = false;\r\n event.keyCode = false;\r\n return false;\r\n }\r\n };\r\n\r\n webix.UIManager.addHotKey(\"any\", function (view, ev) {\r\n if (typeof view.getTopParentView !== \"function\") return;\r\n\r\n var topParent = view.getTopParentView();\r\n\r\n var elButtons = topParent.$view.getElementsByClassName(\"webix_el_button\");\r\n\r\n if (elButtons.length > 0) {\r\n for (var i = 0; i < elButtons.length; i++) {\r\n var element = elButtons[i];\r\n var viewId = element.attributes[\"view_id\"].value;\r\n var button = webix.$$(viewId);\r\n\r\n if (button.config.shortcut != \"undefined\") {\r\n var shortcut = button.config.shortcut;\r\n if (shortcut == ev.code) {\r\n button.callEvent(\"onClick\");\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n webix.UIManager.addHotKey(\"esc\", function (view) {\r\n if (typeof view.getTopParentView !== \"function\") return;\r\n\r\n var topParent = view.getTopParentView();\r\n\r\n var elButtons = topParent.$view.getElementsByClassName(\"webix_el_button\");\r\n\r\n if (elButtons.length > 0) {\r\n for (var i = 0; i < elButtons.length; i++) {\r\n var element = elButtons[i];\r\n var viewId = element.attributes[\"view_id\"].value;\r\n var button = webix.$$(viewId);\r\n\r\n if (button.config.shortcut == \"esc\") {\r\n button.callEvent(\"onClick\");\r\n return;\r\n }\r\n }\r\n }\r\n });\r\n\r\n if (webix.storage.local.get(\"APP_CACHE\") == null) {\r\n var app_cache = {};\r\n\r\n webix.storage.local.put(\"APP_CACHE\", app_cache);\r\n }\r\n app.use(menu);\r\n app.use(locale);\r\n app.use(theme);\r\n app.use(user);\r\n\r\n return app;\r\n});\r\n\ndefine('views/forms/68_bangkebanraForm',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n var editmode = 0;\r\n\r\n var date = new Date();\r\n var _month = date.getMonth() + 1;\r\n var firstDay = new Date(date.getFullYear(), date.getMonth(), 1);\r\n var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n\r\n function subviewT() {\r\n $$(\"cbQuy\").define(\"label\", \"Tháng\");\r\n $$(\"cbQuy\").refresh();\r\n $$(\"cbQuy\").define(\"options\", [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"]);\r\n //webix.extend(config, $$('cbQuy').config);\r\n //webix.ui(config, $$('cbThang'));\r\n //$$('cbThang').destructor();\r\n }\r\n\r\n function subviewQ() {\r\n $$(\"cbQuy\").define(\"label\", \"Quý\");\r\n $$(\"cbQuy\").refresh();\r\n $$(\"cbQuy\").define(\"options\", [\"1\", \"2\", \"3\", \"4\"]);\r\n // webix.extend($$('cbQuy').config, config, true);\r\n //webix.ui(config, $$('cbQuy'));\r\n //$$('cbQuy').destructor();\r\n }\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n head: \"Bảng kê bán ra\",\r\n width: 550,\r\n resize: true,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 60 },\r\n view: \"form\",\r\n id: \"bangkebr\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"multicombo\",\r\n label: _(\"DONVI\"),\r\n name: \"lst_branch_code\",\r\n labelWidth: 80,\r\n required: true,\r\n invalidMessage: \"Vui lòng chọn đơn vị\",\r\n suggest: {\r\n selectAll: true,\r\n body: {\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00198\",\r\n },\r\n },\r\n on: {\r\n onChange: function(newValue, oldValue) {\r\n // Tạo URL API dựa trên các giá trị đã chọn trong multicomboA\r\n var urlLoad = app.config.host + \"/System/GetDataReferencesByRefIdAndBranchs?refId=RF003001&branchs=\" + newValue;\r\n \r\n // Cập nhật URL của multicomboB và tải lại dữ liệu\r\n var comp = $$(\"multicombo_kyhieu\").getPopup().getList();\r\n if(comp != null) {\r\n comp.clearAll();\r\n comp.load(urlLoad);\r\n }\r\n }\r\n }\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"radio\",\r\n id: \"head_extension\",\r\n value: 1,\r\n options: [\r\n { id: 1, value: \"Tháng\" }, // the initially selected item\r\n { id: 2, value: \"Quý\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var d = new Date();\r\n var quarter = Math.floor(d.getMonth() / 3);\r\n var quarter1 = quarter + 1;\r\n if (newv == 2) {\r\n subviewQ();\r\n $$(\"cbQuy\").setValue(quarter1);\r\n }\r\n if (newv == 1) {\r\n subviewT();\r\n $$(\"cbQuy\").setValue(d.getMonth() + 1);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n id: \"cbQuy\",\r\n name: \"quy\",\r\n view: \"combo\",\r\n label: \"Tháng\",\r\n value: _month,\r\n options: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"],\r\n on: {\r\n onChange: function () {\r\n var d = new Date();\r\n var quarter = Math.floor(d.getMonth() / 3);\r\n var quarter1 = quarter + 1;\r\n\r\n var option = $$(\"head_extension\").getValue();\r\n if (option == 2) {\r\n var nam = d.getFullYear();\r\n var thang;\r\n var quy = $$(\"cbQuy\").getValue();\r\n if (quy == 1) {\r\n thang = 0;\r\n }\r\n if (quy == 2) {\r\n thang = 3;\r\n }\r\n if (quy == 3) {\r\n thang = 6;\r\n }\r\n if (quy == 4) {\r\n thang = 9;\r\n }\r\n var firstDate = new Date(nam, thang, 1);\r\n var lastDate = new Date(nam, thang + 3, 0);\r\n\r\n $$(\"tu_ngay\").setValue(firstDate);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDate);\r\n $$(\"den_ngay\").refresh();\r\n }\r\n if (option == 1) {\r\n var year = d.getFullYear();\r\n var month = $$(\"cbQuy\").getValue();\r\n var date1 = month + \"/01\" + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n var firstDay1 = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\r\n var lastDay1 = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n $$(\"tu_ngay\").setValue(firstDay1);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDay1);\r\n $$(\"den_ngay\").refresh();\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datepicker\",\r\n label: _(\"TU_NGAY\"),\r\n name: \"tu_ngay\",\r\n id: \"tu_ngay\",\r\n value: firstDay,\r\n labelWidth: 80,\r\n invalidMessage: \"Vui lòng chọn từ ngày\",\r\n validate: webix.rules.isNotEmpty,\r\n required: true,\r\n },\r\n {\r\n view: \"datepicker\",\r\n label: _(\"DEN_NGAY\"),\r\n name: \"den_ngay\",\r\n id: \"den_ngay\",\r\n value: lastDay,\r\n labelWidth: 80,\r\n invalidMessage: \"Vui lòng chọn đến ngày\",\r\n validate: webix.rules.isNotEmpty,\r\n required: true,\r\n },\r\n {\r\n view: \"multicombo\",\r\n label: _(\"KY_HIEU\"),\r\n name: \"ky_hieu\",\r\n id: \"multicombo_kyhieu\",\r\n labelWidth: 80,\r\n // required: true,\r\n // invalidMessage: \"Tên truy cập không để trống hoặc nhập không đúng (a-z,A-Z,0-9)\",\r\n // validate: webix.rules.isNotEmpty,\r\n suggest: {\r\n selectAll: true,\r\n body: {\r\n // url: app.config.host + \"/System/GetDataReferencesByRefIdAndBranchs?refId=RF003001\",\r\n //template: webix.template(\"#value#\")\r\n },\r\n },\r\n //value: \"2\"\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n width: 100,\r\n type: \"form\",\r\n align: \"center\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var tableHoadon = $$(\"bangkebr\");\r\n if (tableHoadon.validate()) {\r\n var tungay = $$(\"tu_ngay\").getValue();\r\n var denngay = $$(\"den_ngay\").getValue();\r\n\r\n if (tungay > denngay) {\r\n webix.message(\"Ngày bắt đầu phải nhỏ hơn ngày kết thúc !\", \"error\");\r\n $$(\"tu_ngay\").focus();\r\n return;\r\n }\r\n\r\n var form = self.getParentView().getParentView();\r\n var win = self.getTopParentView();\r\n\r\n var item = form.getValues();\r\n var load_event = \"dataChangebangkebanra\";\r\n\r\n app.callEvent(load_event, [item]);\r\n\r\n win.close();\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 100,\r\n align: \"center\",\r\n type: \"danger\",\r\n click: function () {\r\n this.getTopParentView().close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n\r\n setValues: function (item) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n\r\n form.setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/commonHD',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n \r\n\r\n var fmHoaDon123 = function (number, keyValue) {\r\n number = number.toString().replaceAll(\",\", \"\");\r\n if (typeof number == \"string\") if (keyValue === undefined || keyValue === null || keyValue === \"\") keyValue = \"hoadon123\";\r\n var dsFieldFormat = webix.storage.local.get(\"dsFieldFormat\");\r\n var decimalSizeLeght = 0;\r\n if (dsFieldFormat !== undefined && dsFieldFormat !== null && dsFieldFormat[keyValue] !== undefined) {\r\n decimalSizeLeght = dsFieldFormat[keyValue];\r\n }\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeLeght,\r\n });\r\n\r\n return k(number);\r\n };\r\n\r\n var fmHoaDon123number = function (number, keyValue) {\r\n if (typeof number == \"string\") if (keyValue === undefined || keyValue === null || keyValue === \"\") keyValue = \"hoadon123\";\r\n var dsFieldFormat = webix.storage.local.get(\"dsFieldFormat\");\r\n var decimalSizeLeght = 0;\r\n if (dsFieldFormat !== undefined && dsFieldFormat !== null && dsFieldFormat[keyValue] !== undefined) {\r\n decimalSizeLeght = dsFieldFormat[keyValue];\r\n }\r\n var k = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeLeght,\r\n };\r\n\r\n if (keyValue == \"tgtttbso\" || keyValue == \"tgtthue\" || keyValue == \"tgtcthue\" || keyValue == \"ttcktmai\" || keyValue == \"tkcktmn\" || keyValue == \"tgtphi\" || keyValue == \"tgtttbso_last\") {\r\n number = number.toString().replaceAll(\",\", \"\");\r\n\r\n number = roundNumber(number, decimalSizeLeght);\r\n }\r\n\r\n return webix.Number.parse(number.toString(), k);\r\n };\r\n\r\n var roundNumber = function (num, decimals) {\r\n var n = Number(num).toFixed(decimals);\r\n return n;\r\n };\r\n\r\n var numberFormat = function (keyValue) {\r\n return {\r\n edit: function (v) {\r\n if ((v === undefined || v === null || v === \"\" || v === NaN) && !isNaN(v)) {\r\n return v;\r\n }\r\n return fmHoaDon123(v, keyValue);\r\n },\r\n parse: function (v) {\r\n if ((v === undefined || v === null || v === \"\" || v === NaN) && !isNaN(v)) {\r\n return v;\r\n }\r\n return fmHoaDon123number(v, keyValue);\r\n },\r\n };\r\n };\r\n\r\n var CheckKhacNull = function (value) {\r\n if (value === undefined || value === null || value === \"\") return false;\r\n else return true;\r\n };\r\n\r\n function getDecimalPlace(val, callback) {\r\n var url = app.config.host + \"/Invoice68/GetDecimalPlace?ma_nt=\" + val;\r\n \r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var arr = JSON.parse(text);\r\n webix.storage.local.put(\"dsFieldFormat\", arr[0]);\r\n \r\n // Sau khi lấy dữ liệu từ API, tiếp tục gọi callback\r\n callback(arr);\r\n });\r\n }\r\n\r\n // var formatSoDefault = {\r\n // groupDelimiter: \",\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \".\",\r\n // decimalSize: 2,\r\n // };\r\n\r\n // function f(a) {\r\n // return webix.Number.format(a, formatSoDefault);\r\n // }\r\n // function g(a) {\r\n // return webix.Number.parse(a, formatSoDefault);\r\n // }\r\n\r\n // var fmNumber = {\r\n // parse: function (a) {\r\n // return g(a);\r\n // },\r\n // edit: function (a) {\r\n // if (a !== undefined) return f(a);\r\n // return a;\r\n // },\r\n // };\r\n\r\n return {\r\n $ui: {},\r\n\r\n clear_filter: function (table) {\r\n webix.storage.local.remove(\"currentFilter\");\r\n table.eachColumn(function (id, col) {\r\n var filter = this.getFilter(id);\r\n if (filter) {\r\n if (filter.setValue) filter.setValue(\"\"); // suggest-based filters\r\n else filter.value = \"\"; // html-based: select & text\r\n }\r\n });\r\n },\r\n\r\n validate_HD_ReturnListHdonId: function () {\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var datafrmAll = tableHdon.serialize();\r\n var lsthdon_id = [];\r\n\r\n var lstDataChoose = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true;\r\n });\r\n\r\n if (lstDataChoose.length == 0) {\r\n webix.message(\"Vui lòng chọn dòng để xử lý!\", \"error\");\r\n lsthdon_id = [];\r\n } else {\r\n\r\n if (\r\n lstDataChoose.filter(function (p) {\r\n return p.tthai != \"Chờ ký\";\r\n }).length > 0\r\n ) {\r\n webix.message(\"Danh sách đã chọn tồn tại dòng không ở trạng thái chờ ký !\", \"error\");\r\n lsthdon_id = [];\r\n }\r\n else if (lstDataChoose.filter(function (p) {\r\n var check = true;\r\n var today = new Date();\r\n var nlap = new Date(Date.parse(p.nlap));\r\n if (nlap > today) {\r\n check = false\r\n }\r\n return check;\r\n }) == false\r\n ) {\r\n webix.message(\"Danh sách đã chọn tồn tại hóa đơn có ngày hóa đơn sau ngày ký!\", \"error\");\r\n lsthdon_id = [];\r\n } else {\r\n lsthdon_id = $.map(lstDataChoose, function (item) {\r\n return item.hdon_id;\r\n });\r\n }\r\n }\r\n return lsthdon_id;\r\n },\r\n validate_HD_ReturnListHdonId_notSign: function () {\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var datafrmAll = tableHdon.serialize();\r\n // get list được chọn\r\n var lsthdon_id = [];\r\n\r\n var lstDataChoose = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true;\r\n });\r\n\r\n if (lstDataChoose.length == 0) {\r\n webix.message(\"Vui lòng chọn dòng để xử lý!\", \"error\");\r\n lsthdon_id = [];\r\n } else {\r\n lsthdon_id = $.map(lstDataChoose, function (item) {\r\n return item.hdon_id;\r\n });\r\n }\r\n return lsthdon_id;\r\n },\r\n validate_HD_ReturnListHdonKhongMaVaCoMaId: function () {\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var datafrmAll = tableHdon.serialize();\r\n // get list được chọn\r\n var lsthdon_id_coMa = [];\r\n var lsthdon_id_khongMa = [];\r\n\r\n var lstDataChoose = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true;\r\n });\r\n var lstDataChooseKhongRoMa = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true && p.is_hdcma === null;\r\n });\r\n\r\n var lstDataChooseCoMa = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true && p.is_hdcma === 1;\r\n });\r\n var lstDataChooseKhongMa = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true && p.is_hdcma === 0;\r\n });\r\n\r\n if (lstDataChoose.length === 0) {\r\n webix.message(\"Vui lòng chọn hóa đơn để xử lý!\", \"error\");\r\n lsthdon_id_coMa = [];\r\n lsthdon_id_khongMa = [];\r\n } else {\r\n if (\r\n lstDataChooseCoMa.filter(function (p) {\r\n return p.tthai !== \"Chờ ký\";\r\n }).length > 0 ||\r\n lstDataChooseKhongMa.filter(function (p) {\r\n return p.tthai !== \"Chờ ký\";\r\n }).length > 0 ||\r\n lstDataChooseKhongRoMa.length > 0\r\n ) {\r\n if (lstDataChooseKhongRoMa.length > 0) {\r\n webix.message(\"Danh sách đã chọn tồn tại \" + lstDataChooseKhongRoMa.length + \" hóa đơn không rõ trạng thái mã !\", \"error\");\r\n lsthdon_id_coMa = [];\r\n lsthdon_id_khongMa = [];\r\n } else {\r\n webix.message(\"Danh sách đã chọn tồn tại hóa đơn không ở trạng thái chờ ký !\", \"error\");\r\n lsthdon_id_coMa = [];\r\n lsthdon_id_khongMa = [];\r\n }\r\n } else {\r\n lsthdon_id_coMa = $.map(lstDataChooseCoMa, function (item) {\r\n return {\r\n hdon_id: item.hdon_id,\r\n is_hdcma: item.is_hdcma,\r\n };\r\n });\r\n lsthdon_id_khongMa = $.map(lstDataChooseKhongMa, function (item) {\r\n return {\r\n hdon_id: item.hdon_id,\r\n is_hdcma: item.is_hdcma,\r\n };\r\n });\r\n }\r\n }\r\n return [lsthdon_id_coMa, lsthdon_id_khongMa];\r\n },\r\n validate_HD_ReturnListHdonKhongMaVaCoMaVaMTTId: function () {\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var datafrmAll = tableHdon.serialize();\r\n // get list được chọn\r\n var lsthdon_id_coMa = [];\r\n var lsthdon_id_khongMa = [];\r\n\r\n var lstDataChoose = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true;\r\n });\r\n var lstDataChooseKhongRoMa = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true && p.is_hdcma === null && p.khieu.substring(4, 5) !== 'M';\r\n });\r\n\r\n var lstDataChooseCoMa = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true && p.is_hdcma === 1 && p.khieu.substring(4, 5) !== 'M';\r\n });\r\n var lstDataChooseKhongMa = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true && p.is_hdcma === 0 && p.khieu.substring(4, 5) !== 'M';\r\n });\r\n var lstDataChooseMTT = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true && p.khieu.substring(4, 5) === 'M';\r\n });\r\n if (lstDataChoose.length === 0) {\r\n webix.message(\"Vui lòng chọn hóa đơn để xử lý!\", \"error\");\r\n lsthdon_id_coMa = [];\r\n lsthdon_id_khongMa = [];\r\n } else {\r\n if (\r\n lstDataChooseCoMa.filter(function (p) {\r\n return p.tthai !== \"Chờ ký\";\r\n }).length > 0 ||\r\n lstDataChooseKhongMa.filter(function (p) {\r\n return p.tthai !== \"Chờ ký\";\r\n }).length > 0 ||\r\n lstDataChooseMTT.filter(function (p) {\r\n return p.tthai !== \"Chờ ký\";\r\n }).length > 0 ||\r\n lstDataChooseKhongRoMa.length > 0\r\n ) {\r\n if (lstDataChooseKhongRoMa.length > 0) {\r\n webix.message(\"Danh sách đã chọn tồn tại \" + lstDataChooseKhongRoMa.length + \" hóa đơn không rõ trạng thái mã !\", \"error\");\r\n lsthdon_id_coMa = [];\r\n lsthdon_id_khongMa = [];\r\n lstDataChooseMTT = [];\r\n } else {\r\n webix.message(\"Danh sách đã chọn tồn tại hóa đơn không ở trạng thái chờ ký !\", \"error\");\r\n lsthdon_id_coMa = [];\r\n lsthdon_id_khongMa = [];\r\n lstDataChooseMTT = [];\r\n }\r\n } else {\r\n lsthdon_id_coMa = $.map(lstDataChooseCoMa, function (item) {\r\n return {\r\n hdon_id: item.hdon_id,\r\n is_hdcma: item.is_hdcma,\r\n };\r\n });\r\n lsthdon_id_khongMa = $.map(lstDataChooseKhongMa, function (item) {\r\n return {\r\n hdon_id: item.hdon_id,\r\n is_hdcma: item.is_hdcma,\r\n };\r\n });\r\n lstDataChooseMTT = $.map(lstDataChooseMTT, function (item) {\r\n return {\r\n hdon_id: item.hdon_id,\r\n is_hdcma: item.is_hdcma,\r\n };\r\n });\r\n }\r\n }\r\n return [lsthdon_id_coMa, lsthdon_id_khongMa, lstDataChooseMTT];\r\n },\r\n validate_BL_ReturnListHdonKhongMaVaCoMaId: function () {\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var datafrmAll = tableHdon.serialize();\r\n // get list được chọn\r\n var lsthdon_id_coMa = [];\r\n var lsthdon_id_khongMa = [];\r\n\r\n var lstDataChoose = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true;\r\n });\r\n var lstDataChooseKhongRoMa = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true && p.is_hdcma === null;\r\n });\r\n\r\n var lstDataChooseCoMa = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true && p.is_hdcma === 1;\r\n });\r\n var lstDataChooseKhongMa = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true && p.is_hdcma === 0;\r\n });\r\n\r\n if (lstDataChoose.length === 0) {\r\n webix.message(\"Vui lòng chọn biên lai để xử lý!\", \"error\");\r\n lsthdon_id_coMa = [];\r\n lsthdon_id_khongMa = [];\r\n } else {\r\n if (\r\n lstDataChooseCoMa.filter(function (p) {\r\n return p.tthai !== \"Chờ ký\";\r\n }).length > 0 ||\r\n lstDataChooseKhongMa.filter(function (p) {\r\n return p.tthai !== \"Chờ ký\";\r\n }).length > 0 ||\r\n lstDataChooseKhongRoMa.length > 0\r\n ) {\r\n if (lstDataChooseKhongRoMa.length > 0) {\r\n webix.message(\"Danh sách đã chọn tồn tại \" + lstDataChooseKhongRoMa.length + \" biên lai không rõ trạng thái mã !\", \"error\");\r\n lsthdon_id_coMa = [];\r\n lsthdon_id_khongMa = [];\r\n } else {\r\n webix.message(\"Danh sách đã chọn tồn tại biên lai không ở trạng thái chờ ký !\", \"error\");\r\n lsthdon_id_coMa = [];\r\n lsthdon_id_khongMa = [];\r\n }\r\n } else {\r\n lsthdon_id_coMa = $.map(lstDataChooseCoMa, function (item) {\r\n return {\r\n hdon_id: item.hdon_id,\r\n is_hdcma: item.is_hdcma,\r\n };\r\n });\r\n lsthdon_id_khongMa = $.map(lstDataChooseKhongMa, function (item) {\r\n return {\r\n hdon_id: item.hdon_id,\r\n is_hdcma: item.is_hdcma,\r\n };\r\n });\r\n }\r\n }\r\n return [lsthdon_id_coMa, lsthdon_id_khongMa];\r\n },\r\n\r\n ExcuteHoaDon: function (lsthdon_id, checkGuiCQT, checkHasCode, tagSign) {\r\n if (tagSign == undefined) tagSign = \"NBan\";\r\n checkHasCode = checkHasCode || false;\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var ui = tableHdon.getTopParentView();\r\n var isCompleted = false;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n webix.$$('invoiceViews').enable();\r\n webix.$$('invoiceViews').hideProgress();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n lsthdon_id: lsthdon_id,\r\n type_cmd: checkHasCode == true ? 200 : 203,\r\n };\r\n\r\n if (!checkGuiCQT) {\r\n postData.guiCQT = \"NotSend\";\r\n }\r\n\r\n webix.extend(tableHdon, webix.ProgressBar);\r\n tableHdon.disable();\r\n ui.disable();\r\n tableHdon.showProgress();\r\n\r\n var dataPut = { data: [postData] };\r\n webix\r\n .ajax()\r\n .timeout(180000)\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignInvoiceCertFile68\", dataPut, function (text) {\r\n var result = JSON.parse(text);\r\n var table = webix.$$(\"invoiceViews\");\r\n table.enable();\r\n ui.enable();\r\n table.hideProgress();\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n return;\r\n }\r\n\r\n if (result.ok == true) {\r\n // if (result.tthai == \"Đã ký\") {\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-type\": \"application/json\" })\r\n // .post(\r\n // app.config.host + \"/System/ExecuteCommand\",\r\n // {\r\n // command: \"CM00025\",\r\n // parameter: {},\r\n // },\r\n // function (text) {\r\n // var json = JSON.parse(text);\r\n // // send email ma = 'AUTO_SEND_EMAIL'\r\n // if (json[0].value == \"C\") {\r\n // var data = {\r\n // lsthdon_id: lsthdon_id,\r\n // nguoinhan: result.email,\r\n // tieude: \"Thông báo xuất hóa đơn điện tử\",\r\n // };\r\n\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-type\": \"application/json\" })\r\n // .post(app.config.host + \"/Invoice68/AutoSendInvoiceByEmail\", data, function (text) {\r\n // var data = JSON.parse(text);\r\n\r\n // if (!data.hasOwnProperty(\"error\")) {\r\n // } else {\r\n // webix.message(data.error, \"error\");\r\n // }\r\n // });\r\n // }\r\n // }\r\n // );\r\n\r\n // // webix.modalbox.hide();\r\n // }\r\n\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n webix.modalbox.hide();\r\n }\r\n isCompleted = true;\r\n })\r\n .fail(function (xhr) {\r\n if (!isCompleted) {\r\n // Xử lý lỗi khi timeout hoặc lỗi khác xảy ra\r\n if (xhr.status === 0) {\r\n webix.message({ type: \"error\", text: \"Hết thời gian yêu cầu chờ ký!\" });\r\n } else {\r\n webix.message({ type: \"error\", text: \"Lỗi xảy ra: \" + xhr.statusText });\r\n }\r\n var table = webix.$$(\"invoiceViews\");\r\n table.enable();\r\n ui.enable();\r\n table.hideProgress();\r\n }\r\n });\r\n\r\n return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var tblInvoice = webix.$$(\"invoiceViews\");\r\n webix.extend(tblInvoice, webix.ProgressBar);\r\n tblInvoice.disable();\r\n tblInvoice.showProgress();\r\n ui.disable();\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n // ký HSM\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n lsthdon_id: lsthdon_id,\r\n type_cmd: checkHasCode == true ? 200 : 203,\r\n };\r\n\r\n if (!checkGuiCQT) {\r\n postData.guiCQT = \"NotSend\";\r\n }\r\n\r\n var url = app.config.host + \"/Invoice68/SignListInvoiceCertFile_HSM\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, postData, function (text) {\r\n var res = JSON.parse(text);\r\n\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n webix.message(\"Đã thực hiện xong\");\r\n }\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n } else {\r\n function excuteHdPlugin(k) {\r\n if (k < lsthdon_id.length) {\r\n var hdon_id = lsthdon_id[k];\r\n\r\n var a = webix.ajax(app.config.host + \"/Invoice68/ExportInvoiceXml?id=\" + hdon_id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, hdon_id]).then(function (results) {\r\n var json = results[0].json();\r\n var idhoadon = results[2];\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n if (json.InvoiceXmlData == \"\") {\r\n webix.message({ type: \"error\", text: \"Hóa đơn chưa có chi tiết. Vui lòng kiểm tra lại\" });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n var listcerts = results[1].json();\r\n\r\n if (listcerts.length == 0) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n xmlbangke: json.xmlbangke,\r\n hdon_id: idhoadon,\r\n // shdon: json.shdon,\r\n username: user.getCurrentUser(),\r\n type_cmd: checkHasCode == true ? 200 : 203,\r\n };\r\n\r\n if (!checkGuiCQT) {\r\n parameters.guiCQT = \"NotSend\";\r\n }\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXml\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n //var table = webix.$$(\"invoiceViews\");\r\n //table.clearAll();\r\n //table.load(table.config.url);\r\n }\r\n k++;\r\n excuteHdPlugin(k);\r\n });\r\n }\r\n //tblInvoice.enable();\r\n //tblInvoice.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"InvoiceXmlData\"],\r\n xmlbangke: json[\"InvoiceXmlBangKe\"],\r\n shdon: json[\"shdon\"],\r\n idSigner: \"seller\",\r\n tagSign: tagSign,\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n } else {\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n }\r\n excuteHdPlugin(0);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n },\r\n ExcuteHoaDonMTT: function (lsthdon_id, tagSign) {\r\n if (tagSign == undefined) tagSign = \"NBan\";\r\n var checkGuiCQT = true;\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var ui = tableHdon.getTopParentView();\r\n webix.extend(tableHdon, webix.ProgressBar);\r\n tableHdon.disable();\r\n tableHdon.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n webix.$$('invoiceViews').enable();\r\n webix.$$('invoiceViews').hideProgress();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n lsthdon_id: lsthdon_id,\r\n type_cmd: 206,\r\n };\r\n\r\n if (!checkGuiCQT) {\r\n postData.guiCQT = \"NotSend\";\r\n }\r\n\r\n webix.extend(tableHdon, webix.ProgressBar);\r\n tableHdon.disable();\r\n ui.disable();\r\n tableHdon.showProgress();\r\n\r\n var dataPut = { data: [postData] };\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignInvoiceCertFile68\", dataPut, function (text) {\r\n var result = JSON.parse(text);\r\n var table = webix.$$(\"invoiceViews\");\r\n table.enable();\r\n ui.enable();\r\n table.hideProgress();\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n return;\r\n }\r\n table.clearAll();\r\n table.load(table.config.url);\r\n //SignMTTFileMem(lsthdon_id,cert);\r\n });\r\n\r\n return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n function SignMTTFileMem(lsthdon_id, cert) {\r\n var postData = {\r\n cert_serial: cert.cer_serial,\r\n lsthdon_id: lsthdon_id,\r\n type_cmd: '206',\r\n mltdiep: '206',\r\n };\r\n\r\n webix.extend(tableHdon, webix.ProgressBar);\r\n tableHdon.disable();\r\n ui.disable();\r\n tableHdon.showProgress();\r\n\r\n var dataPut = { data: [postData] };\r\n webix\r\n .ajax()\r\n .headers({\r\n \"Content-type\": \"application/json\"\r\n })\r\n .post(app.config.host + \"/Invoice68/SendInvoiceToCQT68\", postData, function (text) {\r\n var table = webix.$$(\"invoiceViews\");\r\n table.enable();\r\n ui.enable();\r\n table.hideProgress();\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({\r\n type: \"error\",\r\n text: res.error\r\n });\r\n } else {\r\n webix.message(\"Gửi CQT thành công!\");\r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n });\r\n\r\n return;\r\n }\r\n function SignMTTToKenHSM(idhoadon, k) {\r\n var hdon_id = idhoadon;\r\n\r\n var a = webix.ajax(app.config.host + \"/Invoice68/ExportInvoiceMTTXml?id=\" + hdon_id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, hdon_id]).then(function (results) {\r\n var json = results[0].json();\r\n var idhoadon = results[2];\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n if (json.InvoiceXmlData == \"\") {\r\n webix.message({ type: \"error\", text: \"Hóa đơn chưa có chi tiết. Vui lòng kiểm tra lại\" });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n var listcerts = results[1].json();\r\n\r\n if (listcerts.length == 0) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n xmlbangke: json.xmlbangke,\r\n hdon_id: idhoadon,\r\n // shdon: json.shdon,\r\n username: user.getCurrentUser(),\r\n type_cmd: '206',\r\n branch_code: user.getDvcsID()\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMTT\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n //var table = webix.$$(\"invoiceViews\");\r\n //table.clearAll();\r\n //table.load(table.config.url);\r\n }\r\n k++;\r\n excuteHdPlugin(k);\r\n });\r\n }\r\n //tblInvoice.enable();\r\n //tblInvoice.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: json[\"signid\"],\r\n xml: json[\"InvoiceXmlData\"],\r\n shdon: json[\"shdon\"],\r\n idSigner: json[\"seller\"],\r\n tagSign: json[\"signingTag\"],\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n }\r\n function excuteHdPlugin(k) {\r\n if (k < lsthdon_id.length) {\r\n var hdon_id = lsthdon_id[k];\r\n\r\n var a = webix.ajax(app.config.host + \"/Invoice68/ExportInvoiceXml?id=\" + hdon_id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, hdon_id]).then(function (results) {\r\n var json = results[0].json();\r\n var idhoadon = results[2];\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n if (json.InvoiceXmlData == \"\") {\r\n webix.message({ type: \"error\", text: \"Hóa đơn chưa có chi tiết. Vui lòng kiểm tra lại\" });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n var listcerts = results[1].json();\r\n\r\n if (listcerts.length == 0) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n xmlbangke: json.xmlbangke,\r\n hdon_id: idhoadon,\r\n // shdon: json.shdon,\r\n username: user.getCurrentUser(),\r\n type_cmd: 206,\r\n };\r\n\r\n parameters.guiCQT = \"NotSend\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXml\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error + json.shdon, \"error\");\r\n k++;\r\n excuteHdPlugin(k);\r\n } else {\r\n SignMTTToKenHSM(idhoadon, k);\r\n //var table = webix.$$(\"invoiceViews\");\r\n //table.clearAll();\r\n //table.load(table.config.url);\r\n }\r\n \r\n });\r\n }\r\n //tblInvoice.enable();\r\n //tblInvoice.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"InvoiceXmlData\"],\r\n xmlbangke: json[\"InvoiceXmlBangKe\"],\r\n shdon: json[\"shdon\"],\r\n idSigner: \"seller\",\r\n tagSign: tagSign,\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n } else {\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n }\r\n var tblInvoice = webix.$$(\"invoiceViews\");\r\n webix.extend(tblInvoice, webix.ProgressBar);\r\n tblInvoice.disable();\r\n tblInvoice.showProgress();\r\n ui.disable();\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n // ký HSM\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n lsthdon_id: lsthdon_id,\r\n type_cmd: 206,\r\n };\r\n\r\n if (!checkGuiCQT) {\r\n postData.guiCQT = \"NotSend\";\r\n }\r\n\r\n var url = app.config.host + \"/Invoice68/SignListInvoiceCertFile_MTT_HSM\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, postData, function (text) {\r\n var res = JSON.parse(text);\r\n\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n webix.message(\"Đã thực hiện xong\");\r\n\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n //SignMTTToKenHSM(lsthdon_id,true,false);\r\n });\r\n } else {\r\n excuteHdPlugin(0);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n tableHdon.enable();\r\n ui.enable();\r\n tableHdon.hideProgress() \r\n },\r\n TongHopHoaDonMTT: function (lsthdon_id, tagSign) {\r\n var checkGuiCQT = true;\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var ui = tableHdon.getTopParentView();\r\n webix.extend(tableHdon, webix.ProgressBar);\r\n tableHdon.disable();\r\n tableHdon.showProgress();\r\n var postData = {\r\n editmode: 1,\r\n data: [\r\n {\r\n details: $.map(lsthdon_id, function (item) {\r\n return { hdon_id: item };\r\n })\r\n }\r\n ]\r\n }\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveTongHopMTT\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var id = json[\"id\"];\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n webix.$$('invoiceViews').enable();\r\n webix.$$('invoiceViews').hideProgress();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postDataMTT = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n id: id,\r\n };\r\n\r\n webix.extend(tableHdon, webix.ProgressBar);\r\n tableHdon.disable();\r\n ui.disable();\r\n tableHdon.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignTongHopMTT\", postDataMTT, function (text) {\r\n var result = JSON.parse(text);\r\n var table = webix.$$(\"invoiceViews\");\r\n table.enable();\r\n ui.enable();\r\n table.hideProgress();\r\n table.clearAll();\r\n table.load(table.config.url);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n return;\r\n }\r\n });\r\n return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var tblInvoice = webix.$$(\"invoiceViews\");\r\n webix.extend(tblInvoice, webix.ProgressBar);\r\n tblInvoice.disable();\r\n tblInvoice.showProgress();\r\n ui.disable();\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n // ký HSM\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n id: id,\r\n type_cmd: 206,\r\n CheckHSM: resultscheckSigHSM[0].json()\r\n };\r\n\r\n if (!checkGuiCQT) {\r\n postData.guiCQT = \"NotSend\";\r\n }\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignTongHopMTT_HSM\", postData, function (text) {\r\n var res = JSON.parse(text);\r\n\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n webix.message(\"Đã thực hiện xong\");\r\n\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n tblInvoice.clearAll();\r\n tblInvoice.load(tblInvoice.config.url);\r\n return;\r\n }\r\n });\r\n\r\n } else {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlTongHopMTT?id=\" + id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b]).then(function (results) {\r\n var json = results[0].json();\r\n var idhoadon = results[2];\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n if (json.InvoiceXmlData == \"\") {\r\n webix.message({\r\n type: \"error\",\r\n text: \"Hóa đơn chưa có chi tiết. Vui lòng kiểm tra lại\"\r\n });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n var listcerts = results[1].json();\r\n\r\n if (listcerts.length == 0) {\r\n webix.message({\r\n type: \"error\",\r\n text: \"Bạn chưa được phân quyền chứng thư số\"\r\n });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({\r\n type: \"error\",\r\n text: json.error\r\n });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: id\r\n // shdon: json.shdon,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlTongHopMTT\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n //var table = webix.$$(\"invoiceViews\");\r\n //table.clearAll();\r\n //table.load(table.config.url);\r\n }\r\n var table = webix.$$(\"invoiceViews\");\r\n table.enable();\r\n ui.enable();\r\n table.hideProgress();\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n }\r\n //tblInvoice.enable();\r\n //tblInvoice.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: json[\"signid\"],\r\n xml: json[\"InvoiceXmlData\"],\r\n idSigner: json[\"seller\"],\r\n tagSign: json[\"signingTag\"],\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n shdon: 0,\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n }\r\n });\r\n }\r\n });\r\n });\r\n } else {\r\n webix.message(json.error, \"error\");\r\n tableHdon.enable();\r\n ui.enable();\r\n tableHdon.hideProgress();\r\n tableHdon.clearAll();\r\n tableHdon.load(tableHdon.config.url);\r\n }\r\n },\r\n\r\n });\r\n\r\n tableHdon.enable();\r\n ui.enable();\r\n tableHdon.hideProgress();\r\n },\r\n KyTongHopXml: function (ids) {\r\n var checkGuiCQT = true;\r\n var tblInvoice = webix.$$(\"bangtonghop\");\r\n var ui = tblInvoice.getTopParentView();\r\n // webix.extend(tblInvoice, webix.ProgressBar);\r\n // tblInvoice.disable();\r\n // tblInvoice.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n webix.$$('bangtonghop').enable();\r\n webix.$$('bangtonghop').hideProgress();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n } \r\n\r\n ids.forEach(function (id) {\r\n var postDataMTT = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n id: id,\r\n };\r\n\r\n webix.extend(tblInvoice, webix.ProgressBar);\r\n tblInvoice.disable();\r\n ui.disable();\r\n tblInvoice.showProgress(); \r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignTongHopMTT\", postDataMTT, function (text) {\r\n var result = JSON.parse(text); \r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n\r\n var table = webix.$$(\"bangtonghop\"); \r\n table.clearAll();\r\n table.load(table.config.url);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n return;\r\n }\r\n });\r\n })\r\n return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n webix.extend(tblInvoice, webix.ProgressBar);\r\n tblInvoice.disable();\r\n ui.disable();\r\n tblInvoice.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n // ký HSM\r\n ids.forEach(function (id) {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n id: id,\r\n type_cmd: 206,\r\n CheckHSM: resultscheckSigHSM[0].json()\r\n };\r\n\r\n if (!checkGuiCQT) postData.guiCQT = \"NotSend\"; \r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignTongHopMTT_HSM\", postData, function (text) {\r\n var res = JSON.parse(text); \r\n\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n webix.message(\"Đã thực hiện xong\");\r\n }\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n\r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n })\r\n \r\n } else {\r\n function excuteHdPluginMTT(k) {\r\n if (k < ids.length) {\r\n var id = ids[k];\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlTongHopMTT?id=\" + id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n \r\n webix.promise.all([a, b, id]).then(function (results) {\r\n var json = results[0].json();\r\n var idhoadon = results[2];\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n\r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n if (json.InvoiceXmlData == \"\") {\r\n webix.message({\r\n type: \"error\",\r\n text: \"Hóa đơn chưa có chi tiết. Vui lòng kiểm tra lại\"\r\n });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n\r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n var listcerts = results[1].json();\r\n\r\n if (listcerts.length == 0) {\r\n webix.message({\r\n type: \"error\",\r\n text: \"Bạn chưa được phân quyền chứng thư số\"\r\n });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n\r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(tblInvoice.config.url);\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({\r\n type: \"error\",\r\n text: json.error\r\n });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n \r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: id\r\n // shdon: json.shdon,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlTongHopMTT\", parameters, function (text) {\r\n var result = JSON.parse(text); \r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\"); \r\n } else {\r\n //var table = webix.$$(\"invoiceViews\");\r\n //table.clearAll();\r\n //table.load(table.config.url);\r\n }\r\n k++;\r\n excuteHdPluginMTT(k);\r\n });\r\n }\r\n //tblInvoice.enable();\r\n //tblInvoice.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: json[\"signid\"],\r\n xml: json[\"InvoiceXmlData\"],\r\n idSigner: json[\"seller\"],\r\n tagSign: json[\"signingTag\"],\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n shdon: 0,\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n \r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n });\r\n });\r\n } else {\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n }\r\n excuteHdPluginMTT(0);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n\r\n // tblInvoice.enable();\r\n // ui.enable();\r\n // tblInvoice.hideProgress(); \r\n },\r\n ExcuteHoaDonMTT_NotSign: function (lsthdon_id, havesign, checkGuiCQT, checkHasCode, tagSign) {\r\n if (tagSign == undefined) tagSign = \"NBan\";\r\n checkHasCode = checkHasCode || false;\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var ui = tableHdon.getTopParentView();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n webix.$$('invoiceViews').enable();\r\n webix.$$('invoiceViews').hideProgress();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n cert_serial: cert.cer_serial,\r\n lsthdon_id: lsthdon_id,\r\n type_cmd: '206',\r\n mltdiep: '206',\r\n };\r\n\r\n webix.extend(tableHdon, webix.ProgressBar);\r\n tableHdon.disable();\r\n ui.disable();\r\n tableHdon.showProgress();\r\n\r\n var dataPut = { data: [postData] };\r\n webix\r\n .ajax()\r\n .headers({\r\n \"Content-type\": \"application/json\"\r\n })\r\n .post(app.config.host + \"/Invoice68/SendInvoiceToCQT68\", postData, function (text) {\r\n var table = webix.$$(\"invoiceViews\");\r\n table.enable();\r\n ui.enable();\r\n table.hideProgress();\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({\r\n type: \"error\",\r\n text: res.error\r\n });\r\n } else {\r\n webix.message(\"Gửi CQT thành công!\");\r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n });\r\n\r\n return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var tblInvoice = webix.$$(\"invoiceViews\");\r\n webix.extend(tblInvoice, webix.ProgressBar);\r\n tblInvoice.disable();\r\n tblInvoice.showProgress();\r\n ui.disable();\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n // ký HSM\r\n var postData = {\r\n lsthdon_id: lsthdon_id,\r\n type_cmd: '206',\r\n branch_code: user.getDvcsID(),\r\n };\r\n\r\n var url = app.config.host + \"/Invoice68/SignListInvoiceCertFile_MTT_HSM\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, postData, function (text) {\r\n var res = JSON.parse(text);\r\n\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n webix.message(\"Đã thực hiện xong\");\r\n }\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n } else {\r\n function excuteHdPluginMTT(k) {\r\n if (k < lsthdon_id.length) {\r\n var hdon_id = lsthdon_id[k];\r\n\r\n var a = webix.ajax(app.config.host + \"/Invoice68/ExportInvoiceMTTXml?id=\" + hdon_id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, hdon_id]).then(function (results) {\r\n var json = results[0].json();\r\n var idhoadon = results[2];\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n if (json.InvoiceXmlData == \"\") {\r\n webix.message({ type: \"error\", text: \"Hóa đơn chưa có chi tiết. Vui lòng kiểm tra lại\" });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n var listcerts = results[1].json();\r\n\r\n if (listcerts.length == 0) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n xmlbangke: json.xmlbangke,\r\n hdon_id: idhoadon,\r\n // shdon: json.shdon,\r\n username: user.getCurrentUser(),\r\n type_cmd: '206',\r\n branch_code: user.getDvcsID()\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMTT\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n //var table = webix.$$(\"invoiceViews\");\r\n //table.clearAll();\r\n //table.load(table.config.url);\r\n }\r\n k++;\r\n excuteHdPluginMTT(k);\r\n });\r\n }\r\n //tblInvoice.enable();\r\n //tblInvoice.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: json[\"signid\"],\r\n xml: json[\"InvoiceXmlData\"],\r\n shdon: json[\"shdon\"],\r\n idSigner: json[\"seller\"],\r\n tagSign: json[\"signingTag\"],\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n } else {\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n }\r\n excuteHdPluginMTT(0);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n },\r\n ExcuteHoaDonForHasCodeAndNotHaveAnyCode: function (lsthdon_id, checkGuiCQT, checkHasCode, tagSign) {\r\n if (tagSign == undefined) tagSign = \"NBan\";\r\n checkHasCode = checkHasCode || false;\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var ui = tableHdon.getTopParentView();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n webix.$$('invoiceViews').enable();\r\n webix.$$('invoiceViews').hideProgress();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var lsCoMa = lsthdon_id[0];\r\n var lsKhongMa = lsthdon_id[1];\r\n var dsHoaDon = lsCoMa.concat(lsKhongMa);\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n lsthdon_id: dsHoaDon,\r\n };\r\n\r\n if (!checkGuiCQT) {\r\n postData.guiCQT = \"NotSend\";\r\n }\r\n\r\n webix.extend(tableHdon, webix.ProgressBar);\r\n tableHdon.disable();\r\n ui.disable();\r\n tableHdon.showProgress();\r\n var urlApi = \"\";\r\n urlApi = \"/Invoice68/SignInvoiceCertFile68ForHasCodeAndNotHaveAnyCode\";\r\n var dataPut = { data: [postData] };\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + urlApi, dataPut, function (text) {\r\n var result = JSON.parse(text);\r\n var table = webix.$$(\"invoiceViews\");\r\n table.enable();\r\n ui.enable();\r\n table.hideProgress();\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n return;\r\n }\r\n\r\n if (result.ok == true) {\r\n webix.message(\"Đã thực hiện xong\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n webix.modalbox.hide();\r\n }\r\n });\r\n\r\n return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var tblInvoice = webix.$$(\"invoiceViews\");\r\n webix.extend(tblInvoice, webix.ProgressBar);\r\n tblInvoice.disable();\r\n ui.disable();\r\n tblInvoice.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var lsCoMa = lsthdon_id[0];\r\n var lsKhongMa = lsthdon_id[1];\r\n var dsHoaDon = lsCoMa.concat(lsKhongMa);\r\n\r\n // ký HSM\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n lsthdon_id: dsHoaDon,\r\n AllHoaDon: \"All\",\r\n };\r\n\r\n if (!checkGuiCQT) {\r\n postData.guiCQT = \"NotSend\";\r\n }\r\n\r\n var url = app.config.host + \"/Invoice68/SignListInvoiceCertFile_HSM\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, postData, function (text) {\r\n var res = JSON.parse(text);\r\n\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n webix.message(\"Đã thực hiện xong\");\r\n }\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n } else {\r\n var lsCoMa = lsthdon_id[0];\r\n var lsKhongMa = lsthdon_id[1];\r\n var dsHoaDonXL = lsCoMa.concat(lsKhongMa);\r\n function excuteHdPlugin(k, dsHoaDon) {\r\n if (k < dsHoaDon.length) {\r\n // debugger;\r\n var hoadon = dsHoaDon[k];\r\n\r\n var a = webix.ajax(app.config.host + \"/Invoice68/ExportInvoiceXml?id=\" + hoadon.hdon_id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, hoadon]).then(function (results) {\r\n var json = results[0].json();\r\n var item = results[2];\r\n\r\n if (item.is_hdcma !== 0 && item.is_hdcma !== 1) {\r\n webix.message({ type: \"error\", text: \"Kiểm tra lại loại hóa đơn\" });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n if (json.InvoiceXmlData == \"\") {\r\n webix.message({ type: \"error\", text: \"Hóa đơn chưa có chi tiết. Vui lòng kiểm tra lại\" });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n var listcerts = results[1].json();\r\n\r\n if (listcerts.length == 0) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n tblInvoice.enable();\r\n tblInvoice.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n xmlbangke: json.xmlbangke,\r\n hdon_id: item.hdon_id,\r\n // shdon: json.shdon,\r\n username: user.getCurrentUser(),\r\n type_cmd: item.is_hdcma === 1 ? 200 : 203,\r\n };\r\n\r\n if (!checkGuiCQT) {\r\n parameters.guiCQT = \"NotSend\";\r\n }\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXml\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n //var table = webix.$$(\"invoiceViews\");\r\n //table.clearAll();\r\n //table.load(table.config.url);\r\n }\r\n k++;\r\n excuteHdPlugin(k, dsHoaDon);\r\n });\r\n }\r\n //tblInvoice.enable();\r\n //tblInvoice.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"InvoiceXmlData\"],\r\n xmlbangke: json[\"InvoiceXmlBangKe\"],\r\n shdon: json[\"shdon\"],\r\n idSigner: \"seller\",\r\n tagSign: tagSign,\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n } else {\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n }\r\n excuteHdPlugin(0, dsHoaDonXL);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n },\r\n CommonOnclickTaskOfHD: function (self) {\r\n if ($$(\"kyhieu_id\") != undefined) {\r\n if ($$(\"kyhieu_id\").getPopup().getList().serialize().length > 0 ? true : false) self.callEvent(\"onClick\");\r\n else webix.message(\"Không tồn tại ký hiệu!\", \"error\");\r\n } else {\r\n webix.message(\"Không tồn tại ký hiệu!\", \"error\");\r\n }\r\n },\r\n CommonOnclickTaskOfHDTT32: function (self) {\r\n self.callEvent(\"onClick\");\r\n },\r\n\r\n CreatItemFromData: function (field, tab) {\r\n var format = field.format;\r\n var isFmNumber = false;\r\n\r\n var formatNumberDetails = field.format;\r\n if (formatNumberDetails !== undefined && formatNumberDetails !== \"\" && formatNumberDetails !== null) {\r\n var formatNumberArray = formatNumberDetails.split(\":\");\r\n if (formatNumberArray[0] === \"fmNumber\") isFmNumber = true;\r\n }\r\n\r\n // field.format = isFmNumber === true ? null : format;\r\n\r\n var subCol = {\r\n id: field.column_name,\r\n header: field.caption != null ? _(field.caption) : _(field.column_name),\r\n editor: field.type_editor,\r\n hidden: field.hidden,\r\n value_change: field.value_change,\r\n isFmNumber: isFmNumber,\r\n formatOriginal: field.format,\r\n };\r\n\r\n if (field.read_only == \"C\" || field.type_editor == \"checkbox\") {\r\n delete subCol.editor;\r\n }\r\n\r\n if (field.type_editor == \"checkbox\") {\r\n subCol.template = \"{common.checkbox()}\";\r\n subCol.checkValue = true;\r\n subCol.uncheckValue = false;\r\n }\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n subCol.format = function (text) {\r\n if (text != null && text != undefined) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n };\r\n }\r\n\r\n if (field.column_type == \"numeric\") {\r\n subCol.css = { \"text-align\": \"right\" };\r\n subCol.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: field.data_decimal,\r\n });\r\n\r\n if (field.type_editor == \"autonumeric\") {\r\n if (field.data_decimal >= 0) {\r\n var decimal = Array(field.data_decimal + 1).join(\"9\");\r\n\r\n subCol.numericConfig = {\r\n //maximumValue: Number(\"999999999999.\" + decimal),\r\n //minValue: Number(\"-999999999999.\" + decimal),\r\n decimalPlaces: field.data_decimal,\r\n };\r\n }\r\n }\r\n // if (field.data_decimal === \"fmNumber\") subCol.format = fmNumber;\r\n }\r\n\r\n if (field.column_width == null) {\r\n subCol.fillspace = true;\r\n } else {\r\n subCol.width = field.column_width;\r\n }\r\n\r\n if (field.type_editor == \"combo\" || field.type_editor == \"multiselect\") {\r\n if (field.ref_id !== undefined && field.ref_id !== null && field.ref_id !== \"\") {\r\n subCol.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n subCol.optionslist = true;\r\n } else {\r\n subCol.options = JSON.parse(field.list_column);\r\n subCol.value = \"1\";\r\n }\r\n }\r\n webix.editors.$popup = {\r\n date: {\r\n view: \"popup\",\r\n body: { view: \"calendar\", timepicker: true, icons: true },\r\n },\r\n };\r\n\r\n if (field.type_editor == \"datepicker\") {\r\n subCol.editor = \"date\";\r\n subCol.format = function (text) {\r\n if (text != null && text != undefined) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n };\r\n }\r\n\r\n if (field.type_editor == \"treesuggest\") {\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n var popup = webix.ui({\r\n view: \"treesuggest\",\r\n body: {\r\n columns: listColumns,\r\n refid: field.ref_id,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataByReferencesId?id=\" + view.config.refid;\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n filterMode: {\r\n level: false,\r\n showSubItems: false,\r\n },\r\n },\r\n });\r\n\r\n subCol.popup = popup;\r\n subCol.editor = \"combo\";\r\n }\r\n\r\n if (field.type_editor == \"gridcombo\") {\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n var popup = webix.ui({\r\n view: \"gridsuggest\",\r\n textValue: field.display_field,\r\n body: {\r\n columns: listColumns,\r\n refid: field.ref_id,\r\n textValue: field.display_field,\r\n tableId: \"edit_\" + tab.table_name,\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id,\r\n },\r\n });\r\n\r\n subCol.popup = popup;\r\n subCol.editor = \"combo\";\r\n }\r\n if (field.type_editor == \"search\") {\r\n subCol.onSearchIconClick = function (e) {\r\n var form = $$(this.getFormView());\r\n\r\n var field_express = this.config.fieldExpression;\r\n var text = this.getValue();\r\n var datapost = { masothue: text };\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/GetInfoByMST\", datapost, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n //console.log(JSON.stringify(json));\r\n form.setValues(json);\r\n } else {\r\n // nếu không tồn tại mã số thuế phải xóa địa chỉ + tên cty ở đây\r\n webix.message(json.error, \"error\", 2000);\r\n }\r\n });\r\n };\r\n }\r\n if (field.type_editor == \"gridsuggest\") {\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id.toUpperCase());\r\n }\r\n\r\n subCol.editor = \"textsearch\";\r\n subCol.tableId = \"edit_\" + tab.table_name;\r\n subCol.onIconButtonClick = function (e) {\r\n var tableId = this.getAttribute(\"tableId\");\r\n var table = $$(tableId);\r\n tableShowEditWindow(table, 1);\r\n };\r\n\r\n subCol.suggest = {\r\n view: \"gridsuggest\",\r\n value_suggest: field.value_suggest,\r\n fieldExpression: field.field_expression,\r\n displayField: field.display_field,\r\n tableId: \"edit_\" + tab.table_name,\r\n columnName: field.column_name,\r\n body: {\r\n columns: listColumns,\r\n refid: field.ref_id,\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1 && field.column_name != \"tlkthu\") return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataByReferencesId?id=\" + refid;\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n if (this.config.fieldExpression != null) {\r\n var table = $$(\"hoadon68_chitiet\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n var fields = this.config.fieldExpression.split(\";\");\r\n\r\n for (var i = 0; i < fields.length; i++) {\r\n var field = fields[i].replace(\"{\", \"\").replace(\"}\", \"\");\r\n var array = field.split(\":\");\r\n\r\n selectedItem[array[1]] = obj[array[0]];\r\n }\r\n\r\n table.updateItem(selectedItem.id, selectedItem);\r\n }\r\n\r\n if (this.config.value_suggest != null) {\r\n var fn = Function(\"obj\", \"id\", this.config.value_suggest);\r\n fn(obj, this.config.id);\r\n }\r\n },\r\n },\r\n };\r\n }\r\n return subCol;\r\n },\r\n\r\n //FormMater Tạo item form trên trang từ data\r\n CreatItemMaterFromData: function (field, windowno) {\r\n var timeStamp = Date.now();\r\n var item = {\r\n view: field.type_editor,\r\n resizeColumn: true,\r\n //keepViews: true,\r\n name: field.column_name,\r\n label: _(field.caption),\r\n id: field.column_name,\r\n width: field.width,\r\n labelPosition: field.label_position,\r\n labelWidth: field.label_width,\r\n format: field.format,\r\n value_change: field.value_change,\r\n fieldExpression: field.field_expression,\r\n data_width: field.data_width,\r\n column_type: field.column_type,\r\n css: field.css,\r\n attributes: {},\r\n on: {},\r\n hidden: field.hidden,\r\n placeholder: field.placeholder,\r\n };\r\n\r\n var formatNumberMaster = item.format;\r\n var formatdvtt = false;\r\n if (formatNumberMaster !== undefined && formatNumberMaster !== \"\" && formatNumberMaster !== null) {\r\n var formatNumberArray = formatNumberMaster.split(\":\");\r\n if (formatNumberArray[0] === \"fmNumber\") {\r\n item.format = numberFormat(field.column_name);\r\n formatdvtt = true;\r\n }\r\n }\r\n if ((field.column_type == \"numeric\" && formatdvtt == false) || field.column_name == \"tgtkhac\" || field.column_name == \"tgtkcthue\") {\r\n var decimal = \"\";\r\n if (field.data_decimal >= 0) {\r\n for (var i = 0; i < parseInt(field.data_decimal); i++) {\r\n decimal += \"0\";\r\n }\r\n }\r\n item.format = \"1,111.\" + decimal;\r\n item.attributes.onClick = \"this.select();\";\r\n }\r\n\r\n if (field.type_editor == \"password\") {\r\n item.view = \"text\";\r\n item.type = \"password\";\r\n }\r\n\r\n if (item.data_width != null) {\r\n if (item.data_width != 0) {\r\n item.attributes.maxlength = item.data_width;\r\n //style: \"text-transform: uppercase;\"\r\n }\r\n }\r\n\r\n if (field.styleinput != null && field.styleinput != \"\") {\r\n item.attributes.style = field.styleinput;\r\n }\r\n\r\n if (field.height != null) {\r\n if (field.height != 0) {\r\n item.height = field.height;\r\n }\r\n }\r\n\r\n if (field.caption != null) {\r\n item.label = _(field.caption);\r\n }\r\n\r\n if (field.readonly == \"C\") {\r\n item.readonly = true;\r\n }\r\n if (field.read_only == \"C\") {\r\n item.readonly = true;\r\n }\r\n if (item.view == \"combo\") {\r\n item.suggest = {\r\n body: {\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id,\r\n },\r\n };\r\n //item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n\r\n if (item.view == \"select\") {\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n if (item.view == \"checkbox\") {\r\n if (field.label_position == \"right\") {\r\n item.labelRight = _(field.column_name);\r\n item.label = \"\";\r\n }\r\n\r\n if (field.column_type == \"char\") {\r\n item.checkValue = \"C\";\r\n item.uncheckValue = \"K\";\r\n }\r\n\r\n if (field.column_type == \"tinyint\") {\r\n item.checkValue = \"1\";\r\n item.uncheckValue = \"0\";\r\n }\r\n\r\n if (field.column_type == \"bit\") {\r\n item.checkValue = true;\r\n item.uncheckValue = false;\r\n }\r\n }\r\n\r\n if (item.view == \"autonumeric\" || field.column_type == \"numeric\") {\r\n if (windowno != undefined && (windowno == \"WIN00791\" || windowno == \"WIN00792\" || windowno == \"WIN00793\")) {\r\n item.inputAlign = \"left\";\r\n } else {\r\n item.inputAlign = \"right\";\r\n }\r\n item.decimalPlaces = field.data_decimal;\r\n }\r\n\r\n if (field.valid_rule != null) {\r\n var rule = field.valid_rule;\r\n\r\n if (rule == \"isNotEmpty\") {\r\n item.required = true;\r\n item.invalidMessage = item.label + \" không được bỏ trống\";\r\n item.validate = webix.rules.isNotEmpty;\r\n } else if (rule == \"isSpecialCharacter\") {\r\n item.required = true;\r\n item.invalidMessage = \"Không bỏ trống hoặc ký tự không hợp lệ (a-z,A-Z,0-9)\";\r\n item.validate = webix.rules.isSpecialCharacter;\r\n } else if (rule == \"isEmail\") {\r\n item.invalidMessage = item.label + \" không hợp lệ\";\r\n item.validate = webix.rules.isEmail;\r\n } else if (rule == \"isTaxCode\") {\r\n item.invalidMessage = item.label + \" không hợp lệ\";\r\n item.validate = webix.rules.isTaxCode;\r\n } else if (rule == \"isPositiveNumbers\") {\r\n item.invalidMessage = item.label + \" không hợp lệ\";\r\n item.validate = webix.rules.isPositiveNumbers;\r\n } else {\r\n if (rule.trim() !== \"\") {\r\n item.validate = Function(\"value\", field.valid_rule);\r\n item.invalidMessage = item.label + \" không hợp lệ\";\r\n }\r\n if (item.id === \"stknmua\" || item.id === \"stknban\") {\r\n item.invalidMessage = item.label + \" không được vượt quá 30 ký tự\";\r\n }\r\n if (item.id === \"sdtnmua\") {\r\n item.invalidMessage = item.label + \" không được vượt quá 20 ký tự\";\r\n }\r\n if (item.id === \"email\") {\r\n item.invalidMessage = item.label + \" không đúng định dạng hoăc vượt quá 50 ký tự\";\r\n }\r\n if (item.id === \"dchi\") {\r\n item.invalidMessage = item.label + \" không hợp lệ hoặc vượt quá 400 ký tự\";\r\n }\r\n }\r\n }\r\n\r\n if (item.view == \"treesuggest\") {\r\n //item.REF_ID = field.REF_ID.toString();\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n item.view = \"combo\";\r\n item.options = {\r\n view: \"treesuggest\",\r\n textValue: field.display_field,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataByReferencesId?id=\" + view.config.refid;\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n body: {\r\n columns: listColumns,\r\n refid: field.ref_id,\r\n filterMode: {\r\n level: false,\r\n showSubItems: false,\r\n },\r\n },\r\n };\r\n\r\n item.on.onKeyPress = function (code, e) {\r\n if (e.code == \"F4\") {\r\n alert(\"Moi\");\r\n }\r\n };\r\n }\r\n\r\n if (item.view == \"gridcombo\") {\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n item.view = \"combo\";\r\n item.options = {\r\n view: \"gridsuggest\",\r\n template: field.display_field,\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id,\r\n body: {\r\n columns: listColumns,\r\n refid: field.REF_ID,\r\n textValue: field.display_field,\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n var master = $$(this.config.master);\r\n if (master.config.fieldExpression != null) {\r\n var win = master.getTopParentView();\r\n var form = win.getChildViews()[1];\r\n //console.log(form);\r\n var parentItem = form.getValues();\r\n //console.log(parentItem);\r\n var fields = master.config.fieldExpression.split(\";\");\r\n\r\n for (var i = 0; i < fields.length; i++) {\r\n var field = fields[i].replace(\"{\", \"\").replace(\"}\", \"\");\r\n var array = field.split(\":\");\r\n //console.log(array);\r\n parentItem[array[1]] = obj[array[0]];\r\n }\r\n\r\n form.setValues(parentItem);\r\n }\r\n\r\n if (this.config.value_suggest != null) {\r\n var fn = Function(\"obj\", \"id\", this.config.value_suggest);\r\n fn(obj, this.config.id);\r\n }\r\n },\r\n },\r\n };\r\n\r\n item.on.onKeyPress = function (code, e) {\r\n if (e.code == \"F4\") {\r\n alert(\"Moi\");\r\n }\r\n };\r\n }\r\n if (item.view == \"search\") {\r\n item.on.onSearchIconClick = function (e) {\r\n var form = $$(this.getFormView());\r\n\r\n //get value của form hiện tại để đổi giá trị\r\n var mst = this.getValue();\r\n // window.location.href = \"http://tracuunnt.gdt.gov.vn/tcnnt/mstdn.jsp?mst=\" + mst;\r\n window.open(\"http://tracuunnt.gdt.gov.vn/tcnnt/mstdn.jsp?mst=\" + mst);\r\n };\r\n }\r\n\r\n if (item.view == \"gridsuggest\") {\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n item.view = \"search\";\r\n item.icon = \"mdi mdi-plus\";\r\n item.on.onSearchIconClick = function (e) {\r\n showEditWindow(this, 1);\r\n };\r\n item.suggest = {\r\n view: \"gridsuggest\",\r\n autoheight: false,\r\n value_suggest: field.value_suggest,\r\n textValue: field.display_field,\r\n body: {\r\n columns: listColumns,\r\n refid: field.ref_id,\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n textValue: field.display_field,\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1 && field.column_name != \"tlkthu\") return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataByReferencesId?id=\" + refid;\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n //console.log(obj);\r\n var master = $$(this.config.master);\r\n if (master.config.fieldExpression != null) {\r\n var win = master.getTopParentView();\r\n var form = win.getChildViews()[1];\r\n //console.log(form);\r\n var parentItem = form.getValues();\r\n //console.log(parentItem);\r\n var fields = master.config.fieldExpression.split(\";\");\r\n\r\n for (var i = 0; i < fields.length; i++) {\r\n var field = fields[i].replace(\"{\", \"\").replace(\"}\", \"\");\r\n var array = field.split(\":\");\r\n //console.log(array);\r\n parentItem[array[1]] = obj[array[0]];\r\n }\r\n\r\n form.setValues(parentItem);\r\n }\r\n\r\n if (this.config.value_suggest != null) {\r\n var fn = Function(\"obj\", \"id\", this.config.value_suggest);\r\n fn(obj, this.config.id);\r\n }\r\n },\r\n },\r\n };\r\n\r\n item.on.onKeyPress = function (code, e) {\r\n if (e.code == \"F2\") {\r\n var suggest = $$(this.config.suggest);\r\n var refid = suggest.config.body.refid;\r\n\r\n suggest.hide();\r\n var sql = {\r\n command: \"SYS004\",\r\n parameter: {\r\n refid: refid,\r\n },\r\n };\r\n //var sql = \"SELECT a.*,b.window_id as WINDOWNO FROM #SCHEMA_NAME#.wb_references a INNER JOIN #SCHEMA_NAME#.wb_window b ON a.wb_window_id=b.wb_window_id WHERE a.wb_references_id='\" + refid + \"'\";\r\n //var url = app.config.host + \"/System/ExecuteQuery?sql=\" + sql;\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n var win = this.getTopParentView();\r\n var form = win.getChildViews()[1];\r\n\r\n var editorId = this.config.id;\r\n var formId = form.config.id;\r\n\r\n var a = webix.ajax().post(url, sql);\r\n var b = this.config.suggest;\r\n var c = this.config.id;\r\n var d = this.config.fieldExpression;\r\n var e = editorId;\r\n var f = formId;\r\n\r\n webix.promise.all([a, b, c, d, e, f]).then(function (results) {\r\n var res_a = results[0].json();\r\n\r\n var suggest = $$(results[1]);\r\n\r\n suggest.hide();\r\n\r\n var url = app.config.host + \"/System/GetConfigWinByNo?id=\" + res_a[0][\"windowno\"];\r\n\r\n var ajax = webix.ajax();\r\n ajax.master = {\r\n searchId: results[2],\r\n fieldExpression: d,\r\n valueField: res_a[0][\"value_field\"],\r\n formId: f,\r\n editorId: e,\r\n };\r\n\r\n ajax.get(url, function (text) {\r\n var windowconfig = JSON.parse(text);\r\n var txtSearch = $$(this.searchId);\r\n\r\n var win = txtSearch.$scope.ui(selectwindow.$ui);\r\n\r\n win.config.valueField = this.valueField;\r\n win.config.fieldExpression = this.fieldExpression;\r\n win.config.formId = this.formId;\r\n win.config.editorId = this.editorId;\r\n\r\n selectwindow.initUI(windowconfig);\r\n\r\n win.getHead().setHTML(windowconfig.data[0].name);\r\n win.show();\r\n });\r\n });\r\n\r\n var win = this.$scope.ui(selectwindow.$ui);\r\n win.show();\r\n }\r\n };\r\n }\r\n\r\n if (item.value_change != null || item.css != null || item.validate != null) {\r\n item.on.onChange = function (newv, oldv) {\r\n // if (this.config.validate != null) {\r\n // this.validate();\r\n // }\r\n\r\n if (this.config.css != null) {\r\n if (this.config.css == \"mcls_uppercase\" && newv !== undefined && oldv !== undefined) {\r\n if (newv.toUpperCase() != oldv.toUpperCase()) {\r\n webix.$$(this.config.id).setValue(newv.toUpperCase());\r\n }\r\n }\r\n }\r\n if (this.config.value_change != null) {\r\n var fn = Function(\"newv\", \"oldv\", \"id\", \"timeStamp\", this.config.value_change);\r\n fn(newv, oldv, this.config.id, timeStamp);\r\n }\r\n };\r\n }\r\n if (item.css === \"txtTongtien\") item.label = \"\";\r\n return item;\r\n },\r\n\r\n ExeCuteCheckReadCurencyTV: function (checkReadTV) {\r\n if (checkReadTV != 0) {\r\n // if ($$(\"docngoaitetv\") != null) $$(\"docngoaitetv\").setValue(1);\r\n }\r\n\r\n var total_amount = $$(\"tgtttbso_last\").getValue();\r\n var type_curency = \"VND\";\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if ($$(\"dvtte\") != null) {\r\n var type_curency = $$(\"dvtte\").getValue();\r\n }\r\n if (\r\n total_amount !== undefined &&\r\n total_amount !== null &&\r\n total_amount.toString() !== \" \" &&\r\n total_amount.toString() !== \"\" &&\r\n total_amount.toString() !== \"0\" &&\r\n CheckKhacNull(checkReadTV) &&\r\n checkReadTV.toString() !== \"true\"\r\n ) {\r\n var url = \"\";\r\n if (type_curency == \"VND\") {\r\n url = app.config.host + \"/Invoice68/Amount_ToWord?number=\" + total_amount + \"&type_amount=\" + type_curency;\r\n } else if (type_curency == \"JPY\") {\r\n url = app.config.host + \"/Invoice68/Amount_ToWord_JPY?number=\" + total_amount + \"&checkReadTV=\" + checkReadTV;\r\n }else {\r\n url = app.config.host + \"/Invoice68/Amount_ToWord_New?number=\" + total_amount + \"&checkReadTV=\" + checkReadTV;\r\n }\r\n\r\n var xhr = webix.ajax().sync().get(url);\r\n\r\n var c_result = JSON.parse(xhr.responseText);\r\n if (type_curency == \"GBP\") {\r\n c_result.data = c_result.data.replace('đô la Mỹ','bảng Anh').replace('dollars','pounds');\r\n } else if (type_curency == \"SGD\") {\r\n c_result.data = c_result.data.replace('Mỹ','Singapore').replace('dollars','Singapore dollars');\r\n } else if (type_curency == \"JPY\") {\r\n c_result.data = c_result.data.replace('đô la Mỹ','yên Nhật');\r\n }\r\n if (item != undefined) {\r\n if (item.tthdon == 21) {\r\n c_result.data = c_result.data.replace('Âm','Điều chỉnh giảm');\r\n }\r\n }\r\n\r\n if (c_result.error == undefined || c_result.error == null) {\r\n if (c_result.data != undefined && c_result.data != null) {\r\n $$(\"tgtttbchu\").setValue(c_result.data);\r\n }\r\n }\r\n } else {\r\n if (type_curency === \"USD\") {\r\n if (Number(total_amount) == 0) {\r\n if (checkReadTV == 0) {\r\n $$(\"tgtttbchu\").setValue(\"Zero dollars.\");\r\n } else {\r\n $$(\"tgtttbchu\").setValue(\"Không đô la Mỹ.\");\r\n }\r\n } else {\r\n checkReadTV = \"\" || \" \" || undefined || null ? 0 : checkReadTV;\r\n url = app.config.host + \"/Invoice68/Amount_ToWord_New?number=\" + total_amount + \"&checkReadTV=\" + checkReadTV;\r\n var xhr = webix.ajax().sync().get(url);\r\n\r\n var c_result = JSON.parse(xhr.responseText);\r\n\r\n if (c_result.error == undefined || c_result.error == null) {\r\n if (c_result.data != undefined && c_result.data != null) {\r\n $$(\"tgtttbchu\").setValue(c_result.data);\r\n }\r\n }\r\n }\r\n } else if (type_curency === \"GBP\") {\r\n if (Number(total_amount) == 0) {\r\n if (checkReadTV == 0) {\r\n $$(\"tgtttbchu\").setValue(\"Zero pounds.\");\r\n } else {\r\n $$(\"tgtttbchu\").setValue(\"Không bảng Anh.\");\r\n }\r\n } else {\r\n checkReadTV = \"\" || \" \" || undefined || null ? 0 : checkReadTV;\r\n url = app.config.host + \"/Invoice68/Amount_ToWord_New?number=\" + total_amount + \"&checkReadTV=\" + checkReadTV;\r\n var xhr = webix.ajax().sync().get(url);\r\n\r\n var c_result = JSON.parse(xhr.responseText);\r\n\r\n c_result.data = c_result.data.replace('đô la Mỹ','bảng Anh').replace('dollars','pounds');\r\n\r\n if (c_result.error == undefined || c_result.error == null) {\r\n if (c_result.data != undefined && c_result.data != null) {\r\n $$(\"tgtttbchu\").setValue(c_result.data);\r\n }\r\n }\r\n }\r\n } else if (type_curency === \"JPY\") {\r\n if (Number(total_amount) == 0) {\r\n if (checkReadTV == 0) {\r\n $$(\"tgtttbchu\").setValue(\"平和がない\");\r\n } else {\r\n $$(\"tgtttbchu\").setValue(\"Không yên Nhật.\");\r\n }\r\n } else {\r\n checkReadTV = \"\" || \" \" || undefined || null ? 0 : checkReadTV;\r\n url = app.config.host + \"/Invoice68/Amount_ToWord_JPY?number=\" + total_amount + \"&checkReadTV=\" + checkReadTV;\r\n var xhr = webix.ajax().sync().get(url);\r\n\r\n var c_result = JSON.parse(xhr.responseText);\r\n\r\n c_result.data = c_result.data.replace('đô la Mỹ','yên Nhật');\r\n\r\n if (c_result.error == undefined || c_result.error == null) {\r\n if (c_result.data != undefined && c_result.data != null) {\r\n $$(\"tgtttbchu\").setValue(c_result.data);\r\n }\r\n }\r\n }\r\n } else if (type_curency === \"SGD\") {\r\n if (Number(total_amount) == 0) {\r\n if (checkReadTV == 0) {\r\n $$(\"tgtttbchu\").setValue(\"Zero Singapore dollar.\");\r\n } else {\r\n $$(\"tgtttbchu\").setValue(\"Không đô la Singapore.\");\r\n }\r\n } else {\r\n checkReadTV = \"\" || \" \" || undefined || null ? 0 : checkReadTV;\r\n url = app.config.host + \"/Invoice68/Amount_ToWord_New?number=\" + total_amount + \"&checkReadTV=\" + checkReadTV;\r\n var xhr = webix.ajax().sync().get(url);\r\n\r\n var c_result = JSON.parse(xhr.responseText);\r\n\r\n c_result.data = c_result.data.replace('Mỹ','Singapore').replace('dollars','Singapore dollars');\r\n\r\n if (c_result.error == undefined || c_result.error == null) {\r\n if (c_result.data != undefined && c_result.data != null) {\r\n $$(\"tgtttbchu\").setValue(c_result.data);\r\n }\r\n }\r\n }\r\n } else {\r\n if (Number(total_amount) == 0) {\r\n $$(\"tgtttbchu\").setValue(\"Không đồng.\");\r\n } else {\r\n url = app.config.host + \"/Invoice68/Amount_ToWord?number=\" + total_amount + \"&type_amount=\" + type_curency;\r\n var xhr = webix.ajax().sync().get(url);\r\n\r\n var c_result = JSON.parse(xhr.responseText);\r\n\r\n if (c_result.error == undefined || c_result.error == null) {\r\n if (c_result.data != undefined && c_result.data != null) {\r\n $$(\"tgtttbchu\").setValue(c_result.data);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n CanhBaoTinhTien: function () {\r\n var tong_tien_all = 0;\r\n var tong_tien = 0;\r\n var canh_bao = \"\";\r\n var khieu =\"\";\r\n var tthdon = \"\";\r\n var lech = 0;\r\n var lech2 = 0;\r\n var table = $$(\"hoadon68_chitiet\");\r\n var table_t = webix.$$(\"invoiceViews\");\r\n var item = table_t.getSelectedItem();\r\n if (item != undefined) {\r\n khieu = item.khieu;\r\n tthdon = item.tthdon;\r\n }\r\n if ($$(\"tudongtinhtien\") !== undefined && $$(\"tudongtinhtien\").isVisible()) {\r\n if ($$(\"tudongtinhtien\").getValue()==true){\r\n $$(\"lblCanhbao\").hide();\r\n return;\r\n }\r\n }\r\n if (table !== undefined) {\r\n var data = table.serialize();\r\n data.forEach(function (entry) {\r\n if (entry.kmai && (entry.kmai.toString() === \"1\" || entry.kmai.toString() === \"3\")) {\r\n if (entry.kmai.toString() === \"1\") {\r\n tong_tien_all += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else {\r\n tong_tien_all -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n }\r\n });\r\n\r\n if ($$(\"tgtttbso\") !== undefined && $$(\"tgtttbso\").isVisible()) {\r\n var tgtttbso = Number($$(\"tgtttbso\").getValue());\r\n var decimalDigits = 0;\r\n if (tgtttbso.toString().includes(\".\")) {\r\n var parts = tgtttbso.toString().split(\".\");\r\n decimalDigits = parts[1].length;\r\n }\r\n if(tgtttbso !== tong_tien_all)\r\n {\r\n lech = Math.abs(tgtttbso - tong_tien_all.toFixed(decimalDigits));\r\n }\r\n }\r\n }\r\n var tong_tien = 0;\r\n if ($$(\"tgtttbso\") !== undefined && $$(\"tgtttbso\").isVisible()) {\r\n if ($$(\"tgtttbso\").getValue() != null) tong_tien += Number($$(\"tgtttbso\").getValue());\r\n } else {\r\n tong_tien += tong_tien_all;\r\n }\r\n if ($$(\"tgtphi\") !== undefined) {\r\n if ($$(\"tgtphi\").getValue() != null) tong_tien += Number($$(\"tgtphi\").getValue());\r\n }\r\n if ($$(\"tgtkhac\") !== undefined) {\r\n if ($$(\"tgtkhac\").getValue() != null) tong_tien -= Number($$(\"tgtkhac\").getValue());\r\n }\r\n if ($$(\"tgtkcthue\") !== undefined) {\r\n if ($$(\"tgtkcthue\").getValue() != null) tong_tien -= Number($$(\"tgtkcthue\").getValue());\r\n }\r\n if ($$(\"tgtttbso_last\") !== undefined && $$(\"tgtttbso_last\").isVisible()){\r\n var tgtttbso_last = Number($$(\"tgtttbso_last\").getValue());\r\n var decimalDigits = 0;\r\n if (tgtttbso_last.toString().includes(\".\")) {\r\n var parts = tgtttbso_last.toString().split(\".\");\r\n decimalDigits = parts[1].length;\r\n }\r\n if( tgtttbso_last !== tong_tien)\r\n {\r\n lech2 = Math.abs(tgtttbso_last - tong_tien.toFixed(decimalDigits));\r\n }\r\n }\r\n if ( lech <= 0 && lech2 <= 0){\r\n //$$(\"lblCanhbao\").type = 0;\r\n $$(\"lblCanhbao\").hide();\r\n return;\r\n } else {\r\n /*if (lech > 100 || lech2 > 100) {\r\n $$(\"lblCanhbao\").type = 1;\r\n } else {\r\n $$(\"lblCanhbao\").type = 0;\r\n }*/\r\n if (lech > 0 && lech2 > 0) {\r\n canh_bao = \"Cảnh báo: Trường tổng tiền sau thuế tính lệch \" + lech + \" và trường thành tiền tính lệch \" + lech2 + \" \"+ $$(\"dvtte\").getValue();\r\n $$(\"lblCanhbao\").setValue(canh_bao);\r\n } else if (lech > 0) {\r\n canh_bao = \"Cảnh báo: Trường tổng tiền sau thuế tính lệch \" + lech + \" \" + $$(\"dvtte\").getValue();\r\n $$(\"lblCanhbao\").setValue(canh_bao);\r\n }\r\n else if (lech2 > 0) {\r\n canh_bao = \"Cảnh báo: Trường thành tiền tính lệch \" + lech2 + \" \" + $$(\"dvtte\").getValue();\r\n $$(\"lblCanhbao\").setValue(canh_bao);\r\n }\r\n $$(\"lblCanhbao\").show();\r\n return\r\n }\r\n },\r\n GetBienLaiChon: function () {\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var datafrmAll = tableHdon.serialize();\r\n // get list được chọn\r\n var lsthdon_id = [];\r\n\r\n var lstDataChoose = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true;\r\n });\r\n\r\n if (lstDataChoose.length == 0) {\r\n webix.message(\"Vui lòng chọn biên lai để xử lý!\", \"error\");\r\n }\r\n return lstDataChoose;\r\n },\r\n GetHoaDonChon: function () {\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var datafrmAll = tableHdon.serialize();\r\n // get list được chọn\r\n var lsthdon_id = [];\r\n\r\n var lstDataChoose = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true;\r\n });\r\n\r\n if (lstDataChoose.length == 0) {\r\n webix.message(\"Vui lòng chọn hóa đơn để xử lý!\", \"error\");\r\n }\r\n return lstDataChoose;\r\n },\r\n GetHoaDonChonOfTableId: function (params) {\r\n var tableHdon = webix.$$(params.id);\r\n var datafrmAll = tableHdon.serialize();\r\n // get list được chọn\r\n var lsthdon_id = [];\r\n\r\n var lstDataChoose = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true;\r\n });\r\n\r\n if (lstDataChoose.length == 0) {\r\n webix.message(\"Vui lòng chọn hóa đơn để xử lý!\", \"error\");\r\n }\r\n return lstDataChoose;\r\n },\r\n ExcuteShowPopupNotifyErrorInvoice: function () {\r\n require([\"views/forms/68_huyhoadon\", \"app\"], function (huyhoadon, app) {\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item.tthdon == 11 || item.tthdon == 17) {\r\n webix.message(\"Hóa đơn đã điều chỉnh không thể thực hiện chức năng này\", \"error\");\r\n return;\r\n }\r\n\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var cungshd = true;\r\n for (var k = 1; k <= data.length - 1; k++) {\r\n if (data[k][\"stbao\"] !== data[0][\"stbao\"]) {\r\n cungshd = false;\r\n break;\r\n }\r\n }\r\n if (cungshd === true) {\r\n var loai = 1;\r\n if (data[0][\"stbao\"] !== null) loai = 2;\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai == \"Chờ gửi\" || data[i].tthai == \"Chờ ký\" || data[i].tthai == \"Đã ký\") {\r\n webix.message(\"Hóa đơn chưa gửi không thể thông báo sai sót\", \"error\");\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n return;\r\n }\r\n if (data[i].ladhddt == undefined) {\r\n data[i].ladhddt = \"1\";\r\n }\r\n if (data[i].tctbao == undefined) {\r\n data[i].tctbao = \"1\";\r\n }\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n var tongquat = {\r\n so: data[0].stbao,\r\n ntbccqt: data[0].ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n data.forEach(function (item) {\r\n var put = {\r\n mcqtcap: item.mccqthue,\r\n khieu: item.khieu_temp,\r\n shdon: item.shdon_temp,\r\n ngay: item.nlap_temp,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.hdon_id_old,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n //this.hide();\r\n win.show();\r\n });\r\n } else {\r\n webix.message(\"Các hóa đơn chọn phải có số thông báo giống nhau\", \"error\");\r\n }\r\n } else {\r\n var loai = 1;\r\n if (item[\"stbao\"] !== null) loai = 2;\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\" || item.tthai == \"Đã ký\") {\r\n webix.message(\"Hóa đơn chưa gửi không thể thông báo sai sót\", \"error\");\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n return;\r\n }\r\n\r\n if (item.ladhddt == undefined) {\r\n item[\"ladhddt\"] = \"1\";\r\n }\r\n if (item.tctbao == undefined) {\r\n item[\"tctbao\"] = \"1\";\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n var tongquat = {\r\n so: item.stbao,\r\n ntbccqt: item.ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon_temp,\r\n ngay: item.nlap_temp,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.hdon_id_old,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n\r\n //this.hide();\r\n win.show();\r\n }\r\n });\r\n },\r\n ExcuteReplaceInvoice: function (kyHieuHoaDon) {\r\n require([\"views/forms/formhoadon78\", \"views/forms/formhoadoncode78\", \"views/forms/formhoadoncode78_mtt\", \"app\"], function (invoiceForms, invoiceFormsCode, invoiceFormsCodeMTT, app) {\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n \"tgtkcthue\",\r\n \"tgtkhac\"\r\n ];\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n\r\n if (\r\n ((item.tthai == \"Đã ký\" ||\r\n item.tthai == \"Đã cấp mã\" ||\r\n item.tthai == \"CQT đã nhận\" ||\r\n item.tthai == \"Chấp nhận TBSS\" ||\r\n item.tthai == \"Không chấp nhận TBSS\" ||\r\n item.tthai == \"TBSS sai định dạng\" ||\r\n item.tthai == \"Chờ phản hồi\") &&\r\n (item.tthdon == 0 || item.tthdon == 1)) ||\r\n ((item.tthai == \"Đã ký\" ||\r\n item.tthai == \"Đã cấp mã\" ||\r\n item.tthai == \"CQT đã nhận\" ||\r\n item.tthai == \"Chấp nhận TBSS\" ||\r\n item.tthai == \"Không chấp nhận TBSS\" ||\r\n item.tthai == \"TBSS sai định dạng\" ||\r\n item.tthai == \"Chờ phản hồi\") &&\r\n item.tthdon == 2) ||\r\n (item.tthai == \"Chờ phản hồi\" && item.tthdon == 3)\r\n ) {\r\n var check = true;\r\n } else {\r\n webix.message(\"Không thể thực hiện chức năng này\", \"error\");\r\n return;\r\n }\r\n \r\n var box = webix.modalbox({\r\n title: \"Chọn mặt hàng cần thay thế\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750, \r\n callback: function (result) {\r\n switch (result) {\r\n case \"0\":\r\n var tblMatHang = $$(\"tblMatHang\");\r\n var array = tblMatHang.serialize();\r\n \r\n var chons = [];\r\n \r\n for (var i = 0; i < array.length; i++) {\r\n var chon = array[i];\r\n if (chon.hasOwnProperty(\"chon\")) {\r\n if (chon.chon == true) {\r\n chons.push(chon);\r\n }\r\n }\r\n }\r\n tblMatHang.destructor();\r\n \r\n // var btn = $$(\"btnPlus\");\r\n // btn.callEvent(\"onClick\");\r\n //var detailForm = $$(\"invoiceForms\");\r\n var detailForm;\r\n var khieu = item.khieu;\r\n var windowno = app.path[1].params[0];\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n var windowconfig = app_cache[windowno];\r\n var ngay_hoa_don = item.nlap;\r\n item.cctbao_id_temp = item.cctbao_id;\r\n item.cctbao_id = kyHieuHoaDon.cctbao_id;\r\n item.khieu_temp = item.khieu;\r\n item.khieu = kyHieuHoaDon.khieu;\r\n item.nlap_temp = item.nlap;\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 2;\r\n item.tthdon_original = 2;\r\n item.tthai_old = item.tthai;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.loaihdlq = kyHieuHoaDon.loaihdlq;\r\n item.tgia = 1;\r\n item.sdhang = \"\";\r\n item.tienthuegtgtgiam = 0;\r\n item.tiletienthuegtgtgiam = \"\";\r\n item.giamthuebanhang20 = false;\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n\r\n if (khieu.charAt(1) == \"C\") {\r\n if (khieu.charAt(4) == \"M\") {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCodeMTT.$ui);\r\n invoiceFormsCodeMTT.initUI(windowconfig);\r\n invoiceFormsCodeMTT.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCodeMTT.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCode.$ui);\r\n invoiceFormsCode.initUI(windowconfig);\r\n invoiceFormsCode.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCode.setEditMode(1);\r\n invoiceFormsCode.setValues(item, null);\r\n }\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceForms.$ui);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n }\r\n\r\n var tableDetail_phi = webix.$$(\"hoadon68_phi\");\r\n tableDetail_phi.clearAll();\r\n tableDetail_phi.refreshColumns();\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n\r\n for (var i = 0; i < chons.length; i++) {\r\n var chon = chons[i];\r\n chon.hdon_id = null;\r\n chon.cthdon_id = null;\r\n chon.id = webix.uid();\r\n tableDetail.add(chon);\r\n }\r\n\r\n var tableDetail_phi = webix.$$(\"hoadon68_phi\");\r\n tableDetail_phi.clearAll();\r\n \r\n console.log(item.khieu);\r\n console.log(item.khieu_temp);\r\n detailForm.show();\r\n break;\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n }\r\n },\r\n });\r\n var tblMatHang = webix.ui({\r\n container: \"ctnMatHang\",\r\n id: \"tblMatHang\",\r\n view: \"datatable\",\r\n borderless: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [\r\n {\r\n text: \"\",\r\n content: \"masterCheckbox\",\r\n },\r\n ],\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"\",\r\n width: 30,\r\n },\r\n {\r\n id: \"ma\",\r\n header: _(\"Mã hàng hóa\"),\r\n editor: \"text\",\r\n width: 100,\r\n editable: true,\r\n },\r\n {\r\n id: \"ten\",\r\n header: _(\"Tên hàng hóa\"),\r\n editor: \"text\",\r\n width: 350,\r\n editable: true,\r\n },\r\n {\r\n id: \"mdvtinh\",\r\n header: _(\"ĐVT\"),\r\n editor: \"text\",\r\n width: 80,\r\n editable: true,\r\n },\r\n {\r\n id: \"sluong\",\r\n header: _(\"Số lương\"),\r\n editor: \"autonumeric\",\r\n width: 100,\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"dgia\",\r\n header: _(\"Đơn giá\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"thtien\",\r\n header: _(\"Tiền trước thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"tlckhau\",\r\n header: _(\"% CK\"),\r\n width: 80,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"stckhau\",\r\n header: _(\"Tiền CK\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tsuat\",\r\n header: _(\"Thuế suất\"),\r\n width: 100,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tthue\",\r\n header: _(\"Tiền thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tgtien\",\r\n header: _(\"Tiền sau thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n ],\r\n });\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({\r\n \"Content-type\": \"application/json\",\r\n })\r\n .get(url, function (text) {\r\n var data = JSON.parse(text);\r\n \r\n var tblMatHang = $$(\"tblMatHang\");\r\n tblMatHang.parse(data);\r\n });\r\n });\r\n },\r\n ExcuteChonInvoice: function (kyHieuHoaDon, mode) {\r\n mode = (typeof mode !== 'undefined') ? mode : null;\r\n require([\"views/forms/formhoadon78\", \"views/forms/formhoadoncode78\", \"views/forms/formhoadoncode78_mtt\", \"app\"], function (invoiceForms, invoiceFormsCode, invoiceFormsCodeMTT, app) {\r\n\r\n var table = webix.$$(\"invoiceViews\");\r\n var itemSL = table.getSelectedItem();\r\n\r\n if (itemSL == null || itemSL == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n\r\n // var btn = $$(\"btnPlus\");\r\n // btn.callEvent(\"onClick\");\r\n //var detailForm = $$(\"invoiceForms\");\r\n\r\n var item = Object.assign({}, itemSL);\r\n item.shdon = null;\r\n item.sbmat = null;\r\n item.cctbao_id = kyHieuHoaDon.cctbao_id;\r\n var detailForm;\r\n var khieu = item.khieu;\r\n var windowno = app.path[1].params[0];\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n var windowconfig = app_cache[windowno];\r\n \r\n if (khieu.charAt(1) == \"C\") {\r\n if (khieu.charAt(4) == \"M\") {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCodeMTT.$ui);\r\n invoiceFormsCodeMTT.initUI(windowconfig);\r\n invoiceFormsCodeMTT.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCodeMTT.setEditMode(1);\r\n invoiceFormsCodeMTT.setModeChangeView(mode);\r\n invoiceFormsCodeMTT.copyValues(item);\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCode.$ui);\r\n invoiceFormsCode.initUI(windowconfig);\r\n invoiceFormsCode.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCode.setEditMode(1);\r\n invoiceFormsCode.setModeChangeView(mode);\r\n invoiceFormsCode.copyValues(item);\r\n }\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceForms.$ui);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setModeChangeView(mode);\r\n invoiceForms.copyValues(item);\r\n }\r\n\r\n detailForm.show();\r\n });\r\n },\r\n ExcuteReplaceInvoice_32: function (kyHieuHoaDon) {\r\n require([\"views/forms/formhoadon78\", \"views/forms/formhoadoncode78\", \"views/forms/formhoadoncode78_mtt\", \"app\"], function (invoiceForms, invoiceFormsCode, invoiceFormsCodeMTT, app) {\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var detailForm;\r\n for (var i = 0; i < arrayString.length; i++) {\r\n kyHieuHoaDon[arrayString[i]] = 0;\r\n }\r\n kyHieuHoaDon[\"tgtttbchu\"] = \"\";\r\n var windowno = app.path[1].params[0];\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n var windowconfig = app_cache[windowno];\r\n if (kyHieuHoaDon.khieu.charAt(1) == \"C\") {\r\n if (kyHieuHoaDon.khieu.charAt(4) == \"M\") {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCodeMTT.$ui);\r\n invoiceFormsCodeMTT.initUI(windowconfig);\r\n invoiceFormsCodeMTT.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCodeMTT.setEditMode(1);\r\n invoiceFormsCodeMTT.setValues(kyHieuHoaDon, null);\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCode.$ui);\r\n invoiceFormsCode.initUI(windowconfig);\r\n invoiceFormsCode.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCode.setEditMode(1);\r\n invoiceFormsCode.setValues(kyHieuHoaDon, null);\r\n }\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceForms.$ui);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(kyHieuHoaDon, null);\r\n }\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n });\r\n },\r\n ExcuteIncreaseChangeInvoice_32: function (kyHieuHoaDon) {\r\n require([\"views/forms/formhoadon78\", \"views/forms/formhoadoncode78\", \"views/forms/formhoadoncode78_mtt\", \"app\"], function (invoiceForms, invoiceFormsCode, invoiceFormsCodeMTT, app) {\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var table = webix.$$(\"invoiceViews\");\r\n // var item = table.getSelectedItem();\r\n var btn = $$(\"btnPlus\");\r\n // btn.callEvent(\"onClick\");\r\n //var detailForm = $$(\"invoiceForms\");\r\n var detailForm;\r\n for (var i = 0; i < arrayString.length; i++) {\r\n kyHieuHoaDon[arrayString[i]] = 0;\r\n }\r\n kyHieuHoaDon[\"tgtttbchu\"] = \"\";\r\n var windowno = app.path[1].params[0];\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n var windowconfig = app_cache[windowno];\r\n\r\n if (kyHieuHoaDon.khieu.charAt(1) == \"C\") {\r\n if (kyHieuHoaDon.khieu.charAt(4) == \"M\") {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCodeMTT.$ui);\r\n invoiceFormsCodeMTT.initUI(windowconfig);\r\n invoiceFormsCodeMTT.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCodeMTT.setEditMode(1);\r\n invoiceFormsCodeMTT.setValues(kyHieuHoaDon, null);\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCode.$ui);\r\n invoiceFormsCode.initUI(windowconfig);\r\n invoiceFormsCode.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCode.setEditMode(1);\r\n invoiceFormsCode.setValues(kyHieuHoaDon, null);\r\n }\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceForms.$ui);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(kyHieuHoaDon, null);\r\n }\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n });\r\n },\r\n ExcuteReduceChangeInvoice_32: function (kyHieuHoaDon) {\r\n require([\"views/forms/formhoadon78\", \"views/forms/formhoadoncode78\", \"views/forms/formhoadoncode78_mtt\", \"app\"], function (invoiceForms, invoiceFormsCode, invoiceFormsCodeMTT, app) {\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var table = webix.$$(\"invoiceViews\");\r\n // var item = table.getSelectedItem();\r\n var btn = $$(\"btnPlus\");\r\n // btn.callEvent(\"onClick\");\r\n //var detailForm = $$(\"invoiceForms\");\r\n for (var i = 0; i < arrayString.length; i++) {\r\n kyHieuHoaDon[arrayString[i]] = 0;\r\n }\r\n kyHieuHoaDon[\"tgtttbchu\"] = \"\";\r\n var detailForm;\r\n var windowno = app.path[1].params[0];\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n var windowconfig = app_cache[windowno];\r\n if (kyHieuHoaDon.khieu.charAt(1) == \"C\") {\r\n if (kyHieuHoaDon.khieu.charAt(4) == \"M\") {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCodeMTT.$ui);\r\n invoiceFormsCodeMTT.initUI(windowconfig);\r\n invoiceFormsCodeMTT.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCodeMTT.setEditMode(1);\r\n invoiceFormsCodeMTT.setValues(kyHieuHoaDon, null);\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCode.$ui);\r\n invoiceFormsCode.initUI(windowconfig);\r\n invoiceFormsCode.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCode.setEditMode(1);\r\n invoiceFormsCode.setValues(kyHieuHoaDon, null);\r\n }\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceForms.$ui);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(kyHieuHoaDon, null);\r\n }\r\n\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Hóa đơn điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n });\r\n },\r\n ExcuteInfoChangeInvoice_32: function (kyHieuHoaDon) {\r\n require([\"views/forms/formhoadon78\", \"views/forms/formhoadoncode78\", \"views/forms/formhoadoncode78_mtt\", \"app\"], function (invoiceForms, invoiceFormsCode, invoiceFormsCodeMTT, app) {\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var table = webix.$$(\"invoiceViews\");\r\n // var item = table.getSelectedItem();\r\n var btn = $$(\"btnPlus\");\r\n // btn.callEvent(\"onClick\");\r\n //var detailForm = $$(\"invoiceForms\");\r\n for (var i = 0; i < arrayString.length; i++) {\r\n kyHieuHoaDon[arrayString[i]] = 0;\r\n }\r\n kyHieuHoaDon[\"tgtttbchu\"] = \"\";\r\n var detailForm;\r\n var windowno = app.path[1].params[0];\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n var windowconfig = app_cache[windowno];\r\n if (kyHieuHoaDon.khieu.charAt(1) == \"C\") {\r\n if (kyHieuHoaDon.khieu.charAt(4) == \"M\") {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCodeMTT.$ui);\r\n invoiceFormsCodeMTT.initUI(windowconfig);\r\n invoiceFormsCodeMTT.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCodeMTT.setEditMode(1);\r\n invoiceFormsCodeMTT.setValues(kyHieuHoaDon, null);\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCode.$ui);\r\n invoiceFormsCode.initUI(windowconfig);\r\n invoiceFormsCode.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCode.setEditMode(1);\r\n invoiceFormsCode.setValues(kyHieuHoaDon, null);\r\n }\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceForms.$ui);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(kyHieuHoaDon, null);\r\n }\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + kyHieuHoaDon.shdclquan + \" ngày \" + moment(kyHieuHoaDon.nlhdclquan).format(\"DD/MM/YYYY\") + \" ký hiệu \" + kyHieuHoaDon.khhdclquan,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n }\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n });\r\n },\r\n\r\n ExcuteIncreaseChangeInvoice: function (kyHieuHoaDon) {\r\n require([\"views/forms/formhoadon78\", \"views/forms/formhoadoncode78\", \"views/forms/formhoadoncode78_mtt\", \"app\"], function (invoiceForms, invoiceFormsCode, invoiceFormsCodeMTT, app) {\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n\r\n if (\r\n ((item.tthai == \"Đã ký\" ||\r\n item.tthai == \"Đã cấp mã\" ||\r\n item.tthai == \"CQT đã nhận\" ||\r\n item.tthai == \"Chấp nhận TBSS\" ||\r\n item.tthai == \"Không chấp nhận TBSS\" ||\r\n item.tthai == \"TBSS sai định dạng\" ||\r\n item.tthai == \"Chờ phản hồi\") &&\r\n (item.tthdon == 0 || item.tthdon == 1)) ||\r\n ((item.tthai == \"Đã ký\" ||\r\n item.tthai == \"Đã cấp mã\" ||\r\n item.tthai == \"CQT đã nhận\" ||\r\n item.tthai == \"Chấp nhận TBSS\" ||\r\n item.tthai == \"Không chấp nhận TBSS\" ||\r\n item.tthai == \"TBSS sai định dạng\" ||\r\n item.tthai == \"Chờ phản hồi\") &&\r\n item.tthdon == 11)\r\n ) {\r\n var check = true;\r\n } else {\r\n webix.message(\"Không thể thực hiện chức năng này\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Chọn mặt hàng cần điều chỉnh\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"0\":\r\n var tblMatHang = $$(\"tblMatHang\");\r\n var array = tblMatHang.serialize();\r\n\r\n var chons = [];\r\n\r\n for (var i = 0; i < array.length; i++) {\r\n var chon = array[i];\r\n if (chon.hasOwnProperty(\"chon\")) {\r\n if (chon.chon == true) {\r\n chons.push(chon);\r\n }\r\n }\r\n }\r\n\r\n tblMatHang.destructor();\r\n\r\n webix.modalbox.hide();\r\n // var btnPlus = $$(\"btnPlus\");\r\n // btnPlus.callEvent(\"onClick\");\r\n var detailForm;\r\n var khieu = item.khieu;\r\n var windowno = app.path[1].params[0];\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n var windowconfig = app_cache[windowno];\r\n var ngay_hoa_don = item.nlap;\r\n item.cctbao_id_temp = item.cctbao_id;\r\n item.cctbao_id = kyHieuHoaDon.cctbao_id;\r\n item.khieu_temp = item.khieu;\r\n item.khieu = kyHieuHoaDon.khieu;\r\n item.nlap_temp = item.nlap;\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 19;\r\n item.tthdon_original = 19;\r\n item.tthai_old = item.tthai;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n // for (var i = 0; i < arrayString.length; i++) {\r\n // item[arrayString[i]] = 0;\r\n // }\r\n // item[\"tgtttbchu\"] = \"\";\r\n\r\n if (khieu.charAt(1) == \"C\") {\r\n if (khieu.charAt(4) == \"M\") {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCodeMTT.$ui);\r\n invoiceFormsCodeMTT.initUI(windowconfig);\r\n invoiceFormsCodeMTT.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCodeMTT.setEditMode(1);\r\n invoiceFormsCodeMTT.setValues(item, null);\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCode.$ui);\r\n invoiceFormsCode.initUI(windowconfig);\r\n invoiceFormsCode.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCode.setEditMode(1);\r\n invoiceFormsCode.setValues(item, null);\r\n }\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceForms.$ui);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n }\r\n\r\n var tableDetail_phi = webix.$$(\"hoadon68_phi\");\r\n tableDetail_phi.clearAll();\r\n tableDetail_phi.refreshColumns();\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n for (var i = 0; i < chons.length; i++) {\r\n var chon = chons[i];\r\n chon.hdon_id = null;\r\n chon.cthdon_id = null;\r\n chon.id = webix.uid();\r\n tableDetail.add(chon);\r\n }\r\n tableDetail.refreshColumns();\r\n detailForm.show();\r\n break;\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n }\r\n },\r\n });\r\n var tblMatHang = webix.ui({\r\n container: \"ctnMatHang\",\r\n id: \"tblMatHang\",\r\n view: \"datatable\",\r\n borderless: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [\r\n {\r\n text: \"\",\r\n content: \"masterCheckbox\",\r\n },\r\n ],\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"\",\r\n width: 30,\r\n },\r\n {\r\n id: \"ma\",\r\n header: _(\"Mã hàng hóa\"),\r\n editor: \"text\",\r\n width: 100,\r\n editable: true,\r\n },\r\n {\r\n id: \"ten\",\r\n header: _(\"Tên hàng hóa\"),\r\n editor: \"text\",\r\n width: 350,\r\n editable: true,\r\n },\r\n {\r\n id: \"mdvtinh\",\r\n header: _(\"ĐVT\"),\r\n editor: \"text\",\r\n width: 80,\r\n editable: true,\r\n },\r\n {\r\n id: \"sluong\",\r\n header: _(\"Số lương\"),\r\n editor: \"autonumeric\",\r\n width: 100,\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"dgia\",\r\n header: _(\"Đơn giá\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"thtien\",\r\n header: _(\"Tiền trước thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"tlckhau\",\r\n header: _(\"% CK\"),\r\n width: 80,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"stckhau\",\r\n header: _(\"Tiền CK\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tsuat\",\r\n header: _(\"Thuế suất\"),\r\n width: 100,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tthue\",\r\n header: _(\"Tiền thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tgtien\",\r\n header: _(\"Tiền sau thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n ],\r\n });\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({\r\n \"Content-type\": \"application/json\",\r\n })\r\n .get(url, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n var tblMatHang = $$(\"tblMatHang\");\r\n tblMatHang.parse(data);\r\n });\r\n });\r\n },\r\n ExcuteReduceChangeInvoice: function (kyHieuHoaDon) {\r\n require([\"views/forms/formhoadon78\", \"views/forms/formhoadoncode78\", \"views/forms/formhoadoncode78_mtt\", \"app\"], function (invoiceForms, invoiceFormsCode, invoiceFormsCodeMTT, app) {\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var table = webix.$$(\"invoiceViews\");\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n\r\n if (\r\n ((item.tthai == \"Đã ký\" ||\r\n item.tthai == \"Đã cấp mã\" ||\r\n item.tthai == \"CQT đã nhận\" ||\r\n item.tthai == \"Chấp nhận TBSS\" ||\r\n item.tthai == \"Không chấp nhận TBSS\" ||\r\n item.tthai == \"TBSS sai định dạng\" ||\r\n item.tthai == \"Chờ phản hồi\") &&\r\n (item.tthdon == 0 || item.tthdon == 1)) ||\r\n ((item.tthai == \"Đã ký\" ||\r\n item.tthai == \"Đã cấp mã\" ||\r\n item.tthai == \"CQT đã nhận\" ||\r\n item.tthai == \"Chấp nhận TBSS\" ||\r\n item.tthai == \"Không chấp nhận TBSS\" ||\r\n item.tthai == \"TBSS sai định dạng\" ||\r\n item.tthai == \"Chờ phản hồi\") &&\r\n item.tthdon == 11)\r\n ) {\r\n var check = true;\r\n } else {\r\n webix.message(\"Không thể thực hiện chức năng này\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Chọn mặt hàng cần điều chỉnh\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"0\":\r\n var tblMatHang = $$(\"tblMatHang\");\r\n var array = tblMatHang.serialize();\r\n\r\n var chons = [];\r\n\r\n for (var i = 0; i < array.length; i++) {\r\n var chon = array[i];\r\n if (chon.hasOwnProperty(\"chon\")) {\r\n if (chon.chon == true) {\r\n chons.push(chon);\r\n }\r\n }\r\n }\r\n tblMatHang.destructor();\r\n\r\n webix.modalbox.hide();\r\n // var btnPlus = $$(\"btnPlus\");\r\n // btnPlus.callEvent(\"onClick\");\r\n var detailForm;\r\n var khieu = item.khieu;\r\n var windowno = app.path[1].params[0];\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n var windowconfig = app_cache[windowno];\r\n item.cctbao_id_temp = item.cctbao_id;\r\n item.cctbao_id = kyHieuHoaDon.cctbao_id;\r\n item.khieu_temp = item.khieu;\r\n item.khieu = kyHieuHoaDon.khieu;\r\n item.nlap_temp = item.nlap;\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 21;\r\n item.tthdon_original = 21;\r\n item.tthai_old = item.tthai;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.note = \"reduce_change_invoice\";\r\n\r\n // for (var i = 0; i < arrayString.length; i++) {\r\n // item[arrayString[i]] = 0;\r\n // }\r\n // item[\"tgtttbchu\"] = \"\";\r\n\r\n if (khieu.charAt(1) == \"C\") {\r\n if (khieu.charAt(4) == \"M\") {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCodeMTT.$ui);\r\n invoiceFormsCodeMTT.initUI(windowconfig);\r\n invoiceFormsCodeMTT.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCodeMTT.setEditMode(1);\r\n invoiceFormsCodeMTT.setValues(item, null);\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCode.$ui);\r\n invoiceFormsCode.initUI(windowconfig);\r\n invoiceFormsCode.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCode.setEditMode(1);\r\n invoiceFormsCode.setValues(item, null);\r\n }\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceForms.$ui);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n }\r\n\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Hóa đơn điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n\r\n var tableDetail_phi = webix.$$(\"hoadon68_phi\");\r\n tableDetail_phi.clearAll();\r\n tableDetail_phi.refreshColumns();\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n for (var i = 0; i < chons.length; i++) {\r\n var chon = chons[i];\r\n chon.hdon_id = null;\r\n chon.cthdon_id = null;\r\n chon.id = webix.uid();\r\n tableDetail.add(chon);\r\n }\r\n tableDetail.refreshColumns();\r\n console.log(item.khieu);\r\n console.log(item.khieu_temp);\r\n detailForm.show();\r\n break;\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n }\r\n },\r\n });\r\n var tblMatHang = webix.ui({\r\n container: \"ctnMatHang\",\r\n id: \"tblMatHang\",\r\n view: \"datatable\",\r\n borderless: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [\r\n {\r\n text: \"\",\r\n content: \"masterCheckbox\",\r\n },\r\n ],\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"\",\r\n width: 30,\r\n },\r\n {\r\n id: \"ma\",\r\n header: _(\"Mã hàng hóa\"),\r\n editor: \"text\",\r\n width: 100,\r\n editable: true,\r\n },\r\n {\r\n id: \"ten\",\r\n header: _(\"Tên hàng hóa\"),\r\n editor: \"text\",\r\n width: 350,\r\n editable: true,\r\n },\r\n {\r\n id: \"mdvtinh\",\r\n header: _(\"ĐVT\"),\r\n editor: \"text\",\r\n width: 80,\r\n editable: true,\r\n },\r\n {\r\n id: \"sluong\",\r\n header: _(\"Số lương\"),\r\n editor: \"autonumeric\",\r\n width: 100,\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"dgia\",\r\n header: _(\"Đơn giá\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"thtien\",\r\n header: _(\"Tiền trước thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"tlckhau\",\r\n header: _(\"% CK\"),\r\n width: 80,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"stckhau\",\r\n header: _(\"Tiền CK\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tsuat\",\r\n header: _(\"Thuế suất\"),\r\n width: 100,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tthue\",\r\n header: _(\"Tiền thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tgtien\",\r\n header: _(\"Tiền sau thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n ],\r\n });\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({\r\n \"Content-type\": \"application/json\",\r\n })\r\n .get(url, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n var tblMatHang = $$(\"tblMatHang\");\r\n tblMatHang.parse(data);\r\n });\r\n });\r\n },\r\n ExcuteInfoChangeInvoice: function (kyHieuHoaDon) {\r\n require([\"views/forms/formhoadon78\", \"views/forms/formhoadoncode78\", \"views/forms/formhoadoncode78_mtt\", \"app\"], function (invoiceForms, invoiceFormsCode, invoiceFormsCodeMTT, app) {\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n \"tgtkcthue\",\r\n \"tgtkhac\"\r\n ];\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n\r\n if (\r\n ((item.tthai == \"Đã ký\" ||\r\n item.tthai == \"Đã cấp mã\" ||\r\n item.tthai == \"CQT đã nhận\" ||\r\n item.tthai == \"Chấp nhận TBSS\" ||\r\n item.tthai == \"Không chấp nhận TBSS\" ||\r\n item.tthai == \"TBSS sai định dạng\" ||\r\n item.tthai == \"Chờ phản hồi\") &&\r\n (item.tthdon == 0 || item.tthdon == 1)) ||\r\n ((item.tthai == \"Đã ký\" ||\r\n item.tthai == \"Đã cấp mã\" ||\r\n item.tthai == \"CQT đã nhận\" ||\r\n item.tthai == \"Chấp nhận TBSS\" ||\r\n item.tthai == \"Không chấp nhận TBSS\" ||\r\n item.tthai == \"TBSS sai định dạng\" ||\r\n item.tthai == \"Chờ phản hồi\") &&\r\n item.tthdon == 11)\r\n ) {\r\n var check = true;\r\n } else {\r\n webix.message(\"Không thể thực hiện chức năng này\", \"error\");\r\n return;\r\n }\r\n\r\n // var btnPlus = $$(\"btnPlus\");\r\n // btnPlus.callEvent(\"onClick\");\r\n // var detailForm = $$(\"invoiceForms\");\r\n var detailForm;\r\n var khieu = item.khieu;\r\n var windowno = app.path[1].params[0];\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n var windowconfig = app_cache[windowno];\r\n var ngay_hoa_don = item.nlap;\r\n item.cctbao_id_temp = item.cctbao_id;\r\n item.cctbao_id = kyHieuHoaDon.cctbao_id;\r\n item.khieu_temp = item.khieu;\r\n item.khieu = kyHieuHoaDon.khieu;\r\n item.nlap_temp = item.nlap;\r\n item.nlap = null;\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 23;\r\n item.tthdon_original = 23;\r\n item.tthai_old = item.tthai;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.mccqthue = \"\";\r\n item.tgia = 1;\r\n item.sdhang = \"\";\r\n item.tienthuegtgtgiam = 0;\r\n item.tiletienthuegtgtgiam = \"\";\r\n item.giamthuebanhang20 = false;\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n\r\n if (khieu.charAt(1) == \"C\") {\r\n if (khieu.charAt(4) == \"M\") {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCodeMTT.$ui);\r\n invoiceFormsCodeMTT.initUI(windowconfig);\r\n invoiceFormsCodeMTT.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCodeMTT.setEditMode(1);\r\n invoiceFormsCodeMTT.setValues(item, null);\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCode.$ui);\r\n invoiceFormsCode.initUI(windowconfig);\r\n invoiceFormsCode.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCode.setEditMode(1);\r\n invoiceFormsCode.setValues(item, null);\r\n }\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceForms.$ui);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n }\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu_temp,\r\n };\r\n\r\n var tableDetail_phi = webix.$$(\"hoadon68_phi\");\r\n tableDetail_phi.clearAll();\r\n tableDetail_phi.refreshColumns();\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n // tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n // tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n // tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tthue\").editor = null;\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n while (!detailForm.isVisible()) {}\r\n\t $$(\"hoadon68_phi\").clearAll();\r\n });\r\n },\r\n ExcuteCancellingInvoice: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n var item = datafrm[i];\r\n if (item == null || item == undefined) {\r\n webix.message(\"Không tìm thấy thông tin hóa đơn!\", \"error\");\r\n }\r\n\r\n if (\r\n ((item.tthai == \"Đã ký\" ||\r\n item.tthai == \"CQT đã nhận\" ||\r\n item.tthai == \"CQT không tiếp nhận HĐ\" ||\r\n item.tthai == \"Chờ phản hồi\" ||\r\n item.tthai == \"Đã cấp mã\" ||\r\n item.tthai == \"CQT không cấp mã\") &&\r\n (item.tthdon == 0 || item.tthdon == 1)) ||\r\n (item.tthai == \"CQT không tiếp nhận HĐ\" && (item.tthdon == 19 || item.tthdon == 21 || item.tthdon == 23)) ||\r\n (item.tthai == \"CQT không tiếp nhận HĐ\" && item.tthdon == 2)\r\n ) {\r\n var check = true;\r\n } else {\r\n webix.message(\"Tồn tại hóa đơn không thể thực hiện chức năng này\", \"error\");\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var totalHuy = data.length;\r\n\r\n var strHoaDonSelect = \" \";\r\n for (var i = 0; i < data.length; i++) {\r\n if (i < data.length - 1) {\r\n strHoaDonSelect += data[i].shdon + \",\";\r\n } else {\r\n strHoaDonSelect += data[i].shdon;\r\n }\r\n }\r\n\r\n webix.confirm({\r\n text: \"Xác nhận hủy hóa đơn số \" + strHoaDonSelect + \" trên MobiFone Invoice.
Lưu ý: Cần làm thông báo 04/SS-HĐĐT để Hủy hóa đơn với CQT\",\r\n ok: \"Có\",\r\n width: \"500px\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n var hoaDonHuy = data.length;\r\n for (var i = 0; i < hoaDonHuy; i++) {\r\n var idHoaDon = data[i].id;\r\n webix\r\n .ajax()\r\n .headers({\r\n \"Content-Type\": \"application/json\",\r\n })\r\n .get(app.config.host + \"/Invoice68/uploadCanceledInv?id=\" + idHoaDon, function (text) {\r\n var response = JSON.parse(text);\r\n if (response.hasOwnProperty(\"error\")) {\r\n webix.message({\r\n type: \"error\",\r\n text: response.error,\r\n });\r\n\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n return;\r\n }\r\n\r\n totalHuy = totalHuy - 1;\r\n\r\n if (totalHuy == 0) {\r\n webix.message(\"Hóa đơn hủy thành công\");\r\n\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n });\r\n }\r\n }\r\n },\r\n });\r\n } else {\r\n webix.message(\"Chưa tích chọn hóa đơn hủy!\", \"error\");\r\n }\r\n },\r\n ExcuteCancellingInvoicetncn: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n var item = datafrm[i];\r\n if (item == null || item == undefined) {\r\n webix.message(\"Không tìm thấy thông tin chứng từ!\", \"error\");\r\n }\r\n\r\n if (\r\n ((item.tthai == \"Đã ký\" ||\r\n item.tthai == \"CQT đã nhận\" ||\r\n item.tthai == \"CQT không tiếp nhận HĐ\" ||\r\n item.tthai == \"Chờ phản hồi\" ||\r\n item.tthai == \"Đã cấp mã\" ||\r\n item.tthai == \"CQT không cấp mã\") &&\r\n (item.tthdon == 0 || item.tthdon == 1)) ||\r\n (item.tthai == \"CQT không tiếp nhận HĐ\" && (item.tthdon == 19 || item.tthdon == 21 || item.tthdon == 23)) ||\r\n (item.tthai == \"CQT không tiếp nhận HĐ\" && item.tthdon == 2)\r\n ) {\r\n var check = true;\r\n } else {\r\n webix.message(\"Tồn tại chứng từ không thể thực hiện chức năng này\", \"error\");\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var totalHuy = data.length;\r\n webix.confirm({\r\n text: \"Hủy chứng từ trên MobiFone Invoice\",\r\n ok: \"Có\",\r\n width: \"500px\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n var hoaDonHuy = data.length;\r\n for (var i = 0; i < hoaDonHuy; i++) {\r\n var idHoaDon = data[i].id;\r\n webix\r\n .ajax()\r\n .headers({\r\n \"Content-Type\": \"application/json\",\r\n })\r\n .get(app.config.host + \"/Invoice68/uploadCanceledInv?id=\" + idHoaDon, function (text) {\r\n var response = JSON.parse(text);\r\n if (response.hasOwnProperty(\"error\")) {\r\n webix.message({\r\n type: \"error\",\r\n text: response.error,\r\n });\r\n\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n return;\r\n }\r\n\r\n totalHuy = totalHuy - 1;\r\n\r\n if (totalHuy == 0) {\r\n webix.message(\"Chứng từ hủy thành công\");\r\n\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n });\r\n }\r\n }\r\n },\r\n });\r\n } else {\r\n webix.message(\"Chưa tích chọn chứng từ hủy!\", \"error\");\r\n }\r\n },\r\n ExcuteHUyInvoicebienlai: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n var item = datafrm[i];\r\n if (item == null || item == undefined) {\r\n webix.message(\"Không tìm thấy thông tin biên lai!\", \"error\");\r\n }\r\n\r\n if (\r\n ((item.tthai == \"Đã ký\" ||\r\n item.tthai == \"CQT đã nhận\" ||\r\n item.tthai == \"CQT không tiếp nhận HĐ\" ||\r\n item.tthai == \"Chờ phản hồi\" ||\r\n item.tthai == \"Đã cấp mã\" ||\r\n item.tthai == \"CQT không cấp mã\") &&\r\n (item.tthdon == 0 || item.tthdon == 1)) ||\r\n (item.tthai == \"CQT không tiếp nhận HĐ\" && (item.tthdon == 19 || item.tthdon == 21 || item.tthdon == 23)) ||\r\n (item.tthai == \"CQT không tiếp nhận HĐ\" && item.tthdon == 2)\r\n ) {\r\n var check = true;\r\n } else {\r\n webix.message(\"Tồn tại biên lai không thể thực hiện chức năng này\", \"error\");\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var totalHuy = data.length;\r\n webix.confirm({\r\n text: \"Hủy biên lai trên MobiFone Invoice\",\r\n ok: \"Có\",\r\n width: \"500px\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n var hoaDonHuy = data.length;\r\n for (var i = 0; i < hoaDonHuy; i++) {\r\n var idHoaDon = data[i].id;\r\n webix\r\n .ajax()\r\n .headers({\r\n \"Content-Type\": \"application/json\",\r\n })\r\n .get(app.config.host + \"/Invoice68/uploadCanceledInv?id=\" + idHoaDon, function (text) {\r\n var response = JSON.parse(text);\r\n if (response.hasOwnProperty(\"error\")) {\r\n webix.message({\r\n type: \"error\",\r\n text: response.error,\r\n });\r\n\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n return;\r\n }\r\n\r\n totalHuy = totalHuy - 1;\r\n\r\n if (totalHuy == 0) {\r\n webix.message(\"Biên lai hủy thành công\");\r\n\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n });\r\n }\r\n }\r\n },\r\n });\r\n } else {\r\n webix.message(\"Chưa tích chọn biên lai hủy!\", \"error\");\r\n }\r\n },\r\n ExcuteCancellingInvoicebienlai: function () {\r\n require([\"views/forms/68_huyhoadon_bienlai\", \"app\"], function (huyhoadon, app) {\r\n var table = webix.$$(\"invoiceViews\");\r\n\r\n var datafrm = table.serialize();\r\n var data = [];\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n var item = datafrm[i];\r\n if (item == null || item == undefined) {\r\n webix.message(\"Không tìm thấy thông tin biên lai!\", \"error\");\r\n }\r\n\r\n if (item.tthai == \"Đã ký\" && item.tthdon != 3 && item.tthdon != 27) {\r\n var check = true;\r\n } else {\r\n webix.message(\"Tồn tại biên lai không thể thực hiện chức năng này\", \"error\");\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var cungshd = true;\r\n for (var k = 1; k <= data.length - 1; k++) {\r\n if (data[k][\"stbao\"] !== data[0][\"stbao\"]) {\r\n cungshd = false;\r\n break;\r\n }\r\n }\r\n if (cungshd === true) {\r\n var loai = 1;\r\n if (data[0][\"stbao\"] !== null) {\r\n loai = 2;\r\n }\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].ladhddt == undefined || data[i].tctbao == undefined) {\r\n data[i].ladhddt = \"1\";\r\n }\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n var tongquat = {\r\n so: data[0].stbao,\r\n ntbccqt: data[0].ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n data.forEach(function (item) {\r\n var put = {\r\n mcqtcap: item.mccqthue,\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n //this.hide();\r\n win.show();\r\n });\r\n } else {\r\n webix.message(\"Các biên lai chọn phải có số thông báo giống nhau\", \"error\");\r\n }\r\n } else {\r\n webix.message(\"Chưa tích chọn biên lai !\", \"error\");\r\n }\r\n });\r\n },\r\n CheckKhacNull: function (value) {\r\n if (value === undefined || value === null || value === \"\") return false;\r\n else return true;\r\n },\r\n DuyetHoaDon: function (lsthdon_id, status) {\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n var postData = {\r\n lsthdon_id: lsthdon_id,\r\n };\r\n\r\n webix.extend(tableHdon, webix.ProgressBar);\r\n tableHdon.disable();\r\n tableHdon.showProgress();\r\n\r\n var dataPut = { data: [postData], status: status };\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/DuyetHoaDon\", dataPut, function (text) {\r\n var result = JSON.parse(text);\r\n var table = webix.$$(\"invoiceViews\");\r\n table.enable();\r\n table.hideProgress();\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n return;\r\n }\r\n\r\n if (result.ok == true) {\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n webix.modalbox.hide();\r\n }\r\n });\r\n });\r\n },\r\n\r\n renderFormat: function (val, changeValue, data) {\r\n if (typeof val == \"undefined\" || val == null || val == \"\" || val == 0) val = \"VND\";\r\n var table_chitiet = webix.$$(\"hoadon68_chitiet\");\r\n\r\n var table_phi = webix.$$(\"hoadon68_phi\");\r\n getDecimalPlace(val, function (arr) {\r\n var arrayString_chitiet = [\"sluong\", \"dgia\", \"thtien\", \"stckhau\", \"tthue\", \"tgtien\", \"tienphi\", \"tlckhau\"];\r\n\r\n for (var i = 0; i < arrayString_chitiet.length; i++) {\r\n var field_name = \"\";\r\n switch (arrayString_chitiet[i]) {\r\n case \"sluong\":\r\n field_name = \"quantity_decimal\";\r\n break;\r\n case \"dgia\":\r\n field_name = \"price_decimal\";\r\n break;\r\n case \"thtien\":\r\n field_name = \"amount_without_vat_decimal\";\r\n break;\r\n case \"stckhau\":\r\n field_name = \"price_discount\";\r\n break;\r\n case \"tthue\":\r\n field_name = \"tax_price\";\r\n break;\r\n case \"tgtien\":\r\n field_name = \"total_amount_decimal\";\r\n break;\r\n case \"tienphi\":\r\n field_name = \"fee_price\";\r\n break;\r\n case \"tlckhau\":\r\n field_name = \"tlckhau\";\r\n break;\r\n case \"tienthuegtgtgiam\":\r\n field_name = \"tienthuegtgtgiam\";\r\n break; \r\n }\r\n\r\n //var decimal_place = Array(Number(arr[0][field_name]) + 1).join(\"9\");\r\n var decimal_format = Number(arr[0][field_name]);\r\n var format_numeric = {\r\n //maximumValue: Number(\"999999999999.\" + decimal_place),\r\n //minValue: Number(\"-999999999999.\" + decimal_place),\r\n decimalPlaces: Number(decimal_format),\r\n };\r\n var formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimal_format,\r\n };\r\n\r\n var formatSo = webix.Number.numToStr(formatSoDefault);\r\n if (field_name == \"fee_price\") {\r\n var format_config = table_phi.getColumnConfig(\"tienphi\");\r\n if (format_config.isFmNumber === true) {\r\n format_config.format = formatSo;\r\n format_config.numericConfig = format_numeric;\r\n }\r\n } else {\r\n var format_config = table_chitiet.getColumnConfig(arrayString_chitiet[i]);\r\n if (format_config.isFmNumber === true) {\r\n format_config.format = formatSo;\r\n format_config.numericConfig = format_numeric;\r\n }\r\n }\r\n }\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n\r\n table_chitiet.refreshColumns();\r\n table_phi.refreshColumns();\r\n for (var i = 0; i < arrayString.length; i++) {\r\n $$(arrayString[i]).refresh();\r\n }\r\n\r\n if (changeValue == true) {\r\n var item = {\r\n id: webix.uid(),\r\n };\r\n\r\n table_chitiet.add(item);\r\n\r\n table_chitiet.select(item.id, \"ma\", false);\r\n table_chitiet.edit({\r\n row: item.id,\r\n column: \"ma\",\r\n });\r\n\r\n table_chitiet.editStop();\r\n\r\n table_chitiet.remove(item.id);\r\n table_chitiet.clearSelection();\r\n }\r\n var row = table_chitiet.serialize();\r\n var arrayString_chitiet = [\"sluong\", \"dgia\", \"thtien\", \"stckhau\", \"tthue\", \"tgtien\", \"tienphi\", \"tlckhau\"];\r\n var selectedItem;\r\n for (var j = 0; j < row.length; j++) {\r\n for (var i = 0; i < arrayString_chitiet.length; i++) {\r\n selectedItem = row[j];\r\n if (arrayString_chitiet[i] == \"tienphi\") {\r\n format_config = table_phi.getColumnConfig(arrayString_chitiet[i]);\r\n if (format_config !== undefined && format_config.format !== undefined && webix.rules.isNumber(selectedItem[arrayString_chitiet[i]])) {\r\n selectedItem[arrayString_chitiet[i]] = Number(format_config.format(selectedItem[arrayString_chitiet[i]]).replaceAll(\",\", \"\"));\r\n }\r\n table_chitiet.updateItem(selectedItem[\"id\"], selectedItem);\r\n table_chitiet.refresh();\r\n } else {\r\n format_config = table_chitiet.getColumnConfig(arrayString_chitiet[i]);\r\n if (format_config !== undefined && format_config.format !== undefined && webix.rules.isNumber(selectedItem[arrayString_chitiet[i]])) {\r\n selectedItem[arrayString_chitiet[i]] = Number(format_config.format(selectedItem[arrayString_chitiet[i]]).replaceAll(\",\", \"\"));\r\n }\r\n table_chitiet.updateItem(selectedItem[\"id\"], selectedItem);\r\n table_chitiet.refresh();\r\n }\r\n }\r\n }\r\n });\r\n },\r\n\r\n CheckExistKeySession: function (key, check) {\r\n return true;\r\n var form = webix.$$(\"invoiceForms\");\r\n var newInvoice = form.config.newInvoice;\r\n var valueSession = sessionStorage.getItem(key);\r\n if (check != undefined) {\r\n return true;\r\n } else {\r\n if (valueSession == undefined || valueSession === null || valueSession === \"\") {\r\n valueSession = 0;\r\n valueSession++;\r\n sessionStorage.setItem(key, valueSession);\r\n if (newInvoice) {\r\n return true;\r\n }\r\n return true;\r\n }\r\n valueSession++;\r\n sessionStorage.setItem(key, valueSession);\r\n return true;\r\n }\r\n },\r\n\r\n roundNumber: function (num, decimals) {\r\n var n = Number(num).toFixed(decimals);\r\n return n;\r\n },\r\n\r\n getAllHD_ValidateHD: function () {\r\n var returnData = [];\r\n webix.ajax().sync().get(app.config.host + \"/Invoice68/GetListIDDataInvoiceDanhSachChoKy?start=0&count=1000&continue=null&filter=null&tlbparam=null&tthai=Chờ ký\", function (text) {\r\n var data = JSON.parse(text);\r\n returnData.push(data[0]);\r\n returnData.push(data[1]);\r\n });\r\n return returnData;\r\n }\r\n };\r\n});\r\n\ndefine('views/forms/68_invoiceForms',[\"app\", \"locale\", \"models/user\", \"views/commonHD\"], function (app, _, user, commonHD) {\r\n var editmode = 0;\r\n var mau04 = {};\r\n\r\n var formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n };\r\n function f(a) {\r\n return webix.Number.format(a, formatSoDefault);\r\n }\r\n function g(a) {\r\n return webix.Number.parse(a, formatSoDefault);\r\n }\r\n /*function fmNumber(a){\r\n if(a !== undefined)\r\n return f(a);\r\n return a;\r\n };*/\r\n var fmNumber = {\r\n parse: function (a) {\r\n return g(a);\r\n },\r\n edit: function (a) {\r\n if (a !== undefined) return f(a);\r\n return a;\r\n },\r\n };\r\n var mess = \"Tổng tiền chiết khấu lớn hơn tổng tiền hàng hóa thông thương trên hóa đơn. Vui lòng lập riêng hóa đơn chiết khấu mới.\";\r\n\r\n function renderFormat(val) {\r\n if (val === undefined) val = \"VND\";\r\n var url = app.config.host + \"/Invoice68/GetDecimalPlace?ma_nt=\" + val;\r\n var table_chitiet = webix.$$(\"hoadon68_chitiet\");\r\n var table_phi = webix.$$(\"hoadon68_phi\");\r\n var table = $$(\"invoiceForms\");\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var arr = JSON.parse(text);\r\n var decimal_place = Array(Number(arr[0][\"hoadon123\"]) + 1).join(\"9\");\r\n var decimal_format = Number(arr[0][\"hoadon123\"]);\r\n var format_numeric = {\r\n //maximumValue: Number(\"999999999999.\" + decimal_place),\r\n //minValue: Number(\"-999999999999.\" + decimal_place),\r\n decimalPlaces: Number(decimal_format),\r\n };\r\n formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimal_format,\r\n };\r\n\r\n var formatSo = webix.Number.numToStr(formatSoDefault);\r\n\r\n var arrayString_chitiet = [\"sluong\", \"dgia\", \"thtien\", \"stckhau\", \"tthue\", \"tgtien\"];\r\n for (var i = 0; i < arrayString_chitiet.length; i++) {\r\n var format_config = table_chitiet.getColumnConfig(arrayString_chitiet[i]);\r\n\r\n format_config.format = formatSo;\r\n\r\n format_config.numericConfig = format_numeric;\r\n }\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n\r\n var format_config_phi = table_phi.getColumnConfig(\"tienphi\");\r\n format_config_phi.format = formatSo;\r\n format_config_phi.numericConfig = format_numeric;\r\n\r\n table_chitiet.refreshColumns();\r\n table_phi.refreshColumns();\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n $$(arrayString[i]).refresh();\r\n }\r\n });\r\n }\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n //view: \"toolbar\",\r\n // css: { \"box-shadow\": \"0 -2px #3498db inset !important\", \"background\": \"#ffffff !important\" },\r\n //css: { \"background\": \"#e6f2ff !important\" },\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-iconInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Hóa đơn 01GTGT
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_InvoiceForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n // var form = webix.$$(\"window-form\");\r\n // hint_form(form.config.hint);\r\n },\r\n },\r\n ],\r\n },\r\n id: \"invoice68\",\r\n resize: true,\r\n fullscreen: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () {},\r\n },\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 100 },\r\n view: \"form\",\r\n id: \"invoiceForms\",\r\n width: 800,\r\n height: 500,\r\n complexData: true,\r\n margin: 0,\r\n on: {\r\n // onViewShow: function () {\r\n // }\r\n },\r\n elements: [\r\n {\r\n view: \"scrollview\",\r\n scroll: \"y\",\r\n body: {\r\n paddingX: 18,\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin hóa đơn\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n { view: \"text\", label: \"cctbao_id\", id: \"cctbao_id\", name: \"cctbao_id\", hidden: true },\r\n {\r\n view: \"datepicker\",\r\n name: \"nlap\",\r\n label: \"Ngày hóa đơn\",\r\n //labelPosition: \"top\",\r\n id: \"nlap\",\r\n required: true,\r\n },\r\n {\r\n view: \"text\",\r\n name: \"shdon\",\r\n id: \"shdon\",\r\n label: \"Số HĐ\",\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: _(\"Ký hiệu\"),\r\n name: \"khieu\",\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n id: \"khieu\",\r\n // type:\"number\",\r\n attributes: { maxlength: 7 },\r\n },\r\n {\r\n view: \"text\",\r\n label: _(\"Số đơn hàng\"),\r\n name: \"sdhang\",\r\n id: \"sdhang\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"combo\",\r\n name: \"dvtte\",\r\n label: \"Mã tiền tệ\",\r\n //labelPosition: \"top\",\r\n id: \"dvtte\",\r\n required: true,\r\n value: \"VND\",\r\n invalidMessage: \"Trạng thái hóa đơn không thể bỏ trống !\",\r\n options: {\r\n view: \"gridsuggest\",\r\n value: \"VND\",\r\n template: \"#value#\",\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00188\",\r\n body: {\r\n columns: [{ id: \"value\", header: _(\"Mã tiền tệ\"), width: 120 }],\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) {\r\n this.load(this.config.url);\r\n return;\r\n }\r\n\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00188\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n },\r\n on: {\r\n onChange: function (newv, oldv) {\r\n commonHD.renderFormat(newv);\r\n var type_curency = $$(\"dvtte\").getValue();\r\n\r\n if (type_curency != \"VND\") {\r\n $$(\"docngoaitetv\").show();\r\n //$$(\"docngoaitetv\").setValue(1);\r\n } else {\r\n $$(\"docngoaitetv\").hide();\r\n }\r\n\r\n commonHD.ExeCuteCheckReadCurencyTV($$(\"docngoaitetv\").getValue());\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"docngoaitetv\",\r\n name: \"docngoaitetv\",\r\n value: 0,\r\n labelRight: _(\"Đọc ngoại tệ Tiếng Việt\"),\r\n labelWidth: 2,\r\n width: 180,\r\n hidden: true,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n commonHD.ExeCuteCheckReadCurencyTV(newv);\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Tỷ giá\",\r\n type: \"number\",\r\n value: 1,\r\n name: \"tgia\",\r\n id: \"tgia\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == undefined) return;\r\n if (newv == \"\") return;\r\n if (!webix.rules.isNumber(newv)) {\r\n webix.message(\"Tỷ giá phải nhập số\", \"error\");\r\n this.focus();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"combo\",\r\n name: \"htttoan\",\r\n label: \"HT thanh toán\",\r\n //labelPosition: \"top\",\r\n value: \"đồng\",\r\n id: \"htttoan\",\r\n value: \"Tiền mặt/Chuyển khoản\",\r\n options: {\r\n view: \"gridsuggest\",\r\n template: \"#name#\",\r\n value: \"Tiền mặt/Chuyển khoản\",\r\n body: {\r\n scroll: true,\r\n autoheight: false,\r\n columns: [\r\n // { id: \"id\", header: _(\"MS_THUE\"), width: 150 },\r\n { id: \"code\", header: _(\"Mã ngoại tệ\"), width: 150 },\r\n { id: \"name\", header: _(\"Tên ngoại tệ\"), width: 550 },\r\n ],\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00252\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00252\",\r\n },\r\n on: {},\r\n },\r\n {\r\n cols: [\r\n { view: \"text\", label: _(\"STK người bán\"), name: \"stknban\", id: \"stknban\" },\r\n { view: \"text\", label: _(\"Ngân hàng\"), name: \"tnhban\", id: \"tnhban\" },\r\n ],\r\n },\r\n {},\r\n ],\r\n },\r\n },\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin khách hàng\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n editor: \"textsearch\",\r\n label: \"Mã khách hàng\",\r\n id: \"mnmua\",\r\n name: \"mnmua\",\r\n suggest: {\r\n view: \"gridsuggest\",\r\n columnName: \"code\",\r\n body: {\r\n columns: [\r\n { id: \"id\", hidden: true, header: \"id\" },\r\n { id: \"code\", width: 120, header: \"code\" },\r\n { id: \"name\", width: 350, header: \"name\" },\r\n ],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00002\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n var table = $$(\"invoiceForms\");\r\n var selectedItem = $$(\"invoiceForms\").getValues();\r\n\r\n selectedItem[\"mnmua\"] = obj[\"code\"];\r\n selectedItem[\"tnmua\"] = obj[\"buyer_name\"];\r\n selectedItem[\"ten\"] = obj[\"name\"];\r\n selectedItem[\"dchi\"] = obj[\"address\"];\r\n selectedItem[\"mst\"] = obj[\"tax_code\"];\r\n selectedItem[\"email\"] = obj[\"email\"];\r\n selectedItem[\"stknmua\"] = obj[\"bank_account\"];\r\n table.setValues(selectedItem);\r\n },\r\n },\r\n },\r\n },\r\n {\r\n id: \"mst\",\r\n name: \"mst\",\r\n view: \"search\",\r\n label: \"Mã số thuế\",\r\n //align: \"center\",\r\n validate: webix.rules.isTaxCode,\r\n invalidMessage: \"Mã số thuế không hợp lệ\",\r\n placeholder: _(\"SEARCH\") + \"...\",\r\n // width: 300,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == undefined) return;\r\n if (newv == \"\") return;\r\n if (!webix.rules.isTaxCode(newv)) {\r\n webix.message(\"Mã số thuế không hợp lệ\", \"error\");\r\n this.focus();\r\n return;\r\n }\r\n // if (newv.length != 11) {\r\n // webix.message({ type: \"error\", text: \"Độ dài mẫu số phải là 11 ký tự\" });\r\n // this.focus();\r\n // return;\r\n // }\r\n },\r\n onTimedKeyPress: function () {\r\n // var table = $$(\"tblSearch\");\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n },\r\n onSearchIconClick: function (e) {\r\n //get value của form hiện tại để đổi giá trị\r\n var mst = this.getValue();\r\n // window.location.href = \"http://tracuunnt.gdt.gov.vn/tcnnt/mstdn.jsp?mst=\" + mst;\r\n window.open(\"http://tracuunnt.gdt.gov.vn/tcnnt/mstdn.jsp?mst=\" + mst);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n { view: \"text\", label: _(\"Tên người mua\"), name: \"tnmua\", id: \"tnmua\" },\r\n {\r\n view: \"text\",\r\n label: _(\"Email\"),\r\n name: \"email\",\r\n id: \"email\",\r\n validate: function (value) {\r\n if (value) {\r\n var re = /\\S+@\\S+\\.\\S+/;\r\n return re.test(value);\r\n }\r\n return true;\r\n },\r\n invalidMessage: \"Bạn nhập không đúng email\",\r\n },\r\n ],\r\n },\r\n {\r\n view: \"text\",\r\n label: _(\"Tên đơn vị\"),\r\n name: \"ten\",\r\n id: \"ten\",\r\n validate: function (value) {\r\n var item = $$(\"invoiceForms\").getValues();\r\n if (item[\"mst\"] && item[\"mst\"] !== null && (!value || value === null)) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n invalidMessage: \"Bắt buộc khi có mã số thuế\",\r\n },\r\n { view: \"text\", label: _(\"Địa chỉ\"), name: \"dchi\", id: \"dchi\" },\r\n {\r\n cols: [\r\n { view: \"text\", label: _(\"STK người mua\"), name: \"stknmua\", id: \"stknmua\" },\r\n { view: \"text\", label: _(\"Ngân hàng\"), name: \"tnhmua\", id: \"tnhmua\" },\r\n ],\r\n },\r\n {\r\n view: \"text\",\r\n label: _(\"Số điện thoại\"),\r\n name: \"sdtnmua\",\r\n id: \"sdtnmua\",\r\n },\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n borderless: true,\r\n view: \"tabview\",\r\n scrollX: true,\r\n tabbar: {\r\n width: 300,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n rows: [\r\n {\r\n id: \"mainInvoiceManage\",\r\n css: {\r\n \"padding-bottom\": \"5px !important\",\r\n },\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n var item = {\r\n id: webix.uid(),\r\n };\r\n table.add(item);\r\n table.select(item.id, \"ma\", false);\r\n table.edit({\r\n row: item.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n var copy = webix.copy(item);\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, \"ma\", false);\r\n table.edit({\r\n row: copy.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"check_chietkhau\",\r\n value: 0,\r\n labelRight: _(\"Chiết khấu\"),\r\n labelWidth: 2,\r\n tooltip: \"Tích vào đây nếu hóa đơn có chiết khấu\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"hoadon68_chitiet\").showColumn(\"stckhau\");\r\n $$(\"hoadon68_chitiet\").showColumn(\"tlckhau\");\r\n } else {\r\n $$(\"hoadon68_chitiet\").hideColumn(\"stckhau\");\r\n $$(\"hoadon68_chitiet\").hideColumn(\"tlckhau\");\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_chitiet\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n scroll: true,\r\n columns: [\r\n {\r\n id: \"stt\",\r\n header: \"\",\r\n width: 30,\r\n },\r\n {\r\n id: \"ma\",\r\n header: _(\"Mã hàng hóa\"),\r\n editor: \"textsearch\",\r\n width: 100,\r\n editable: true,\r\n suggest: {\r\n view: \"gridsuggest\",\r\n columnName: \"ma_hanghoa\",\r\n body: {\r\n columns: [\r\n { id: \"id\", hidden: true, header: \"id\" },\r\n { id: \"code\", width: 120, header: \"code\" },\r\n { id: \"name\", width: 350, header: \"name\" },\r\n ],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00005\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n var table = $$(\"hoadon68_chitiet\");\r\n var selectedItem = table.getSelectedItem();\r\n selectedItem[\"ma\"] = obj[\"code\"];\r\n selectedItem[\"ten\"] = obj[\"name\"];\r\n selectedItem[\"mdvtinh\"] = obj[\"unit_code\"];\r\n selectedItem[\"dgia\"] = obj[\"unit_price\"];\r\n selectedItem[\"tsuat\"] = obj[\"vat_type\"];\r\n selectedItem[\"tsuatstr\"] = obj[\"vat_name\"];\r\n table.updateItem(selectedItem.id, selectedItem);\r\n },\r\n },\r\n },\r\n },\r\n {\r\n id: \"ten\",\r\n header: _(\"Tên hàng hóa\"),\r\n editor: \"text\",\r\n width: 350,\r\n editable: true,\r\n },\r\n {\r\n id: \"mdvtinh\",\r\n header: _(\"ĐVT\"),\r\n editor: \"text\",\r\n width: 80,\r\n editable: true,\r\n suggest: {\r\n view: \"gridsuggest\",\r\n columnName: \"name\",\r\n body: {\r\n columns: [\r\n { id: \"id\", hidden: true, header: \"id\" },\r\n { id: \"name\", width: 120, header: \"name\" },\r\n ],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00035\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n var table = $$(\"hoadon68_chitiet\");\r\n var selectedItem = table.getSelectedItem();\r\n selectedItem[\"mdvtinh\"] = obj[\"code\"];\r\n\r\n table.updateItem(selectedItem.id, selectedItem);\r\n },\r\n },\r\n },\r\n },\r\n {\r\n id: \"sluong\",\r\n header: _(\"Số lượng\"),\r\n editor: \"autonumeric\",\r\n width: 100,\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"dgia\",\r\n header: _(\"Đơn giá\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"thtien\",\r\n header: _(\"Tiền trước thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tlckhau\",\r\n header: _(\"% CK\"),\r\n width: 80,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n hidden: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"stckhau\",\r\n header: _(\"Tiền CK\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n hidden: true,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tsuat\",\r\n header: _(\"Thuế suất\"),\r\n width: 100,\r\n editor: \"combo\",\r\n //editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var table = $$(\"hoadon68_chitiet\");\r\n var selectedItem = table.getSelectedItem();\r\n if (newv == -1) selectedItem[\"tsuatstr\"] = \"KCT\";\r\n if (newv == -2) selectedItem[\"tsuatstr\"] = \"KKKNT\";\r\n table.updateItem(selectedItem.id, selectedItem);\r\n },\r\n },\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00019\",\r\n optionslist: true,\r\n },\r\n {\r\n id: \"tthue\",\r\n header: _(\"Tiền thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tgtien\",\r\n header: _(\"Tiền sau thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"kmai\",\r\n name: \"kmai\",\r\n header: _(\"Tính chất\"),\r\n width: 200,\r\n editor: \"combo\",\r\n editable: true,\r\n value: \"1\",\r\n options: [\r\n { id: \"1\", value: \"Hàng hóa dịch vụ\" },\r\n { id: \"2\", value: \"Khuyến mại\" },\r\n { id: \"3\", value: \"Chiếu khấu thương mại\" },\r\n { id: \"4\", value: \"Ghi chú\" },\r\n ],\r\n },\r\n ],\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onAfterLoad: function () {\r\n var table = this;\r\n var data = table.serialize();\r\n\r\n data.forEach(function (entry) {\r\n if (entry[\"stckhau\"] != undefined || entry[\"tlckhau\"] != undefined) {\r\n if (entry[\"stckhau\"] != 0 || entry[\"tlckhau\"] != 0) {\r\n var ck = $$(\"check_chietkhau\");\r\n if (ck != undefined) {\r\n ck.setValue(1);\r\n return false;\r\n }\r\n }\r\n }\r\n });\r\n },\r\n onCheck: function (row, column, state) {\r\n var table = this;\r\n if (column == \"khuyen_mai\") {\r\n if (state == true) {\r\n }\r\n }\r\n },\r\n onAfterAdd: function (id, index) {\r\n var table = $$(this.config.id);\r\n var data = table.serialize();\r\n\r\n var tong_tien_tt_dp = 0;\r\n var tong_tien_thue_dp = 0;\r\n var tong_tien_ck_dp = 0;\r\n var tong_tien_dp = 0;\r\n data.forEach(function (entry) {\r\n tong_tien_tt_dp += entry[\"tien_tt\"] == null ? 0 : entry[\"tien_tt\"];\r\n tong_tien_thue_dp += entry[\"tien_thue\"] == null ? 0 : entry[\"tien_thue\"];\r\n tong_tien_ck_dp += entry[\"tien_ck\"] == null ? 0 : entry[\"tien_ck\"];\r\n tong_tien_dp += entry[\"tong_tien\"] == null ? 0 : entry[\"tong_tien\"];\r\n });\r\n },\r\n onAfterDelete: function (id) {\r\n var table = $$(this.config.id);\r\n var data = table.serialize();\r\n var tien_tt_all = 0;\r\n var tien_thue_all = 0;\r\n var tien_ck_all = 0;\r\n var tong_tien_all = 0;\r\n\r\n var tien_tt_10 = 0;\r\n var tien_thue_10 = 0;\r\n var tien_ck_10 = 0;\r\n var tong_tien_10 = 0;\r\n\r\n var tien_tt_5 = 0;\r\n var tien_thue_5 = 0;\r\n var tien_ck_5 = 0;\r\n var tong_tien_5 = 0;\r\n\r\n var tien_tt_0 = 0;\r\n var tien_thue_0 = 0;\r\n var tien_ck_0 = 0;\r\n var tong_tien_0 = 0;\r\n\r\n var tien_tt_k = 0;\r\n var tien_thue_k = 0;\r\n var tien_ck_k = 0;\r\n var tong_tien_k = 0;\r\n\r\n var tien_tt_kct = 0;\r\n var tien_thue_kct = 0;\r\n var tien_ck_kct = 0;\r\n var tong_tien_kct = 0;\r\n\r\n var tien_tt_kkk = 0;\r\n var tien_thue_kkk = 0;\r\n var tien_ck_kkk = 0;\r\n var tong_tien_kkk = 0;\r\n\r\n data.forEach(function (entry) {\r\n if (entry.kmai && (entry.kmai.toString() === \"1\" || entry.kmai.toString() === \"3\")) {\r\n if (entry.kmai.toString() === \"1\") {\r\n tien_tt_all += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_all += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_all += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_all += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n if (entry[\"tsuat\"] == 10) {\r\n tien_tt_10 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_10 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_10 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_10 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 5) {\r\n tien_tt_5 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_5 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_5 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_5 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 0) {\r\n tien_tt_0 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_0 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_0 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_0 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -1) {\r\n tien_tt_kct += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kct += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kct += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kct += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -2) {\r\n tien_tt_kkk += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kkk += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kkk += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kkk += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else {\r\n tien_tt_k += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_k += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_k += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_k += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n } else {\r\n tien_tt_all -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_all -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_all -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_all -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n if (entry[\"tsuat\"] == 10) {\r\n tien_tt_10 -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_10 -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_10 -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_10 -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 5) {\r\n tien_tt_5 -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_5 -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_5 -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_5 -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 0) {\r\n tien_tt_0 -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_0 -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_0 -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_0 -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -1) {\r\n tien_tt_kct -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kct -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kct -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kct -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -2) {\r\n tien_tt_kkk -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kkk -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kkk -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kkk -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else {\r\n tien_tt_k -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_k -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_k -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_k -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n }\r\n }\r\n });\r\n\r\n $$(\"tgtcthue\").setValue(tien_tt_all);\r\n $$(\"tgtcthue10\").setValue(tien_tt_10);\r\n $$(\"tgtcthue5\").setValue(tien_tt_5);\r\n $$(\"tgtcthue0\").setValue(tien_tt_0);\r\n $$(\"tgtcthuek\").setValue(tien_tt_k);\r\n $$(\"tgtcthuekct\").setValue(tien_tt_kct);\r\n $$(\"tgtcthuekkk\").setValue(tien_tt_kkk);\r\n\r\n $$(\"ttcktmai\").setValue(tien_ck_all);\r\n $$(\"ttcktmai10\").setValue(tien_ck_10);\r\n $$(\"ttcktmai5\").setValue(tien_ck_5);\r\n $$(\"ttcktmai0\").setValue(tien_ck_0);\r\n $$(\"ttcktmaik\").setValue(tien_ck_k);\r\n $$(\"ttcktmaikct\").setValue(tien_ck_kct);\r\n $$(\"ttcktmaikkk\").setValue(tien_ck_kkk);\r\n\r\n $$(\"tgtthue\").setValue(tien_thue_all);\r\n $$(\"tgtthue10\").setValue(tien_thue_10);\r\n $$(\"tgtthue5\").setValue(tien_thue_5);\r\n $$(\"tgtthue0\").setValue(tien_thue_0);\r\n $$(\"tgtthuek\").setValue(tien_thue_k);\r\n $$(\"tgtthuekct\").setValue(tien_thue_kct);\r\n $$(\"tgtthuekkk\").setValue(tien_thue_kkk);\r\n\r\n $$(\"tgtttbso\").setValue(tong_tien_all);\r\n $$(\"tgtttbso10\").setValue(tong_tien_10);\r\n $$(\"tgtttbso5\").setValue(tong_tien_5);\r\n $$(\"tgtttbso0\").setValue(tong_tien_0);\r\n $$(\"tgtttbsok\").setValue(tong_tien_k);\r\n $$(\"tgtttbsokct\").setValue(tong_tien_kct);\r\n $$(\"tgtttbsokkk\").setValue(tong_tien_kkk);\r\n\r\n //if ($$(\"tkcktmn\").getValue() != null && $$(\"tkcktmn\").getValue() != \"\") tong_tien_all -= Number($$(\"tkcktmn\").getValue());\r\n if ($$(\"tgtphi\").getValue() != null && $$(\"tgtphi\").getValue() != \"\") tong_tien_all += Number($$(\"tgtphi\").getValue());\r\n\r\n $$(\"tgtttbso_last\").setValue(tong_tien_all);\r\n var tien_chietkhauthuongmai = 0;\r\n data.forEach(function (entry) {\r\n if (entry[\"kmai\"] && entry[\"kmai\"].toString() == \"3\") {\r\n tien_chietkhauthuongmai += entry[\"tgtien\"] == null ? 0 : Number(entry[\"tgtien\"]);\r\n }\r\n });\r\n $$(\"tkcktmn\").setValue(tien_chietkhauthuongmai);\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n var table_inv_views = webix.$$(\"invoiceViews\");\r\n var item_inv = table_inv_views.getSelectedItem();\r\n var item_note = \"\";\r\n if (item_inv != undefined && item_inv.hasOwnProperty(\"note\") == true) {\r\n item_note = item_inv.note ? item_inv.note : \"\";\r\n }\r\n var table = $$(this.config.id);\r\n 1;\r\n var selectedItem = table.getItem(editor.row);\r\n var columnId = editor.config.id;\r\n if (!selectedItem.kmai) selectedItem.kmai = \"1\";\r\n var so_luong = webix.rules.isNumber(selectedItem.sluong) ? selectedItem.sluong : 0;\r\n var don_gia = webix.rules.isNumber(selectedItem.dgia) ? selectedItem.dgia : 0;\r\n var tien_tt = webix.rules.isNumber(selectedItem.thtien) ? selectedItem.thtien : 0;\r\n var pt_ck = webix.rules.isNumber(selectedItem.tlckhau) ? selectedItem.tlckhau : 0;\r\n var tien_ck = webix.rules.isNumber(selectedItem.stckhau) ? selectedItem.stckhau : 0;\r\n var pt_thue = webix.rules.isNumber(selectedItem.tsuat) ? selectedItem.tsuat : 0;\r\n var tien_thue = webix.rules.isNumber(selectedItem.tthue) ? selectedItem.tthue : 0;\r\n var tong_tien = webix.rules.isNumber(selectedItem.tgtien) ? selectedItem.tgtien : 0;\r\n if (\r\n columnId == \"tsuat\" ||\r\n columnId == \"sluong\" ||\r\n columnId == \"dgia\" ||\r\n columnId == \"tlckhau\" ||\r\n columnId == \"tsuatstr\" ||\r\n columnId == \"kmai\" ||\r\n columnId == \"ma\"\r\n ) {\r\n tien_tt += tien_ck;\r\n if (item_note != \"reduce_change_invoice\") {\r\n if (don_gia < 0) {\r\n don_gia = 0;\r\n }\r\n }\r\n\r\n if (so_luong < 0) {\r\n so_luong = 0;\r\n }\r\n\r\n if (!(item_note == \"reduce_change_invoice\") && don_gia > 0) {\r\n tien_tt = so_luong * don_gia;\r\n } else tien_tt = so_luong * don_gia;\r\n\r\n if (pt_ck < 0) {\r\n pt_ck = 0;\r\n }\r\n if (pt_ck > 100) {\r\n pt_ck = 0;\r\n }\r\n tien_ck = (tien_tt * pt_ck) / 100;\r\n if (!(item_note == \"reduce_change_invoice\") && tien_ck - tien_tt > 0) {\r\n tien_ck = 0;\r\n }\r\n if (selectedItem.kmai != 1) tien_ck = 0;\r\n tien_thue = ((tien_tt - tien_ck) * (pt_thue < 0 ? 0 : pt_thue)) / 100;\r\n tong_tien = tien_tt - tien_ck + parseFloat(tien_thue);\r\n\r\n if (item_note == \"reduce_change_invoice\") {\r\n if (don_gia > 0) {\r\n don_gia = don_gia * -1;\r\n tien_tt = so_luong * don_gia;\r\n tien_ck = tien_ck * -1;\r\n tien_thue = tien_thue * -1;\r\n tong_tien = tong_tien * -1;\r\n }\r\n }\r\n tien_tt -= tien_ck;\r\n selectedItem.sluong = so_luong;\r\n selectedItem.dgia = don_gia;\r\n //selectedItem.tsuat = pt_thue;\r\n selectedItem.thtien = tien_tt;\r\n selectedItem.tlckhau = pt_ck;\r\n selectedItem.stckhau = tien_ck;\r\n selectedItem.tthue = tien_thue;\r\n /*if(selectedItem.kmai.toString() !== \"3\"){\r\n }*/\r\n selectedItem.tgtien = tong_tien;\r\n }\r\n\r\n table.updateItem(selectedItem.id, selectedItem);\r\n if (selectedItem.kmai.toString() === \"2\") {\r\n //selectedItem.sluong = null;\r\n //selectedItem.dgia = null;\r\n //selectedItem.tsuat = null;\r\n //selectedItem.tsuatstr = null;\r\n selectedItem.thtien = 0;\r\n //selectedItem.tlckhau = null;\r\n //selectedItem.stckhau = null;\r\n selectedItem.tthue = 0;\r\n selectedItem.tgtien = 0;\r\n if (columnId == \"kmai\") {\r\n selectedItem.sluong = null;\r\n selectedItem.dgia = null;\r\n selectedItem.tsuat = null;\r\n selectedItem.tsuatstr = null;\r\n selectedItem.tlckhau = null;\r\n selectedItem.stckhau = null;\r\n }\r\n table.updateItem(selectedItem.id, selectedItem);\r\n } else if (selectedItem.kmai.toString() === \"3\") {\r\n //selectedItem.tsuat = \"0\";\r\n //selectedItem.tsuatstr = \"0%\";\r\n selectedItem.tlckhau = null;\r\n selectedItem.stckhau = null;\r\n //selectedItem.tthue = 0;\r\n /*if(columnId !== \"tgtien\"){\r\n selectedItem.tgtien = selectedItem.thtien\r\n }*/\r\n } else if (selectedItem.kmai.toString() === \"4\") {\r\n selectedItem.sluong = null;\r\n selectedItem.dgia = null;\r\n selectedItem.tsuat = null;\r\n selectedItem.tsuatstr = null;\r\n selectedItem.thtien = null;\r\n selectedItem.tlckhau = null;\r\n selectedItem.stckhau = null;\r\n selectedItem.tthue = null;\r\n selectedItem.tgtien = null;\r\n table.updateItem(selectedItem.id, selectedItem);\r\n }\r\n var data = table.serialize();\r\n\r\n var tien_tt_all = 0;\r\n var tien_thue_all = 0;\r\n var tien_ck_all = 0;\r\n var tong_tien_all = 0;\r\n\r\n var tien_tt_10 = 0;\r\n var tien_thue_10 = 0;\r\n var tien_ck_10 = 0;\r\n var tong_tien_10 = 0;\r\n\r\n var tien_tt_5 = 0;\r\n var tien_thue_5 = 0;\r\n var tien_ck_5 = 0;\r\n var tong_tien_5 = 0;\r\n\r\n var tien_tt_0 = 0;\r\n var tien_thue_0 = 0;\r\n var tien_ck_0 = 0;\r\n var tong_tien_0 = 0;\r\n\r\n var tien_tt_k = 0;\r\n var tien_thue_k = 0;\r\n var tien_ck_k = 0;\r\n var tong_tien_k = 0;\r\n\r\n var tien_tt_kct = 0;\r\n var tien_thue_kct = 0;\r\n var tien_ck_kct = 0;\r\n var tong_tien_kct = 0;\r\n\r\n var tien_tt_kkk = 0;\r\n var tien_thue_kkk = 0;\r\n var tien_ck_kkk = 0;\r\n var tong_tien_kkk = 0;\r\n\r\n data.forEach(function (entry) {\r\n if (entry.kmai && (entry.kmai.toString() === \"1\" || entry.kmai.toString() === \"3\")) {\r\n if (entry.kmai.toString() === \"1\") {\r\n tien_tt_all += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_all += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_all += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_all += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n if (entry[\"tsuat\"] == 10) {\r\n tien_tt_10 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_10 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_10 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_10 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 5) {\r\n tien_tt_5 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_5 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_5 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_5 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 0) {\r\n tien_tt_0 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_0 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_0 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_0 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -1) {\r\n tien_tt_kct += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kct += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kct += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kct += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -2) {\r\n tien_tt_kkk += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kkk += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kkk += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kkk += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else {\r\n tien_tt_k += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_k += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_k += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_k += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n } else {\r\n tien_tt_all -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_all -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_all -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_all -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n if (entry[\"tsuat\"] == 10) {\r\n tien_tt_10 -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_10 -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_10 -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_10 -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 5) {\r\n tien_tt_5 -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_5 -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_5 -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_5 -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 0) {\r\n tien_tt_0 -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_0 -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_0 -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_0 -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -1) {\r\n tien_tt_kct -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kct -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kct -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kct -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -2) {\r\n tien_tt_kkk -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kkk -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kkk -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kkk -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else {\r\n tien_tt_k -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_k -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_k -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_k -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n }\r\n }\r\n });\r\n\r\n $$(\"tgtcthue\").setValue(tien_tt_all);\r\n $$(\"tgtcthue10\").setValue(tien_tt_10);\r\n $$(\"tgtcthue5\").setValue(tien_tt_5);\r\n $$(\"tgtcthue0\").setValue(tien_tt_0);\r\n $$(\"tgtcthuek\").setValue(tien_tt_k);\r\n $$(\"tgtcthuekct\").setValue(tien_tt_kct);\r\n $$(\"tgtcthuekkk\").setValue(tien_tt_kkk);\r\n\r\n $$(\"ttcktmai\").setValue(tien_ck_all);\r\n $$(\"ttcktmai10\").setValue(tien_ck_10);\r\n $$(\"ttcktmai5\").setValue(tien_ck_5);\r\n $$(\"ttcktmai0\").setValue(tien_ck_0);\r\n $$(\"ttcktmaik\").setValue(tien_ck_k);\r\n $$(\"ttcktmaikct\").setValue(tien_ck_kct);\r\n $$(\"ttcktmaikkk\").setValue(tien_ck_kkk);\r\n\r\n $$(\"tgtthue\").setValue(tien_thue_all);\r\n $$(\"tgtthue10\").setValue(tien_thue_10);\r\n $$(\"tgtthue5\").setValue(tien_thue_5);\r\n $$(\"tgtthue0\").setValue(tien_thue_0);\r\n $$(\"tgtthuek\").setValue(tien_thue_k);\r\n $$(\"tgtthuekct\").setValue(tien_thue_kct);\r\n $$(\"tgtthuekkk\").setValue(tien_thue_kkk);\r\n\r\n $$(\"tgtttbso\").setValue(tong_tien_all);\r\n $$(\"tgtttbso10\").setValue(tong_tien_10);\r\n $$(\"tgtttbso5\").setValue(tong_tien_5);\r\n $$(\"tgtttbso0\").setValue(tong_tien_0);\r\n $$(\"tgtttbsok\").setValue(tong_tien_k);\r\n $$(\"tgtttbsokct\").setValue(tong_tien_kct);\r\n $$(\"tgtttbsokkk\").setValue(tong_tien_kkk);\r\n\r\n //if ($$(\"tkcktmn\").getValue() != null && $$(\"tkcktmn\").getValue() != \"\") tong_tien_all -= Number($$(\"tkcktmn\").getValue());\r\n if ($$(\"tgtphi\").getValue() != null && $$(\"tgtphi\").getValue() != \"\") tong_tien_all += Number($$(\"tgtphi\").getValue());\r\n\r\n $$(\"tgtttbso_last\").setValue(tong_tien_all);\r\n var tien_chietkhauthuongmai = 0;\r\n data.forEach(function (entry) {\r\n if (entry[\"kmai\"] && entry[\"kmai\"].toString() == \"3\") {\r\n tien_chietkhauthuongmai += entry[\"tgtien\"] == null ? 0 : Number(entry[\"tgtien\"]);\r\n }\r\n });\r\n $$(\"tkcktmn\").setValue(tien_chietkhauthuongmai);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n {\r\n header: \"Tiền phí/lệ phí\",\r\n select: \"cell\",\r\n body: {\r\n rows: [\r\n {\r\n id: \"mainInvoiceManage\",\r\n css: {\r\n \"padding-bottom\": \"5px !important\",\r\n },\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n var item = {\r\n id: webix.uid(),\r\n tienphi: 0,\r\n };\r\n table.add(item);\r\n table.select(item.id);\r\n table.edit({\r\n row: item.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n var copy = webix.copy(item);\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id);\r\n table.edit({\r\n row: copy.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_phi\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n columns: [\r\n {\r\n id: \"tnphi\",\r\n name: \"tnphi\",\r\n header: _(\"Tên phí\"),\r\n editor: \"text\",\r\n width: 350,\r\n\r\n editable: true,\r\n },\r\n {\r\n id: \"tienphi\",\r\n name: \"tienphi\",\r\n header: _(\"Tiền phí\"),\r\n editor: \"text\",\r\n width: 350,\r\n editable: true,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n ],\r\n on: {\r\n onAfterDelete: function (id) {\r\n var table = $$(this.config.id);\r\n var data = table.serialize();\r\n var tien_phi_moi = 0;\r\n data.forEach(function (entry) {\r\n tien_phi_moi += entry[\"tienphi\"] == null ? 0 : Number(entry[\"tienphi\"]);\r\n });\r\n $$(\"tgtphi\").setValue(tien_phi_moi);\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n var table = $$(this.config.id);\r\n var data = table.serialize();\r\n var tien_phi_moi = 0;\r\n data.forEach(function (entry) {\r\n tien_phi_moi += entry[\"tienphi\"] == null ? 0 : Number(entry[\"tienphi\"]);\r\n });\r\n $$(\"tgtphi\").setValue(tien_phi_moi);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n rows: [\r\n { view: \"label\", label: \"Loại thuế\", css: \"lblTongtien\" },\r\n {\r\n view: \"label\",\r\n label: \" + Tổng cộng hàng hóa, dịch vụ\",\r\n height: 22,\r\n css: { \"padding-left\": \"5px\", \"font-weight\": \"bold\", \"background-color\": \"#86b2cf\" },\r\n },\r\n { view: \"label\", label: \"Thuế suất 10%\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Thuế suất 5%\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Thuế suất 0%\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Thuế suất khác\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Không chịu thuế GTGT\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Không kê khai, tính nộp thuế GTGT\", css: \"lblSubTongtien\", height: 22 },\r\n {},\r\n {},\r\n {},\r\n // { view: \"label\", label: \"Tổng cộng phí lệ phí\", css: { \"font-weight\": \"bold\", \"background-color\": \"#86b2cf\" } , height: 22 },\r\n // { view: \"label\", label: \"Tổng cộng thanh toán\", css: { \"font-weight\": \"bold\", \"background-color\": \"#86b2cf\" } , height: 22 },\r\n ],\r\n },\r\n {\r\n rows: [\r\n {\r\n view: \"label\",\r\n label: \"Thành tiền trước thuế\",\r\n css: \"lblTongtien\",\r\n validate: function (value) {\r\n if (Number(value) > 0 || Number(value) === 0) {\r\n return true;\r\n }\r\n webix.message(mess, \"error\");\r\n return false;\r\n },\r\n invalidMessage: mess,\r\n },\r\n { view: \"text\", id: \"tgtcthue\", name: \"tgtcthue\", css: \"txtTongtien\", readonly: true, height: 22, format: fmNumber },\r\n { view: \"text\", format: fmNumber, id: \"tgtcthue10\", name: \"tgtcthue10\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtcthue5\", name: \"tgtcthue5\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtcthue0\", name: \"tgtcthue0\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtcthuek\", name: \"tgtcthuek\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtcthuekct\", name: \"tgtcthuekct\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtcthuekkk\", name: \"tgtcthuekkk\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n {},\r\n {},\r\n {},\r\n // { view: \"text\", id: \"2\", name: \"2\", css: \"txtTongtien\", readonly: true, height: 22 }\r\n ],\r\n },\r\n\r\n {\r\n rows: [\r\n { view: \"label\", label: \"Tiền chiết khấu\", css: \"lblTongtien\" },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmai\", name: \"ttcktmai\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmai10\", name: \"ttcktmai10\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmai5\", name: \"ttcktmai5\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmai0\", name: \"ttcktmai0\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmaik\", name: \"ttcktmaik\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmaikct\", name: \"ttcktmaikct\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmaikkk\", name: \"ttcktmaikkk\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n {},\r\n {},\r\n {},\r\n ],\r\n },\r\n {\r\n rows: [\r\n {\r\n view: \"label\",\r\n label: \"Tiền thuế\",\r\n css: \"lblTongtien\",\r\n validate: function (value) {\r\n if (Number(value) > 0 || Number(value) === 0) {\r\n return true;\r\n }\r\n webix.message(mess, \"error\");\r\n return false;\r\n },\r\n invalidMessage: mess,\r\n format: fmNumber,\r\n },\r\n { view: \"text\", format: fmNumber, id: \"tgtthue\", name: \"tgtthue\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtthue10\", name: \"tgtthue10\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtthue5\", name: \"tgtthue5\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtthue0\", name: \"tgtthue0\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtthuek\", name: \"tgtthuek\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtthuekct\", name: \"tgtthuekct\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtthuekkk\", name: \"tgtthuekkk\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"label\", label: \"Chiết khấu thương mại\", labelAlign: \"right\", labelPosition: \"top\" },\r\n { view: \"label\", label: \"Tổng tiền phí/lệ phí\", labelAlign: \"right\", labelPosition: \"top\" },\r\n { view: \"label\", label: \"Thành tiền\", labelAlign: \"right\", labelPosition: \"top\" },\r\n ],\r\n },\r\n {\r\n rows: [\r\n { view: \"label\", label: \"Tổng tiền sau thuế\", css: \"lblTongtien\" },\r\n {\r\n view: \"text\",\r\n id: \"tgtttbso\",\r\n name: \"tgtttbso\",\r\n css: \"txtTongtien\",\r\n readonly: true,\r\n height: 22,\r\n format: fmNumber,\r\n },\r\n { view: \"text\", format: fmNumber, id: \"tgtttbso10\", name: \"tgtttbso10\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtttbso5\", name: \"tgtttbso5\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtttbso0\", name: \"tgtttbso0\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtttbsok\", name: \"tgtttbsok\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtttbsokct\", name: \"tgtttbsokct\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtttbsokkk\", name: \"tgtttbsokkk\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n {\r\n id: \"tkcktmn\",\r\n view: \"text\",\r\n editor: \"numeric\",\r\n labelWidth: 200,\r\n width: 600,\r\n format: fmNumber,\r\n name: \"tkcktmn\",\r\n /*on: {\r\n onChange: function (newValue, oldValue, config) {\r\n var tong_tien_cu = 0;\r\n if ($$(\"tgtttbso_last\").getValue() != null && $$(\"tgtttbso\").getValue() != \"\") tong_tien_cu = Number($$(\"tgtttbso_last\").getValue());\r\n if (oldValue != null && oldValue != \"\") tong_tien_cu += Number(oldValue);\r\n if (tong_tien_cu > $$(\"tkcktmn\").getValue()) {\r\n $$(\"tgtttbso_last\").setValue(tong_tien_cu - newValue);\r\n $$(\"tkcktmn\").setValue(newValue);\r\n } else {\r\n $$(\"tgtttbso_last\").setValue(tong_tien_cu);\r\n }\r\n },\r\n },*/\r\n },\r\n {\r\n view: \"text\",\r\n format: fmNumber,\r\n id: \"tgtphi\",\r\n name: \"tgtphi\",\r\n readonly: true,\r\n value: 0,\r\n on: {\r\n onChange: function (newValue, oldValue, config) {\r\n var tong_tien_cu = 0;\r\n if ($$(\"tgtttbso_last\").getValue() != null && $$(\"tgtttbso\").getValue() != \"\") tong_tien_cu = Number($$(\"tgtttbso_last\").getValue());\r\n if (oldValue != null && oldValue != \"\") tong_tien_cu -= Number(oldValue);\r\n tong_tien_cu += Number(newValue);\r\n $$(\"tgtttbso_last\").setValue(tong_tien_cu);\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n id: \"tgtttbso_last\",\r\n name: \"tgtttbso_last\",\r\n readonly: true,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n commonHD.ExeCuteCheckReadCurencyTV($$(\"docngoaitetv\").getValue());\r\n },\r\n },\r\n validate: function (value) {\r\n var table_inv_views = webix.$$(\"invoiceViews\");\r\n var item_inv = table_inv_views.getSelectedItem();\r\n var item_note = \"\";\r\n if (item_inv != undefined && item_inv.hasOwnProperty(\"note\") == true) {\r\n item_note = item_inv.note ? item_inv.note : \"\";\r\n }\r\n if (item_note == \"reduce_change_invoice\") return true;\r\n if (Number(value) > 0 || Number(value) === 0) {\r\n return true;\r\n }\r\n webix.message(mess, \"error\");\r\n return false;\r\n },\r\n invalidMessage: mess,\r\n format: fmNumber,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"label\",\r\n width: 140,\r\n label: \"Đọc tiền bằng chữ:\",\r\n css: { \"font-weight\": \"bold\", \"padding-left\": \"5px\" },\r\n height: 22,\r\n },\r\n { view: \"text\", id: \"tgtttbchu\", name: \"tgtttbchu\", readonly: true, height: 22 },\r\n ],\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n id: \"btnHoadonSaveMau04\",\r\n hidden: true,\r\n label: \"Ký và gửi CQT\",\r\n align: \"center\",\r\n type: \"form\",\r\n width: 120,\r\n click: function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n var tableHoadon = $$(\"invoiceForms\");\r\n\r\n if (tableHoadon.validate()) {\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n if (record.length == 0) {\r\n webix.message(\"Bạn chưa nhập chi tiết hóa đơn\", \"error\");\r\n return;\r\n } else {\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai.toString() === \"1\") {\r\n var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + tiền thuế != tiền sau thuế\");\r\n return;\r\n }\r\n if (it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n var t = webix.$$(\"invoiceViews\");\r\n var k = t.getSelectedItem();\r\n var details = [];\r\n details.push({ data: $$(\"hoadon68_chitiet\").serialize() });\r\n item[\"details\"] = details;\r\n item[\"tthdon\"] = 2;\r\n item[\"hdon68_id_lk\"] = k.id;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 0;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n data_post.mau04 = mau04;\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n };\r\n data_post.sign = postData;\r\n\r\n // console.log(data_post);\r\n webix.extend(tableHoadon, webix.ProgressBar);\r\n tableHoadon.disable();\r\n tableHoadon.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyHoadonTaomoi\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n //gửi mail tới khách hàng sau khi Ký\r\n if (json.tthai == \"Đã ký\") {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/System/ExecuteCommand\",\r\n {\r\n command: \"CM00025\",\r\n parameter: {},\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n // send email ma = 'AUTO_SEND_EMAIL'\r\n if (json[0].value == \"C\") {\r\n var data = {\r\n id: result.hdon_id,\r\n nguoinhan: result.email,\r\n tieude: \"Thông báo xuất hóa đơn điện tử\",\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/Invoice68/AutoSendInvoiceByEmail\",\r\n data,\r\n function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n } else {\r\n webix.message(data.error, \"error\");\r\n }\r\n }\r\n );\r\n }\r\n }\r\n );\r\n\r\n webix.modalbox.hide();\r\n //webix.message(\"Ký hóa đơn thành công !\", \"debug\");\r\n }\r\n\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n $$(\"invoice68\").close();\r\n $$(\"huyhoadonForms\").close();\r\n\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n\r\n return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n webix.extend(tableHoadon, webix.ProgressBar);\r\n tableHoadon.disable();\r\n tableHoadon.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyHoadonTaomoiUSB\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlMau0405?id=\" + json.idMau04);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, json]).then(function (results) {\r\n // webix.extend(tblInvoice, webix.ProgressBar);\r\n // tblInvoice.disable();\r\n // tblInvoice.showProgress();\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n // tblInvoice.enable();\r\n // tblInvoice.hideProgress();\r\n webix.message(\r\n \"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\",\r\n \"error\"\r\n );\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item.idMau04,\r\n tthdon: 3,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMau0405\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n $$(\"invoice68\").close();\r\n $$(\"huyhoadonForms\").close();\r\n\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n }\r\n });\r\n }\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n // webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n // $$(\"invoice68\").close();\r\n // $$(\"huyhoadonForms\").close();\r\n\r\n // app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n });\r\n });\r\n }\r\n }\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnHoadonSave\",\r\n label: \"Lưu tạm (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai.toString() === \"1\") {\r\n var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + Tiền thuế != tiền sau thuế\");\r\n return;\r\n }\r\n if (it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n if (table.validate()) {\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: record });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 0;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonSaveChange\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.$$(\"invoice68\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F11\",\r\n view: \"button\",\r\n id: \"btnHoadonCQT\",\r\n label: \"Ký và gửi CQT (F11)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 150,\r\n on: {\r\n onClick: function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai.toString() === \"1\") {\r\n var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + Tiền thuế != tiền sau thuế\");\r\n return;\r\n }\r\n if (it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n if (table.validate()) {\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: $$(\"hoadon68_chitiet\").serialize() });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 0;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonSaveChange\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var _res = JSON.parse(text);\r\n var json = JSON.parse(text);\r\n table.enable();\r\n table.hideProgress();\r\n if (!_res.hasOwnProperty(\"error\")) {\r\n webix.$$(\"invoice68\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, _res.data]);\r\n\r\n var lsthdon_id = [];\r\n lsthdon_id.push(_res.data.hdon_id);\r\n commonHD.ExcuteHoaDon(lsthdon_id, true, false);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n align: \"center\",\r\n type: \"danger\",\r\n width: 120,\r\n click: function () {\r\n this.getTopParentView().close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n setValues: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n if (item != null) {\r\n item[\"tdlap\"] = removeTimeZoneT(item[\"tdlap\"]);\r\n form.setValues(item);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n tablePhi.clearAll();\r\n tablePhi.load(urlPhi);\r\n }\r\n\r\n if (editmode == 2) {\r\n }\r\n // nếu có mẫu 04 (hóa đơn hủy)\r\n if (winconfig != null) {\r\n mau04 = winconfig;\r\n $$(\"btnHoadonSaveMau04\").show();\r\n $$(\"btnHoadonCQT\").destructor();\r\n $$(\"btnHoadonSave\").destructor();\r\n }\r\n this.getFormat(item[\"dvtte\"]);\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n //var form = webix.$$(\"invoiceForms\");\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1) {\r\n icon = \"\";\r\n } else {\r\n if (editmode == 2) icon = \"\";\r\n else icon = \"\";\r\n }\r\n\r\n webix.$$(\"head-iconInvoice\").setHTML(icon);\r\n webix.$$(\"head-iconInvoice\").refresh();\r\n },\r\n copyValues: function (item) {\r\n var form = webix.$$(\"invoiceForms\");\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"cthdon_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tableDetail.clearAll();\r\n tableDetail.parse(data);\r\n });\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlPhi, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"phi_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tablePhi.clearAll();\r\n tablePhi.parse(data);\r\n });\r\n // tableDetail.clearAll();\r\n // tableDetail.load(url);\r\n item[\"tthdon\"] = 0;\r\n item[\"hdon_id\"] = null;\r\n item[\"nky\"] = null;\r\n item[\"id\"] = webix.uid();\r\n form.setValues(item);\r\n this.getFormat();\r\n },\r\n initUINew: function (cctbao_id) {\r\n $$(\"cctbao_id\").setValue(cctbao_id);\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/getKyhieu?cctbao_id=\" + cctbao_id, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (data.length > 0) {\r\n var form = $$(\"invoiceForms\");\r\n var values = form.getValues();\r\n\r\n values[\"khieu\"] = data[0][\"khhdon\"];\r\n values[\"mcqtcap\"] = data[0][\"mccqthue\"];\r\n\r\n form.setValues(values);\r\n }\r\n });\r\n this.getFormat();\r\n },\r\n getFormat: function (val) {\r\n commonHD.renderFormat(val);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_bangmotaloiCQT',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\"], function (app, _, user, invoiceForms) {\r\n \r\n\r\n var editmode = 0;\r\n var hdon_id = \"\";\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-icondksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formdksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Danh sách lỗi phản hồi từ CQT
\";\r\n },\r\n },\r\n ],\r\n },\r\n id: \"responseMessageForms1\",\r\n resize: true,\r\n width: 800,\r\n height: 400,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () {},\r\n },\r\n body: {\r\n view: \"form\",\r\n id: \"message\",\r\n // width: 1500,\r\n position: \"center\",\r\n // autowidth:true,\r\n paddingY: 10,\r\n paddingX: 15,\r\n complexData: true,\r\n scroll: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n // id: \"header\",\r\n template: \"
DANH SÁCH LỖI PHẢN HỒI TỪ CQT
\",\r\n borderless: true,\r\n height: 40,\r\n },\r\n // {\r\n // paddingX: 30,\r\n // rows: [\r\n // {\r\n // view: \"text\",\r\n // label: \"Ký hiệu\",\r\n // id: \"khieu\",\r\n // name: \"khieu\",\r\n // },\r\n // {\r\n // view: \"text\",\r\n // label: \"Số hóa đơn\",\r\n // labelWidth: 150,\r\n // id: \"shdon\",\r\n // name: \"shdon\",\r\n // },\r\n // ],\r\n // },\r\n { height: 3 },\r\n {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_message\",\r\n // height: 250,\r\n //name: \"danhsach_message\",\r\n // select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n tooltip: true,\r\n editable: true,\r\n select: \"cell\",\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n // var hdon_id = \"87de11a4-0b4e-42d4-a86c-45ba10b80337\";\r\n if (hdon_id != \"\") {\r\n var url = app.config.host + \"/Invoice68/GetResponseMessage?id=\" + hdon_id;\r\n webix.ajax(url, callback, view);\r\n }\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n { editor: \"text\", id: \"hdon_id\", name: \"hdon_id\", hidden: true },\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"maloi\",\r\n name: \"maloi\",\r\n header: \"Mã lỗi\",\r\n width: 150,\r\n editor: \"text\",\r\n },\r\n {\r\n id: \"motaloi\",\r\n name: \"motaloi\",\r\n header: \"Mô tả lỗi\",\r\n width: 300,\r\n editor: \"text\",\r\n },\r\n {\r\n id: \"huongdanxuly\",\r\n name: \"huongdanxuly\",\r\n header: \"Hướng dẫn xử lý\",\r\n width: 300,\r\n editor: \"text\",\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n id: \"btnHuyHDDT\",\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 120,\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n hdon_id = \"\";\r\n webix.$$(\"responseMessageForms1\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n setEditMode: function (id) {\r\n hdon_id = id;\r\n var table = $$(\"danhsach_message\");\r\n table.load(table.config.url);\r\n },\r\n setValues: function (item, winconfig, params) {\r\n var table = $$(\"danhsach_message\");\r\n table.setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_hoadon_history',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\", \"views/forms/68_bangmotaloiCQT\"], function (app, _, user, invoiceForms, bangmotaloiCQT) {\r\n \r\n\r\n var editmode = 0;\r\n var hdon_id = \"\";\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-icondksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formdksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Lịch sử xử lý
\";\r\n },\r\n },\r\n ],\r\n },\r\n\r\n id: \"responseMessageForms\",\r\n resize: true,\r\n width: 1000,\r\n height: 500,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () {},\r\n },\r\n body: {\r\n view: \"form\",\r\n id: \"message\",\r\n // width: 1500,\r\n position: \"center\",\r\n // autowidth:true,\r\n paddingY: 10,\r\n paddingX: 15,\r\n complexData: true,\r\n scroll: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n // id: \"header\",\r\n template: \"
LỊCH SỬ XỬ LÝ
\",\r\n borderless: true,\r\n height: 40,\r\n },\r\n { height: 3 },\r\n {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_history\",\r\n // height: 250,\r\n //name: \"danhsach_history\",\r\n // select: true,\r\n editable: true,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n resizeColumn: true,\r\n fullScreen: true,\r\n fixedRowHeight: false,\r\n select: \"row\",\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n // var hdon_id = \"87de11a4-0b4e-42d4-a86c-45ba10b80337\";\r\n if (hdon_id != \"\") {\r\n var url = app.config.host + \"/Invoice68/GetHistoryInvoice?id=\" + hdon_id;\r\n webix.ajax(url, callback, view);\r\n }\r\n },\r\n },\r\n onClick: {\r\n ShowResponseMessage: function (event, cell, target) {\r\n //var win = table.$scope.ui(bangmotaloiCQT.$ui);\r\n webix.ui(bangmotaloiCQT.$ui);\r\n var ref_id = cell.row;\r\n\r\n bangmotaloiCQT.setEditMode(ref_id);\r\n // // var win = table.$scope.ui(hoadonHistory.$ui);\r\n // // hoadonHistory.setEditMode(hdon_id);\r\n // $$(\"danhsach_history\").show();\r\n webix.ui(bangmotaloiCQT.$ui).show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n editor: \"text\",\r\n id: \"ref_id\",\r\n name: \"ref_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n css: \"rank\",\r\n },\r\n {\r\n id: \"tgian_gui\",\r\n name: \"tgian_gui\",\r\n header: \"Thời gian\",\r\n width: 200,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s.%S\");\r\n var time = new Date(text);\r\n text = removeTimeZoneT(time);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"nguoi_gui\",\r\n name: \"nguoi_gui\",\r\n header: \"Nơi gửi\",\r\n width: 150,\r\n },\r\n {\r\n id: \"mltdiep_gui\",\r\n name: \"mltdiep_gui\",\r\n header: \"Loại Thông điệp\",\r\n width: 150,\r\n template: function (obj) {\r\n if ((obj.mltdiep_gui == \"203\" || obj.mltdiep_gui == \"200\") && obj.note == \"app\") {\r\n return \"Gửi HDDT lên CQT\";\r\n } else if (obj.mltdiep_gui == \"400\" && obj.note == \"app\") {\r\n return \"Gửi BTHDL lên CQT\";\r\n } else if ((obj.mltdiep_gui == \"100\" || obj.mltdiep_gui == \"101\") && obj.note == \"app\") {\r\n return \"Gửi Tờ khai lên CQT\";\r\n }\r\n // else if(obj.mltdiep_gui == \"200\" && obj.note == \"app\"){\r\n // return \"Gửi HDDT có mã lên CQT\";\r\n // }\r\n else if ((obj.mltdiep_gui == \"300\" || obj.mltdiep_gui == \"301\") && obj.note == \"app\") {\r\n return \"Thông báo hóa đơn sai sót\";\r\n } else if (obj.mltdiep_gui == \"301\" && obj.note == \"saisot\") {\r\n return \"Kết quả tiếp nhận và xử lý hóa đơn sai sót\";\r\n } else if (obj.mltdiep_gui == \"202\" && obj.note == \"capma\") {\r\n return \"Cơ quan thuế cấp mã hóa đơn\";\r\n } else if (obj.note == \"phkt\") {\r\n return \"Phản hồi kĩ thuật\";\r\n } else if (obj.note == \"ktdl\") {\r\n return \"Kiểm tra dữ liệu\";\r\n } else if (obj.note == \"rasoat\") {\r\n return \"Thông báo HDDT cần rà soát\";\r\n } else {\r\n return \"Gửi HDDT lên CQT\";\r\n }\r\n },\r\n },\r\n {\r\n id: \"history\",\r\n name: \"history\",\r\n header: \"Nội dung\",\r\n width: 430,\r\n },\r\n // {\r\n // id: \"btnResponseMessage\",\r\n // name: \"View\",\r\n // header: \"Xem chi tiết\",\r\n // width: 100,\r\n // //editor: \"text\",\r\n // template: function (obj) {\r\n // if (obj.note == \"phkt\" || obj.note == \"ktdl\" || obj.note == \"rasoat\") {\r\n // return \" \";\r\n // } else {\r\n // return \"\";\r\n // }\r\n // },\r\n // },\r\n ],\r\n\r\n ready: function () {\r\n this.adjustRowHeight(\"history\", true);\r\n\r\n var row_id = this.getFirstId();\r\n this.select(row_id, false);\r\n this.unselect(row_id, false);\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n id: \"btnHuyHDDT\",\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 120,\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n hdon_id = \"\";\r\n webix.$$(\"responseMessageForms\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n setEditMode: function (id) {\r\n hdon_id = id;\r\n var table = $$(\"danhsach_history\");\r\n table.load(table.config.url);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_bangkebanra',[\"app\", \"locale\", \"models/user\", \"views/forms/68_bangkebanraForm\", \"views/forms/68_hoadon_history\"], function (app, _, user, bangkebanraForm, hoadonHistory) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Tờ khai chứng từ bán ra\",\r\n details: \"Tờ khai chứng từ bán ra\",\r\n });\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(bangkebanraForm.$ui);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n // id: \"btnPlus\",\r\n // shortcut: \"F4\",\r\n // on: {\r\n // onClick: function () {\r\n // var detailForm = this.$scope.ui(bangkebanraForm.$ui);\r\n // bangkebanraForm.setEditMode(1);\r\n // detailForm.show();\r\n\r\n // var url = app.config.host + \"/Invoice68/GetInfoCompany\";\r\n\r\n // webix.ajax(url, function (text) {\r\n // var json = JSON.parse(text);\r\n // webix.$$(\"tnnt\").setValue(json.name);\r\n // webix.$$(\"mst\").setValue(json.tax_code);\r\n // webix.$$(\"ddanh\").setValue(json.address);\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n // id: \"btnEdit\",\r\n // shortcut: \"F3\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"bangkebanra\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn dòng nào ! \", \"error\");\r\n // return;\r\n // }\r\n\r\n // var detailForm = this.$scope.ui(bangkebanraForm.$ui);\r\n // bangkebanraForm.setEditMode(2);\r\n // bangkebanraForm.setValues(selectedItem);\r\n // if (selectedItem.trang_thai == 1) {\r\n // var form = $$(\"bangkebanra-form\").elements;\r\n // for (var key in form) {\r\n // var $el = form[key];\r\n // $el.define(\"readonly\", \"true\");\r\n // $el.define(\"css\", \"mcls_readonly_text\");\r\n // $el.refresh();\r\n // }\r\n\r\n // webix.$$(\"btnBTHSave\").destructor();\r\n // webix.$$(\"btnTaiDanhSachBanRa\").destructor();\r\n // }\r\n // detailForm.show();\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n // id: \"btnDelete\",\r\n // shortcut: \"F8\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"bangkebanra\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // if (selectedItem.trang_thai == 1) {\r\n // webix.message(\"Bảng tổng hợp đã gửi CQT không thể xóa ! \", \"error\");\r\n // return;\r\n // }\r\n\r\n // var khData = {};\r\n\r\n // khData.editmode = 3;\r\n // khData.data = [];\r\n // khData.data.push(selectedItem);\r\n\r\n // webix.confirm({\r\n // text: \"Bạn có muốn xóa bản ghi\",\r\n // ok: \"Có\",\r\n // cancel: \"Không\",\r\n // callback: function (choose) {\r\n // if (choose) {\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-type\": \"application/json\" })\r\n // .post(app.config.host + \"/Invoice68/SaveBangKeBanRa\", khData, function (text) {\r\n // var response = JSON.parse(text);\r\n\r\n // if (response.hasOwnProperty(\"error\")) {\r\n // webix.message({ type: \"error\", text: response.error });\r\n // return;\r\n // }\r\n\r\n // // table.remove(item.id);\r\n // var btnRefresh = $$(\"btnRefresh\");\r\n // btnRefresh.callEvent(\"onClick\");\r\n // });\r\n // }\r\n // },\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + \"In PDF\" + \"\",\r\n id: \"btnPreview\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"bangkebanra\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n\r\n var datafrmAll = table.serialize();\r\n\r\n if (datafrmAll.length == 0) {\r\n webix.message(\"Không có dữ liệu để in !\", \"error\");\r\n return;\r\n }\r\n\r\n rpParameter.type = \"PDF\";\r\n if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang in báo cáo ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/Invoice68/PrintPDFBangKeBanRa\",\r\n rpParameter,\r\n {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n window.open(fileURL, \"_blank\");\r\n },\r\n }\r\n // function (text, data) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n // webix.modalbox.hide(box);\r\n // window.open(fileURL, '_blank');\r\n // }\r\n );\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n /*{\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n hide: true,\r\n label: ' ' + '' + _(\"EXPORT_EXCEL\") + \"\",\r\n id: \"btnExportExcel\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"bangkebanra\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n rpParameter.type = \"xlsx\";\r\n\r\n var datafrmAll = table.serialize();\r\n\r\n if (datafrmAll.length == 0) {\r\n webix.message(\"Không có dữ liệu để xuất !\", \"error\");\r\n return;\r\n }\r\n\r\n if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang kết xuất Excel ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/PrintPDFBangKeBanRa\", rpParameter, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n //var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n //window.location.href = fileURL;\r\n webix.html.download(file, \"BangKeBanRa.xlsx\");\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },*/\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"EXPORT_EXCEL\") + \"\",\r\n id: \"btnExportExcelF\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"bangkebanra\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n rpParameter.type = \"xlsx\";\r\n\r\n var datafrmAll = table.serialize();\r\n\r\n if (datafrmAll.length == 0) {\r\n webix.message(\"Không có dữ liệu để xuất !\", \"error\");\r\n return;\r\n }\r\n\r\n if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang kết xuất Excel ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/PrintExcelBangKeBanRa_New\", rpParameter, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n //var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n //window.location.href = fileURL;\r\n webix.html.download(file, \"BangKeBanRa.xlsx\");\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"Gửi email\") + \"\",\r\n // id: \"btnSendEmail\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"hoadon\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"Ký gửi CQT\") + \"\",\r\n // id: \"btnSign\",\r\n // on: {\r\n // onClick: function () {\r\n // var tableDK = webix.$$(\"bangkebanra\");\r\n // var selectedItem = tableDK.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn dòng ! \", \"error\");\r\n // return;\r\n // }\r\n // if (selectedItem.trang_thai == 1) {\r\n // webix.message(\"Mẫu đã ký và gửi CQT bạn không thể ký lại! \", \"error\");\r\n // return;\r\n // }\r\n\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-Type\": \"application/json\" })\r\n // .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n // var result = JSON.parse(text);\r\n // var kytaptrung = \"\";\r\n // for (var i = 0; i < result.length; i++) {\r\n // var item = result[i];\r\n // kytaptrung = item.value;\r\n // }\r\n\r\n // webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n // var listcerts = JSON.parse(text);\r\n // if (listcerts.length > 0) {\r\n // var box = webix.modalbox({\r\n // title: \"Chọn chứng thư số\",\r\n // buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n // text: \"
\",\r\n // top: 100,\r\n // width: 750,\r\n // callback: function (result) {\r\n // switch (result) {\r\n // case \"1\":\r\n // webix.modalbox.hide();\r\n // break;\r\n // case \"0\":\r\n // var table = $$(\"tblCerts\");\r\n // var data = table.serialize();\r\n // var cert = null;\r\n\r\n // for (var i = 0; i < data.length; i++) {\r\n // if (data[i].chon == true) {\r\n // cert = data[i];\r\n // break;\r\n // }\r\n // }\r\n\r\n // if (cert == null) {\r\n // webix.message(\"Bạn chưa chọn chứng thư số\");\r\n // return;\r\n // }\r\n // var postData = {\r\n // branch_code: user.getDvcsID(),\r\n // username: user.getCurrentUser(),\r\n // cer_serial: cert.cer_serial,\r\n // id: selectedItem.id,\r\n // };\r\n\r\n // webix.extend(tableDK, webix.ProgressBar);\r\n // tableDK.disable();\r\n // tableDK.showProgress();\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-type\": \"application/json\" })\r\n // .post(app.config.host + \"/Invoice68/SignBangKeBanRa\", postData, {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // tableDK.enable();\r\n // tableDK.hideProgress();\r\n // // var json = JSON.parse(text);\r\n // // webix.message(json.ExceptionMessage, \"error\");\r\n // webix.message(text + XmlHttpRequest, \"error\");\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var json = JSON.parse(text);\r\n // tableDK.enable();\r\n // tableDK.hideProgress();\r\n // if (!json.hasOwnProperty(\"error\")) {\r\n // webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n // // $$(\"huyhoadonForms\").close();\r\n // app.callEvent(\"dataChangebangkebanra\", [1, null]);\r\n // } else {\r\n // webix.message(json.error, \"error\");\r\n // }\r\n // },\r\n // });\r\n // return;\r\n // }\r\n // },\r\n // });\r\n // var tblMatHang = webix.ui({\r\n // container: \"ctnCerts\",\r\n // id: \"tblCerts\",\r\n // view: \"datatable\",\r\n // borderless: true,\r\n // resizeColumn: true,\r\n // height: 350,\r\n // columns: [\r\n // {\r\n // id: \"chon\",\r\n // header: _(\"CHON\"),\r\n // width: 65,\r\n // checkValue: true,\r\n // uncheckValue: false,\r\n // template: \"{common.checkbox()}\",\r\n // },\r\n // {\r\n // id: \"cer_serial\",\r\n // header: _(\"SO_SERIAL\"),\r\n // width: 150,\r\n // },\r\n // {\r\n // id: \"subject_name\",\r\n // header: _(\"SUBJECTNAME\"),\r\n // width: 450,\r\n // },\r\n // {\r\n // id: \"begin_date\",\r\n // header: _(\"NGAY_BAT_DAU\"),\r\n // width: 200,\r\n // },\r\n // {\r\n // id: \"end_date\",\r\n // header: _(\"NGAY_KET_THUC\"),\r\n // width: 200,\r\n // },\r\n // {\r\n // id: \"issuer\",\r\n // header: _(\"DONVI\"),\r\n // width: 450,\r\n // },\r\n // ],\r\n // url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n // });\r\n // } else {\r\n // var table = $$(\"bangkebanra\");\r\n // webix.extend(table, webix.ProgressBar);\r\n // table.disable();\r\n // table.showProgress();\r\n\r\n // var a = webix.ajax(app.config.host + \"/Invoice68/XmlBangKeBanRa?id=\" + selectedItem.id);\r\n // var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n // webix.promise.all([a, b, selectedItem]).then(function (results) {\r\n // // webix.extend(tblInvoice, webix.ProgressBar);\r\n // // tblInvoice.disable();\r\n // // tblInvoice.showProgress();\r\n // var json = results[0].json();\r\n\r\n // if (json.hasOwnProperty(\"error\")) {\r\n // webix.message({ type: \"error\", text: json.error });\r\n // }\r\n\r\n // var listcerts = results[1].json();\r\n // var item = results[2];\r\n\r\n // if (listcerts.length == 0) {\r\n // table.enable();\r\n // table.hideProgress();\r\n // webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n // return;\r\n // }\r\n\r\n // require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n // var hub = plugin.hub();\r\n // var hubconnect = plugin.conn();\r\n // if (hubconnect.state != 1) {\r\n // table.enable();\r\n // table.hideProgress();\r\n // webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n // return;\r\n // }\r\n // hub.off(\"resCommand\");\r\n // hub.on(\"resCommand\", function (result) {\r\n // var json = JSON.parse(result);\r\n\r\n // if (json.hasOwnProperty(\"error\")) {\r\n // webix.message({ type: \"error\", text: json.error });\r\n // } else {\r\n // var parameters = {\r\n // xml: json.xml,\r\n // id: selectedItem.id,\r\n // shdon: json.shdon,\r\n // };\r\n\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-Type\": \"application/json\" })\r\n // .post(app.config.host + \"/Invoice68/SaveXmlBangKeBanRa\", parameters, function (text) {\r\n // var result = JSON.parse(text);\r\n // if (result.hasOwnProperty(\"error\")) {\r\n // webix.message(result.error, \"error\");\r\n // } else {\r\n // webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n // // $$(\"huyhoadonForms\").close();\r\n // app.callEvent(\"dataChangebangkebanra\", [1, null]);\r\n // }\r\n // });\r\n // }\r\n // table.enable();\r\n // table.hideProgress();\r\n // });\r\n\r\n // var _listcerts = [];\r\n\r\n // for (var i = 0; i < listcerts.length; i++) {\r\n // var _cert = listcerts[i];\r\n\r\n // _listcerts.push({\r\n // so_serial: _cert.cer_serial,\r\n // ngaybatdau: _cert.begin_date,\r\n // ngayketthuc: _cert.end_date,\r\n // issuer: _cert.issuer,\r\n // subjectname: _cert.subject_name,\r\n // });\r\n // }\r\n\r\n // var arg = {\r\n // idData: \"#data\",\r\n // xml: json[\"xml\"],\r\n // shdon: json.shdon,\r\n // idSigner: \"seller\",\r\n // tagSign: \"NNT\",\r\n // listcerts: _listcerts,\r\n // };\r\n\r\n // hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n // .done(function () {\r\n // console.log(\"Success !\");\r\n // })\r\n // .fail(function (error) {\r\n // webix.message(error, \"error\");\r\n // });\r\n // });\r\n // });\r\n // }\r\n // });\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 120,\r\n // label: ' ' + '' + \"Lập bổ sung\" + \"\",\r\n // id: \"btnCreatePlus\",\r\n // shortcut: \"F4\",\r\n // on: {\r\n // onClick: function () {\r\n // var detailForm = this.$scope.ui(bangkebanraForm.$ui);\r\n // bangkebanraForm.setEditMode(1);\r\n // detailForm.show();\r\n\r\n // webix.$$(\"ldau\").setValue(0);\r\n\r\n // var url = app.config.host + \"/Invoice68/GetInfoCompany\";\r\n\r\n // webix.ajax(url, function (text) {\r\n // var json = JSON.parse(text);\r\n // webix.$$(\"tnnt\").setValue(json.name);\r\n // webix.$$(\"mst\").setValue(json.tax_code);\r\n // webix.$$(\"ddanh\").setValue(json.address);\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n // {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 120,\r\n // label: ' ' + '' + _(\"Lập bổ sung\") + \"\",\r\n // id: \"btnUp\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"hoadon\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"Tải XML\") + \"\",\r\n // id: \"btnDownloadXml\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"bangkebanra\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // if (selectedItem.trang_thai != 1) {\r\n // webix.message(\"Bảng tổng hợp chưa gửi CQT không tồn tại xml ! \", \"error\");\r\n // return;\r\n // }\r\n\r\n // webix.extend(table, webix.ProgressBar);\r\n // table.disable();\r\n // table.showProgress();\r\n\r\n // var url = app.config.host + \"/Invoice68/ExportXMLBangKeBanRa?id=\" + selectedItem.id;\r\n // webix\r\n // .ajax()\r\n // .response(\"arraybuffer\")\r\n // .get(url, function (text, data) {\r\n // table.enable();\r\n // table.hideProgress();\r\n\r\n // var file = new Blob([data], { type: \"application/xml\" });\r\n // webix.html.download(file, \"BangKeBanRa.xml\");\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, \"_blank\");\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n container: \"testA\",\r\n view: \"treetable\",\r\n id: \"bangkebanra\",\r\n select: true,\r\n resizeColumn: true,\r\n fullScreen: true,\r\n fixedRowHeight: false,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n columns: [\r\n {\r\n id: \"stt\",\r\n header: \"
STT
\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"ky_hieu\",\r\n header:\"
Ký hiệu
\",\r\n width: 500,\r\n template: function (obj, common) {\r\n if (obj.$level == 1) return common.treetable(obj, common) + \"\" + obj.value + \" ( \" + obj.$count + \" )\" + \"\";\r\n return obj.ky_hieu;\r\n },\r\n },\r\n {\r\n id: \"so_hd\",\r\n header: [{ text: \"
Hóa đơn chứng từ bán
\", colspan: 2 }, { text: \"
Số hóa đơn
\" }],\r\n width: 500,\r\n template: function (obj, common) {\r\n if (obj.$level == 1) return common.treetable(obj, common) + \"\" + obj.value + \" ( \" + obj.$count + \" )\" + \"\";\r\n return obj.so_hd;\r\n },\r\n },\r\n {\r\n id: \"ngay_hd\",\r\n header: [null, { text: \"
Ngày hóa đơn
\" }],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n { id: \"ten_kh_hd\", header: \"
Tên người mua
\", width: 300 },\r\n { id: \"ms_thue\", header: \"
Mã số thuế
\", width: 150 },\r\n {\r\n id: \"tien_tt0\",\r\n header: \"
Doanh thu chưa có thuế GTGT
\",\r\n width: 200,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n {\r\n id: \"tien\",\r\n header: \"
Thuế GTGT
\",\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n { id: \"ghi_chu\", header: \"
Ghi chú
\", width: 200 },\r\n ],\r\n pager: \"pagerA\",\r\n scheme: {\r\n $group: {\r\n by: \"nhom\",\r\n //,css:{ \"text-align\": \"right\" }\r\n // map:{\r\n // \tnguoi_lien_he:[\"nguoi_lien_he\", \"count\"]\r\n // }\r\n },\r\n //$sort: { by: \"stt\", dir: \"asc\" }\r\n },\r\n ready: function () {\r\n //this.open(this.getFirstId());\r\n //this.sort({ by: \"stt\", dir: \"asc\" });\r\n this.openAll();\r\n this.adjustRowHeight(\"ghi_chu\", true);\r\n this.refresh();\r\n },\r\n //url: app.config.host + \"/System/ExecuteQuery?sql=\" + sql\r\n //autoheight: true,\r\n //autowidth:true,\r\n //data: big_film_set\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChangebangkebanra\", function (item) {\r\n var table = $$(\"bangkebanra\");\r\n // webix.extend(table, webix.OverlayBox);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n table.config.rpParameter = item;\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/GetDSHoaDonBangKeBanRa\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (!json.hasOwnProperty(\"error\")) {\r\n //console.log(json);\r\n $$(\"bangkebanra\").clearAll();\r\n $$(\"bangkebanra\").parse(json);\r\n $$(\"bangkebanra\").refresh();\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/modules/download_file_handle',[\"app\", \"locale\"], function (app, _) {\r\n // config thông tin window ui\r\n var statusProcess = {\r\n loading: 'fas fa-spinner fa-spin icon-loading',\r\n error: 'fas fa-exclamation-circle custom-color-red',\r\n success: 'fas fa-check-circle custom-color-green'\r\n }\r\n\r\n var actionProcess = {\r\n sync: \"fas fa-sync\",\r\n cancel: \"fas fa-times-circle\",\r\n download: \"fas fa-download\"\r\n }\r\n\r\n // Danh sách các file đnag trong quá trình xử lý\r\n var listFileProcess = new webix.DataCollection({\r\n data: [],\r\n });\r\n\r\n //Hàm support xử lý\r\n function convertTypeToFileFormat(type) {\r\n var fileFormat = \"application/pdf\";\r\n switch (type) {\r\n case \"PDF\":\r\n case \"pdf\":\r\n fileFormat = \"application/pdf\";\r\n break;\r\n case \"xlsx\":\r\n case \"XLSX\":\r\n fileFormat = \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\r\n break;\r\n }\r\n return fileFormat;\r\n }\r\n\r\n function handleProcessFileInfo(processFileInfo) {\r\n var request = null;\r\n // Add item\r\n var id = Math.floor(Math.random() * 1000000);\r\n var fileInfo = {\r\n id: id,\r\n name: processFileInfo.fileName,\r\n loadingIcon: statusProcess.loading,\r\n actionIcon: actionProcess.cancel,\r\n process: null,\r\n type: processFileInfo.fileType,\r\n data: null,\r\n clickAction: null,\r\n xhr: null\r\n }\r\n\r\n // gán event\r\n var sucessEvent = function (text, data, XmlHttpRequest) {\r\n fileInfo.loadingIcon = statusProcess.success;\r\n fileInfo.actionIcon = actionProcess.download;\r\n if(data != null) {\r\n fileInfo.data = new Blob([data], { type: convertTypeToFileFormat(fileInfo.fileType) });\r\n }\r\n\r\n listFileProcess.updateItem(fileInfo.id, fileInfo);\r\n if(processFileInfo.onSuccess != null) {\r\n processFileInfo.onSuccess(text, data, XmlHttpRequest);\r\n }\r\n }\r\n\r\n var errorEvent = function (text, data, XmlHttpRequest) {\r\n fileInfo.loadingIcon = statusProcess.error;\r\n fileInfo.actionIcon = actionProcess.sync;\r\n listFileProcess.updateItem(fileInfo.id, fileInfo);\r\n if(processFileInfo.onError != null) {\r\n processFileInfo.onError(text, data, XmlHttpRequest);\r\n }\r\n }\r\n\r\n // gán request ajax\r\n var paramRequest = JSON.parse(JSON.stringify(processFileInfo.param ? processFileInfo.param : {}));\r\n request = webix.ajax()\r\n .response(processFileInfo.response)\r\n .headers(processFileInfo.header); \r\n\r\n switch(processFileInfo.method) {\r\n case \"post\":\r\n case \"POST\":\r\n fileInfo.process = request.post.bind(request);\r\n fileInfo.process(\r\n processFileInfo.url,\r\n paramRequest,\r\n {\r\n error: errorEvent,\r\n success: sucessEvent,\r\n }\r\n );\r\n break;\r\n case \"get\":\r\n case \"GET\":\r\n fileInfo.process = request.get.bind(request);\r\n fileInfo.process(\r\n processFileInfo.url,\r\n {\r\n error: errorEvent,\r\n success: sucessEvent,\r\n }\r\n );\r\n break;\r\n }\r\n \r\n // Xử lý action\r\n fileInfo.clickAction = function () {\r\n var me = this;\r\n switch(this.actionIcon) {\r\n case actionProcess.sync:\r\n if(me.process) {\r\n me.actionIcon = actionProcess.cancel;\r\n me.loadingIcon = statusProcess.loading;\r\n switch(processFileInfo.method) {\r\n case \"post\":\r\n case \"POST\":\r\n fileInfo.process = request.post.bind(request);\r\n fileInfo.process(\r\n processFileInfo.url,\r\n paramRequest,\r\n {\r\n error: errorEvent,\r\n success: sucessEvent,\r\n }\r\n );\r\n case \"get\":\r\n case \"GET\":\r\n fileInfo.process = request.get.bind(request);\r\n fileInfo.process(\r\n processFileInfo.url,\r\n {\r\n error: errorEvent,\r\n success: sucessEvent,\r\n }\r\n );\r\n break;\r\n };\r\n listFileProcess.updateItem(me.id, me);\r\n }\r\n break;\r\n case actionProcess.cancel:\r\n if(me.process) {\r\n \r\n }\r\n webix.confirm({\r\n text: \"Bảng kê đang được kết xuất, bạn có muốn huỷ bỏ tiến trình?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n removeItem(me.id);\r\n }\r\n }\r\n })\r\n break;\r\n case actionProcess.download:\r\n if(processFileInfo.onDownLoad) {\r\n processFileInfo.onDownLoad(me.data);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // Gán vào list process\r\n listFileProcess.add(fileInfo, 0);\r\n }\r\n\r\n function checkFileProcess() {\r\n var rs = false;\r\n var count = 0;\r\n for(var i = 0; i < listFileProcess.count(); i++) {\r\n var itemId = listFileProcess.getIdByIndex(i);\r\n var item = listFileProcess.getItem(itemId);\r\n if(item.loadingIcon == statusProcess.loading) {\r\n count++;\r\n }\r\n }\r\n rs = count < 3;\r\n return rs;\r\n }\r\n\r\n function checkItemLoading() {\r\n var isLoading = false;\r\n for(var i = 0; i < listFileProcess.count(); i++) {\r\n var itemId = listFileProcess.getIdByIndex(i);\r\n var item = listFileProcess.getItem(itemId);\r\n if(item.loadingIcon == statusProcess.loading) {\r\n isLoading = true;\r\n break;\r\n }\r\n }\r\n return isLoading;\r\n }\r\n\r\n function removeItem(id) {\r\n if(id) {\r\n listFileProcess.remove(id);\r\n if(listFileProcess.count() == 0) {\r\n closeWindow();\r\n }\r\n }\r\n }\r\n\r\n function closeWindow() {\r\n listFileProcess.clearAll();\r\n $$(\"download_window\").close();\r\n }\r\n\r\n // Vẽ header\r\n function genHeader(title) {\r\n title = title ? title : \"Kết xuất bảng kê\"; \r\n var headerComp = {\r\n view: \"toolbar\",\r\n css: \"manager-file-header\",\r\n elements: [\r\n {\r\n template:\r\n \"
\" + title + \"
\",\r\n borderless: true,\r\n },\r\n {\r\n view: \"template\",\r\n template:\r\n \"
\",\r\n borderless: true,\r\n css: \"manager-file-header-button\",\r\n onClick: {\r\n \"manager-file-down\": function () {\r\n var window = $$(\"download_window\"); \r\n var className = \"hide-custom-class\";\r\n \r\n var htmlElement = window.$view; \r\n if (htmlElement.classList.contains(className)) {\r\n htmlElement.classList.remove(className); \r\n } else {\r\n htmlElement.classList.add(className); \r\n }\r\n },\r\n \"manager-file-close-button\": function () {\r\n if(checkItemLoading()) {\r\n webix.confirm({\r\n text: \"Bảng kê đang được kết xuất, bạn có muốn huỷ bỏ tiến trình?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n closeWindow();\r\n }\r\n }\r\n })\r\n } else {\r\n closeWindow();\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n };\r\n\r\n return headerComp;\r\n }\r\n\r\n // Vẽ body\r\n var getIconFile = function (type) {\r\n var icon = \"far fa-file\";\r\n switch (type) {\r\n case \"PDF\":\r\n case \"pdf\":\r\n icon = \"far fa-file-pdf custom-color-red\";\r\n break;\r\n case \"xlsx\":\r\n case \"XLSX\":\r\n icon = \"far fa-file-excel custom-color-green\";\r\n break;\r\n }\r\n return icon;\r\n };\r\n\r\n var bodyComp = {\r\n view: \"list\",\r\n css: \"manager-file-custom_list\",\r\n id: \"manager-file-custom_list\",\r\n template: function (obj) {\r\n var type = getIconFile(obj.type);\r\n var temp =\r\n '
' +\r\n '
' +\r\n '
' +\r\n obj.name +\r\n \"
\" +\r\n '
' +\r\n '
';\r\n return temp;\r\n },\r\n ready: function () {\r\n $$(\"manager-file-custom_list\").attachEvent(\"onItemClick\", function (id, e, node) {\r\n var item = this.getItem(id);\r\n var elementId = \"download-action-\" + item.id;\r\n \r\n // Kiểm tra xem có phải là phần tử action_icon được click hay không\r\n if (e.target && e.target.closest(\"#\" + elementId) && item) {\r\n item.clickAction();\r\n }\r\n });\r\n },\r\n data: listFileProcess,\r\n };\r\n\r\n return {\r\n handleFileDownLoad: function (fileProcessInfor) {\r\n\r\n var isCheckAdd = checkFileProcess();\r\n if(!isCheckAdd) {\r\n webix.message(\"Số file đang kết xuất đã đạt tối đa (3 file)\", \"error\");\r\n return;\r\n }\r\n\r\n var window = webix.$$(\"download_window\");\r\n if(fileProcessInfor == null) {\r\n return;\r\n } \r\n\r\n // Xử lý fileProcessInfor\r\n handleProcessFileInfo(fileProcessInfor);\r\n \r\n // Show window\r\n var headerTitle = fileProcessInfor[\"headerTitle\"];\r\n if(window == null || window == undefined) {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"download_window\",\r\n css: \"manager-file\",\r\n head: genHeader(headerTitle),\r\n body: bodyComp,\r\n autohide: false,\r\n hidden: true,\r\n })\r\n .show();\r\n }\r\n \r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_bangkebanraFormChiTiet',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n var editmode = 0;\r\n\r\n var date = new Date();\r\n var _month = date.getMonth() + 1;\r\n var firstDay = new Date(date.getFullYear(), date.getMonth(), 1);\r\n var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n\r\n function subviewT() {\r\n $$(\"cbQuy\").define(\"label\", \"Tháng\");\r\n $$(\"cbQuy\").refresh();\r\n $$(\"cbQuy\").define(\"options\", [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"]);\r\n //webix.extend(config, $$('cbQuy').config);\r\n //webix.ui(config, $$('cbThang'));\r\n //$$('cbThang').destructor();\r\n }\r\n\r\n function subviewQ() {\r\n $$(\"cbQuy\").define(\"label\", \"Quý\");\r\n $$(\"cbQuy\").refresh();\r\n $$(\"cbQuy\").define(\"options\", [\"1\", \"2\", \"3\", \"4\"]);\r\n // webix.extend($$('cbQuy').config, config, true);\r\n //webix.ui(config, $$('cbQuy'));\r\n //$$('cbQuy').destructor();\r\n }\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n head: \"Bảng kê bán ra\",\r\n width: 550,\r\n resize: true,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 60 },\r\n view: \"form\",\r\n id: \"bangkebr\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"multicombo\",\r\n label: _(\"DONVI\"),\r\n name: \"lst_branch_code\",\r\n labelWidth: 80,\r\n required: true,\r\n invalidMessage: \"Vui lòng chọn đơn vị\",\r\n suggest: {\r\n selectAll: true,\r\n body: {\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00198\",\r\n },\r\n },\r\n on: {\r\n onChange: function(newValue, oldValue) {\r\n // Tạo URL API dựa trên các giá trị đã chọn trong multicomboA\r\n var urlLoad = app.config.host + \"/System/GetDataReferencesByRefIdAndBranchs?refId=RF003001&branchs=\" + newValue;\r\n \r\n // Cập nhật URL của multicomboB và tải lại dữ liệu\r\n var comp = $$(\"multicombo_kyhieu\").getPopup().getList();\r\n if(comp != null) {\r\n comp.clearAll();\r\n comp.load(urlLoad);\r\n }\r\n }\r\n }\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"radio\",\r\n id: \"head_extension\",\r\n value: 1,\r\n options: [\r\n { id: 1, value: \"Tháng\" }, // the initially selected item\r\n { id: 2, value: \"Quý\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var d = new Date();\r\n var quarter = Math.floor(d.getMonth() / 3);\r\n var quarter1 = quarter + 1;\r\n if (newv == 2) {\r\n subviewQ();\r\n $$(\"cbQuy\").setValue(quarter1);\r\n }\r\n if (newv == 1) {\r\n subviewT();\r\n $$(\"cbQuy\").setValue(d.getMonth() + 1);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n id: \"cbQuy\",\r\n name: \"quy\",\r\n view: \"combo\",\r\n label: \"Tháng\",\r\n value: _month,\r\n options: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"],\r\n on: {\r\n onChange: function () {\r\n var d = new Date();\r\n var quarter = Math.floor(d.getMonth() / 3);\r\n var quarter1 = quarter + 1;\r\n\r\n var option = $$(\"head_extension\").getValue();\r\n if (option == 2) {\r\n var nam = d.getFullYear();\r\n var thang;\r\n var quy = $$(\"cbQuy\").getValue();\r\n if (quy == 1) {\r\n thang = 0;\r\n }\r\n if (quy == 2) {\r\n thang = 3;\r\n }\r\n if (quy == 3) {\r\n thang = 6;\r\n }\r\n if (quy == 4) {\r\n thang = 9;\r\n }\r\n var firstDate = new Date(nam, thang, 1);\r\n var lastDate = new Date(nam, thang + 3, 0);\r\n\r\n $$(\"tu_ngay\").setValue(firstDate);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDate);\r\n $$(\"den_ngay\").refresh();\r\n }\r\n if (option == 1) {\r\n var year = d.getFullYear();\r\n var month = $$(\"cbQuy\").getValue();\r\n var date1 = month + \"/01\" + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n var firstDay1 = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\r\n var lastDay1 = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n $$(\"tu_ngay\").setValue(firstDay1);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDay1);\r\n $$(\"den_ngay\").refresh();\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datepicker\",\r\n label: _(\"TU_NGAY\"),\r\n name: \"tu_ngay\",\r\n id: \"tu_ngay\",\r\n value: firstDay,\r\n labelWidth: 80,\r\n invalidMessage: \"Vui lòng chọn từ ngày\",\r\n validate: webix.rules.isNotEmpty,\r\n required: true,\r\n },\r\n {\r\n view: \"datepicker\",\r\n label: _(\"DEN_NGAY\"),\r\n name: \"den_ngay\",\r\n id: \"den_ngay\",\r\n value: lastDay,\r\n labelWidth: 80,\r\n invalidMessage: \"Vui lòng chọn đến ngày\",\r\n validate: webix.rules.isNotEmpty,\r\n required: true,\r\n },\r\n {\r\n view: \"multicombo\",\r\n label: _(\"KY_HIEU\"),\r\n name: \"ky_hieu\",\r\n id: \"multicombo_kyhieu\",\r\n labelWidth: 80,\r\n // required: true,\r\n // invalidMessage: \"Tên truy cập không để trống hoặc nhập không đúng (a-z,A-Z,0-9)\",\r\n // validate: webix.rules.isNotEmpty,\r\n suggest: {\r\n selectAll: true,\r\n body: {\r\n // url: app.config.host + \"/System/GetDataReferencesByRefIdAndBranchs?refId=RF003001\",\r\n //template: webix.template(\"#value#\")\r\n },\r\n },\r\n //value: \"2\"\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n width: 100,\r\n type: \"form\",\r\n align: \"center\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var tableHoadon = $$(\"bangkebr\");\r\n if (tableHoadon.validate()) {\r\n var tungay = $$(\"tu_ngay\").getValue();\r\n var denngay = $$(\"den_ngay\").getValue();\r\n\r\n if (tungay > denngay) {\r\n webix.message(\"Ngày bắt đầu phải nhỏ hơn ngày kết thúc !\", \"error\");\r\n $$(\"tu_ngay\").focus();\r\n return;\r\n }\r\n\r\n var form = self.getParentView().getParentView();\r\n var win = self.getTopParentView();\r\n\r\n var item = form.getValues();\r\n var load_event = \"dataChangebangkebanrachitiet\";\r\n\r\n app.callEvent(load_event, [item]);\r\n\r\n win.close();\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 100,\r\n align: \"center\",\r\n type: \"danger\",\r\n click: function () {\r\n this.getTopParentView().close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n\r\n setValues: function (item) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n\r\n form.setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_bangkebanrachitiet',[\"app\", \"locale\", \"models/user\", \"views/modules/download_file_handle\", \"views/forms/68_bangkebanraFormChiTiet\", \"views/forms/68_hoadon_history\" ], function (app, _, user, handleFile, bangkebanraForm, hoadonHistory) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Tờ khai chứng từ bán ra\",\r\n details: \"Tờ khai chứng từ bán ra\",\r\n });\r\n\r\n\r\n function formatDate() {\r\n var date = new Date();\r\n \r\n var dd = String(date.getDate()).padStart(2, '0');\r\n var MM = String(date.getMonth() + 1).padStart(2, '0'); // Tháng bắt đầu từ 0\r\n var YYYY = date.getFullYear();\r\n var hh = String(date.getHours()).padStart(2, '0');\r\n var mm = String(date.getMinutes()).padStart(2, '0');\r\n var ss = String(date.getSeconds()).padStart(2, '0');\r\n \r\n var formattedDate = dd + \"_\" + MM + \"_\" + YYYY + \"_\" + hh + \"_\" + mm + \"_\" + ss;\r\n return formattedDate;\r\n }\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(bangkebanraForm.$ui);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n // id: \"btnPlus\",\r\n // shortcut: \"F4\",\r\n // on: {\r\n // onClick: function () {\r\n // var detailForm = this.$scope.ui(bangkebanraForm.$ui);\r\n // bangkebanraForm.setEditMode(1);\r\n // detailForm.show();\r\n\r\n // var url = app.config.host + \"/Invoice68/GetInfoCompany\";\r\n\r\n // webix.ajax(url, function (text) {\r\n // var json = JSON.parse(text);\r\n // webix.$$(\"tnnt\").setValue(json.name);\r\n // webix.$$(\"mst\").setValue(json.tax_code);\r\n // webix.$$(\"ddanh\").setValue(json.address);\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n // id: \"btnEdit\",\r\n // shortcut: \"F3\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"bangkebanra\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn dòng nào ! \", \"error\");\r\n // return;\r\n // }\r\n\r\n // var detailForm = this.$scope.ui(bangkebanraForm.$ui);\r\n // bangkebanraForm.setEditMode(2);\r\n // bangkebanraForm.setValues(selectedItem);\r\n // if (selectedItem.trang_thai == 1) {\r\n // var form = $$(\"bangkebanra-form\").elements;\r\n // for (var key in form) {\r\n // var $el = form[key];\r\n // $el.define(\"readonly\", \"true\");\r\n // $el.define(\"css\", \"mcls_readonly_text\");\r\n // $el.refresh();\r\n // }\r\n\r\n // webix.$$(\"btnBTHSave\").destructor();\r\n // webix.$$(\"btnTaiDanhSachBanRa\").destructor();\r\n // }\r\n // detailForm.show();\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n // id: \"btnDelete\",\r\n // shortcut: \"F8\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"bangkebanra\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // if (selectedItem.trang_thai == 1) {\r\n // webix.message(\"Bảng tổng hợp đã gửi CQT không thể xóa ! \", \"error\");\r\n // return;\r\n // }\r\n\r\n // var khData = {};\r\n\r\n // khData.editmode = 3;\r\n // khData.data = [];\r\n // khData.data.push(selectedItem);\r\n\r\n // webix.confirm({\r\n // text: \"Bạn có muốn xóa bản ghi\",\r\n // ok: \"Có\",\r\n // cancel: \"Không\",\r\n // callback: function (choose) {\r\n // if (choose) {\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-type\": \"application/json\" })\r\n // .post(app.config.host + \"/Invoice68/SaveBangKeBanRa\", khData, function (text) {\r\n // var response = JSON.parse(text);\r\n\r\n // if (response.hasOwnProperty(\"error\")) {\r\n // webix.message({ type: \"error\", text: response.error });\r\n // return;\r\n // }\r\n\r\n // // table.remove(item.id);\r\n // var btnRefresh = $$(\"btnRefresh\");\r\n // btnRefresh.callEvent(\"onClick\");\r\n // });\r\n // }\r\n // },\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + \"In PDF\" + \"\",\r\n id: \"btnPreview\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"bangkebanra\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n\r\n var datafrmAll = table.serialize();\r\n\r\n if (datafrmAll.length == 0) {\r\n webix.message(\"Không có dữ liệu để in !\", \"error\");\r\n return;\r\n }\r\n\r\n rpParameter.type = \"PDF\";\r\n \r\n var fileName = 'BangKeBanRa_' + formatDate();\r\n if (rpParameter != null) {\r\n var fileProcessInfor = {\r\n method: \"POST\",\r\n response: \"arraybuffer\",\r\n header: { \"Content-type\": \"application/json\" },\r\n url: app.config.host + \"/Invoice68/PrintPDFBangKeBanRaChiTiet\",\r\n param: rpParameter,\r\n onError: function (data, XmlHttpRequest) {\r\n var textErr = \"Đã có lỗi xảy ra\";\r\n if(XmlHttpRequest && XmlHttpRequest.statusText) {\r\n textErr = XmlHttpRequest.statusText;\r\n }\r\n webix.message(textErr, \"error\");\r\n },\r\n onDownLoad: function(data) {\r\n var fileURL = URL.createObjectURL(data);\r\n window.open(fileURL, \"_blank\");\r\n\r\n if (newWindow) {\r\n setTimeout(function() {\r\n URL.revokeObjectURL(fileURL);\r\n }, 100);\r\n }\r\n },\r\n fileName: fileName,\r\n fileType: rpParameter.type\r\n };\r\n\r\n handleFile.handleFileDownLoad(fileProcessInfor);\r\n return;\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"EXPORT_EXCEL\") + \"\",\r\n id: \"btnExportExcel\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"bangkebanra\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n rpParameter.type = \"xlsx\";\r\n\r\n var datafrmAll = table.serialize();\r\n\r\n if (datafrmAll.length == 0) {\r\n webix.message(\"Không có dữ liệu để xuất !\", \"error\");\r\n return;\r\n }\r\n\r\n if (rpParameter != null) {\r\n var fileName = 'BangKeBanRa_' + formatDate();\r\n var fileProcessInfor = {\r\n method: \"POST\",\r\n response: \"arraybuffer\",\r\n header: { \"Content-type\": \"application/json\" },\r\n url: app.config.host + \"/Invoice68/PrintPDFBangKeBanRaChiTiet\",\r\n param: rpParameter,\r\n onError: function (text, data, XmlHttpRequest) {\r\n var textErr = \"Đã có lỗi xảy ra\";\r\n if(XmlHttpRequest && XmlHttpRequest.statusText) {\r\n textErr = XmlHttpRequest.statusText;\r\n }\r\n webix.message(textErr, \"error\");\r\n },\r\n onDownLoad: function (data) {\r\n webix.html.download(data, fileName + \".xlsx\");\r\n },\r\n fileName: fileName,\r\n fileType: rpParameter.type\r\n };\r\n\r\n handleFile.handleFileDownLoad(fileProcessInfor);\r\n return;\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"Gửi email\") + \"\",\r\n // id: \"btnSendEmail\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"hoadon\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"Ký gửi CQT\") + \"\",\r\n // id: \"btnSign\",\r\n // on: {\r\n // onClick: function () {\r\n // var tableDK = webix.$$(\"bangkebanra\");\r\n // var selectedItem = tableDK.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn dòng ! \", \"error\");\r\n // return;\r\n // }\r\n // if (selectedItem.trang_thai == 1) {\r\n // webix.message(\"Mẫu đã ký và gửi CQT bạn không thể ký lại! \", \"error\");\r\n // return;\r\n // }\r\n\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-Type\": \"application/json\" })\r\n // .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n // var result = JSON.parse(text);\r\n // var kytaptrung = \"\";\r\n // for (var i = 0; i < result.length; i++) {\r\n // var item = result[i];\r\n // kytaptrung = item.value;\r\n // }\r\n\r\n // webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n // var listcerts = JSON.parse(text);\r\n // if (listcerts.length > 0) {\r\n // var box = webix.modalbox({\r\n // title: \"Chọn chứng thư số\",\r\n // buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n // text: \"
\",\r\n // top: 100,\r\n // width: 750,\r\n // callback: function (result) {\r\n // switch (result) {\r\n // case \"1\":\r\n // webix.modalbox.hide();\r\n // break;\r\n // case \"0\":\r\n // var table = $$(\"tblCerts\");\r\n // var data = table.serialize();\r\n // var cert = null;\r\n\r\n // for (var i = 0; i < data.length; i++) {\r\n // if (data[i].chon == true) {\r\n // cert = data[i];\r\n // break;\r\n // }\r\n // }\r\n\r\n // if (cert == null) {\r\n // webix.message(\"Bạn chưa chọn chứng thư số\");\r\n // return;\r\n // }\r\n // var postData = {\r\n // branch_code: user.getDvcsID(),\r\n // username: user.getCurrentUser(),\r\n // cer_serial: cert.cer_serial,\r\n // id: selectedItem.id,\r\n // };\r\n\r\n // webix.extend(tableDK, webix.ProgressBar);\r\n // tableDK.disable();\r\n // tableDK.showProgress();\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-type\": \"application/json\" })\r\n // .post(app.config.host + \"/Invoice68/SignBangKeBanRa\", postData, {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // tableDK.enable();\r\n // tableDK.hideProgress();\r\n // // var json = JSON.parse(text);\r\n // // webix.message(json.ExceptionMessage, \"error\");\r\n // webix.message(text + XmlHttpRequest, \"error\");\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var json = JSON.parse(text);\r\n // tableDK.enable();\r\n // tableDK.hideProgress();\r\n // if (!json.hasOwnProperty(\"error\")) {\r\n // webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n // // $$(\"huyhoadonForms\").close();\r\n // app.callEvent(\"dataChangebangkebanra\", [1, null]);\r\n // } else {\r\n // webix.message(json.error, \"error\");\r\n // }\r\n // },\r\n // });\r\n // return;\r\n // }\r\n // },\r\n // });\r\n // var tblMatHang = webix.ui({\r\n // container: \"ctnCerts\",\r\n // id: \"tblCerts\",\r\n // view: \"datatable\",\r\n // borderless: true,\r\n // resizeColumn: true,\r\n // height: 350,\r\n // columns: [\r\n // {\r\n // id: \"chon\",\r\n // header: _(\"CHON\"),\r\n // width: 65,\r\n // checkValue: true,\r\n // uncheckValue: false,\r\n // template: \"{common.checkbox()}\",\r\n // },\r\n // {\r\n // id: \"cer_serial\",\r\n // header: _(\"SO_SERIAL\"),\r\n // width: 150,\r\n // },\r\n // {\r\n // id: \"subject_name\",\r\n // header: _(\"SUBJECTNAME\"),\r\n // width: 450,\r\n // },\r\n // {\r\n // id: \"begin_date\",\r\n // header: _(\"NGAY_BAT_DAU\"),\r\n // width: 200,\r\n // },\r\n // {\r\n // id: \"end_date\",\r\n // header: _(\"NGAY_KET_THUC\"),\r\n // width: 200,\r\n // },\r\n // {\r\n // id: \"issuer\",\r\n // header: _(\"DONVI\"),\r\n // width: 450,\r\n // },\r\n // ],\r\n // url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n // });\r\n // } else {\r\n // var table = $$(\"bangkebanra\");\r\n // webix.extend(table, webix.ProgressBar);\r\n // table.disable();\r\n // table.showProgress();\r\n\r\n // var a = webix.ajax(app.config.host + \"/Invoice68/XmlBangKeBanRa?id=\" + selectedItem.id);\r\n // var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n // webix.promise.all([a, b, selectedItem]).then(function (results) {\r\n // // webix.extend(tblInvoice, webix.ProgressBar);\r\n // // tblInvoice.disable();\r\n // // tblInvoice.showProgress();\r\n // var json = results[0].json();\r\n\r\n // if (json.hasOwnProperty(\"error\")) {\r\n // webix.message({ type: \"error\", text: json.error });\r\n // }\r\n\r\n // var listcerts = results[1].json();\r\n // var item = results[2];\r\n\r\n // if (listcerts.length == 0) {\r\n // table.enable();\r\n // table.hideProgress();\r\n // webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n // return;\r\n // }\r\n\r\n // require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n // var hub = plugin.hub();\r\n // var hubconnect = plugin.conn();\r\n // if (hubconnect.state != 1) {\r\n // table.enable();\r\n // table.hideProgress();\r\n // webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n // return;\r\n // }\r\n // hub.off(\"resCommand\");\r\n // hub.on(\"resCommand\", function (result) {\r\n // var json = JSON.parse(result);\r\n\r\n // if (json.hasOwnProperty(\"error\")) {\r\n // webix.message({ type: \"error\", text: json.error });\r\n // } else {\r\n // var parameters = {\r\n // xml: json.xml,\r\n // id: selectedItem.id,\r\n // shdon: json.shdon,\r\n // };\r\n\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-Type\": \"application/json\" })\r\n // .post(app.config.host + \"/Invoice68/SaveXmlBangKeBanRa\", parameters, function (text) {\r\n // var result = JSON.parse(text);\r\n // if (result.hasOwnProperty(\"error\")) {\r\n // webix.message(result.error, \"error\");\r\n // } else {\r\n // webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n // // $$(\"huyhoadonForms\").close();\r\n // app.callEvent(\"dataChangebangkebanra\", [1, null]);\r\n // }\r\n // });\r\n // }\r\n // table.enable();\r\n // table.hideProgress();\r\n // });\r\n\r\n // var _listcerts = [];\r\n\r\n // for (var i = 0; i < listcerts.length; i++) {\r\n // var _cert = listcerts[i];\r\n\r\n // _listcerts.push({\r\n // so_serial: _cert.cer_serial,\r\n // ngaybatdau: _cert.begin_date,\r\n // ngayketthuc: _cert.end_date,\r\n // issuer: _cert.issuer,\r\n // subjectname: _cert.subject_name,\r\n // });\r\n // }\r\n\r\n // var arg = {\r\n // idData: \"#data\",\r\n // xml: json[\"xml\"],\r\n // shdon: json.shdon,\r\n // idSigner: \"seller\",\r\n // tagSign: \"NNT\",\r\n // listcerts: _listcerts,\r\n // };\r\n\r\n // hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n // .done(function () {\r\n // console.log(\"Success !\");\r\n // })\r\n // .fail(function (error) {\r\n // webix.message(error, \"error\");\r\n // });\r\n // });\r\n // });\r\n // }\r\n // });\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 120,\r\n // label: ' ' + '' + \"Lập bổ sung\" + \"\",\r\n // id: \"btnCreatePlus\",\r\n // shortcut: \"F4\",\r\n // on: {\r\n // onClick: function () {\r\n // var detailForm = this.$scope.ui(bangkebanraForm.$ui);\r\n // bangkebanraForm.setEditMode(1);\r\n // detailForm.show();\r\n\r\n // webix.$$(\"ldau\").setValue(0);\r\n\r\n // var url = app.config.host + \"/Invoice68/GetInfoCompany\";\r\n\r\n // webix.ajax(url, function (text) {\r\n // var json = JSON.parse(text);\r\n // webix.$$(\"tnnt\").setValue(json.name);\r\n // webix.$$(\"mst\").setValue(json.tax_code);\r\n // webix.$$(\"ddanh\").setValue(json.address);\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n // {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 120,\r\n // label: ' ' + '' + _(\"Lập bổ sung\") + \"\",\r\n // id: \"btnUp\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"hoadon\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"Tải XML\") + \"\",\r\n // id: \"btnDownloadXml\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"bangkebanra\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // if (selectedItem.trang_thai != 1) {\r\n // webix.message(\"Bảng tổng hợp chưa gửi CQT không tồn tại xml ! \", \"error\");\r\n // return;\r\n // }\r\n\r\n // webix.extend(table, webix.ProgressBar);\r\n // table.disable();\r\n // table.showProgress();\r\n\r\n // var url = app.config.host + \"/Invoice68/ExportXMLBangKeBanRa?id=\" + selectedItem.id;\r\n // webix\r\n // .ajax()\r\n // .response(\"arraybuffer\")\r\n // .get(url, function (text, data) {\r\n // table.enable();\r\n // table.hideProgress();\r\n\r\n // var file = new Blob([data], { type: \"application/xml\" });\r\n // webix.html.download(file, \"BangKeBanRa.xml\");\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, \"_blank\");\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n container: \"testA\",\r\n view: \"treetable\",\r\n id: \"bangkebanra\",\r\n select: true,\r\n resizeColumn: true,\r\n fullScreen: true,\r\n fixedRowHeight: false,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n columns: [\r\n {\r\n id: \"stt\",\r\n header: \"
STT
\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"ky_hieu\",\r\n header:\"
Ký hiệu
\",\r\n width: 150\r\n },\r\n {\r\n id: \"so_hd\",\r\n header: [{ text: \"
Hóa đơn chứng từ bán
\", colspan: 2 }, { text: \"
Số hóa đơn
\" }],\r\n width: 500,\r\n template: function (obj, common) {\r\n if (obj.$level == 1) return common.treetable(obj, common) + \"\" + obj.value + \" ( \" + obj.$count + \" )\" + \"\";\r\n return obj.so_hd;\r\n },\r\n },\r\n\r\n {\r\n id: \"ngay_hd\",\r\n header: [null, { text: \"
Ngày hóa đơn
\" }],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n { id: \"makh\", header: \"
Mã khách hàng
\", width: 150 },\r\n { id: \"ten_kh_hd\", header: \"
Tên người mua
\", width: 300 },\r\n { id: \"dia_chi\", header: \"
Địa chỉ
\", width: 300 },\r\n { id: \"ms_thue\", header: \"
Mã số thuế
\", width: 150 },\r\n {\r\n id: \"tien_tt0\",\r\n header: \"
Doanh thu chưa có thuế GTGT
\",\r\n width: 200,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n { id: \"mat_hang\", header: \"
Mặt hàng
\", width: 150 },\r\n { id: \"mdvtinh\", header: \"
Mã đơn vị tính
\", width: 150 },\r\n { id: \"sluong\", header: \"
Số lượng
\", width: 150 },\r\n {\r\n id: \"dgia\",\r\n header: \"
Đơn giá
\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n {\r\n id: \"tien\",\r\n header: \"
Thuế GTGT
\",\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n { id: \"don_vi_lap\", header: \"
Đơn vị lập hóa đơn
\", width: 200 },\r\n { id: \"ma_tra_cuu\", header: \"
Mã tra cứu hóa đơn
\", width: 200 },\r\n { id: \"ghi_chu\", header: \"
Ghi chú
\", width: 200 },\r\n ],\r\n pager: \"pagerA\",\r\n scheme: {\r\n $group: {\r\n by: \"nhom\",\r\n //,css:{ \"text-align\": \"right\" }\r\n // map:{\r\n // \tnguoi_lien_he:[\"nguoi_lien_he\", \"count\"]\r\n // }\r\n },\r\n //$sort: { by: \"stt\", dir: \"asc\" }\r\n },\r\n ready: function () {\r\n //this.open(this.getFirstId());\r\n //this.sort({ by: \"stt\", dir: \"asc\" });\r\n this.openAll();\r\n this.adjustRowHeight(\"ghi_chu\", true);\r\n this.refresh();\r\n },\r\n //url: app.config.host + \"/System/ExecuteQuery?sql=\" + sql\r\n //autoheight: true,\r\n //autowidth:true,\r\n //data: big_film_set\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChangebangkebanrachitiet\", function (item) {\r\n var table = $$(\"bangkebanra\");\r\n // webix.extend(table, webix.OverlayBox);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n table.config.rpParameter = item;\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/GetDSHoaDonBangKeBanRaChiTiet\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (!json.hasOwnProperty(\"error\")) {\r\n //console.log(json);\r\n $$(\"bangkebanra\").clearAll();\r\n $$(\"bangkebanra\").parse(json);\r\n $$(\"bangkebanra\").refresh();\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_danhsachgiamtru',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n var editmode = 0;\r\n\r\n var date = new Date();\r\n var _month = date.getMonth() + 1;\r\n var firstDay = new Date(date.getFullYear(), date.getMonth(), 1);\r\n var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n var startYear = 2010;\r\n var endYear = date.getFullYear();\r\n var years = [];\r\n for (var year = startYear; year <= endYear; year++) {\r\n years.push(year.toString());\r\n }\r\n\r\n function subviewT() {\r\n $$(\"cbQuy\").define(\"label\", \"Tháng\");\r\n $$(\"cbQuy\").refresh();\r\n $$(\"cbQuy\").define(\"options\", [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"]);\r\n //webix.extend(config, $$('cbQuy').config);\r\n //webix.ui(config, $$('cbThang'));\r\n //$$('cbThang').destructor();\r\n }\r\n\r\n function subviewQ() {\r\n $$(\"cbQuy\").define(\"label\", \"Quý\");\r\n $$(\"cbQuy\").refresh();\r\n $$(\"cbQuy\").define(\"options\", [\"1\", \"2\", \"3\", \"4\"]);\r\n // webix.extend($$('cbQuy').config, config, true);\r\n //webix.ui(config, $$('cbQuy'));\r\n //$$('cbQuy').destructor();\r\n }\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n head: \"Bảng kê bán ra\",\r\n width: 550,\r\n resize: true,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 60 },\r\n view: \"form\",\r\n id: \"bangkebr\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"multicombo\",\r\n label: _(\"DONVI\"),\r\n name: \"lst_branch_code\",\r\n labelWidth: 80,\r\n required: true,\r\n invalidMessage: \"Vui lòng chọn đơn vị\",\r\n suggest: {\r\n selectAll: true,\r\n body: {\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00198\",\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"radio\",\r\n id: \"head_extension\",\r\n name: \"head_extension\",\r\n value: 1,\r\n options: [\r\n { id: 1, value: \"Tháng\" }, // the initially selected item\r\n { id: 2, value: \"Quý\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var d = new Date();\r\n var quarter = Math.floor(d.getMonth() / 3);\r\n var quarter1 = quarter + 1;\r\n if (newv == 2) {\r\n subviewQ();\r\n $$(\"cbQuy\").setValue(quarter1);\r\n }\r\n if (newv == 1) {\r\n subviewT();\r\n $$(\"cbQuy\").setValue(d.getMonth() + 1);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n id: \"cbQuy\",\r\n name: \"quy\",\r\n view: \"combo\",\r\n label: \"Tháng\",\r\n value: _month,\r\n options: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"],\r\n on: {\r\n onChange: function () {\r\n var d = new Date();\r\n var quarter = Math.floor(d.getMonth() / 3);\r\n var quarter1 = quarter + 1;\r\n\r\n var option = $$(\"head_extension\").getValue();\r\n if (option == 2) {\r\n var nam = $$(\"cbNam\").getValue();\r\n var thang;\r\n var quy = $$(\"cbQuy\").getValue();\r\n if (quy == 1) {\r\n thang = 0;\r\n }\r\n if (quy == 2) {\r\n thang = 3;\r\n }\r\n if (quy == 3) {\r\n thang = 6;\r\n }\r\n if (quy == 4) {\r\n thang = 9;\r\n }\r\n firstDay = new Date(nam, thang, 1);\r\n lastDay = new Date(nam, thang + 3, 0);\r\n\r\n $$(\"tu_ngay\").setValue(firstDay);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDay);\r\n $$(\"den_ngay\").refresh();\r\n }\r\n if (option == 1) {\r\n var year = d.getFullYear();\r\n var month = $$(\"cbQuy\").getValue();\r\n var date1 = month + \"/01\" + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n firstDay = new Date($$(\"cbNam\").getValue(), date.getMonth(), 1);\r\n\r\n lastDay = new Date($$(\"cbNam\").getValue(), date.getMonth() + 1, 0);\r\n $$(\"tu_ngay\").setValue(firstDay);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDay);\r\n $$(\"den_ngay\").refresh();\r\n }\r\n },\r\n },\r\n },\r\n {\r\n id: \"cbNam\",\r\n name: \"nam\",\r\n view: \"combo\",\r\n label: \"Năm\",\r\n value: new Date().getFullYear(),\r\n options: years,\r\n on: {\r\n onChange: function (newYear) {\r\n // Get the current date from the datetext controls\r\n var currentFromDate = $$(\"tu_ngay\").getValue();\r\n var currentToDate = $$(\"den_ngay\").getValue();\r\n\r\n firstDay = new Date(currentFromDate);\r\n firstDay.setFullYear(newYear);\r\n // Set the updated Date object back to tu_ngay\r\n $$(\"tu_ngay\").setValue(firstDay);\r\n\r\n lastDay = new Date(currentToDate);\r\n lastDay.setFullYear(newYear);\r\n // Set the updated Date object back to tu_ngay\r\n $$(\"den_ngay\").setValue(lastDay);\r\n }\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datepicker\",\r\n label: _(\"TU_NGAY\"),\r\n name: \"tu_ngay\",\r\n id: \"tu_ngay\",\r\n value: firstDay,\r\n labelWidth: 80,\r\n invalidMessage: \"Vui lòng chọn từ ngày\",\r\n validate: webix.rules.isNotEmpty,\r\n required: true,\r\n },\r\n {\r\n view: \"datepicker\",\r\n label: _(\"DEN_NGAY\"),\r\n name: \"den_ngay\",\r\n id: \"den_ngay\",\r\n value: lastDay,\r\n labelWidth: 80,\r\n invalidMessage: \"Vui lòng chọn đến ngày\",\r\n validate: webix.rules.isNotEmpty,\r\n required: true,\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n width: 100,\r\n type: \"form\",\r\n align: \"center\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var tableHoadon = $$(\"bangkebr\");\r\n if (tableHoadon.validate()) {\r\n var tungay = $$(\"tu_ngay\").getValue();\r\n var denngay = $$(\"den_ngay\").getValue();\r\n\r\n if (tungay > denngay) {\r\n webix.message(\"Ngày bắt đầu phải nhỏ hơn ngày kết thúc !\", \"error\");\r\n $$(\"tu_ngay\").focus();\r\n return;\r\n }\r\n\r\n var form = self.getParentView().getParentView();\r\n var win = self.getTopParentView();\r\n var item = form.getValues();\r\n if(firstDay != $$(\"tu_ngay\").getValue() || lastDay != $$(\"den_ngay\").getValue() ){\r\n item.isquy = 0;\r\n }else {\r\n item.isquy = 1;\r\n }\r\n var load_event = \"dataChangebangkehanghoagiamtruthue\";\r\n\r\n app.callEvent(load_event, [item]);\r\n\r\n win.close();\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 100,\r\n align: \"center\",\r\n type: \"danger\",\r\n click: function () {\r\n this.getTopParentView().close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n\r\n setValues: function (item) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n\r\n form.setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_bangkehanghoagiamtruthue',[\"app\", \"locale\", \"models/user\", \"views/forms/68_danhsachgiamtru\", \"views/forms/68_hoadon_history\"], function (app, _, user, danhsachgiamtru, hoadonHistory) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Tờ khai chứng từ hàng hóa giảm trừ thuế\",\r\n details: \"Tờ khai chứng từ hàng hóa giảm trừ thuế\",\r\n });\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(danhsachgiamtru.$ui);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + \"In PDF\" + \"\",\r\n id: \"btnPreview\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"bangkehanghoagiamtruthue\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n\r\n var datafrmAll = table.serialize();\r\n\r\n if (datafrmAll.length == 0) {\r\n webix.message(\"Không có dữ liệu để in !\", \"error\");\r\n return;\r\n }\r\n\r\n rpParameter.type = \"PDF\";\r\n if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang in báo cáo ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/Invoice68/PrintPDFBangKeHangHoaGiamTruThue\",\r\n rpParameter,\r\n {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n window.open(fileURL, \"_blank\");\r\n },\r\n }\r\n );\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"EXPORT_EXCEL\") + \"\",\r\n id: \"btnExportExcel\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"bangkehanghoagiamtruthue\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n rpParameter.type = \"xlsx\";\r\n\r\n var datafrmAll = table.serialize();\r\n\r\n if (datafrmAll.length == 0) {\r\n webix.message(\"Không có dữ liệu để xuất !\", \"error\");\r\n return;\r\n }\r\n\r\n if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang kết xuất Excel ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/PrintPDFbangkehanghoagiamtruthue\", rpParameter, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n //var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n //window.location.href = fileURL;\r\n webix.html.download(file, \"bangkehanghoagiamtruthue.xlsx\");\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n container: \"testA\",\r\n view: \"treetable\",\r\n id: \"bangkehanghoagiamtruthue\",\r\n select: true,\r\n resizeColumn: true,\r\n fullScreen: true,\r\n fixedRowHeight: false,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n columns: [\r\n {\r\n id: \"stt\",\r\n header: \"
STT
\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n { id: \"ten\", header: \"
Tên hàng hóa
\", width: 300 },\r\n {\r\n id: \"tien_tt0\",\r\n header: \"
Doanh thu chưa có thuế GTGT
\",\r\n width: 200,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n { id: \"tsuat\", header: \"
Tỷ lệ thuế
\", width: 300 },\r\n { id: \"giam\", header: \"
Tỷ lệ thuế sau giảm
\", width: 300 },\r\n {\r\n id: \"thuegiam\",\r\n header: \"
Tiền thuế được giảm
\",\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n }\r\n ],\r\n pager: \"pagerA\",\r\n scheme: {\r\n //$group: {\r\n //by: \"nhom\",\r\n //,css:{ \"text-align\": \"right\" }\r\n // map:{\r\n // \tnguoi_lien_he:[\"nguoi_lien_he\", \"count\"]\r\n // }\r\n //},\r\n //$sort: { by: \"stt\", dir: \"asc\" }\r\n },\r\n ready: function () {\r\n //this.open(this.getFirstId());\r\n //this.sort({ by: \"stt\", dir: \"asc\" });\r\n this.openAll();\r\n this.refresh();\r\n },\r\n //url: app.config.host + \"/System/ExecuteQuery?sql=\" + sql\r\n //autoheight: true,\r\n //autowidth:true,\r\n //data: big_film_set\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChangebangkehanghoagiamtruthue\", function (item) {\r\n var table = $$(\"bangkehanghoagiamtruthue\");\r\n // webix.extend(table, webix.OverlayBox);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n table.config.rpParameter = item;\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/GetDSHoaDonBangKeHangHoaGiamTruThue\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (!json.hasOwnProperty(\"error\")) {\r\n //console.log(json);\r\n $$(\"bangkehanghoagiamtruthue\").clearAll();\r\n $$(\"bangkehanghoagiamtruthue\").parse(json);\r\n $$(\"bangkehanghoagiamtruthue\").refresh();\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_bangdanhsachhoadon',[\"app\", \"models/user\", \"views/forms/68_bangtonghopform\"], function (app, user, bangtonghopform) {\r\n var editmode = 0;\r\n var loaihanghoa = \"2\";\r\n var params;\r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"danhsach_hoadonFrm\");\r\n webix.extend(table, webix.ProgressBar);\r\n\r\n var ui = webix.$$(\"danhsachhoadon-win\");\r\n ui.disable();\r\n table.showProgress();\r\n var data = table.serialize();\r\n var lstTemp = [];\r\n var putData = \"\";\r\n for (var i = 0; i < data.length; i++) {\r\n var item = data[i];\r\n if (item.chon != undefined) {\r\n if (item.chon == \"C\") {\r\n //item.mstnmua = item[\"mst\"];\r\n lstTemp.push(item);\r\n putData += \"'\" + item.hdon_id + \"',\";\r\n }\r\n }\r\n }\r\n\r\n putData = putData.substring(0, putData.length - 1);\r\n\r\n if (lstTemp.length == 0) {\r\n ui.enable();\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa chọn hóa đơn\" });\r\n \r\n return;\r\n }\r\n\r\n var params = {};\r\n params[\"data\"] = putData;\r\n var lhhoa = $$(\"bangtonghop-form\").getValues().lhhoa;\r\n\r\n if (lhhoa === \"1\") {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/GetDetailHoaDonXangDauChoXuLy\", params, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n if (json[0].shdon != null) {\r\n var errorMessenger = \"\";\r\n for (var index = 0; index < json.length; index++) {\r\n if (index == json.length - 1) {\r\n errorMessenger += json[index].shdon;\r\n } else {\r\n errorMessenger += json[index].shdon + \", \";\r\n }\r\n }\r\n webix.message(\"Các số hoá đơn sau chưa nhập đơn vị tính của hàng hoá: \" + errorMessenger, \"error\");\r\n return;\r\n }\r\n var frm = webix.$$(\"danhsach_hoadon\");\r\n frm.clearAll();\r\n frm.parse(json);\r\n\r\n var tien_tt = 0;\r\n var tien_thue = 0;\r\n var tong_tien = 0;\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n var item = json[i];\r\n tien_tt += item[\"ttcthue\"] == null ? 0 : item[\"ttcthue\"];\r\n tien_thue += item[\"tgtthue\"] == null ? 0 : item[\"tgtthue\"];\r\n tong_tien += item[\"tgtttoan\"] == null ? 0 : item[\"tgtttoan\"];\r\n }\r\n\r\n $$(\"tgtcthue\").setValue(fm(tien_tt));\r\n $$(\"tgtthue\").setValue(fm(tien_thue));\r\n $$(\"tgtttoan\").setValue(fm(tong_tien));\r\n\r\n $$(\"danhsachhoadon-win\").close();\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/GetDetailHoadonChoXuLy\", params, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var frm = webix.$$(\"danhsach_hoadon\");\r\n frm.clearAll();\r\n frm.parse(json);\r\n\r\n var tien_tt = 0;\r\n var tien_thue = 0;\r\n var tong_tien = 0;\r\n var tong_gt = 0;\r\n var tong_phi = 0;\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n var item = json[i];\r\n tien_tt += item[\"ttcthue\"] == null ? 0 : item[\"ttcthue\"];\r\n tien_thue += item[\"tgtthue\"] == null ? 0 : item[\"tgtthue\"];\r\n tong_tien += item[\"tgtttoan\"] == null ? 0 : item[\"tgtttoan\"];\r\n tong_gt += item[\"tgtkhac\"] == null ? 0 : item[\"tgtkhac\"];\r\n tong_phi += item[\"tgtphi\"] == null ? 0 : item[\"tgtphi\"];\r\n }\r\n\r\n $$(\"tgtcthue\").setValue(fm(tien_tt));\r\n $$(\"tgtthue\").setValue(fm(tien_thue));\r\n $$(\"tgtttoan\").setValue(fm(tong_tien));\r\n\r\n $$(\"tgtkhac\").setValue(fm(tong_gt));\r\n $$(\"tgtphi\").setValue(fm(tong_phi));\r\n\r\n $$(\"danhsachhoadon-win\").close();\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n\r\n // var frm = webix.$$(\"danhsach_hoadon\");\r\n // frm.clearAll();\r\n // frm.parse(lstTemp);\r\n // $$(\"tgtcthue\").setValue(fm(tien_tt));\r\n // $$(\"tgtthue\").setValue(fm(tien_thue));\r\n // $$(\"tgtttoan\").setValue(fm(tong_tien));\r\n // $$(\"danhsachhoadon-win\").close();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"danhsachhoadon-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"danhsachhoadon-win\",\r\n position: \"center\",\r\n head: \"Chọn hóa đơn vào bảng tổng hợp dữ liệu điện tử\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n minWidth: 900,\r\n id: \"danhsachhoadon-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_hoadonFrm\",\r\n name: \"danhsach_hoadonFrm\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n minHeight: 400,\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n on: {},\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 55,\r\n checkValue: \"C\",\r\n uncheckValue: \"K\",\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"nky\",\r\n name: \"nky\",\r\n header: [\"Ngày giờ ký\", { content: \"datepickerFilter\" }],\r\n width: 120,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"khieu\",\r\n name: \"khieu\",\r\n header: [\r\n \"Ký hiệu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"shdon\",\r\n name: \"shdon\",\r\n header: [\"Số hóa đơn\", { content: \"textFilter\" }],\r\n width: 120,\r\n },\r\n {\r\n id: \"mst\",\r\n name: \"mst\",\r\n header: [\"Mã số thuế\", { content: \"textFilter\" }],\r\n width: 150,\r\n },\r\n {\r\n id: \"ten\",\r\n name: \"ten\",\r\n header: [\r\n \"Tên đơn vị/Tên người mua\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 350,\r\n },\r\n\r\n {\r\n id: \"tgtttbso\",\r\n name: \"tgtttbso\",\r\n header: [\"Thành tiền sau thuế\", { content: \"textFilter\" }],\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n },\r\n {\r\n id: \"tdlap\",\r\n name: \"tdlap\",\r\n header: [\"Thời điểm lập\", { content: \"datepickerFilter\" }],\r\n width: 120,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"nglap\",\r\n name: \"nglap\",\r\n header: \"Người lập\",\r\n header: [\"Người lập\", { content: \"textFilter\" }],\r\n width: 150,\r\n },\r\n ],\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setParams: function (value) {\r\n params = value;\r\n var table = $$(\"danhsach_hoadonFrm\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/GetHoadonChoXuLy\", params, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (!json.hasOwnProperty(\"error\")) {\r\n //console.log(json);\r\n $$(\"danhsach_hoadonFrm\").clearAll();\r\n $$(\"danhsach_hoadonFrm\").parse(json);\r\n\r\n if (json[\"data\"].length > 0) {\r\n $$(\"tgtcthue\").setValue(fm(json[\"data\"][0][\"tong_dt\"]));\r\n $$(\"tgtthue\").setValue(fm(json[\"data\"][0][\"tong_tienthue\"]));\r\n }\r\n\r\n $$(\"danhsach_hoadonFrm\").refresh();\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n },\r\n setValues: function (item) {},\r\n };\r\n});\r\n\ndefine('views/forms/68_bangtonghopform',[\"app\", \"models/user\", \"views/forms/68_bangdanhsachhoadon\"], function (app, user, bangdanhsachhoadon) {\r\n var editmode = 0;\r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var getNgay = function () {\r\n var option = $$(\"lkdlieu\").getValue();\r\n if (option == \"Q\") {\r\n var nam = $$(\"nam\").getValue();\r\n var thang;\r\n var quy = $$(\"thang\").getValue();\r\n if (quy == \"1\") {\r\n thang = 0;\r\n } else if (quy == \"2\") {\r\n thang = 3;\r\n } else if (quy == \"3\") {\r\n thang = 6;\r\n } else if (quy == \"4\") {\r\n thang = 9;\r\n }\r\n var firstDate = new Date(nam, thang, 1);\r\n var lastDate = new Date(nam, thang + 3, 0);\r\n\r\n $$(\"tu_ngay\").setValue(firstDate);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDate);\r\n $$(\"den_ngay\").refresh();\r\n } else if (option == \"T\") {\r\n var year = $$(\"nam\").getValue();\r\n var month = $$(\"thang\").getValue();\r\n var date1 = month + \"/01\" + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n var firstDay1 = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\r\n var lastDay1 = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n $$(\"tu_ngay\").setValue(firstDay1);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDay1);\r\n $$(\"den_ngay\").refresh();\r\n } else if (option == \"N\") {\r\n var year = $$(\"nam\").getValue();\r\n var month = $$(\"thang\").getValue();\r\n var day = $$(\"ngay\").getValue();\r\n var date1 = month + \"/\" + day + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n\r\n $$(\"tu_ngay\").setValue(date);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(date);\r\n $$(\"den_ngay\").refresh();\r\n }\r\n\r\n var tableDetail = webix.$$(\"danhsach_hoadon\");\r\n tableDetail.clearAll();\r\n };\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Lưu tạm (F10)\",\r\n id: \"btnBTHSave\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var tableHoadon = $$(\"bangtonghop-form\");\r\n if (tableHoadon.validate()) {\r\n var ds_hdon = $$(\"danhsach_hoadon\").serialize();\r\n if (ds_hdon.length == 0) {\r\n webix.message(\"Bạn chưa nhập chi tiết hóa đơn\", \"error\");\r\n return;\r\n } else {\r\n webix.extend(tableHoadon, webix.ProgressBar);\r\n tableHoadon.disable();\r\n tableHoadon.showProgress();\r\n // console.log(data_post);\r\n var limit = 1000;\r\n var m = parseInt(ds_hdon.length / limit);\r\n if (ds_hdon.length > m * limit) m = m + 1;\r\n var apiIndex = 0;\r\n var item = $$(\"bangtonghop-form\").getValues();\r\n for (var k = 0; k < m; k++) {\r\n if (k < m - 1) {\r\n item[\"details\"] = ds_hdon.slice(k * limit, (k + 1) * limit);\r\n } else {\r\n item[\"details\"] = ds_hdon.slice(k * limit, ds_hdon.length);\r\n }\r\n var tgtcthue = 0;\r\n var tgtthue = 0;\r\n var tgtttoan = 0;\r\n var tgtkhac = 0;\r\n var tgtphi = 0;\r\n item[\"details\"].forEach(function (it) {\r\n tgtcthue += it[\"ttcthue\"];\r\n tgtthue += it[\"tgtthue\"];\r\n tgtttoan += it[\"tgtttoan\"];\r\n tgtkhac += it[\"tgtkhac\"];\r\n tgtphi += it[\"tgtphi\"];\r\n });\r\n item[\"tgtcthue\"] = tgtcthue;\r\n item[\"tgtthue\"] = tgtthue;\r\n item[\"tgtttoan\"] = tgtttoan;\r\n item[\"tgtkhac\"] = tgtkhac;\r\n item[\"tgtphi\"] = tgtphi;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n if (item.lhhoa === \"1\") {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveBangTHDLXangDau\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n apiIndex++;\r\n if (apiIndex == m) {\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n }\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n apiIndex++;\r\n if (apiIndex == m) {\r\n var json = JSON.parse(text);\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.$$(\"bangtonghop-win\").close();\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n },\r\n });\r\n } else {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveBangTHDL\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n apiIndex++;\r\n if (apiIndex == m) {\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n }\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n apiIndex++;\r\n if (apiIndex == m) {\r\n var json = JSON.parse(text);\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.$$(\"bangtonghop-win\").close();\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n },\r\n });\r\n }\r\n }\r\n }\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // shortcut: \"F11\",\r\n // view: \"button\",\r\n // label: \"Xuất tờ khai XML (F11)\",\r\n // type: \"form\",\r\n // align: \"center\",\r\n // width: 180,\r\n // on: {\r\n // onClick: function () {\r\n // }\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // }\r\n // },\r\n // {\r\n // shortcut: \"F12\",\r\n // id: \"btnBTHSend\",\r\n // view: \"button\",\r\n // label: \"Ký và gửi CQT (F12)\",\r\n // type: \"form\",\r\n // align: \"center\",\r\n // width: 150,\r\n // on: {\r\n // onClick: function () {\r\n // }\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // }\r\n // },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Quay lại (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"bangtonghop-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n fullscreen: true,\r\n id: \"bangtonghop-win\",\r\n position: \"center\",\r\n head: \"BẢNG TỔNG HỢP DỮ LIỆU HÓA ĐƠN ĐIỆN TỬ\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 1500,\r\n id: \"bangtonghop-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n rows: [\r\n {\r\n cols: [\r\n {},\r\n {\r\n view: \"label\",\r\n label: \"[01] Kỳ dữ liệu\",\r\n width: 170,\r\n },\r\n {\r\n id: \"lkdlieu\",\r\n name: \"lkdlieu\",\r\n view: \"combo\",\r\n width: 120,\r\n value: \"T\",\r\n options: [\r\n { id: \"T\", value: \"Tháng\" },\r\n { id: \"Q\", value: \"Quý\" },\r\n { id: \"N\", value: \"Ngày\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == \"N\") {\r\n var k = [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\r\n $$(\"thang\").define(\"options\", k);\r\n $$(\"thang\").define(\"width\", 60);\r\n $$(\"thang\").refresh();\r\n $$(\"ngay\").show();\r\n $$(\"ngay\").refresh();\r\n }\r\n if (newv == \"T\") {\r\n var k = [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\r\n $$(\"thang\").define(\"options\", k);\r\n $$(\"thang\").define(\"width\", 120);\r\n $$(\"thang\").refresh();\r\n $$(\"ngay\").hide();\r\n $$(\"ngay\").refresh();\r\n }\r\n if (newv == \"Q\") {\r\n var k = [\"1\", \"2\", \"3\", \"4\"];\r\n $$(\"thang\").define(\"options\", k);\r\n $$(\"thang\").define(\"width\", 120);\r\n $$(\"thang\").setValue(\"1\");\r\n $$(\"thang\").refresh();\r\n $$(\"ngay\").hide();\r\n $$(\"ngay\").refresh();\r\n }\r\n\r\n getNgay();\r\n },\r\n },\r\n },\r\n {\r\n id: \"ngay\",\r\n name: \"ngay\",\r\n view: \"combo\",\r\n width: 60,\r\n value: \"1\",\r\n hidden: true,\r\n options: [\r\n \"1\",\r\n \"2\",\r\n \"3\",\r\n \"4\",\r\n \"5\",\r\n \"6\",\r\n \"7\",\r\n \"8\",\r\n \"9\",\r\n \"10\",\r\n \"11\",\r\n \"12\",\r\n \"13\",\r\n \"14\",\r\n \"15\",\r\n \"16\",\r\n \"17\",\r\n \"18\",\r\n \"19\",\r\n \"20\",\r\n \"21\",\r\n \"22\",\r\n \"23\",\r\n \"24\",\r\n \"25\",\r\n \"26\",\r\n \"27\",\r\n \"28\",\r\n \"29\",\r\n \"30\",\r\n \"31\",\r\n ],\r\n required: true,\r\n invalidMessage: \"Tháng/Quý không được để trống !\",\r\n on: {\r\n onChange: function () {\r\n getNgay();\r\n },\r\n },\r\n },\r\n {\r\n id: \"thang\",\r\n name: \"thang\",\r\n view: \"combo\",\r\n width: 120,\r\n value: \"1\",\r\n options: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"],\r\n required: true,\r\n invalidMessage: \"Tháng/Quý không được để trống !\",\r\n on: {\r\n onChange: function () {\r\n getNgay();\r\n },\r\n },\r\n },\r\n {\r\n id: \"nam\",\r\n name: \"nam\",\r\n view: \"text\",\r\n label: \"Năm\",\r\n labelWidth: 50,\r\n width: 120,\r\n required: true,\r\n invalidMessage: \"Năm không được để trống !\",\r\n on: {\r\n onChange: function () {\r\n getNgay();\r\n },\r\n },\r\n },\r\n { id: \"tu_ngay\", name: \"tu_ngay\", view: \"datepicker\", label: \"Từ ngày\", hidden: true, width: 200, labelWidth: 100 },\r\n { id: \"den_ngay\", name: \"den_ngay\", view: \"datepicker\", label: \"Đến ngày:\", hidden: true, labelWidth: 100, width: 260 },\r\n {\r\n id: \"ldau\",\r\n name: \"ldau\",\r\n view: \"checkbox\",\r\n label: \"[02] Lần đầu\",\r\n value: 1,\r\n width: 150,\r\n on: {\r\n onChange: function () {\r\n var lanDau = $$(\"ldau\").getValue();\r\n if (lanDau == 0) {\r\n $$(\"bslthu\").define(\"required\", true);\r\n $$(\"bslthu\").define(\"invalidMessage\", \"Không được để trống trường này!\");\r\n $$(\"bslthu\").enable();\r\n $$(\"bslthu\").refresh();\r\n } else {\r\n $$(\"bslthu\").define(\"required\", false);\r\n $$(\"bslthu\").define(\"invalidMessage\", \"\");\r\n $$(\"bslthu\").setValue(\"\");\r\n $$(\"bslthu\").disable();\r\n $$(\"bslthu\").refresh();\r\n }\r\n },\r\n },\r\n },\r\n { id: \"bslthu\", name: \"bslthu\", view: \"text\", label: \"[03] Bổ sung lần thứ: \", labelWidth: 140, width: 250, disabled: true },\r\n { id: \"sdlthu\", name: \"sdlthu\", view: \"text\", label: \"[04] Sửa đổi lần thứ: \", labelWidth: 130, width: 250 },\r\n {},\r\n ],\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n id: \"tnnt\",\r\n name: \"tnnt\",\r\n view: \"text\",\r\n label: \"[05] Tên người nộp thuế:\",\r\n labelWidth: 170,\r\n width: 410,\r\n required: true,\r\n invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n readonly: true,\r\n },\r\n {\r\n id: \"mst\",\r\n name: \"mst\",\r\n view: \"text\",\r\n label: \"[06] Mã số thuế:\",\r\n labelWidth: 130,\r\n width: 380,\r\n readonly: true,\r\n required: true,\r\n invalidMessage: \"Mã số thuế không được để trống !\",\r\n },\r\n { id: \"nlap\", name: \"nlap\", view: \"datepicker\", label: \"Ngày lập\", width: 190, labelWidth: 70, value: new Date() },\r\n { id: \"sbthdlieu\", name: \"sbthdlieu\", view: \"text\", label: \"Số:\", labelWidth: 50, width: 200, readonly: true },\r\n {},\r\n ],\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n id: \"hddin\",\r\n name: \"hddin\",\r\n label: \"Hóa đơn đặt in:\",\r\n labelWidth: 170,\r\n width: 410,\r\n view: \"combo\",\r\n value: \"0\",\r\n options: [\r\n { id: \"0\", value: \"Hóa đơn điện tử\" },\r\n { id: \"1\", value: \"Hóa đơn đặt in\" },\r\n ],\r\n },\r\n {\r\n id: \"lhhoa\",\r\n name: \"lhhoa\",\r\n view: \"text\",\r\n label: \"Loại hàng hóa:\",\r\n labelWidth: 130,\r\n width: 380,\r\n view: \"combo\",\r\n value: \"9\",\r\n options: [\r\n { id: \"1\", value: \"Xăng dầu\" },\r\n { id: \"2\", value: \"Vận tải hàng không\" },\r\n { id: \"9\", value: \"Khác\" },\r\n ],\r\n on: {\r\n onChange: function () {\r\n var loaiHangHoa = $$(\"lhhoa\").getValue();\r\n if (loaiHangHoa === \"1\") {\r\n $$(\"lkdlieu\").setValue(\"N\");\r\n $$(\"lkdlieu\").disable();\r\n $$(\"danhsach_hoadon\").clearAll();\r\n $$(\"tgtcthue\").setValue(\"\");\r\n $$(\"tgtthue\").setValue(\"\");\r\n $$(\"tgtttoan\").setValue(\"\");\r\n } else {\r\n $$(\"lkdlieu\").setValue(\"T\");\r\n $$(\"lkdlieu\").enable();\r\n $$(\"danhsach_hoadon\").clearAll();\r\n $$(\"tgtcthue\").setValue(\"\");\r\n $$(\"tgtthue\").setValue(\"\");\r\n $$(\"tgtttoan\").setValue(\"\");\r\n }\r\n },\r\n },\r\n },\r\n {\r\n id: \"dvtt\",\r\n name: \"dvtt\",\r\n view: \"text\",\r\n label: \"Đơn vị tiền tệ:\",\r\n labelWidth: 130,\r\n width: 380,\r\n view: \"combo\",\r\n required: true,\r\n invalidMessage: \"Đơn vị tiền tệ không được để trống !\",\r\n options: app.config.host + \"/Invoice68/GetListDVTT\",\r\n \r\n // attributes: {\r\n // readonly: editmode == 1 ? false : true\r\n // }\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"button\",\r\n label: \"Chọn hóa đơn\",\r\n id: \"btnTaiHoaDon\",\r\n width: 150,\r\n on: {\r\n onItemClick: function (id, e) {\r\n var item = $$(\"bangtonghop-form\").getValues();\r\n var tableHoadon = $$(\"bangtonghop-form\");\r\n if (tableHoadon.validate()) {\r\n var loaiHangHoa = $$(\"lhhoa\").getValue();\r\n if (loaiHangHoa !== \"1\") {\r\n var detailForm = this.getTopParentView().$scope.ui(bangdanhsachhoadon.$ui);\r\n bangdanhsachhoadon.setEditMode(1);\r\n bangdanhsachhoadon.setParams(item);\r\n detailForm.show();\r\n } else {\r\n var detailForm = this.getTopParentView().$scope.ui(bangdanhsachhoadon.$ui);\r\n bangdanhsachhoadon.setEditMode(1);\r\n bangdanhsachhoadon.setParams(item);\r\n detailForm.show();\r\n }\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Chọn toàn bộ\",\r\n id: \"btnAllHoaDon\",\r\n width: 150,\r\n on: {\r\n onItemClick: function (id, e) {\r\n var tableHoadon = $$(\"bangtonghop-form\");\r\n if (tableHoadon.validate()) {\r\n webix.confirm({\r\n text: \"Tự động chọn tất cả hóa đơn trong kì\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n var params = $$(\"bangtonghop-form\").getValues();\r\n var tableHoadon = webix.$$(\"danhsach_hoadon\");\r\n if (tableHoadon.validate()) {\r\n webix.extend($$(\"bangtonghop-form\"), webix.ProgressBar);\r\n $$(\"bangtonghop-form\").disable();\r\n $$(\"bangtonghop-form\").showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/GetHoadonChoXuLyall\", params, {\r\n error: function (text, data, XmlHttpRequest) {\r\n $$(\"bangtonghop-form\").enable();\r\n $$(\"bangtonghop-form\").hideProgress();\r\n webix.message(text, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (!json.hasOwnProperty(\"error\")) {\r\n //console.log(json);\r\n tableHoadon.clearAll();\r\n tableHoadon.parse(json);\r\n\r\n tableHoadon.refresh();\r\n var tien_tt = 0;\r\n var tien_thue = 0;\r\n var tong_tien = 0;\r\n var tong_gt = 0;\r\n var tong_phi = 0;\r\n\r\n for (var i = 0; i < json.data.length; i++) {\r\n var item = json.data[i];\r\n tien_tt += item[\"ttcthue\"] == null ? 0 : item[\"ttcthue\"];\r\n tien_thue += item[\"tgtthue\"] == null ? 0 : item[\"tgtthue\"];\r\n tong_tien += item[\"tgtttoan\"] == null ? 0 : item[\"tgtttoan\"];\r\n tong_gt += item[\"tgtkhac\"] == null ? 0 : item[\"tgtkhac\"];\r\n tong_phi += item[\"tgtphi\"] == null ? 0 : item[\"tgtphi\"];\r\n }\r\n\r\n $$(\"tgtcthue\").setValue(fm(tien_tt));\r\n $$(\"tgtthue\").setValue(fm(tien_thue));\r\n $$(\"tgtttoan\").setValue(fm(tong_tien));\r\n\r\n $$(\"tgtkhac\").setValue(fm(tong_gt));\r\n $$(\"tgtphi\").setValue(fm(tong_phi));\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n $$(\"bangtonghop-form\").enable();\r\n $$(\"bangtonghop-form\").hideProgress();\r\n },\r\n });\r\n }\r\n }\r\n },\r\n });\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Xóa\",\r\n id: \"btnXoaHoaDon\",\r\n width: 120,\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_hoadon\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n\r\n var table = webix.$$(\"danhsach_hoadon\");\r\n var data = table.serialize();\r\n\r\n var tien_tt = 0;\r\n var tien_thue = 0;\r\n var tong_tien = 0;\r\n var tong_gt = 0;\r\n var tong_phi = 0;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n var item = data[i];\r\n tien_tt += item[\"ttcthue\"] == null ? 0 : item[\"ttcthue\"];\r\n tien_thue += item[\"tgtthue\"] == null ? 0 : item[\"tgtthue\"];\r\n tong_tien += item[\"tgtttoan\"] == null ? 0 : item[\"tgtttoan\"];\r\n tong_gt += item[\"tgtkhac\"] == null ? 0 : item[\"tgtkhac\"];\r\n tong_phi += item[\"tgtphi\"] == null ? 0 : item[\"tgtphi\"];\r\n }\r\n\r\n $$(\"tgtcthue\").setValue(fm(tien_tt));\r\n $$(\"tgtthue\").setValue(fm(tien_thue));\r\n $$(\"tgtttoan\").setValue(fm(tong_tien));\r\n $$(\"tgtkhac\").setValue(fm(tong_gt));\r\n $$(\"tgtphi\").setValue(fm(tong_phi)); \r\n\r\n return;\r\n }\r\n var editor = table.getEditState();\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n\r\n var table = webix.$$(\"danhsach_hoadon\");\r\n var data = table.serialize();\r\n\r\n var tien_tt = 0;\r\n var tien_thue = 0;\r\n var tong_tien = 0;\r\n var tong_gt = 0;\r\n var tong_phi = 0;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n var item = data[i];\r\n tien_tt += item[\"ttcthue\"] == null ? 0 : item[\"ttcthue\"];\r\n tien_thue += item[\"tgtthue\"] == null ? 0 : item[\"tgtthue\"];\r\n tong_tien += item[\"tgtttoan\"] == null ? 0 : item[\"tgtttoan\"];\r\n tong_gt += item[\"tgtkhac\"] == null ? 0 : item[\"tgtkhac\"];\r\n tong_phi += item[\"tgtphi\"] == null ? 0 : item[\"tgtphi\"];\r\n }\r\n\r\n $$(\"tgtcthue\").setValue(fm(tien_tt));\r\n $$(\"tgtthue\").setValue(fm(tien_thue));\r\n $$(\"tgtttoan\").setValue(fm(tong_tien));\r\n $$(\"tgtkhac\").setValue(fm(tong_gt));\r\n $$(\"tgtphi\").setValue(fm(tong_phi)); \r\n\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_hoadon\",\r\n minHeight: 350,\r\n name: \"danhsach_hoadon\",\r\n select: true,\r\n scroll: true,\r\n resizeColumn: true,\r\n // footer: true,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n width: 40,\r\n },\r\n {\r\n id: \"khieu\",\r\n name: \"khieu\",\r\n header: \"Ký hiệu\",\r\n width: 120,\r\n // footer: \"Tổng cộng\"\r\n },\r\n { id: \"shdon\", name: \"shdon\", header: \"Số hóa đơn\", width: 120 },\r\n {\r\n id: \"nlap\",\r\n name: \"nlap\",\r\n header: \"Ngày hóa đơn\",\r\n width: 120,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n { id: \"tnmua\", name: \"tnmua\", header: \"Tên người mua\", width: 350 },\r\n { id: \"mstnmua\", name: \"mstnmua\", header: \"Mã số thuế người mua/mã khách hàng\", width: 150 },\r\n { id: \"thhdvu\", name: \"thhdvu\", header: \"Mặt hàng\", width: 150 },\r\n {\r\n id: \"sluong\",\r\n name: \"sluong\",\r\n header: \"Số lượng hàng hóa\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n },\r\n {\r\n id: \"ttcthue\",\r\n name: \"ttcthue\",\r\n header: \"Tiền trước thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n {\r\n id: \"tsuat\",\r\n name: \"tsuat\",\r\n header: \"Thuế suất\",\r\n width: 150,\r\n css: { \"text-align\": \"right\" },\r\n },\r\n {\r\n id: \"tgtthue\",\r\n name: \"tgtthue\",\r\n header: \"Tiền thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n { id: \"tgtkhac\", name: \"tgtkhac\", header: \"Giảm trừ khác\", width: 150},\r\n { id: \"tgia\", name: \"tgia\", header: \"Tỷ giá\", width: 100},\r\n { id: \"tgtphi\", name: \"tgtphi\", header: \"Tổng tiền phí\", width: 150},\r\n {\r\n id: \"tgtttoan\",\r\n name: \"tgtttoan\",\r\n header: \"Tiền thanh toán\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n {\r\n id: \"tthai\",\r\n name: \"tthai\",\r\n header: \"Trạng thái\",\r\n width: 150,\r\n format: function (text) {\r\n var result = \"\";\r\n if (text == 0) {\r\n result = \"Mới\";\r\n } else if (text == 1) {\r\n result = \"Hủy\";\r\n } else if (text == 2) {\r\n result = \"Điều chỉnh\";\r\n } else if (text == 3) {\r\n result = \"Thay thế\";\r\n } else if (text == 4) {\r\n result = \"Giải trình\";\r\n } else if (text == 5) {\r\n result = \"Sai sót do tổng hợp\";\r\n }\r\n return result;\r\n },\r\n },\r\n { id: \"tthdlquan\", name: \"tthdlquan\", header: \"Thông tin hóa đơn liên quan\", width: 250 },\r\n { id: \"gchu\", name: \"gchu\", header: \"Ghi chú\", width: 150 }\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"tgtcthue\",\r\n name: \"tgtcthue\",\r\n view: \"text\",\r\n label: \"Tiền trước thuế\",\r\n readonly: true,\r\n labelWidth: 100,\r\n css: \"mcls_readonly_text\",\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \",\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \".\",\r\n // decimalSize: 0,\r\n // })\r\n },\r\n {\r\n id: \"tgtthue\",\r\n name: \"tgtthue\",\r\n view: \"text\",\r\n label: \"Tiền thuế\",\r\n readonly: true,\r\n labelWidth: 100,\r\n css: \"mcls_readonly_text\",\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \",\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \".\",\r\n // decimalSize: 0,\r\n // })\r\n },\r\n {\r\n id: \"tgtkhac\",\r\n name: \"tgtkhac\",\r\n view: \"text\",\r\n readonly: true,\r\n labelWidth: 100,\r\n css: \"mcls_readonly_text\",\r\n label: \"Tổng giảm trừ\",\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \",\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \".\",\r\n // decimalSize: 0,\r\n // })\r\n },\r\n {\r\n id: \"tgtphi\",\r\n name: \"tgtphi\",\r\n view: \"text\",\r\n readonly: true,\r\n labelWidth: 100,\r\n css: \"mcls_readonly_text\",\r\n label: \"Tổng tiền phí\",\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \",\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \".\",\r\n // decimalSize: 0,\r\n // })\r\n },\r\n {\r\n id: \"tgtttoan\",\r\n name: \"tgtttoan\",\r\n view: \"text\",\r\n readonly: true,\r\n labelWidth: 100,\r\n css: \"mcls_readonly_text\",\r\n label: \"Tiền thanh toán\",\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \",\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \".\",\r\n // decimalSize: 0,\r\n // })\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setValues: function (item) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n item[\"nlap\"] = removeTimeZoneT(item[\"nlap\"]);\r\n if (editmode == 2)\r\n $$(\"dvtt\").define(\"readonly\",true);\r\n form.setValues(item);\r\n\r\n $$(\"tgtcthue\").setValue(fm(item.tgtcthue));\r\n $$(\"tgtthue\").setValue(fm(item.tgtthue));\r\n $$(\"tgtttoan\").setValue(fm(item.tgtttoan));\r\n $$(\"tgtkhac\").setValue(fm(item.tgtkhac));\r\n $$(\"tgtphi\").setValue(fm(item.tgtphi));\r\n console.log(editmode);\r\n getNgay();\r\n\r\n var tableDetail = webix.$$(\"danhsach_hoadon\");\r\n if (item.lhhoa === 1) {\r\n var url = app.config.host + \"/Invoice68/GetDataBangTHDLXangDauDetail?id=\" + item.id;\r\n } else {\r\n var url = app.config.host + \"/Invoice68/GetDataBangTHDLDetail?id=\" + item.id;\r\n }\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_bangtonghop',[\r\n \"app\", \r\n \"locale\", \r\n \"models/user\", \r\n \"views/forms/68_bangtonghopform\", \r\n \"views/forms/68_bangdanhsachhoadon\", \r\n \"views/forms/68_hoadon_history\",\r\n \"views/modules/download_file_handle\"], function (\r\n app,\r\n _,\r\n user,\r\n bangtonghopform,\r\n bangdanhsachhoadon,\r\n hoadonHistory,\r\n handleFile\r\n) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Bảng tổng hợp hóa đơn\",\r\n details: \"Bảng tổng hợp hóa đơn\",\r\n });\r\n\r\n var initUI = function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetBangTHDL\";\r\n var par = \"\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n par = \"start=\" + params.start;\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n var urlTemp = url;\r\n if(par) {\r\n urlTemp = url.replace(\"&count=\" + view.config.datafetch, \"\").replace(par, \"start=0\");\r\n } else {\r\n urlTemp = url.replace(\"&count=\" + view.config.datafetch, \"\");\r\n }\r\n\r\n table.define('urlget',urlTemp);\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n function formatDate() {\r\n var date = new Date();\r\n \r\n var dd = String(date.getDate()).padStart(2, '0');\r\n var MM = String(date.getMonth() + 1).padStart(2, '0'); // Tháng bắt đầu từ 0\r\n var YYYY = date.getFullYear();\r\n var hh = String(date.getHours()).padStart(2, '0');\r\n var mm = String(date.getMinutes()).padStart(2, '0');\r\n var ss = String(date.getSeconds()).padStart(2, '0');\r\n \r\n var formattedDate = dd + \"_\" + MM + \"_\" + YYYY + \"_\" + hh + \"_\" + mm + \"_\" + ss;\r\n return formattedDate;\r\n }\r\n\r\n function exportExcelMulti(selectedItems) {\r\n\r\n // kiểm tra lại bảng tổng hợp\r\n var idItems = [];\r\n var loaiHd = selectedItems[0].lhhoa;\r\n for(var i = 0; i < selectedItems.length; i++) {\r\n idItems.push(selectedItems[i].id);\r\n }\r\n\r\n var fileName = \"bthdl_\" + formatDate();\r\n var fileProcessInfor = {\r\n method: \"POST\",\r\n response: \"arraybuffer\",\r\n header: { \"Content-type\": \"application/json\" },\r\n url: app.config.host + \"/Invoice68/excelBTHDLieuMulti\",\r\n param: JSON.stringify(idItems),\r\n onError: function (text, data, XmlHttpRequest) {\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n onSuccess: null,\r\n onDownLoad: function (data) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n webix.html.download(file, fileName + \".xlsx\");\r\n },\r\n fileName: fileName,\r\n fileType: 'xlsx',\r\n headerTitle: \"Kết xuất BTHDL\"\r\n };\r\n\r\n handleFile.handleFileDownLoad(fileProcessInfor);\r\n }\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(bangtonghopform.$ui);\r\n bangtonghopform.setEditMode(1);\r\n detailForm.show();\r\n\r\n var url = app.config.host + \"/Invoice68/GetInfoCompany\";\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n webix.$$(\"tnnt\").setValue(json.name);\r\n webix.$$(\"mst\").setValue(json.tax_code);\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng nào ! \", \"error\");\r\n return;\r\n }\r\n\r\n var detailForm = this.$scope.ui(bangtonghopform.$ui);\r\n bangtonghopform.setEditMode(2);\r\n bangtonghopform.setValues(selectedItem);\r\n if (selectedItem.trang_thai == 1) {\r\n var form = $$(\"bangtonghop-form\").elements;\r\n for (var key in form) {\r\n var $el = form[key];\r\n $el.define(\"readonly\", \"true\");\r\n $el.define(\"css\", \"mcls_readonly_text\");\r\n $el.refresh();\r\n }\r\n\r\n $$(\"btnBTHSave\").destructor();\r\n $$(\"btnTaiHoaDon\").destructor();\r\n $$(\"btnXoaHoaDon\").destructor();\r\n }\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n\r\n\r\n var databth = table.serialize();\r\n var datachon = [];\r\n\r\n for (var i = 0; i < databth.length; i++) {\r\n if (databth[i]!= undefined && databth[i].chon === true && databth[i].trang_thai === \"0\") {\r\n datachon.push(databth[i]);\r\n }\r\n }\r\n if (datachon.length == 0) {\r\n webix.message(\"Bạn chưa chọn dòng nào ở trạng thái chờ ký ! \", \"error\");\r\n return;\r\n }\r\n /*if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Bảng tổng hợp đã gửi CQT không thể xóa ! \", \"error\");\r\n return;\r\n }*/\r\n\r\n var khData = {};\r\n\r\n khData.editmode = 3;\r\n khData.data = datachon;\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveBangTHDL\", khData, function (text) {\r\n var response = JSON.parse(text);\r\n\r\n if (response.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: response.error });\r\n return;\r\n }\r\n\r\n // table.remove(item.id);\r\n var btnRefresh = $$(\"btnRefresh\");\r\n btnRefresh.callEvent(\"onClick\");\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + \"In (F7)\" + \"\",\r\n id: \"btnPreview\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng in ! \", \"error\");\r\n return;\r\n }\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n if (selectedItem.lhhoa == 1) {\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBTHDLieuXangDau?id=\" + selectedItem.id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n } else {\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBTHDLieu?id=\" + selectedItem.id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + \"Export Excel\" + \"\",\r\n //id: \"btnPreview\",\r\n //shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n\r\n var dataTable = table.serialize();\r\n var selectedRecords = [];\r\n for (var i = 0; i < dataTable.length; i++) {\r\n if (dataTable[i]!= undefined && dataTable[i].chon === true) {\r\n selectedRecords.push(dataTable[i]);\r\n }\r\n }\r\n\r\n if (selectedRecords == null || selectedRecords.length <= 0) {\r\n webix.message(\"Bạn chưa chọn dòng xuất dữ liệu! \", \"error\");\r\n return;\r\n }\r\n\r\n /*if (selectedRecords.length == 1) {\r\n var selectedItem = selectedRecords[0];\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n \r\n if (selectedItem.lhhoa == 1) {\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/excelBTHDLieuXangDau?id=\" + selectedItem.id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n webix.modalbox.hide(box);\r\n webix.html.download(file, \"bthdl.xlsx\");\r\n },\r\n });\r\n } else {\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/excelBTHDLieu?id=\" + selectedItem.id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n webix.modalbox.hide(box);\r\n webix.html.download(file, \"bthdl.xlsx\");\r\n },\r\n });\r\n }\r\n } else {\r\n exportExcelMulti(selectedRecords);\r\n }*/\r\n exportExcelMulti(selectedRecords);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 180,\r\n label: ' ' + '' + \"Kết xuất toàn bộ BTHDL\" + \"\",\r\n //id: \"btnPreview\",\r\n //shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"bangtonghop\");\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix.ui({\r\n view:\"datatable\",\r\n id:\"excel\",\r\n columns: [\r\n {\r\n id: \"trang_thai\",\r\n header: \"Trạng thái\",\r\n exportType: \"string\",\r\n template: function (obj) {\r\n return obj.trang_thai == \"1\" ? \"Đã gửi CQT\" : \"Chưa gửi CQT\";\r\n },\r\n },\r\n {\r\n id: \"ldau\",\r\n header: \"Trạng thái gửi\",\r\n exportType: \"string\",\r\n template: function (obj) {\r\n return obj.ldau == \"1\" ? \"Lần đầu\" : \"Bổ sung\";\r\n },\r\n },\r\n {\r\n id: \"kdlieu\",\r\n header: \"Kỳ dữ liệu\",\r\n exportType: \"string\",\r\n },\r\n\r\n {\r\n id: \"ngay_ky\",\r\n header: \"Ngày ký\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"sbthdlieu\",\r\n header: \"Số thứ tự bảng\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"tgtcthue\",\r\n header: \"Tổng tiền trước thuế\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"tgtthue\",\r\n header: \"Tổng tiền thuế\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"tgtttoan\",\r\n header: \"Tổng tiền thanh toán\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"nlap\",\r\n header: \"Ngày lập\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"nglap\",\r\n header: \"Người lập\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"ngky\",\r\n header: \"Người gửi\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"ket_qua\",\r\n header: \"Kết quả\",\r\n exportType: \"string\",\r\n template: function (obj) {\r\n if (obj.ket_qua == 1) {\r\n return \"Dữ liệu hợp lệ\";\r\n } else {\r\n if (obj.ket_qua == 2) {\r\n return \"Dữ liệu không hợp lệ\";\r\n } else {\r\n return \"Chờ phản hồi\";\r\n }\r\n }\r\n },\r\n },\r\n ]\r\n });\r\n\r\n\r\n var tableexcel = $$(\"excel\");\r\n var urlget = table.config.urlget;\r\n urlget = urlget+\"&count=\" + table.data.count();\r\n\r\n tableexcel.load(urlget,\r\n function() {\r\n webix.toExcel($$(\"excel\"), {\r\n rawValues: true,\r\n columns: [\r\n {\r\n id: \"trang_thai\",\r\n header: \"Trạng thái\",\r\n exportType: \"string\",\r\n template: function (obj) {\r\n return obj.trang_thai == \"1\" ? \"Đã gửi CQT\" : \"Chưa gửi CQT\";\r\n },\r\n },\r\n {\r\n id: \"ldau\",\r\n header: \"Trạng thái gửi\",\r\n exportType: \"string\",\r\n template: function (obj) {\r\n return obj.ldau == \"1\" ? \"Lần đầu\" : \"Bổ sung\";\r\n },\r\n },\r\n {\r\n id: \"kdlieu\",\r\n header: \"Kỳ dữ liệu\",\r\n exportType: \"string\",\r\n },\r\n\r\n {\r\n id: \"ngay_ky\",\r\n header: \"Ngày ký\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"sbthdlieu\",\r\n header: \"Số thứ tự bảng\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"tgtcthue\",\r\n header: \"Tổng tiền trước thuế\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"tgtthue\",\r\n header: \"Tổng tiền thuế\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"tgtttoan\",\r\n header: \"Tổng tiền thanh toán\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"nlap\",\r\n header: \"Ngày lập\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"nglap\",\r\n header: \"Người lập\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"ngky\",\r\n header: \"Người gửi\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"ket_qua\",\r\n header: \"Kết quả\",\r\n exportType: \"string\",\r\n template: function (obj) {\r\n if (obj.ket_qua == 1) {\r\n return \"Dữ liệu hợp lệ\";\r\n } else {\r\n if (obj.ket_qua == 2) {\r\n return \"Dữ liệu không hợp lệ\";\r\n } else {\r\n return \"Chờ phản hồi\";\r\n }\r\n }\r\n },\r\n },\r\n ],\r\n filename: \"DanhSachBTHDL\",\r\n });\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Ký gửi CQT\") + \"\",\r\n id: \"btnSign\",\r\n on: {\r\n onClick: function () {\r\n var tableDK = webix.$$(\"bangtonghop\");\r\n var layoutDK = webix.$$(\"layout\");\r\n /*var selectedItem = tableDK.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Mẫu đã ký và gửi CQT bạn không thể ký lại! \", \"error\");\r\n return;\r\n }*/\r\n var datafrm = tableDK.serialize();\r\n\r\n var data_id = [];\r\n var data_id_xd = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true && datafrm[i].trang_thai != 1 && datafrm[i].lhhoa != 1) {\r\n data_id.push(datafrm[i].id);\r\n }\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true && datafrm[i].trang_thai != 1 && datafrm[i].lhhoa == 1) {\r\n data_id_xd.push(datafrm[i].id);\r\n }\r\n }\r\n }\r\n }\r\n if (data_id.length > 0 && data_id_xd.length > 0) {\r\n webix.message(\"Chỉ được chọn các bảng THDL cùng loại hàng hoá để ký!\");\r\n return;\r\n }\r\n if (data_id.length > 0 && data_id_xd.length == 0) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n CheckHSM: \"\",\r\n id: data_id,\r\n };\r\n\r\n webix.extend(layoutDK, webix.ProgressBar);\r\n layoutDK.disable();\r\n layoutDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignBTHDL\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n layoutDK.enable();\r\n layoutDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n layoutDK.enable();\r\n layoutDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n // $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n return;\r\n }\r\n },\r\n });\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"bangtonghop\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n id: data_id,\r\n CheckHSM: \"1\",\r\n };\r\n\r\n webix.extend(layoutDK, webix.ProgressBar);\r\n layoutDK.disable();\r\n layoutDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignBTHDL\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n layoutDK.enable();\r\n layoutDK.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n layoutDK.enable();\r\n layoutDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n table.enable();\r\n table.hideProgress();\r\n } else {\r\n var parameters_list = [];\r\n\r\n var k = 0; //khai báo biến k để chạy lần lượt từng hoá đơn theo id\r\n function excuteHdPlugin() {\r\n if (k < data_id.length) {\r\n var hdon_id = data_id[k];\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlBTHDL?id=\" + hdon_id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, hdon_id]).then(function (results) {\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item,\r\n shdon: json.shdon,\r\n };\r\n parameters_list.push(parameters);\r\n }\r\n k++;\r\n excuteHdPlugin();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: json.shdon,\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n } else {\r\n if (parameters_list.length > 0) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlBTHDL\", JSON.stringify(parameters_list), function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n }\r\n\r\n excuteHdPlugin();\r\n }\r\n });\r\n }\r\n });\r\n });\r\n } else if (data_id_xd.length > 0 && data_id == 0) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n } \r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n /*id: selectedItem.id,*/\r\n id: data_id_xd,\r\n };\r\n\r\n webix.extend(layoutDK, webix.ProgressBar);\r\n layoutDK.disable();\r\n layoutDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignBTHDLXangDau\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n layoutDK.enable();\r\n layoutDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n layoutDK.enable();\r\n layoutDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n // $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n return;\r\n }\r\n },\r\n });\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"bangtonghop\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n id: data_id_xd,\r\n CheckHSM: \"1\",\r\n };\r\n\r\n webix.extend(layoutDK, webix.ProgressBar);\r\n layoutDK.disable();\r\n layoutDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignBTHDLXangDau\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n layoutDK.enable();\r\n layoutDK.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n layoutDK.enable();\r\n layoutDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n table.enable();\r\n table.hideProgress(); \r\n } else {\r\n var parameters_list = [];\r\n\r\n function excuteHdPlugin(k) {\r\n if (k < data_id_xd.length) {\r\n var hdon_id = data_id_xd[k];\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlBTHDLXangDau?id=\" + hdon_id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, hdon_id]).then(function (results) {\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item,\r\n shdon: json.shdon,\r\n };\r\n parameters_list.push(parameters);\r\n }\r\n k++;\r\n excuteHdPlugin(k);\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: json.shdon,\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n } else {\r\n if (parameters_list.length > 0) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlBTHDLXangDau\", JSON.stringify(parameters_list), function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n }\r\n\r\n excuteHdPlugin(0);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n } else {\r\n webix.message(\"Chưa tích chọn bảng hoặc bảng đã gửi CQT!\");\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Lập bổ sung\") + \"\",\r\n id: \"btnUp\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(bangtonghopform.$ui);\r\n bangtonghopform.setEditMode(1);\r\n detailForm.show();\r\n\r\n webix.$$(\"ldau\").setValue(0);\r\n\r\n var url = app.config.host + \"/Invoice68/GetInfoCompany\";\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n webix.$$(\"tnnt\").setValue(json.name);\r\n webix.$$(\"mst\").setValue(json.tax_code);\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Tải XML\") + \"\",\r\n id: \"btnDownloadXml\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai != 1) {\r\n webix.message(\"Bảng tổng hợp chưa gửi CQT không tồn tại xml ! \", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLBangTHDL?id=\" + selectedItem.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"BangTHDL.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"bangtonghop\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n urlget:\"\",\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n onClick: {\r\n DowloadBTHLDRep: function (event, cell, target) {\r\n var win = webix.$$(\"bangtonghop\");\r\n var record = win.getItem(cell.row);\r\n\r\n if (record.trang_thai != 1) {\r\n webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n return;\r\n }\r\n\r\n if (record.ket_qua == null || record.ket_qua == \"\") {\r\n webix.message(\"CQT chưa phản hồi !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n var filename = \"KetQuaKiemTraBTHDL.xml\";\r\n var url = app.config.host + \"/Invoice68/ExportXMLBTHDLRep?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, filename);\r\n });\r\n\r\n return false;\r\n },\r\n InBTHDLRep: function (event, cell, target) {\r\n var table = webix.$$(\"bangtonghop\");\r\n var item = table.getItem(cell.row);\r\n\r\n if (item.ket_qua == null || item.ket_qua == \"\") {\r\n webix.message(\"CQT chưa phản hồi !\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBTHDLRep?id=\" + item.id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"bangtonghop\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {},\r\n onItemClick: function (id) {\r\n var table = webix.$$(\"bangtonghop\");\r\n var item = table.getSelectedItem();\r\n item.chon = !item.chon;\r\n table.updateItem(id.row, item);\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"index\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"trang_thai\",\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"serverSelectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"0\", value: \"Chưa gửi CQT\" },\r\n { id: \"1\", value: \"Đã gửi CQT\" },\r\n ],\r\n },\r\n ],\r\n width: 150,\r\n template: function (obj) {\r\n if (obj.loai_tbao == \"5\") {\r\n return \"\";\r\n } else {\r\n return obj.trang_thai == 1\r\n ? \" Đã gửi CQT\"\r\n : \" Chưa gửi CQT\";\r\n }\r\n },\r\n },\r\n {\r\n id: \"ldau\",\r\n header: [\r\n \"Lần nộp\",\r\n {\r\n content: \"serverSelectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"1\", value: \"Lần đầu\" },\r\n { id: \"0\", value: \"Bổ sung\" },\r\n ],\r\n },\r\n ],\r\n width: 150,\r\n template: function (obj) {\r\n return obj.ldau == \"1\"\r\n ? \" Lần đầu\"\r\n : \" Bổ sung\";\r\n },\r\n },\r\n\r\n {\r\n id: \"btnMessagetn\",\r\n header: [\"\", \"Lịch sử xử lý\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n return \" \";\r\n },\r\n width: 180,\r\n },\r\n {\r\n id: \"mtdiep_gui\",\r\n header: [\r\n \"Mã thông điệp gửi\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 350,\r\n },\r\n {\r\n id: \"kdlieu\",\r\n header: [\r\n \"Kỳ dữ liệu\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"ngay_ky\",\r\n header: [\r\n \"Ngày giờ ký\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n columnType: \"datetime\",\r\n },\r\n\r\n {\r\n id: \"sbthdlieu\",\r\n header: [\r\n \"Số thứ tự bảng\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n columnType: \"numeric\",\r\n width: 120,\r\n },\r\n {\r\n id: \"tgtcthue\",\r\n header: [\r\n \"Tổng tiền trước thuế\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n },\r\n {\r\n id: \"tgtthue\",\r\n header: [\r\n \"Tổng tiền thuế\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n columnType: \"numeric\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n },\r\n {\r\n id: \"tgtttoan\",\r\n header: [\r\n \"Tổng tiền thanh toán\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n columnType: \"numeric\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n },\r\n {\r\n id: \"nlap\",\r\n header: [\r\n \"Ngày lập\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"nglap\",\r\n header: [\r\n \"Người lập\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n // {\r\n // id: \"mtdiep_gui\",\r\n // header: [\r\n // \"Mã thông điệp\",\r\n // {\r\n // content: \"textFilter\",\r\n // },\r\n // ],\r\n // width: 150,\r\n // },\r\n {\r\n id: \"ngky\",\r\n header: [\r\n \"Người gửi\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"ket_qua\",\r\n header: [\r\n \"Kết quả\",\r\n {\r\n content: \"serverSelectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"0\", value: \"Chờ phản hổi\" },\r\n { id: \"1\", value: \"Dữ liệu hợp lệ\" },\r\n { id: \"2\", value: \"Dữ liệu không hợp lệ\" },\r\n ],\r\n },\r\n ],\r\n css: { \"text-align\": \"center\" },\r\n width: 150,\r\n template: function (obj) {\r\n if (obj.ket_qua == 1) {\r\n return \"Dữ liệu hợp lệ \";\r\n } else {\r\n if (obj.ket_qua == 2) {\r\n return \"Dữ liệu không hợp lệ \";\r\n } else {\r\n return \"Chờ phản hồi\";\r\n }\r\n }\r\n },\r\n },\r\n {\r\n id: \"bthDowloadBTHLDRep\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.ket_qua != null && obj.ket_qua != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 120,\r\n },\r\n {\r\n id: \"btnInBTHDLRep\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.ket_qua != null && obj.ket_qua != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 120,\r\n },\r\n // {\r\n // id: \"mtdiepcqt\",\r\n // header: [\"\", \"Mã thông điệp CQT\"],\r\n // width: 250,\r\n // },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n id: \"layout\",\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"bangtonghop\");\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChangeBangtonghop\", function (mode, item) {\r\n if (mode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (mode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n },\r\n\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_bangtonghopbienlaiform',[\"app\", \"models/user\"], function (app, user) {\r\n var editmode = 0;\r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var getNgay = function () {\r\n var option = $$(\"lkdlieu\").getValue();\r\n if (option == \"Q\") {\r\n var nam = $$(\"nam\").getValue();\r\n var thang;\r\n var quy = $$(\"thang\").getValue();\r\n if (quy == \"1\") {\r\n thang = 0;\r\n } else if (quy == \"2\") {\r\n thang = 3;\r\n } else if (quy == \"3\") {\r\n thang = 6;\r\n } else if (quy == \"4\") {\r\n thang = 9;\r\n }\r\n var firstDate = new Date(nam, thang, 1);\r\n var lastDate = new Date(nam, thang + 3, 0);\r\n\r\n $$(\"tu_ngay\").setValue(firstDate);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDate);\r\n $$(\"den_ngay\").refresh();\r\n } else if (option == \"T\") {\r\n var year = $$(\"nam\").getValue();\r\n var month = $$(\"thang\").getValue();\r\n var date1 = month + \"/01\" + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n var firstDay1 = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\r\n var lastDay1 = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n $$(\"tu_ngay\").setValue(firstDay1);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDay1);\r\n $$(\"den_ngay\").refresh();\r\n } else if (option == \"N\") {\r\n var year = $$(\"nam\").getValue();\r\n var month = $$(\"thang\").getValue();\r\n var day = $$(\"ngay\").getValue();\r\n var date1 = month + \"/\" + day + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n\r\n $$(\"tu_ngay\").setValue(date);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(date);\r\n $$(\"den_ngay\").refresh();\r\n }\r\n\r\n var tableDetail = webix.$$(\"danhsach_hoadon\");\r\n tableDetail.clearAll();\r\n };\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Lưu tạm (F10)\",\r\n id: \"btnBTHSave\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var tableHoadon = $$(\"bangtonghop-form\");\r\n if (tableHoadon.validate()) {\r\n var ds_hdon = $$(\"danhsach_hoadon\").serialize();\r\n if (ds_hdon.length == 0) {\r\n webix.message(\"Bạn chưa nhập chi tiết biên lai\", \"error\");\r\n return;\r\n } else {\r\n webix.extend(tableHoadon, webix.ProgressBar);\r\n tableHoadon.disable();\r\n tableHoadon.showProgress();\r\n // console.log(data_post);\r\n var limit = 1000;\r\n var m = parseInt(ds_hdon.length / limit);\r\n if (ds_hdon.length > m * limit) m = m + 1;\r\n var apiIndex = 0;\r\n var item = $$(\"bangtonghop-form\").getValues();\r\n item[\"loaibth\"] = 2;\r\n for (var k = 0; k < m; k++) {\r\n if (k < m - 1) {\r\n item[\"details\"] = ds_hdon.slice(k * limit, (k + 1) * limit);\r\n } else {\r\n item[\"details\"] = ds_hdon.slice(k * limit, ds_hdon.length);\r\n }\r\n var tgtcthue = 0;\r\n var tgtthue = 0;\r\n var tgtttoan = 0;\r\n item[\"details\"].forEach(function (it) {\r\n tgtcthue += it[\"ttcthue\"];\r\n tgtthue += it[\"tgtthue\"];\r\n tgtttoan += it[\"tgtttoan\"];\r\n });\r\n item[\"tgtcthue\"] = tgtcthue;\r\n item[\"tgtthue\"] = tgtthue;\r\n item[\"tgtttoan\"] = tgtttoan;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveBangTHDL\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.$$(\"bangtonghop-win\").close();\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n }\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // shortcut: \"F11\",\r\n // view: \"button\",\r\n // label: \"Xuất tờ khai XML (F11)\",\r\n // type: \"form\",\r\n // align: \"center\",\r\n // width: 180,\r\n // on: {\r\n // onClick: function () {\r\n // }\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // }\r\n // },\r\n // {\r\n // shortcut: \"F12\",\r\n // id: \"btnBTHSend\",\r\n // view: \"button\",\r\n // label: \"Ký và gửi CQT (F12)\",\r\n // type: \"form\",\r\n // align: \"center\",\r\n // width: 150,\r\n // on: {\r\n // onClick: function () {\r\n // }\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // }\r\n // },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Quay lại (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"bangtonghop-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n fullscreen: true,\r\n id: \"bangtonghop-win\",\r\n position: \"center\",\r\n head: \"BÁO CÁO TÌNH HÌNH SỬ DỤNG DỮ LIỆU BIÊN LAI ĐIỆN TỬ\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 1500,\r\n id: \"bangtonghop-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n rows: [\r\n {\r\n cols: [\r\n { width: 200 },\r\n {\r\n view: \"label\",\r\n label: \"[01] Kỳ dữ liệu\",\r\n width: 170,\r\n },\r\n {\r\n id: \"lkdlieu\",\r\n name: \"lkdlieu\",\r\n view: \"combo\",\r\n width: 120,\r\n value: \"Q\",\r\n options: [ \r\n { id: \"T\", value: \"Tháng\" },\r\n { id: \"Q\", value: \"Quý\" },\r\n { id: \"N\", value: \"Ngày\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == \"N\") {\r\n var k = [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\r\n $$(\"thang\").define(\"options\", k);\r\n $$(\"thang\").define(\"width\", 60);\r\n $$(\"thang\").refresh();\r\n $$(\"ngay\").show();\r\n $$(\"ngay\").refresh();\r\n }\r\n if (newv == \"T\") {\r\n var k = [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\r\n $$(\"thang\").define(\"options\", k);\r\n $$(\"thang\").define(\"width\", 120);\r\n $$(\"thang\").refresh();\r\n $$(\"ngay\").hide();\r\n $$(\"ngay\").refresh();\r\n }\r\n if (newv == \"Q\") {\r\n var k = [\"1\", \"2\", \"3\", \"4\"];\r\n $$(\"thang\").define(\"options\", k);\r\n $$(\"thang\").define(\"width\", 120);\r\n $$(\"thang\").refresh();\r\n $$(\"ngay\").hide();\r\n $$(\"ngay\").refresh();\r\n }\r\n\r\n getNgay();\r\n },\r\n },\r\n },\r\n {\r\n id: \"ngay\",\r\n name: \"ngay\",\r\n view: \"combo\",\r\n width: 60,\r\n value: \"1\",\r\n hidden: true,\r\n options: [\r\n \"1\",\r\n \"2\",\r\n \"3\",\r\n \"4\",\r\n \"5\",\r\n \"6\",\r\n \"7\",\r\n \"8\",\r\n \"9\",\r\n \"10\",\r\n \"11\",\r\n \"12\",\r\n \"13\",\r\n \"14\",\r\n \"15\",\r\n \"16\",\r\n \"17\",\r\n \"18\",\r\n \"19\",\r\n \"20\",\r\n \"21\",\r\n \"22\",\r\n \"23\",\r\n \"24\",\r\n \"25\",\r\n \"26\",\r\n \"27\",\r\n \"28\",\r\n \"29\",\r\n \"30\",\r\n \"31\",\r\n ],\r\n required: true,\r\n invalidMessage: \"Tháng/Quý không được để trống !\",\r\n on: {\r\n onChange: function () {\r\n getNgay();\r\n },\r\n },\r\n },\r\n {\r\n id: \"thang\",\r\n name: \"thang\",\r\n view: \"combo\",\r\n width: 120,\r\n value: \"1\",\r\n options: [\"1\", \"2\", \"3\", \"4\"],\r\n required: true,\r\n invalidMessage: \"Tháng/Quý không được để trống !\",\r\n on: {\r\n onChange: function () {\r\n getNgay();\r\n },\r\n },\r\n },\r\n {\r\n id: \"nam\",\r\n name: \"nam\",\r\n view: \"text\",\r\n label: \"Năm\",\r\n labelWidth: 50,\r\n width: 120,\r\n required: true,\r\n invalidMessage: \"Năm không được để trống !\",\r\n on: {\r\n onChange: function () {\r\n getNgay();\r\n },\r\n },\r\n },\r\n { id: \"tu_ngay\", name: \"tu_ngay\", view: \"datepicker\", label: \"Từ ngày\", hidden: true, width: 200, labelWidth: 100 },\r\n { id: \"den_ngay\", name: \"den_ngay\", view: \"datepicker\", label: \"Đến ngày:\", hidden: true, labelWidth: 100, width: 260 },\r\n {},\r\n ],\r\n },\r\n {\r\n cols: [\r\n { width: 200 },\r\n {\r\n id: \"tnnt\",\r\n name: \"tnnt\",\r\n view: \"text\",\r\n label: \"[02] Tên người nộp thuế:\",\r\n labelWidth: 170,\r\n width: 410,\r\n required: true,\r\n invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n readonly: true,\r\n },\r\n {\r\n id: \"mst\",\r\n name: \"mst\",\r\n view: \"text\",\r\n label: \"[03] Mã số thuế:\",\r\n labelWidth: 130,\r\n width: 380,\r\n readonly: true,\r\n required: true,\r\n invalidMessage: \"Mã số thuế không được để trống !\",\r\n },\r\n { id: \"nlap\", name: \"nlap\", view: \"datepicker\", label: \"Ngày lập\", width: 190, labelWidth: 70, value: new Date() },\r\n { id: \"sbthdlieu\", name: \"sbthdlieu\", view: \"text\", label: \"Số:\", labelWidth: 50, width: 200, readonly: true },\r\n {},\r\n ],\r\n },\r\n {\r\n cols: [\r\n { width: 200 },\r\n {\r\n id: \"dchi\",\r\n name: \"dchi\",\r\n view: \"text\",\r\n label: \"[04] Địa chỉ:\",\r\n labelWidth: 130,\r\n width: 900,\r\n invalidMessage: \"Mã số thuế không được để trống !\",\r\n },\r\n {\r\n id: \"ddanh\",\r\n name: \"ddanh\",\r\n view: \"text\",\r\n label: \"[05] Tỉnh/Thành phố:\",\r\n labelWidth: 130,\r\n width: 300,\r\n invalidMessage: \"Mã số thuế không được để trống !\",\r\n },\r\n ],\r\n },\r\n\r\n /*{\r\n id: \"lhhoa\",\r\n name: \"lhhoa\",\r\n view: \"text\",\r\n label: \"Loại mẫu:\",\r\n labelWidth: 130,\r\n width: 380,\r\n view: \"combo\",\r\n value: \"10\",\r\n options: [\r\n { id: \"10\", value: \"Mẫu BC26BLĐT\" },\r\n { id: \"11\", value: \"Mẫu BC26BLG\" },\r\n ],\r\n on: {\r\n onChange: function () {\r\n var loaiHangHoa = $$(\"lhhoa\").getValue();\r\n if (loaiHangHoa === \"1\") {\r\n $$(\"lkdlieu\").setValue(\"N\");\r\n $$(\"lkdlieu\").disable();\r\n $$(\"danhsach_hoadon\").clearAll();\r\n $$(\"tgtcthue\").setValue(\"\");\r\n $$(\"tgtthue\").setValue(\"\");\r\n $$(\"tgtttoan\").setValue(\"\");\r\n } else {\r\n $$(\"lkdlieu\").setValue(\"T\");\r\n $$(\"lkdlieu\").enable();\r\n $$(\"danhsach_hoadon\").clearAll();\r\n $$(\"tgtcthue\").setValue(\"\");\r\n $$(\"tgtthue\").setValue(\"\");\r\n $$(\"tgtttoan\").setValue(\"\");\r\n }\r\n },\r\n },\r\n },*/\r\n ],\r\n },\r\n {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"button\",\r\n label: \"Lấy thông tin biên lai\",\r\n id: \"btnAllHoaDon\",\r\n width: 150,\r\n on: {\r\n onItemClick: function (id, e) {\r\n var tableHoadon = $$(\"bangtonghop-form\");\r\n if (tableHoadon.validate()) {\r\n webix.confirm({\r\n text: \"Tự động lập bản báo cáo theo kì\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n var params = $$(\"bangtonghop-form\").getValues();\r\n params[\"loaibth\"] = 2;\r\n var tableHoadon = webix.$$(\"danhsach_hoadon\");\r\n if (tableHoadon.validate()) {\r\n webix.extend($$(\"bangtonghop-form\"), webix.ProgressBar);\r\n $$(\"bangtonghop-form\").disable();\r\n $$(\"bangtonghop-form\").showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/GetHoadonChoXuLyall\", params, {\r\n error: function (text, data, XmlHttpRequest) {\r\n $$(\"bangtonghop-form\").enable();\r\n $$(\"bangtonghop-form\").hideProgress();\r\n webix.message(text, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (!json.hasOwnProperty(\"error\")) {\r\n //console.log(json);\r\n tableHoadon.clearAll();\r\n tableHoadon.parse(json);\r\n\r\n tableHoadon.refresh();\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n $$(\"bangtonghop-form\").enable();\r\n $$(\"bangtonghop-form\").hideProgress();\r\n },\r\n });\r\n }\r\n }\r\n },\r\n });\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Xóa\",\r\n id: \"btnXoaHoaDon\",\r\n width: 120,\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_hoadon\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n\r\n var table = webix.$$(\"danhsach_hoadon\");\r\n var data = table.serialize();\r\n\r\n var tien_tt = 0;\r\n var tien_thue = 0;\r\n var tong_tien = 0;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n var item = data[i];\r\n tien_tt += item[\"ttcthue\"] == null ? 0 : item[\"ttcthue\"];\r\n tien_thue += item[\"tgtthue\"] == null ? 0 : item[\"tgtthue\"];\r\n tong_tien += item[\"tgtttoan\"] == null ? 0 : item[\"tgtttoan\"];\r\n }\r\n\r\n $$(\"tgtcthue\").setValue(fm(tien_tt));\r\n $$(\"tgtthue\").setValue(fm(tien_thue));\r\n $$(\"tgtttoan\").setValue(fm(tong_tien));\r\n\r\n return;\r\n }\r\n var editor = table.getEditState();\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n\r\n var table = webix.$$(\"danhsach_hoadon\");\r\n var data = table.serialize();\r\n\r\n var tien_tt = 0;\r\n var tien_thue = 0;\r\n var tong_tien = 0;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n var item = data[i];\r\n tien_tt += item[\"ttcthue\"] == null ? 0 : item[\"ttcthue\"];\r\n tien_thue += item[\"tgtthue\"] == null ? 0 : item[\"tgtthue\"];\r\n tong_tien += item[\"tgtttoan\"] == null ? 0 : item[\"tgtttoan\"];\r\n }\r\n\r\n $$(\"tgtcthue\").setValue(fm(tien_tt));\r\n $$(\"tgtthue\").setValue(fm(tien_thue));\r\n $$(\"tgtttoan\").setValue(fm(tong_tien));\r\n\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_hoadon\",\r\n minHeight: 350,\r\n name: \"danhsach_hoadon\",\r\n select: true,\r\n scroll: true,\r\n resizeColumn: true,\r\n // footer: true,\r\n editable: false,\r\n tooltip: true,\r\n css: \"webix_header_border webix_data_border\",\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n width: 40,\r\n position: \"center\",\r\n },\r\n {\r\n id: \"thdon\",\r\n name: \"thdon\",\r\n header: \"Tên biên lai\",\r\n width: 300,\r\n position: \"center\",\r\n // footer: \"Tổng cộng\"\r\n },\r\n {\r\n id: \"khms\",\r\n name: \"khms\",\r\n header: \"Ký hiệu mẫu số biên lai\",\r\n width: 120,\r\n position: \"center\",\r\n // footer: \"Tổng cộng\"\r\n },\r\n {\r\n id: \"khieu\",\r\n name: \"khieu\",\r\n header: \"Ký hiệu biên lai\",\r\n width: 120,\r\n position: \"center\",\r\n // footer: \"Tổng cộng\"\r\n },\r\n {\r\n id: \"tongso\",\r\n name: \"tongso\",\r\n header: \"Tổng số\",\r\n width: 120,\r\n position: \"center\",\r\n css : { \"text-align\": \"center\" }\r\n // footer: \"Tổng cộng\"\r\n },\r\n\r\n {\r\n id: \"sdky_tso\",\r\n name: \"sdky_tso\",\r\n header: [\r\n {\r\n content: \"columnGroup\",\r\n closed: false,\r\n batch: \"gr1\",\r\n groupText: \"Số tồn đầu kỳ\",\r\n colspan: 2,\r\n position: \"center\",\r\n },\r\n \"Từ số\",\r\n ],\r\n width: 140,\r\n position: \"center\",\r\n css : { \"text-align\": \"center\" }\r\n },\r\n { id: \"sdky_dso\", name: \"sdky_dso\", batch: \"gr1\", header: [null, \"Đến số\"], position: \"center\" ,css : { \"text-align\": \"center\" }},\r\n {\r\n id: \"sph_tso\",\r\n name: \"sph_tso\",\r\n header: [\r\n {\r\n content: \"columnGroup\",\r\n closed: false,\r\n batch: \"gr0\",\r\n groupText: \"Mua phát sinh trong kì\",\r\n colspan: 2,\r\n position: \"center\",\r\n },\r\n \"Từ số\",\r\n ],\r\n width: 140,\r\n position: \"center\",\r\n css : { \"text-align\": \"center\" }\r\n },\r\n { id: \"sph_dso\", name: \"sph_dso\", batch: \"gr0\", header: [null, \"Đến số\"], position: \"center\",css : { \"text-align\": \"center\" } },\r\n { id: \"ssdung\", name: \"ssdung\", header: \"Tổng số sử dụng, hủy\", width: 140, position: \"center\",css : { \"text-align\": \"center\" } },\r\n {\r\n id: \"ssdung_tso\",\r\n name: \"ssdung_tso\",\r\n header: [\r\n {\r\n content: \"columnGroup\",\r\n closed: false,\r\n batch: \"gr2\",\r\n groupText: \"Số sử dụng\",\r\n colspan: 2,\r\n position: \"center\",\r\n },\r\n \"Từ số\",\r\n ],\r\n width: 140,\r\n position: \"center\",\r\n css : { \"text-align\": \"center\" }\r\n },\r\n { id: \"ssdung_dso\", name: \"ssdung_dso\", batch: \"gr2\", header: [null, \"Đến số\"], width: 140, position: \"center\",css : { \"text-align\": \"center\" } },\r\n { id: \"ssdung_dsd\", name: \"ssdung_dsd\", header: \"Số đã dùng\", width: 140, position: \"center\" ,css : { \"text-align\": \"center\" }},\r\n {\r\n id: \"shuy_sluong\",\r\n name: \"shuy_sluong\",\r\n header: [\r\n {\r\n content: \"columnGroup\",\r\n closed: false,\r\n batch: \"gr3\",\r\n groupText: \"Hủy\",\r\n colspan: 2,\r\n position: \"center\",\r\n },\r\n \"Số lượng\",\r\n ],\r\n width: 140,\r\n position: \"center\",\r\n css : { \"text-align\": \"center\" }\r\n },\r\n { id: \"shuy\", name: \"shuy\", batch: \"gr3\", header: [null, \"Số\"], width: 140, position: \"center\",css : { \"text-align\": \"center\" } },\r\n // { id: \"sxoabo_sluong\", name: \"sxoabo_sluong\", header: [\r\n // {\r\n // content: \"columnGroup\", closed: false, batch: \"gr4\",\r\n // groupText: \"Xóa bỏ\", colspan: 2,position: \"center\"\r\n // },\r\n // \"Số lượng\"], width: 140 ,position: \"center\"},\r\n // { id: \"sxoabo\", name: \"sxoabo\", batch: \"gr4\", header: [null, \"Số\"], width: 140, position: \"center\" },\r\n {\r\n id: \"scky_tso\",\r\n name: \"scky_tso\",\r\n header: [\r\n {\r\n content: \"columnGroup\",\r\n closed: false,\r\n batch: \"gr5\",\r\n groupText: \"Số tồn cuối kì kỳ\",\r\n colspan: 3,\r\n position: \"center\",\r\n },\r\n \"Từ số\",\r\n ],\r\n width: 140,\r\n position: \"center\",\r\n css : { \"text-align\": \"center\" }\r\n },\r\n { id: \"scky_dso\", name: \"scky_dso\", batch: \"gr5\", header: [null, \"Đến Số\"], width: 140, position: \"center\",css : { \"text-align\": \"center\" } },\r\n { id: \"sltck\", name: \"sltck\", batch: \"gr5\", header: [null, \"Số lượng\"], width: 140, position: \"center\",css : { \"text-align\": \"center\" } },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n getNgay();\r\n },\r\n setValues: function (item) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n\r\n item[\"nlap\"] = removeTimeZoneT(item[\"nlap\"]);\r\n form.setValues(item);\r\n\r\n //$$(\"tgtcthue\").setValue(fm(item.tgtcthue));\r\n //$$(\"tgtthue\").setValue(fm(item.tgtthue));\r\n //$$(\"tgtttoan\").setValue(fm(item.tgtttoan));\r\n\r\n var tableDetail = webix.$$(\"danhsach_hoadon\");\r\n\r\n var url = app.config.host + \"/Invoice68/GetDataBangTHDLDetail_bienlai?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_bangtonghopbienlai',[\"app\", \"locale\", \"models/user\", \"views/forms/68_bangtonghopbienlaiform\", \"views/forms/68_bangdanhsachhoadon\", \"views/forms/68_hoadon_history\"], function (\r\n app,\r\n _,\r\n user,\r\n bangtonghopform,\r\n bangdanhsachhoadon,\r\n hoadonHistory\r\n) {\r\n \r\n\r\n var initUI = function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetBangTHDL\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n url = url + \"&loaibth=2\";\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(bangtonghopform.$ui);\r\n bangtonghopform.setEditMode(1);\r\n detailForm.show();\r\n\r\n var url = app.config.host + \"/Invoice68/GetInfoCompany\";\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n webix.$$(\"tnnt\").setValue(json.name);\r\n webix.$$(\"mst\").setValue(json.tax_code);\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng nào ! \", \"error\");\r\n return;\r\n }\r\n\r\n var detailForm = this.$scope.ui(bangtonghopform.$ui);\r\n bangtonghopform.setEditMode(2);\r\n bangtonghopform.setValues(selectedItem);\r\n if (selectedItem.trang_thai == 1) {\r\n var form = $$(\"bangtonghop-form\").elements;\r\n for (var key in form) {\r\n var $el = form[key];\r\n $el.define(\"readonly\", \"true\");\r\n $el.define(\"css\", \"mcls_readonly_text\");\r\n $el.refresh();\r\n }\r\n\r\n $$(\"btnBTHSave\").destructor();\r\n //$$(\"btnTaiHoaDon\").destructor();\r\n $$(\"btnXoaHoaDon\").destructor();\r\n }\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var databth = table.serialize();\r\n var datachon = [];\r\n\r\n for (var i = 0; i < databth.length; i++) {\r\n if (databth[i]!= undefined && databth[i].chon === true && databth[i].trang_thai === \"0\") {\r\n datachon.push(databth[i]);\r\n }\r\n }\r\n if (datachon.length == 0) {\r\n webix.message(\"Bạn chưa chọn dòng nào ở trạng thái chờ ký ! \", \"error\");\r\n return;\r\n }\r\n /*if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Bảng tổng hợp đã gửi CQT không thể xóa ! \", \"error\");\r\n return;\r\n }*/\r\n\r\n var khData = {};\r\n\r\n khData.editmode = 3;\r\n khData.data = datachon;\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveBangTHDL\", khData, function (text) {\r\n var response = JSON.parse(text);\r\n\r\n if (response.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: response.error });\r\n return;\r\n }\r\n\r\n // table.remove(item.id);\r\n var btnRefresh = $$(\"btnRefresh\");\r\n btnRefresh.callEvent(\"onClick\");\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + \"In (F7)\" + \"\",\r\n id: \"btnPreview\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng in ! \", \"error\");\r\n return;\r\n }\r\n var box = webix.modalbox({\r\n title: \"Đang in Biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n if (selectedItem.lhhoa == 1) {\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBTHDLieuXangDau?id=\" + selectedItem.id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n } else {\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBTHDLieu_all?id=\" + selectedItem.id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"Gửi email\") + \"\",\r\n // id: \"btnSendEmail\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"bangtonghop\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Ký\") + \"\",\r\n id: \"btnSign\",\r\n on: {\r\n onClick: function () {\r\n var tableDK = webix.$$(\"bangtonghop\");\r\n /*var selectedItem = tableDK.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Mẫu đã ký và gửi CQT bạn không thể ký lại! \", \"error\");\r\n return;\r\n }*/\r\n var datafrm = tableDK.serialize();\r\n\r\n var data_id = [];\r\n var data_id_xd = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true && datafrm[i].trang_thai != 1 && datafrm[i].lhhoa != 1) {\r\n data_id.push(datafrm[i].id);\r\n }\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true && datafrm[i].trang_thai != 1 && datafrm[i].lhhoa == 1) {\r\n data_id_xd.push(datafrm[i].id);\r\n }\r\n }\r\n }\r\n }\r\n if (data_id.length > 0 && data_id_xd.length > 0) {\r\n webix.message(\"Chỉ được chọn các bảng THDL cùng loại hàng hoá để ký!\");\r\n return;\r\n }\r\n if (data_id.length > 0 && data_id_xd.length == 0) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n } \r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n CheckHSM: \"\",\r\n id: data_id,\r\n loaibth: 2,\r\n };\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignBTHDL\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Ký thành công thông báo phát hành!\", \"success\");\r\n // $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n return;\r\n }\r\n },\r\n });\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"bangtonghop\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n id: data_id,\r\n CheckHSM: \"1\",\r\n loaibth: 2,\r\n };\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignBTHDL\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n var parameters_list = [];\r\n\r\n function excuteHdPlugin(k) {\r\n if (k < data_id.length) {\r\n var hdon_id = data_id[k];\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlBTHDL?id=\" + hdon_id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, hdon_id]).then(function (results) {\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký Biên lai hoặc Plugin ký Biên lai chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item,\r\n shdon: json.shdon,\r\n };\r\n parameters_list.push(parameters);\r\n }\r\n k++;\r\n excuteHdPlugin(k);\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: json.shdon,\r\n idSigner: \"seller\",\r\n tagSign: \"TCTPLPhi\",\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n } else {\r\n if (parameters_list.length > 0) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlBTHDL\", JSON.stringify(parameters_list), function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n }\r\n\r\n excuteHdPlugin(0);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n } else if (data_id_xd.length > 0 && data_id == 0) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n /*id: selectedItem.id,*/\r\n id: data_id_xd,\r\n };\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignBTHDLXangDau\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n // $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n return;\r\n }\r\n },\r\n });\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"bangtonghop\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n id: data_id_xd,\r\n CheckHSM: \"1\",\r\n };\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignBTHDLXangDau\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n var parameters_list = [];\r\n\r\n var k = 0; //khai báo biến k để chạy lần lượt từng hoá đơn theo id\r\n function excuteHdPlugin() {\r\n if (k < data_id_xd.length) {\r\n var hdon_id = data_id_xd[k];\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlBTHDLXangDau?id=\" + hdon_id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, hdon_id]).then(function (results) {\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký Biên lai hoặc Plugin ký Biên lai chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item,\r\n shdon: json.shdon,\r\n };\r\n parameters_list.push(parameters);\r\n }\r\n k++;\r\n excuteHdPlugin();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: json.shdon,\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n } else {\r\n if (parameters_list.length > 0) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlBTHDLXangDau\", JSON.stringify(parameters_list), function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n }\r\n\r\n excuteHdPlugin();\r\n }\r\n });\r\n }\r\n });\r\n });\r\n } else {\r\n webix.message(\"Chưa tích chọn bảng hoặc bảng đã ký!\");\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 120,\r\n // label: ' ' + '' + _(\"Lập bổ sung\") + \"\",\r\n // id: \"btnUp\",\r\n // on: {\r\n // onClick: function () {\r\n // var detailForm = this.$scope.ui(bangtonghopform.$ui);\r\n // bangtonghopform.setEditMode(1);\r\n // detailForm.show();\r\n\r\n // webix.$$(\"ldau\").setValue(0);\r\n\r\n // var url = app.config.host + \"/Invoice68/GetInfoCompany\";\r\n\r\n // webix.ajax(url, function (text) {\r\n // var json = JSON.parse(text);\r\n // webix.$$(\"tnnt\").setValue(json.name);\r\n // webix.$$(\"mst\").setValue(json.tax_code);\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Tải XML\") + \"\",\r\n id: \"btnDownloadXml\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai != 1) {\r\n webix.message(\"Bảng tổng hợp chưa gửi CQT không tồn tại xml ! \", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLBangTHDL?id=\" + selectedItem.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"BangTHDL.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"bangtonghop\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n onClick: {\r\n DowloadBTHLDRep: function (event, cell, target) {\r\n var win = webix.$$(\"bangtonghop\");\r\n var record = win.getItem(cell.row);\r\n\r\n if (record.trang_thai != 1) {\r\n webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n return;\r\n }\r\n\r\n if (record.xml_nhan == null || record.xml_nhan == \"\") {\r\n webix.message(\"CQT chưa phản hồi !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n var filename = \"KetQuaKiemTraBTHDL.xml\";\r\n var url = app.config.host + \"/Invoice68/ExportXMLBTHDLRep?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, filename);\r\n });\r\n\r\n return false;\r\n },\r\n InBTHDLRep: function (event, cell, target) {\r\n var table = webix.$$(\"bangtonghop\");\r\n var item = table.getItem(cell.row);\r\n\r\n if (item.xml_nhan == null || item.xml_nhan == \"\") {\r\n webix.message(\"CQT chưa phản hồi !\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in Biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBTHDLRep?id=\" + item.id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"bangtonghop\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {},\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"index\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"trang_thai\",\r\n\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 150,\r\n template: function (obj) {\r\n return obj.trang_thai == 1\r\n ? \" Đã Ký\"\r\n : \" Chưa Ký\";\r\n },\r\n },\r\n /*{\r\n id: \"ldau\",\r\n header: [\r\n \"Lần nộp\",\r\n {\r\n content: \"selectFilter\",\r\n },\r\n ],\r\n width: 120,\r\n template: function (obj) {\r\n if (obj.ldau == 1) {\r\n return \"Lần đầu \";\r\n } else {\r\n return \"Bổ sung \";\r\n }\r\n },\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n columnType: \"numeric\",\r\n },\r\n // {\r\n // id: \"btnMessagetn\",\r\n // header: [\"\", \"Lịch sử xử lý\"],\r\n // css: { \"text-align\": \"center\" },\r\n // template: function (obj) {\r\n // return \" \";\r\n // },\r\n // width: 180,\r\n // },*/\r\n {\r\n id: \"kdlieu\",\r\n header: [\r\n \"Kỳ dữ liệu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"ngay_ky\",\r\n header: [\r\n \"Ngày giờ ký\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n columnType: \"datetime\",\r\n },\r\n\r\n {\r\n id: \"sbthdlieu\",\r\n header: [\r\n \"Số thứ tự bảng\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"nlap\",\r\n header: [\r\n \"Ngày lập\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"nglap\",\r\n header: [\r\n \"Người lập\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"ngky\",\r\n header: [\r\n \"Người ký\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.$$(\"title\").parse({\r\n title: \"Tình hình sử dụng biên lai\",\r\n details: \"Tình hình sử dụng biên lai\",\r\n });\r\n var table = webix.$$(\"bangtonghop\");\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChangeBangtonghop\", function (mode, item) {\r\n if (mode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (mode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n },\r\n\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_bangtonghopMTTform',[\"app\", \"models/user\",\"views/forms/68_hoadon_history\"], function (app, user,hoadonHistory) {\r\n var editmode = 0;\r\n var id = '';\r\n\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n fullscreen: true,\r\n id: \"bangtonghop-win\",\r\n position: \"center\",\r\n head: \"Tổng hợp hóa đơn MTT gửi CQT\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 1500,\r\n id: \"bangtonghop-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_hoadon\",\r\n minHeight: 350,\r\n name: \"danhsach_hoadon\",\r\n select: true,\r\n scroll: true,\r\n resizeColumn: true,\r\n // footer: true,\r\n editable: false,\r\n tooltip: true,\r\n css: \"webix_header_border webix_data_border\",\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n // var hdon_id = \"87de11a4-0b4e-42d4-a86c-45ba10b80337\";\r\n var url = app.config.host + \"/Invoice68/GetTongHopHoaDonTheoBTHID?id=\"+id;\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n width: 40,\r\n },\r\n {\r\n id: \"khieu\",\r\n name: \"khieu\",\r\n header:\"Ký hiệu\" ,\r\n width: 120,\r\n // footer: \"Tổng cộng\"\r\n },\r\n { id: \"shdon\", name: \"shdon\", header: \"Số hóa đơn\", width: 120 },\r\n { id: \"tttthai\", name: \"tttthai\", header: \"Trạng thái hóa đơn\", width: 120 },\r\n { id: \"tthoadon\", name: \"tthoadon\", header: \"Trạng thái gửi\", width: 120 },\r\n {\r\n id: \"btnMessagetn\",\r\n header: [\"
Lịch sử xử lý
\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n return \" \";\r\n },\r\n width: 180,\r\n },\r\n {\r\n id: \"nlap\",\r\n name: \"nlap\",\r\n header:\"Ngày hóa đơn\",\r\n width: 120,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n { id: \"tnmua\", name: \"tnmua\",header:\"Tên người mua\" , width: 350 },\r\n { id: \"mstnmua\", name: \"mstnmua\", header: \"Mã số thuế người mua/mã khách hàng\", width: 150 },\r\n { id: \"thhdvu\", name: \"thhdvu\", header: \"Mặt hàng\", width: 150 },\r\n {\r\n id: \"sluong\",\r\n name: \"sluong\",\r\n header: \"Số lượng hàng hóa\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n },\r\n {\r\n id: \"tgtttoan\",\r\n name: \"tgtttoan\",\r\n header: \"Tiền thanh toán\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n { id: \"tthdlquan\", name: \"tthdlquan\", header: \"Thông tin hóa đơn liên quan\", width: 250 },\r\n { id: \"gchu\", name: \"gchu\", header: \"Ghi chú\", width: 150 },\r\n ],\r\n },\r\n {\r\n id: \"btnHuyHDDT\",\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 120,\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n hdon_id = \"\";\r\n webix.$$(\"bangtonghop-win\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setId: function (bangtonghop_id) {\r\n var table = $$(\"danhsach_hoadon\");\r\n id = bangtonghop_id;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_bangtonghopMTT',[\"app\", \"locale\", \"models/user\", \"views/forms/68_bangtonghopMTTform\", \"views/forms/68_hoadon_history\",\"views/commonHD\"], function (\r\n app,\r\n _,\r\n user,\r\n bangtonghopform,\r\n hoadonHistory,\r\n commonHD\r\n) {\r\n \r\n\r\n var initUI = function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n\r\n var url = app.config.host + \"/Invoice68/GetBangTHDL\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n url = url + \"&loaibth=4\";\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + \"Xem chi tiết\" + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng nào ! \", \"error\");\r\n return;\r\n }\r\n\r\n var detailForm = this.$scope.ui(bangtonghopform.$ui);\r\n bangtonghopform.setId(selectedItem.bangtonghopdl_68_id);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Đã ký, không thể xóa ! \", \"error\");\r\n return;\r\n }\r\n\r\n var khData = {};\r\n\r\n khData.editmode = 3;\r\n khData.data = [];\r\n khData.data.push(selectedItem);\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveBangTHDL\", khData, function (text) {\r\n var response = JSON.parse(text);\r\n\r\n if (response.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: response.error });\r\n return;\r\n }\r\n\r\n // table.remove(item.id);\r\n var btnRefresh = $$(\"btnRefresh\");\r\n btnRefresh.callEvent(\"onClick\");\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Ký\") + \"\",\r\n id: \"btnSign\",\r\n on: {\r\n onClick: function () {\r\n var tableDK = webix.$$(\"bangtonghop\");\r\n var datafrm = tableDK.serialize();\r\n\r\n var data_id = [];\r\n var data_id_xd = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true && datafrm[i].trang_thai != 1) {\r\n data_id.push(datafrm[i].id);\r\n }\r\n }\r\n }\r\n }\r\n if (data_id.length > 0) {\r\n commonHD.KyTongHopXml(data_id);\r\n } else {\r\n webix.message(\"Chưa tích chọn bảng hoặc bảng đã ký!\");\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 120,\r\n // label: ' ' + '' + _(\"Lập bổ sung\") + \"\",\r\n // id: \"btnUp\",\r\n // on: {\r\n // onClick: function () {\r\n // var detailForm = this.$scope.ui(bangtonghopform.$ui);\r\n // bangtonghopform.setEditMode(1);\r\n // detailForm.show();\r\n\r\n // webix.$$(\"ldau\").setValue(0);\r\n\r\n // var url = app.config.host + \"/Invoice68/GetInfoCompany\";\r\n\r\n // webix.ajax(url, function (text) {\r\n // var json = JSON.parse(text);\r\n // webix.$$(\"tnnt\").setValue(json.name);\r\n // webix.$$(\"mst\").setValue(json.tax_code);\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Tải XML\") + \"\",\r\n id: \"btnDownloadXml\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai != 1) {\r\n webix.message(\"Bảng tổng hợp chưa gửi CQT không tồn tại xml ! \", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLBangTHDL?id=\" + selectedItem.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"BangTHDL.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"bangtonghop\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n onClick: {\r\n DowloadBTHLDRep: function (event, cell, target) {\r\n var win = webix.$$(\"bangtonghop\");\r\n var record = win.getItem(cell.row);\r\n\r\n if (record.trang_thai != 1) {\r\n webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n return;\r\n }\r\n\r\n if (record.xml_nhan == null || record.xml_nhan == \"\") {\r\n webix.message(\"CQT chưa phản hồi !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n var filename = \"KetQuaKiemTraBTHDL.xml\";\r\n var url = app.config.host + \"/Invoice68/ExportXMLBTHDLRep?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, filename);\r\n });\r\n\r\n return false;\r\n },\r\n InBTHDLRep: function (event, cell, target) {\r\n var table = webix.$$(\"bangtonghop\");\r\n var item = table.getItem(cell.row);\r\n\r\n if (item.xml_nhan == null || item.xml_nhan == \"\") {\r\n webix.message(\"CQT chưa phản hồi !\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in Biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBTHDLRep?id=\" + item.id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"bangtonghop\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {},\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"index\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"trang_thai\",\r\n\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 150,\r\n template: function (obj) {\r\n return obj.trang_thai == 1\r\n ? \" Đã Ký\"\r\n : \" Chưa Ký\";\r\n },\r\n },\r\n {\r\n id: \"btnMessagetn\",\r\n header: [\"\", \"Lịch sử xử lý\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n return \" \";\r\n },\r\n width: 180,\r\n },\r\n {\r\n id: \"kdlieu\",\r\n header: [\r\n \"Kỳ dữ liệu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"ngay_ky\",\r\n header: [\r\n \"Ngày giờ ký\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n columnType: \"datetime\",\r\n },\r\n\r\n {\r\n id: \"sbthdlieu\",\r\n header: [\r\n \"Số thứ tự bảng\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"nlap\",\r\n header: [\r\n \"Ngày lập\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"nglap\",\r\n header: [\r\n \"Người lập\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"ngky\",\r\n header: [\r\n \"Người ký\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"ket_qua\",\r\n header: [\"\", \"Kết quả\"],\r\n css: { \"text-align\": \"center\" },\r\n width: 150,\r\n template: function (obj) {\r\n if (obj.ket_qua == 1) {\r\n return \"Dữ liệu hợp lệ \";\r\n } else {\r\n if (obj.ket_qua == 2) {\r\n return \"Dữ liệu không hợp lệ \";\r\n } else {\r\n return \"Chờ phản hồi\";\r\n }\r\n }\r\n },\r\n },\r\n {\r\n id: \"bthDowloadBTHLDRep\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.ket_qua != null && obj.ket_qua != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 120,\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.$$(\"title\").parse({\r\n title: \"Bảng tổng hợp hóa đơn máy tính tiền\",\r\n details: \"Bảng tổng hợp hóa đơn máy tính tiền\",\r\n });\r\n var table = webix.$$(\"bangtonghop\");\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChangeBangtonghop\", function (mode, item) {\r\n if (mode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (mode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n },\r\n\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_bangdanhsachtncn',[\"app\", \"models/user\", \"views/forms/68_bangtonghopform\"], function (app, user, bangtonghopform) {\r\n var editmode = 0;\r\n var params;\r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"danhsach_hoadonFrm\");\r\n var data = table.serialize();\r\n var lstTemp = [];\r\n var putData = \"\";\r\n for (var i = 0; i < data.length; i++) {\r\n var item = data[i];\r\n if (item.chon != undefined) {\r\n if (item.chon == \"C\") {\r\n //item.mstnmua = item[\"mst\"];\r\n lstTemp.push(item);\r\n putData += \"'\" + item.hdon_id + \"',\";\r\n }\r\n }\r\n }\r\n\r\n putData = putData.substring(0, putData.length - 1);\r\n\r\n if (lstTemp.length == 0) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa chọn chứng từ\" });\r\n return;\r\n }\r\n\r\n var params = {};\r\n params[\"data\"] = putData;\r\n var lhhoa = $$(\"bangtonghop-form\").getValues().lhhoa;\r\n params[\"loaibth\"] = 3;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/GetDetailHoadonChoXuLy\", params, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var frm = webix.$$(\"danhsach_hoadon\");\r\n frm.clearAll();\r\n frm.parse(json);\r\n\r\n $$(\"danhsachhoadon-win\").close();\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"danhsachhoadon-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"danhsachhoadon-win\",\r\n position: \"center\",\r\n head: \"Chọn chứng từ vào bảng tổng hợp dữ liệu điện tử\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n minWidth: 900,\r\n id: \"danhsachhoadon-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_hoadonFrm\",\r\n name: \"danhsach_hoadonFrm\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n minHeight: 400,\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n on: {},\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 55,\r\n checkValue: \"C\",\r\n uncheckValue: \"K\",\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"nky\",\r\n name: \"nky\",\r\n header: [\"Ngày giờ ký\", { content: \"datepickerFilter\" }],\r\n width: 120,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"khieu\",\r\n name: \"khieu\",\r\n header: [\r\n \"Ký hiệu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n // footer: \"Tổng cộng\"\r\n },\r\n { id: \"shdon\", name: \"shdon\", header: [\"Số chứng từ\", { content: \"textFilter\" }], width: 120 },\r\n {\r\n id: \"nlap\",\r\n name: \"nlap\",\r\n header: [\"Ngày chứng từ\", { content: \"datepickerFilter\" }],\r\n width: 120,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n { id: \"tnmua\", name: \"tnmua\", header: [\"Tên người bị khâu trừ\", { content: \"textFilter\" }], width: 350 },\r\n { id: \"mstnmua\", name: \"mstnmua\", header: [\"Mã số thuế\", { content: \"textFilter\" }], width: 150 },\r\n { id: \"cmnd\", name: \"cmnd\", header: [\"CMND/CCCD\", { content: \"textFilter\" }], width: 150 },\r\n /*{\r\n id: \"ktnhap\",\r\n name: \"ktnhap\",\r\n header: \"Khoản thu nhập\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n {\r\n id: \"kdbhbbuoc\",\r\n name: \"kdbhbbuoc\",\r\n header: \"Khoản đóng bảo hiểm bắt buộc\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n {\r\n id: \"tgtthue\",\r\n name: \"tgtthue\",\r\n header: \"Tổng thu nhập khấu trừ\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n {\r\n id: \"ttcthue\",\r\n name: \"ttcthue\",\r\n header: \"Tổng thu nhập chịu thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n {\r\n id: \"ttntthue\",\r\n name: \"ttntthue\",\r\n header: \"Tổng thu nhập tính thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n }*/ {\r\n id: \"tgtttoan\",\r\n name: \"tgtttoan\",\r\n header: \"Số tiền thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n ],\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setParams: function (value) {\r\n params = value;\r\n params[\"loaibth\"] = 3;\r\n var table = $$(\"danhsach_hoadonFrm\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/GetHoadonChoXuLy\", params, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (!json.hasOwnProperty(\"error\")) {\r\n //console.log(json);\r\n $$(\"danhsach_hoadonFrm\").clearAll();\r\n $$(\"danhsach_hoadonFrm\").parse(json);\r\n\r\n if (json[\"data\"].length > 0) {\r\n $$(\"tgtcthue\").setValue(fm(json[\"data\"][0][\"tong_dt\"]));\r\n $$(\"tgtthue\").setValue(fm(json[\"data\"][0][\"tong_tienthue\"]));\r\n }\r\n\r\n $$(\"danhsach_hoadonFrm\").refresh();\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n },\r\n setValues: function (item) {},\r\n };\r\n});\r\n\ndefine('views/forms/68_bangtonghoothunhapcanhanform',[\"app\", \"models/user\", \"views/forms/68_bangdanhsachtncn\"], function (app, user, bangdanhsachhoadon) {\r\n var editmode = 0;\r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var getNgay = function () {\r\n var option = $$(\"lkdlieu\").getValue();\r\n if (option == \"Q\") {\r\n var nam = $$(\"nam\").getValue();\r\n var thang;\r\n var quy = $$(\"thang\").getValue();\r\n if (quy == \"1\") {\r\n thang = 0;\r\n } else if (quy == \"2\") {\r\n thang = 3;\r\n } else if (quy == \"3\") {\r\n thang = 6;\r\n } else if (quy == \"4\") {\r\n thang = 9;\r\n }\r\n var firstDate = new Date(nam, thang, 1);\r\n var lastDate = new Date(nam, thang + 3, 0);\r\n\r\n $$(\"tu_ngay\").setValue(firstDate);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDate);\r\n $$(\"den_ngay\").refresh();\r\n } else if (option == \"T\") {\r\n var year = $$(\"nam\").getValue();\r\n var month = $$(\"thang\").getValue();\r\n var date1 = month + \"/01\" + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n var firstDay1 = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\r\n var lastDay1 = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n $$(\"tu_ngay\").setValue(firstDay1);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDay1);\r\n $$(\"den_ngay\").refresh();\r\n } else if (option == \"N\") {\r\n var year = $$(\"nam\").getValue();\r\n var month = $$(\"thang\").getValue();\r\n var day = $$(\"ngay\").getValue();\r\n var date1 = month + \"/\" + day + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n\r\n $$(\"tu_ngay\").setValue(date);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(date);\r\n $$(\"den_ngay\").refresh();\r\n }\r\n\r\n var tableDetail = webix.$$(\"danhsach_hoadon\");\r\n tableDetail.clearAll();\r\n };\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Lưu tạm (F10)\",\r\n id: \"btnBTHSave\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var tableHoadon = $$(\"bangtonghop-form\");\r\n if (tableHoadon.validate()) {\r\n var ds_hdon = $$(\"danhsach_hoadon\").serialize();\r\n if (ds_hdon.length == 0) {\r\n webix.message(\"Bạn chưa nhập chi tiết bảng kê\", \"error\");\r\n return;\r\n } else {\r\n webix.extend(tableHoadon, webix.ProgressBar);\r\n tableHoadon.disable();\r\n tableHoadon.showProgress();\r\n // console.log(data_post);\r\n var limit = 1000;\r\n var m = parseInt(ds_hdon.length / limit);\r\n if (ds_hdon.length > m * limit) m = m + 1;\r\n var apiIndex = 0;\r\n var item = $$(\"bangtonghop-form\").getValues();\r\n item[\"loaibth\"] = 3;\r\n for (var k = 0; k < m; k++) {\r\n if (k < m - 1) {\r\n item[\"details\"] = ds_hdon.slice(k * limit, (k + 1) * limit);\r\n } else {\r\n item[\"details\"] = ds_hdon.slice(k * limit, ds_hdon.length);\r\n }\r\n var tgtcthue = 0;\r\n var tgtthue = 0;\r\n var tgtttoan = 0;\r\n item[\"details\"].forEach(function (it) {\r\n tgtcthue += it[\"ttcthue\"];\r\n tgtthue += it[\"tgtthue\"];\r\n tgtttoan += it[\"tgtttoan\"];\r\n });\r\n item[\"tgtcthue\"] = tgtcthue;\r\n item[\"tgtthue\"] = tgtthue;\r\n item[\"tgtttoan\"] = tgtttoan;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n if (item.lhhoa === \"1\") {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveBangTHDLXangDau\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.$$(\"bangtonghop-win\").close();\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveBangTHDL\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.$$(\"bangtonghop-win\").close();\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n }\r\n }\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // shortcut: \"F11\",\r\n // view: \"button\",\r\n // label: \"Xuất tờ khai XML (F11)\",\r\n // type: \"form\",\r\n // align: \"center\",\r\n // width: 180,\r\n // on: {\r\n // onClick: function () {\r\n // }\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // }\r\n // },\r\n // {\r\n // shortcut: \"F12\",\r\n // id: \"btnBTHSend\",\r\n // view: \"button\",\r\n // label: \"Ký và gửi CQT (F12)\",\r\n // type: \"form\",\r\n // align: \"center\",\r\n // width: 150,\r\n // on: {\r\n // onClick: function () {\r\n // }\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // }\r\n // },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Quay lại (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"bangtonghop-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n fullscreen: true,\r\n id: \"bangtonghop-win\",\r\n position: \"center\",\r\n head: \"BẢNG KÊ CHỨNG TỪ THUẾ THU NHẬP CÁ NHÂN\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 1500,\r\n id: \"bangtonghop-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n rows: [\r\n {\r\n cols: [\r\n {},\r\n {\r\n view: \"label\",\r\n label: \"[01] Kỳ dữ liệu\",\r\n width: 170,\r\n },\r\n {\r\n id: \"lkdlieu\",\r\n name: \"lkdlieu\",\r\n view: \"combo\",\r\n width: 150,\r\n value: \"T\",\r\n options: [\r\n { id: \"T\", value: \"Tháng\" },\r\n { id: \"Q\", value: \"Quý\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == \"N\") {\r\n var k = [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\r\n $$(\"thang\").define(\"options\", k);\r\n $$(\"thang\").define(\"width\", 60);\r\n $$(\"thang\").refresh();\r\n $$(\"ngay\").show();\r\n $$(\"ngay\").refresh();\r\n }\r\n if (newv == \"T\") {\r\n var k = [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\r\n $$(\"thang\").define(\"options\", k);\r\n $$(\"thang\").define(\"width\", 120);\r\n $$(\"thang\").refresh();\r\n $$(\"ngay\").hide();\r\n $$(\"ngay\").refresh();\r\n }\r\n if (newv == \"Q\") {\r\n var k = [\"1\", \"2\", \"3\", \"4\"];\r\n $$(\"thang\").define(\"options\", k);\r\n $$(\"thang\").define(\"width\", 120);\r\n $$(\"thang\").setValue(\"1\");\r\n $$(\"thang\").refresh();\r\n $$(\"ngay\").hide();\r\n $$(\"ngay\").refresh();\r\n }\r\n\r\n getNgay();\r\n },\r\n },\r\n },\r\n {\r\n id: \"ngay\",\r\n name: \"ngay\",\r\n view: \"combo\",\r\n width: 60,\r\n value: \"1\",\r\n hidden: true,\r\n options: [\r\n \"1\",\r\n \"2\",\r\n \"3\",\r\n \"4\",\r\n \"5\",\r\n \"6\",\r\n \"7\",\r\n \"8\",\r\n \"9\",\r\n \"10\",\r\n \"11\",\r\n \"12\",\r\n \"13\",\r\n \"14\",\r\n \"15\",\r\n \"16\",\r\n \"17\",\r\n \"18\",\r\n \"19\",\r\n \"20\",\r\n \"21\",\r\n \"22\",\r\n \"23\",\r\n \"24\",\r\n \"25\",\r\n \"26\",\r\n \"27\",\r\n \"28\",\r\n \"29\",\r\n \"30\",\r\n \"31\",\r\n ],\r\n required: true,\r\n invalidMessage: \"Tháng/Quý không được để trống !\",\r\n on: {\r\n onChange: function () {\r\n getNgay();\r\n },\r\n },\r\n },\r\n {\r\n id: \"thang\",\r\n name: \"thang\",\r\n view: \"combo\",\r\n width: 150,\r\n value: \"1\",\r\n options: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"],\r\n required: true,\r\n invalidMessage: \"Tháng/Quý không được để trống !\",\r\n on: {\r\n onChange: function () {\r\n getNgay();\r\n },\r\n },\r\n },\r\n {\r\n id: \"nam\",\r\n name: \"nam\",\r\n view: \"text\",\r\n label: \"Năm\",\r\n labelWidth: 50,\r\n width: 150,\r\n required: true,\r\n invalidMessage: \"Năm không được để trống !\",\r\n on: {\r\n onChange: function () {\r\n getNgay();\r\n },\r\n },\r\n },\r\n {\r\n id: \"mst\",\r\n name: \"mst\",\r\n view: \"text\",\r\n label: \"[02] Mã số thuế:\",\r\n labelWidth: 130,\r\n width: 400,\r\n readonly: true,\r\n required: true,\r\n invalidMessage: \"Mã số thuế không được để trống !\",\r\n },\r\n { id: \"tu_ngay\", name: \"tu_ngay\", view: \"datepicker\", label: \"Từ ngày\", hidden: true, width: 200, labelWidth: 100 },\r\n { id: \"den_ngay\", name: \"den_ngay\", view: \"datepicker\", label: \"Đến ngày:\", hidden: true, labelWidth: 100, width: 260 },\r\n {},\r\n ],\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n id: \"tnnt\",\r\n name: \"tnnt\",\r\n view: \"text\",\r\n label: \"[03] Tên người nộp thuế:\",\r\n labelWidth: 170,\r\n width: 620,\r\n required: true,\r\n invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n readonly: true,\r\n },\r\n {\r\n id: \"dchi\",\r\n name: \"dchi\",\r\n view: \"text\",\r\n label: \"[04] Địa chỉ:\",\r\n labelWidth: 130,\r\n width: 400,\r\n invalidMessage: \"Không được để trống !\",\r\n },\r\n {},\r\n ],\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n id: \"dthoai\",\r\n name: \"dthoai\",\r\n view: \"text\",\r\n label: \"[05] Điện thoại:\",\r\n labelWidth: 170,\r\n width: 380,\r\n invalidMessage: \"Mã số thuế không được để trống !\",\r\n },\r\n { id: \"nlap\", name: \"nlap\", view: \"datepicker\", label: \"Ngày lập\", width: 240, labelWidth: 100, value: new Date() },\r\n { id: \"sbthdlieu\", name: \"sbthdlieu\", view: \"text\", label: \"Số:\", labelWidth: 130, width: 400, readonly: true },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"button\",\r\n label: \"Chọn chứng từ\",\r\n id: \"btnTaiHoaDon\",\r\n width: 150,\r\n on: {\r\n onItemClick: function (id, e) {\r\n var item = $$(\"bangtonghop-form\").getValues();\r\n var tableHoadon = $$(\"bangtonghop-form\");\r\n if (tableHoadon.validate()) {\r\n var detailForm = this.getTopParentView().$scope.ui(bangdanhsachhoadon.$ui);\r\n bangdanhsachhoadon.setEditMode(1);\r\n bangdanhsachhoadon.setParams(item);\r\n detailForm.show();\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Chọn toàn bộ\",\r\n id: \"btnAllHoaDon\",\r\n width: 150,\r\n on: {\r\n onItemClick: function (id, e) {\r\n webix.confirm({\r\n text: \"Tự động chọn tất cả chứng từ trong kì\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n var params = $$(\"bangtonghop-form\").getValues();\r\n params[\"loaibth\"] = 3;\r\n var tableHoadon = webix.$$(\"danhsach_hoadon\");\r\n if (tableHoadon.validate()) {\r\n webix.extend($$(\"bangtonghop-form\"), webix.ProgressBar);\r\n $$(\"bangtonghop-form\").disable();\r\n $$(\"bangtonghop-form\").showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/GetHoadonChoXuLyall\", params, {\r\n error: function (text, data, XmlHttpRequest) {\r\n $$(\"bangtonghop-form\").enable();\r\n $$(\"bangtonghop-form\").hideProgress();\r\n webix.message(text, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (!json.hasOwnProperty(\"error\")) {\r\n //console.log(json);\r\n tableHoadon.clearAll();\r\n tableHoadon.parse(json);\r\n\r\n tableHoadon.refresh();\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n $$(\"bangtonghop-form\").enable();\r\n $$(\"bangtonghop-form\").hideProgress();\r\n },\r\n });\r\n }\r\n }\r\n },\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Xóa\",\r\n id: \"btnXoaHoaDon\",\r\n width: 120,\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_hoadon\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n\r\n var table = webix.$$(\"danhsach_hoadon\");\r\n var data = table.serialize();\r\n\r\n var tien_tt = 0;\r\n var tien_thue = 0;\r\n var tong_tien = 0;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n var item = data[i];\r\n tien_tt += item[\"ttcthue\"] == null ? 0 : item[\"ttcthue\"];\r\n tien_thue += item[\"tgtthue\"] == null ? 0 : item[\"tgtthue\"];\r\n tong_tien += item[\"tgtttoan\"] == null ? 0 : item[\"tgtttoan\"];\r\n }\r\n\r\n $$(\"tgtcthue\").setValue(fm(tien_tt));\r\n $$(\"tgtthue\").setValue(fm(tien_thue));\r\n $$(\"tgtttoan\").setValue(fm(tong_tien));\r\n\r\n return;\r\n }\r\n var editor = table.getEditState();\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n\r\n var table = webix.$$(\"danhsach_hoadon\");\r\n var data = table.serialize();\r\n\r\n var tien_tt = 0;\r\n var tien_thue = 0;\r\n var tong_tien = 0;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n var item = data[i];\r\n tien_tt += item[\"ttcthue\"] == null ? 0 : item[\"ttcthue\"];\r\n tien_thue += item[\"tgtthue\"] == null ? 0 : item[\"tgtthue\"];\r\n tong_tien += item[\"tgtttoan\"] == null ? 0 : item[\"tgtttoan\"];\r\n }\r\n\r\n $$(\"tgtcthue\").setValue(fm(tien_tt));\r\n $$(\"tgtthue\").setValue(fm(tien_thue));\r\n $$(\"tgtttoan\").setValue(fm(tong_tien));\r\n\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_hoadon\",\r\n minHeight: 350,\r\n name: \"danhsach_hoadon\",\r\n select: true,\r\n scroll: true,\r\n resizeColumn: true,\r\n // footer: true,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n width: 40,\r\n },\r\n {\r\n id: \"khieu\",\r\n name: \"khieu\",\r\n header: \"Ký hiệu\",\r\n width: 120,\r\n // footer: \"Tổng cộng\"\r\n },\r\n { id: \"shdon\", name: \"shdon\", header: \"Số chứng từ\", width: 120 },\r\n {\r\n id: \"nlap\",\r\n name: \"nlap\",\r\n header: \"Ngày chứng từ\",\r\n width: 120,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n { id: \"tnmua\", name: \"tnmua\", header: \"Tên người bị khâu trừ\", width: 350 },\r\n { id: \"mstnmua\", name: \"mstnmua\", header: \"Mã số thuế\", width: 150 },\r\n { id: \"cmnd\", name: \"cmnd\", header: \"Chứng minh nhân dân\", width: 150 },\r\n {\r\n id: \"tgtttoan\",\r\n name: \"tgtttoan\",\r\n header: \"Số tiền thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n {\r\n id: \"tthai\",\r\n name: \"tthai\",\r\n header: \"Trạng thái\",\r\n width: 150,\r\n format: function (text) {\r\n var result = \"\";\r\n if (text == 0) {\r\n result = \"Mới\";\r\n } else if (text == 1) {\r\n result = \"Hủy\";\r\n } else if (text == 2) {\r\n result = \"Điều chỉnh\";\r\n } else if (text == 3) {\r\n result = \"Thay thế\";\r\n } else if (text == 4) {\r\n result = \"Giải trình\";\r\n } else if (text == 5) {\r\n result = \"Sai sót do tổng hợp\";\r\n }\r\n return result;\r\n },\r\n },\r\n { id: \"tthdlquan\", name: \"tthdlquan\", header: \"Thông tin chứng từ liên quan\", width: 250 },\r\n\r\n /*{\r\n id: \"ktnhap\",\r\n name: \"ktnhap\",\r\n header: \"Khoản thu nhập\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n {\r\n id: \"kdbhbbuoc\",\r\n name: \"kdbhbbuoc\",\r\n header: \"Khoản đóng bảo hiểm bắt buộc\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n {\r\n id: \"tgtthue\",\r\n name: \"tgtthue\",\r\n header: \"Tổng thu nhập khấu trừ\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n {\r\n id: \"ttcthue\",\r\n name: \"ttcthue\",\r\n header: \"Tổng thu nhập chịu thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n {\r\n id: \"ttntthue\",\r\n name: \"ttntthue\",\r\n header: \"Tổng thu nhập tính thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n }*/\r\n {\r\n id: \"tthai\",\r\n name: \"tthai\",\r\n header: \"Ghi chú\",\r\n width: 150,\r\n format: function (text) {\r\n var result = \"\";\r\n if (text == 1) {\r\n result = \"Chứng từ đã hủy.\";\r\n }\r\n return result;\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n hidden: true,\r\n cols: [\r\n {\r\n id: \"tgtcthue\",\r\n name: \"tgtcthue\",\r\n view: \"text\",\r\n label: \"Tiền trước thuế\",\r\n readonly: true,\r\n labelWidth: 100,\r\n css: \"mcls_readonly_text\",\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \",\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \".\",\r\n // decimalSize: 0,\r\n // })\r\n },\r\n {\r\n id: \"tgtthue\",\r\n name: \"tgtthue\",\r\n view: \"text\",\r\n label: \"Tiền thuế\",\r\n readonly: true,\r\n labelWidth: 100,\r\n css: \"mcls_readonly_text\",\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \",\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \".\",\r\n // decimalSize: 0,\r\n // })\r\n },\r\n {\r\n id: \"tgtttoan\",\r\n name: \"tgtttoan\",\r\n view: \"text\",\r\n readonly: true,\r\n labelWidth: 100,\r\n css: \"mcls_readonly_text\",\r\n label: \"Tiền thanh toán\",\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \",\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \".\",\r\n // decimalSize: 0,\r\n // })\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n var now = new Date();\r\n var getDay = new Date(now.getFullYear(), now.getMonth(), now.getDate());\r\n $$(\"thang\").setValue((now.getMonth() + 1).toString());\r\n $$(\"thang\").refresh();\r\n $$(\"nam\").setValue(now.getFullYear().toString());\r\n $$(\"nam\").refresh();\r\n },\r\n setValues: function (item) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n\r\n item[\"nlap\"] = removeTimeZoneT(item[\"nlap\"]);\r\n form.setValues(item);\r\n\r\n $$(\"tgtcthue\").setValue(fm(item.tgtcthue));\r\n $$(\"tgtthue\").setValue(fm(item.tgtthue));\r\n $$(\"tgtttoan\").setValue(fm(item.tgtttoan));\r\n\r\n getNgay();\r\n\r\n var tableDetail = webix.$$(\"danhsach_hoadon\");\r\n if (item.lhhoa === 1) {\r\n var url = app.config.host + \"/Invoice68/GetDataBangTHDLXangDauDetail?id=\" + item.id;\r\n } else {\r\n var url = app.config.host + \"/Invoice68/GetDataBangTHDLDetail?id=\" + item.id;\r\n }\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_bangtonghopthuetncn',[\"app\", \"locale\", \"models/user\", \"views/forms/68_bangtonghoothunhapcanhanform\", \"views/forms/68_hoadon_history\"], function (app, _, user, bangtonghopform, hoadonHistory) {\r\n \r\n\r\n var initUI = function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetBangTHDL\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n url = url + \"&loaibth=3\";\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n webix.$$(\"title\").parse({\r\n title: \"Bảng kê chứng từ thuế thu nhập cá nhân\",\r\n details: \"Bảng kê chứng từ thuế thu nhập cá nhân\",\r\n });\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(bangtonghopform.$ui);\r\n bangtonghopform.setEditMode(1);\r\n detailForm.show();\r\n\r\n var url = app.config.host + \"/Invoice68/GetInfoCompany\";\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n webix.$$(\"tnnt\").setValue(json.name);\r\n webix.$$(\"mst\").setValue(json.tax_code);\r\n webix.$$(\"dthoai\").setValue(json.tel);\r\n webix.$$(\"dchi\").setValue(json.address);\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng nào ! \", \"error\");\r\n return;\r\n }\r\n\r\n var detailForm = this.$scope.ui(bangtonghopform.$ui);\r\n bangtonghopform.setEditMode(2);\r\n bangtonghopform.setValues(selectedItem);\r\n if (selectedItem.trang_thai == 1) {\r\n var form = $$(\"bangtonghop-form\").elements;\r\n for (var key in form) {\r\n var $el = form[key];\r\n $el.define(\"readonly\", \"true\");\r\n $el.define(\"css\", \"mcls_readonly_text\");\r\n $el.refresh();\r\n }\r\n\r\n $$(\"btnBTHSave\").destructor();\r\n $$(\"btnTaiHoaDon\").destructor();\r\n $$(\"btnAllHoaDon\").destructor();\r\n $$(\"btnXoaHoaDon\").destructor();\r\n }\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var databth = table.serialize();\r\n var datachon = [];\r\n\r\n for (var i = 0; i < databth.length; i++) {\r\n if (databth[i]!= undefined && databth[i].chon === true && databth[i].trang_thai === \"0\") {\r\n datachon.push(databth[i]);\r\n }\r\n }\r\n if (datachon.length == 0) {\r\n webix.message(\"Bạn chưa chọn dòng nào ở trạng thái chờ ký ! \", \"error\");\r\n return;\r\n }\r\n /*if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Bảng tổng hợp đã gửi CQT không thể xóa ! \", \"error\");\r\n return;\r\n }*/\r\n\r\n var khData = {};\r\n\r\n khData.editmode = 3;\r\n khData.data = datachon;\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveBangTHDL\", khData, function (text) {\r\n var response = JSON.parse(text);\r\n\r\n if (response.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: response.error });\r\n return;\r\n }\r\n\r\n // table.remove(item.id);\r\n var btnRefresh = $$(\"btnRefresh\");\r\n btnRefresh.callEvent(\"onClick\");\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + \"In (F7)\" + \"\",\r\n id: \"btnPreview\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng in ! \", \"error\");\r\n return;\r\n }\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n if (selectedItem.lhhoa == 1) {\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBTHDLieuXangDau?id=\" + selectedItem.id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n } else {\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBTHDLieu_all?id=\" + selectedItem.id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"Gửi email\") + \"\",\r\n // id: \"btnSendEmail\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"bangtonghop\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Ký\") + \"\",\r\n id: \"btnSign\",\r\n on: {\r\n onClick: function () {\r\n var tableDK = webix.$$(\"bangtonghop\");\r\n /*var selectedItem = tableDK.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Mẫu đã ký và gửi CQT bạn không thể ký lại! \", \"error\");\r\n return;\r\n }*/\r\n var datafrm = tableDK.serialize();\r\n\r\n var data_id = [];\r\n var data_id_xd = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true && datafrm[i].trang_thai != 1 && datafrm[i].lhhoa != 1) {\r\n data_id.push(datafrm[i].id);\r\n }\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true && datafrm[i].trang_thai != 1 && datafrm[i].lhhoa == 1) {\r\n data_id_xd.push(datafrm[i].id);\r\n }\r\n }\r\n }\r\n }\r\n if (data_id.length > 0 && data_id_xd.length > 0) {\r\n webix.message(\"Chỉ được chọn các bảng THDL cùng loại hàng hoá để ký!\");\r\n return;\r\n }\r\n if (data_id.length > 0 && data_id_xd.length == 0) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n CheckHSM: \"\",\r\n id: data_id,\r\n loaibth: 3,\r\n };\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignBTHDL\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Ký thành công !\", \"success\");\r\n // $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n return;\r\n }\r\n },\r\n });\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"bangtonghop\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n id: data_id,\r\n CheckHSM: \"1\",\r\n };\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignBTHDL\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Ký thành công !\", \"success\");\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n var parameters_list = [];\r\n\r\n function excuteHdPlugin(k) {\r\n if (k < data_id.length) {\r\n var hdon_id = data_id[k];\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlBTHDL?id=\" + hdon_id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, hdon_id]).then(function (results) {\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item,\r\n shdon: json.shdon,\r\n loaibth: 3,\r\n };\r\n parameters_list.push(parameters);\r\n }\r\n k++;\r\n excuteHdPlugin(k);\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: json.shdon,\r\n idSigner: \"seller\",\r\n tagSign: \"TChuc\",\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n } else {\r\n if (parameters_list.length > 0) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlBTHDL\", JSON.stringify(parameters_list), function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n webix.message(\"Ký thành công !\", \"success\");\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n }\r\n\r\n excuteHdPlugin(0);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n } else if (data_id_xd.length > 0 && data_id == 0) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n /*id: selectedItem.id,*/\r\n id: data_id_xd,\r\n };\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignBTHDLXangDau\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Ký thành công !\", \"success\");\r\n // $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n return;\r\n }\r\n },\r\n });\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"bangtonghop\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n id: data_id_xd,\r\n CheckHSM: \"1\",\r\n };\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignBTHDLXangDau\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Ký thành công !\", \"success\");\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n var parameters_list = [];\r\n\r\n var k = 0; //khai báo biến k để chạy lần lượt từng hoá đơn theo id\r\n function excuteHdPlugin() {\r\n if (k < data_id_xd.length) {\r\n var hdon_id = data_id_xd[k];\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlBTHDLXangDau?id=\" + hdon_id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, hdon_id]).then(function (results) {\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item,\r\n shdon: json.shdon,\r\n };\r\n parameters_list.push(parameters);\r\n }\r\n k++;\r\n excuteHdPlugin();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: json.shdon,\r\n idSigner: \"seller\",\r\n tagSign: \"TChuc\",\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n } else {\r\n if (parameters_list.length > 0) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlBTHDLXangDau\", JSON.stringify(parameters_list), function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n webix.message(\"Ký thành công !\", \"success\");\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n }\r\n\r\n excuteHdPlugin();\r\n }\r\n });\r\n }\r\n });\r\n });\r\n } else {\r\n webix.message(\"Chưa tích chọn bảng hoặc bảng đã ký!\");\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n /*{\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Lập bổ sung\") + \"\",\r\n id: \"btnUp\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(bangtonghopform.$ui);\r\n bangtonghopform.setEditMode(1);\r\n detailForm.show();\r\n\r\n webix.$$(\"ldau\").setValue(0);\r\n\r\n var url = app.config.host + \"/Invoice68/GetInfoCompany\";\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n webix.$$(\"tnnt\").setValue(json.name);\r\n webix.$$(\"mst\").setValue(json.tax_code);\r\n webix.$$(\"dthoai\").setValue(json.tel);\r\n webix.$$(\"dchi\").setValue(json.address);\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },*/\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Tải XML\") + \"\",\r\n id: \"btnDownloadXml\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai != 1) {\r\n webix.message(\"Bảng kê chưa ký không tồn tại xml ! \", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLBangTHDL?id=\" + selectedItem.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"BangTHDL.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + \"Export Excel\" + \"\",\r\n id: \"btnExel\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa dòng export ! \", \"error\");\r\n return;\r\n }\r\n var box = webix.modalbox({\r\n title: \"Đang export exel ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n if (selectedItem.lhhoa == 1) {\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBTHDLieuXangDau?id=\" + selectedItem.id + \"&type=Excel\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n webix.modalbox.hide(box);\r\n webix.html.download(file, \"bangke.xlsx\");\r\n },\r\n });\r\n } else {\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBTHDLieu_all?id=\" + selectedItem.id + \"&type=Excel\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n webix.modalbox.hide(box);\r\n webix.html.download(file, \"bangke.xlsx\");\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"bangtonghop\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n onClick: {\r\n DowloadBTHLDRep: function (event, cell, target) {\r\n var win = webix.$$(\"bangtonghop\");\r\n var record = win.getItem(cell.row);\r\n\r\n if (record.trang_thai != 1) {\r\n webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n return;\r\n }\r\n\r\n if (record.xml_nhan == null || record.xml_nhan == \"\") {\r\n webix.message(\"CQT chưa phản hồi !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n var filename = \"KetQuaKiemTraBTHDL.xml\";\r\n var url = app.config.host + \"/Invoice68/ExportXMLBTHDLRep?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, filename);\r\n });\r\n\r\n return false;\r\n },\r\n InBTHDLRep: function (event, cell, target) {\r\n var table = webix.$$(\"bangtonghop\");\r\n var item = table.getItem(cell.row);\r\n\r\n if (item.xml_nhan == null || item.xml_nhan == \"\") {\r\n webix.message(\"CQT chưa phản hồi !\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBTHDLRep?id=\" + item.id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"bangtonghop\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {},\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"index\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"trang_thai\",\r\n\r\n header: [\"Trạng thái\"],\r\n width: 150,\r\n template: function (obj) {\r\n return obj.trang_thai == 1\r\n ? \" Đã ký\"\r\n : \" Chưa ký\";\r\n },\r\n },\r\n /*{\r\n id: \"btnMessagetn\",\r\n header: [\"\", \"Lịch sử xử lý\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n return \" \";\r\n },\r\n width: 180,\r\n },*/\r\n {\r\n id: \"kdlieu\",\r\n header: [\r\n \"Kỳ dữ liệu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"ngay_ky\",\r\n header: [\r\n \"Ngày giờ ký\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n columnType: \"datetime\",\r\n },\r\n\r\n {\r\n id: \"sbthdlieu\",\r\n header: [\r\n \"Số thứ tự bảng\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"nlap\",\r\n header: [\r\n \"Ngày lập\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"nglap\",\r\n header: [\r\n \"Người lập\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n // {\r\n // id: \"mtdiep_gui\",\r\n // header: [\r\n // \"Mã thông điệp\",\r\n // {\r\n // content: \"textFilter\",\r\n // },\r\n // ],\r\n // width: 150,\r\n // },\r\n {\r\n id: \"ngky\",\r\n header: [\r\n \"Người ký\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n /* {\r\n id: \"ket_qua\",\r\n header: [\"\", \"Kết quả\"],\r\n css: { \"text-align\": \"center\" },\r\n width: 150,\r\n template: function (obj) {\r\n if (obj.ket_qua == 1) {\r\n return \"Dữ liệu hợp lệ \";\r\n } else {\r\n if (obj.ket_qua == 2) {\r\n return \"Dữ liệu không hợp lệ \";\r\n } else {\r\n return \"Chờ phản hồi\";\r\n }\r\n }\r\n },\r\n },*/\r\n /*{\r\n id: \"bthDowloadBTHLDRep\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.xml_nhan != null && obj.xml_nhan != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 120,\r\n },\r\n {\r\n id: \"btnInBTHDLRep\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.xml_nhan != null && obj.xml_nhan != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 120,\r\n },*/\r\n // {\r\n // id: \"mtdiepcqt\",\r\n // header: [\"\", \"Mã thông điệp CQT\"],\r\n // width: 250,\r\n // },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"bangtonghop\");\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChangeBangtonghop\", function (mode, item) {\r\n if (mode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (mode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n },\r\n\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_baocao_tinhhinhhoadonForm',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n var editmode = 0;\r\n\r\n var date = new Date();\r\n var _month = date.getMonth() + 1;\r\n var firstDay = new Date(date.getFullYear(), date.getMonth(), 1);\r\n var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n\r\n function subviewT() {\r\n $$(\"cbQuy\").define(\"label\", \"Tháng\");\r\n $$(\"cbQuy\").refresh();\r\n $$(\"cbQuy\").define(\"options\", [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"]);\r\n //webix.extend(config, $$('cbQuy').config);\r\n //webix.ui(config, $$('cbThang'));\r\n //$$('cbThang').destructor();\r\n }\r\n\r\n function subviewQ() {\r\n $$(\"cbQuy\").define(\"label\", \"Quý\");\r\n $$(\"cbQuy\").refresh();\r\n $$(\"cbQuy\").define(\"options\", [\"1\", \"2\", \"3\", \"4\"]);\r\n // webix.extend($$('cbQuy').config, config, true);\r\n //webix.ui(config, $$('cbQuy'));\r\n //$$('cbQuy').destructor();\r\n }\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n head: \"Tình hình sử dụng hóa đơn\",\r\n width: 550,\r\n resize: true,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 60 },\r\n view: \"form\",\r\n id: \"bangkebr\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"multicombo\",\r\n label: _(\"DONVI\"),\r\n name: \"lst_branch_code\",\r\n labelWidth: 80,\r\n required: true,\r\n invalidMessage: \"Vui lòng chọn đơn vị\",\r\n suggest: {\r\n selectAll: true,\r\n body: {\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00198\",\r\n },\r\n },\r\n on: {\r\n onChange: function(newValue, oldValue) {\r\n // Tạo URL API dựa trên các giá trị đã chọn trong multicomboA\r\n var urlLoad = app.config.host + \"/System/GetDataReferencesByRefIdAndBranchs?refId=RF003001&branchs=\" + newValue;\r\n \r\n // Cập nhật URL của multicomboB và tải lại dữ liệu\r\n var comp = $$(\"multicombo_kyhieu\").getPopup().getList();\r\n if(comp != null) {\r\n comp.clearAll();\r\n comp.load(urlLoad);\r\n }\r\n }\r\n }\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"radio\",\r\n id: \"head_extension\",\r\n value: 1,\r\n options: [\r\n { id: 1, value: \"Tháng\" }, // the initially selected item\r\n { id: 2, value: \"Quý\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var d = new Date();\r\n var quarter = Math.floor(d.getMonth() / 3);\r\n var quarter1 = quarter + 1;\r\n if (newv == 2) {\r\n subviewQ();\r\n $$(\"cbQuy\").setValue(quarter1);\r\n }\r\n if (newv == 1) {\r\n subviewT();\r\n $$(\"cbQuy\").setValue(d.getMonth() + 1);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n id: \"cbQuy\",\r\n name: \"quy\",\r\n view: \"combo\",\r\n label: \"Tháng\",\r\n value: _month,\r\n options: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"],\r\n on: {\r\n onChange: function () {\r\n var d = new Date();\r\n var quarter = Math.floor(d.getMonth() / 3);\r\n var quarter1 = quarter + 1;\r\n\r\n var option = $$(\"head_extension\").getValue();\r\n if (option == 2) {\r\n var nam = d.getFullYear();\r\n var thang;\r\n var quy = $$(\"cbQuy\").getValue();\r\n if (quy == 1) {\r\n thang = 0;\r\n }\r\n if (quy == 2) {\r\n thang = 3;\r\n }\r\n if (quy == 3) {\r\n thang = 6;\r\n }\r\n if (quy == 4) {\r\n thang = 9;\r\n }\r\n var firstDate = new Date(nam, thang, 1);\r\n var lastDate = new Date(nam, thang + 3, 0);\r\n\r\n $$(\"tu_ngay\").setValue(firstDate);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDate);\r\n $$(\"den_ngay\").refresh();\r\n }\r\n if (option == 1) {\r\n var year = d.getFullYear();\r\n var month = $$(\"cbQuy\").getValue();\r\n var date1 = month + \"/01\" + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n var firstDay1 = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\r\n var lastDay1 = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n $$(\"tu_ngay\").setValue(firstDay1);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDay1);\r\n $$(\"den_ngay\").refresh();\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datepicker\",\r\n label: _(\"TU_NGAY\"),\r\n name: \"tu_ngay\",\r\n id: \"tu_ngay\",\r\n value: firstDay,\r\n labelWidth: 80,\r\n invalidMessage: \"Vui lòng chọn từ ngày\",\r\n validate: webix.rules.isNotEmpty,\r\n required: true,\r\n },\r\n {\r\n view: \"datepicker\",\r\n label: _(\"DEN_NGAY\"),\r\n name: \"den_ngay\",\r\n id: \"den_ngay\",\r\n value: lastDay,\r\n labelWidth: 80,\r\n invalidMessage: \"Vui lòng chọn đến ngày\",\r\n validate: webix.rules.isNotEmpty,\r\n required: true,\r\n },\r\n {\r\n view: \"multicombo\",\r\n label: _(\"KY_HIEU\"),\r\n name: \"ky_hieu\",\r\n labelWidth: 80,\r\n id: \"multicombo_kyhieu\",\r\n // required: true,\r\n // invalidMessage: \"Tên truy cập không để trống hoặc nhập không đúng (a-z,A-Z,0-9)\",\r\n // validate: webix.rules.isNotEmpty,\r\n suggest: {\r\n selectAll: true,\r\n body: {\r\n // url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF003001\",\r\n //template: webix.template(\"#value#\")\r\n },\r\n },\r\n //value: \"2\"\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n width: 100,\r\n type: \"form\",\r\n align: \"center\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var tableHoadon = $$(\"bangkebr\");\r\n if (tableHoadon.validate()) {\r\n var tungay = $$(\"tu_ngay\").getValue();\r\n var denngay = $$(\"den_ngay\").getValue();\r\n\r\n if (tungay > denngay) {\r\n webix.message(\"Ngày bắt đầu phải nhỏ hơn ngày kết thúc !\", \"error\");\r\n $$(\"tu_ngay\").focus();\r\n return;\r\n }\r\n\r\n var form = self.getParentView().getParentView();\r\n var win = self.getTopParentView();\r\n\r\n var item = form.getValues();\r\n var load_event = \"dataChangebangkebanra\";\r\n\r\n app.callEvent(load_event, [item]);\r\n\r\n win.close();\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 100,\r\n align: \"center\",\r\n type: \"danger\",\r\n click: function () {\r\n this.getTopParentView().close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n\r\n setValues: function (item) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n\r\n form.setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_baocao_tinhhinhhoadon',[\"app\", \"locale\", \"models/user\", \"views/forms/68_baocao_tinhhinhhoadonForm\", \"views/forms/68_hoadon_history\"], function (app, _, user, bangkebanraForm, hoadonHistory) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Tờ khai chứng từ bán ra\",\r\n details: \"Tờ khai chứng từ bán ra\",\r\n });\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(bangkebanraForm.$ui);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n // id: \"btnPlus\",\r\n // shortcut: \"F4\",\r\n // on: {\r\n // onClick: function () {\r\n // var detailForm = this.$scope.ui(bangkebanraForm.$ui);\r\n // bangkebanraForm.setEditMode(1);\r\n // detailForm.show();\r\n\r\n // var url = app.config.host + \"/Invoice68/GetInfoCompany\";\r\n\r\n // webix.ajax(url, function (text) {\r\n // var json = JSON.parse(text);\r\n // webix.$$(\"tnnt\").setValue(json.name);\r\n // webix.$$(\"mst\").setValue(json.tax_code);\r\n // webix.$$(\"ddanh\").setValue(json.address);\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n // id: \"btnEdit\",\r\n // shortcut: \"F3\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"bangkebanra\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn dòng nào ! \", \"error\");\r\n // return;\r\n // }\r\n\r\n // var detailForm = this.$scope.ui(bangkebanraForm.$ui);\r\n // bangkebanraForm.setEditMode(2);\r\n // bangkebanraForm.setValues(selectedItem);\r\n // if (selectedItem.trang_thai == 1) {\r\n // var form = $$(\"bangkebanra-form\").elements;\r\n // for (var key in form) {\r\n // var $el = form[key];\r\n // $el.define(\"readonly\", \"true\");\r\n // $el.define(\"css\", \"mcls_readonly_text\");\r\n // $el.refresh();\r\n // }\r\n\r\n // webix.$$(\"btnBTHSave\").destructor();\r\n // webix.$$(\"btnTaiDanhSachBanRa\").destructor();\r\n // }\r\n // detailForm.show();\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n // id: \"btnDelete\",\r\n // shortcut: \"F8\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"bangkebanra\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // if (selectedItem.trang_thai == 1) {\r\n // webix.message(\"Bảng tổng hợp đã gửi CQT không thể xóa ! \", \"error\");\r\n // return;\r\n // }\r\n\r\n // var khData = {};\r\n\r\n // khData.editmode = 3;\r\n // khData.data = [];\r\n // khData.data.push(selectedItem);\r\n\r\n // webix.confirm({\r\n // text: \"Bạn có muốn xóa bản ghi\",\r\n // ok: \"Có\",\r\n // cancel: \"Không\",\r\n // callback: function (choose) {\r\n // if (choose) {\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-type\": \"application/json\" })\r\n // .post(app.config.host + \"/Invoice68/SaveBangKeBanRa\", khData, function (text) {\r\n // var response = JSON.parse(text);\r\n\r\n // if (response.hasOwnProperty(\"error\")) {\r\n // webix.message({ type: \"error\", text: response.error });\r\n // return;\r\n // }\r\n\r\n // // table.remove(item.id);\r\n // var btnRefresh = $$(\"btnRefresh\");\r\n // btnRefresh.callEvent(\"onClick\");\r\n // });\r\n // }\r\n // },\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + \"In PDF\" + \"\",\r\n id: \"btnPreview\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"bangkebanra\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n\r\n var datafrmAll = table.serialize();\r\n\r\n if (datafrmAll.length == 0) {\r\n webix.message(\"Không có dữ liệu để in !\", \"error\");\r\n return;\r\n }\r\n\r\n rpParameter.type = \"PDF\";\r\n if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang in báo cáo ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/Invoice68/PrintPDFTinhHinhSuDungHoaDon\",\r\n rpParameter,\r\n {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n window.open(fileURL, \"_blank\");\r\n },\r\n }\r\n // function (text, data) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n // webix.modalbox.hide(box);\r\n // window.open(fileURL, '_blank');\r\n // }\r\n );\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"EXPORT_EXCEL\") + \"\",\r\n id: \"btnExportExcel\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"bangkebanra\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n rpParameter.type = \"xlsx\";\r\n\r\n var datafrmAll = table.serialize();\r\n\r\n if (datafrmAll.length == 0) {\r\n webix.message(\"Không có dữ liệu để xuất !\", \"error\");\r\n return;\r\n }\r\n\r\n if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang kết xuất Excel ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/PrintPDFTinhHinhSuDungHoaDon\", rpParameter, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n //var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n //window.location.href = fileURL;\r\n webix.html.download(file, \"TinhHinhSuDungHoaDon.xlsx\");\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"Gửi email\") + \"\",\r\n // id: \"btnSendEmail\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"hoadon\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"Ký gửi CQT\") + \"\",\r\n // id: \"btnSign\",\r\n // on: {\r\n // onClick: function () {\r\n // var tableDK = webix.$$(\"bangkebanra\");\r\n // var selectedItem = tableDK.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn dòng ! \", \"error\");\r\n // return;\r\n // }\r\n // if (selectedItem.trang_thai == 1) {\r\n // webix.message(\"Mẫu đã ký và gửi CQT bạn không thể ký lại! \", \"error\");\r\n // return;\r\n // }\r\n\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-Type\": \"application/json\" })\r\n // .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n // var result = JSON.parse(text);\r\n // var kytaptrung = \"\";\r\n // for (var i = 0; i < result.length; i++) {\r\n // var item = result[i];\r\n // kytaptrung = item.value;\r\n // }\r\n\r\n // webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n // var listcerts = JSON.parse(text);\r\n // if (listcerts.length > 0) {\r\n // var box = webix.modalbox({\r\n // title: \"Chọn chứng thư số\",\r\n // buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n // text: \"
\",\r\n // top: 100,\r\n // width: 750,\r\n // callback: function (result) {\r\n // switch (result) {\r\n // case \"1\":\r\n // webix.modalbox.hide();\r\n // break;\r\n // case \"0\":\r\n // var table = $$(\"tblCerts\");\r\n // var data = table.serialize();\r\n // var cert = null;\r\n\r\n // for (var i = 0; i < data.length; i++) {\r\n // if (data[i].chon == true) {\r\n // cert = data[i];\r\n // break;\r\n // }\r\n // }\r\n\r\n // if (cert == null) {\r\n // webix.message(\"Bạn chưa chọn chứng thư số\");\r\n // return;\r\n // }\r\n // var postData = {\r\n // branch_code: user.getDvcsID(),\r\n // username: user.getCurrentUser(),\r\n // cer_serial: cert.cer_serial,\r\n // id: selectedItem.id,\r\n // };\r\n\r\n // webix.extend(tableDK, webix.ProgressBar);\r\n // tableDK.disable();\r\n // tableDK.showProgress();\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-type\": \"application/json\" })\r\n // .post(app.config.host + \"/Invoice68/SignBangKeBanRa\", postData, {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // tableDK.enable();\r\n // tableDK.hideProgress();\r\n // // var json = JSON.parse(text);\r\n // // webix.message(json.ExceptionMessage, \"error\");\r\n // webix.message(text + XmlHttpRequest, \"error\");\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var json = JSON.parse(text);\r\n // tableDK.enable();\r\n // tableDK.hideProgress();\r\n // if (!json.hasOwnProperty(\"error\")) {\r\n // webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n // // $$(\"huyhoadonForms\").close();\r\n // app.callEvent(\"dataChangebangkebanra\", [1, null]);\r\n // } else {\r\n // webix.message(json.error, \"error\");\r\n // }\r\n // },\r\n // });\r\n // return;\r\n // }\r\n // },\r\n // });\r\n // var tblMatHang = webix.ui({\r\n // container: \"ctnCerts\",\r\n // id: \"tblCerts\",\r\n // view: \"datatable\",\r\n // borderless: true,\r\n // resizeColumn: true,\r\n // height: 350,\r\n // columns: [\r\n // {\r\n // id: \"chon\",\r\n // header: _(\"CHON\"),\r\n // width: 65,\r\n // checkValue: true,\r\n // uncheckValue: false,\r\n // template: \"{common.checkbox()}\",\r\n // },\r\n // {\r\n // id: \"cer_serial\",\r\n // header: _(\"SO_SERIAL\"),\r\n // width: 150,\r\n // },\r\n // {\r\n // id: \"subject_name\",\r\n // header: _(\"SUBJECTNAME\"),\r\n // width: 450,\r\n // },\r\n // {\r\n // id: \"begin_date\",\r\n // header: _(\"NGAY_BAT_DAU\"),\r\n // width: 200,\r\n // },\r\n // {\r\n // id: \"end_date\",\r\n // header: _(\"NGAY_KET_THUC\"),\r\n // width: 200,\r\n // },\r\n // {\r\n // id: \"issuer\",\r\n // header: _(\"DONVI\"),\r\n // width: 450,\r\n // },\r\n // ],\r\n // url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n // });\r\n // } else {\r\n // var table = $$(\"bangkebanra\");\r\n // webix.extend(table, webix.ProgressBar);\r\n // table.disable();\r\n // table.showProgress();\r\n\r\n // var a = webix.ajax(app.config.host + \"/Invoice68/XmlBangKeBanRa?id=\" + selectedItem.id);\r\n // var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n // webix.promise.all([a, b, selectedItem]).then(function (results) {\r\n // // webix.extend(tblInvoice, webix.ProgressBar);\r\n // // tblInvoice.disable();\r\n // // tblInvoice.showProgress();\r\n // var json = results[0].json();\r\n\r\n // if (json.hasOwnProperty(\"error\")) {\r\n // webix.message({ type: \"error\", text: json.error });\r\n // }\r\n\r\n // var listcerts = results[1].json();\r\n // var item = results[2];\r\n\r\n // if (listcerts.length == 0) {\r\n // table.enable();\r\n // table.hideProgress();\r\n // webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n // return;\r\n // }\r\n\r\n // require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n // var hub = plugin.hub();\r\n // var hubconnect = plugin.conn();\r\n // if (hubconnect.state != 1) {\r\n // table.enable();\r\n // table.hideProgress();\r\n // webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n // return;\r\n // }\r\n // hub.off(\"resCommand\");\r\n // hub.on(\"resCommand\", function (result) {\r\n // var json = JSON.parse(result);\r\n\r\n // if (json.hasOwnProperty(\"error\")) {\r\n // webix.message({ type: \"error\", text: json.error });\r\n // } else {\r\n // var parameters = {\r\n // xml: json.xml,\r\n // id: selectedItem.id,\r\n // shdon: json.shdon,\r\n // };\r\n\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-Type\": \"application/json\" })\r\n // .post(app.config.host + \"/Invoice68/SaveXmlBangKeBanRa\", parameters, function (text) {\r\n // var result = JSON.parse(text);\r\n // if (result.hasOwnProperty(\"error\")) {\r\n // webix.message(result.error, \"error\");\r\n // } else {\r\n // webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n // // $$(\"huyhoadonForms\").close();\r\n // app.callEvent(\"dataChangebangkebanra\", [1, null]);\r\n // }\r\n // });\r\n // }\r\n // table.enable();\r\n // table.hideProgress();\r\n // });\r\n\r\n // var _listcerts = [];\r\n\r\n // for (var i = 0; i < listcerts.length; i++) {\r\n // var _cert = listcerts[i];\r\n\r\n // _listcerts.push({\r\n // so_serial: _cert.cer_serial,\r\n // ngaybatdau: _cert.begin_date,\r\n // ngayketthuc: _cert.end_date,\r\n // issuer: _cert.issuer,\r\n // subjectname: _cert.subject_name,\r\n // });\r\n // }\r\n\r\n // var arg = {\r\n // idData: \"#data\",\r\n // xml: json[\"xml\"],\r\n // shdon: json.shdon,\r\n // idSigner: \"seller\",\r\n // tagSign: \"NNT\",\r\n // listcerts: _listcerts,\r\n // };\r\n\r\n // hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n // .done(function () {\r\n // console.log(\"Success !\");\r\n // })\r\n // .fail(function (error) {\r\n // webix.message(error, \"error\");\r\n // });\r\n // });\r\n // });\r\n // }\r\n // });\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 120,\r\n // label: ' ' + '' + \"Lập bổ sung\" + \"\",\r\n // id: \"btnCreatePlus\",\r\n // shortcut: \"F4\",\r\n // on: {\r\n // onClick: function () {\r\n // var detailForm = this.$scope.ui(bangkebanraForm.$ui);\r\n // bangkebanraForm.setEditMode(1);\r\n // detailForm.show();\r\n\r\n // webix.$$(\"ldau\").setValue(0);\r\n\r\n // var url = app.config.host + \"/Invoice68/GetInfoCompany\";\r\n\r\n // webix.ajax(url, function (text) {\r\n // var json = JSON.parse(text);\r\n // webix.$$(\"tnnt\").setValue(json.name);\r\n // webix.$$(\"mst\").setValue(json.tax_code);\r\n // webix.$$(\"ddanh\").setValue(json.address);\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n // {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 120,\r\n // label: ' ' + '' + _(\"Lập bổ sung\") + \"\",\r\n // id: \"btnUp\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"hoadon\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"Tải XML\") + \"\",\r\n // id: \"btnDownloadXml\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"bangkebanra\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // if (selectedItem.trang_thai != 1) {\r\n // webix.message(\"Bảng tổng hợp chưa gửi CQT không tồn tại xml ! \", \"error\");\r\n // return;\r\n // }\r\n\r\n // webix.extend(table, webix.ProgressBar);\r\n // table.disable();\r\n // table.showProgress();\r\n\r\n // var url = app.config.host + \"/Invoice68/ExportXMLBangKeBanRa?id=\" + selectedItem.id;\r\n // webix\r\n // .ajax()\r\n // .response(\"arraybuffer\")\r\n // .get(url, function (text, data) {\r\n // table.enable();\r\n // table.hideProgress();\r\n\r\n // var file = new Blob([data], { type: \"application/xml\" });\r\n // webix.html.download(file, \"BangKeBanRa.xml\");\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, \"_blank\");\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n container: \"testA\",\r\n view: \"treetable\",\r\n id: \"bangkebanra\",\r\n select: true,\r\n tooltip:true,\r\n resizeColumn: true,\r\n fullScreen: true,\r\n fixedRowHeight: false,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n columns: [\r\n {\r\n id: \"stt\",\r\n header: \"
STT
\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"khmhdon\",\r\n header:\"
Ký hiệu mẫu hóa đơn
\",\r\n width: 150,\r\n // template: function (obj) {\r\n // debugger;\r\n // if (obj != null) \r\n // return obj.khieu.substr(0,1);\r\n // },\r\n },\r\n {\r\n id: \"khieu\",\r\n header:\"
Ký hiệu hóa đơn
\",\r\n width: 150,\r\n // template: function (obj) {\r\n\r\n // debugger;\r\n // if (obj != null) \r\n // return obj.khieu.substr(1,obj.khieu.length - 1);\r\n // },\r\n },\r\n {\r\n id: \"tsss_tuso\",\r\n header: [{ text: \"
Tổng số sử dụng, thay thế, điều chỉnh, hủy
\", colspan: 3 }, { text: \"
Từ số
\" }],\r\n width: 100,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \",\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \".\",\r\n // decimalSize: 0,\r\n // }),\r\n },\r\n {\r\n id: \"tsss_denso\",\r\n header: [null, { text: \"
Đến số
\" }],\r\n width: 100,\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n },\r\n {\r\n id: \"tsss_tong\",\r\n header: [null, { text: \"
Tổng
\" }],\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n { \r\n id: \"doanhthu\", \r\n header: \"
Doanh thu
\", \r\n width: 100, \r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n {\r\n id: \"goc_sl\",\r\n header: [{ text: \"
Gốc
\", colspan: 2 }, { text: \"
Số lượng
\" }],\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n {\r\n id: \"goc_ttien\",\r\n header: [null, { text: \"
Tổng tiền
\" }],\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n {\r\n id: \"huy_sl\",\r\n header: [{ text: \"
Hủy/Bị thay thế
\", colspan: 3 }, { text: \"
Số lượng
\" }],\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n {\r\n id: \"huy_soseri\",\r\n header: [null, { text: \"
Số seri hóa đơn
\" }],\r\n width: 150,\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n },\r\n {\r\n id: \"huy_ttien\",\r\n header: [null, { text: \"
Tổng tiền
\" }],\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n {\r\n id: \"loi_sl\",\r\n header: [{ text: \"
Lỗi
\", colspan: 3 }, { text: \"
Số lượng
\" }],\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n {\r\n id: \"loi_soseri\",\r\n header: [null, { text: \"
Số seri hóa đơn
\" }],\r\n width: 150,\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n },\r\n {\r\n id: \"loi_ttien\",\r\n header: [null, { text: \"
Tổng tiền
\" }],\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n {\r\n id: \"bidieuchinh_sl\",\r\n header: [{ text: \"
Bị điều chỉnh
\", colspan: 3 }, { text: \"
Số lượng
\" }],\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n },\r\n {\r\n id: \"bidieuchinh_soseri\",\r\n header: [null, { text: \"
Số seri hóa đơn
\" }],\r\n width: 150,\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n },\r\n {\r\n id: \"bidieuchinh_ttien\",\r\n header: [null, { text: \"
Tổng tiền
\" }],\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n \r\n {\r\n id: \"dieuchinh_sl\",\r\n header: [{ text: \"
Điều chỉnh/Thay thế
\", colspan: 3 }, { text: \"
Số lượng
\" }],\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n {\r\n id: \"dieuchinh_soseri\",\r\n header: [null, { text: \"
Số seri hóa đơn
\" }],\r\n width: 150,\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n },\r\n {\r\n id: \"dieuchinh_ttien\",\r\n header: [null, { text: \"
Tổng tiền
\" }],\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n \r\n \r\n \r\n // { id: \"ms_thue\", header: \"
Mã số thuế
\", width: 150 },\r\n // {\r\n // id: \"tien_tt0\",\r\n // header: \"
Doanh thu chưa có thuế GTGT
\",\r\n // width: 200,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \",\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \".\",\r\n // decimalSize: 0,\r\n // }),\r\n // },\r\n // {\r\n // id: \"tien\",\r\n // header: \"
Thuế GTGT
\",\r\n // width: 100,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \",\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \".\",\r\n // decimalSize: 0,\r\n // }),\r\n // },\r\n // { id: \"ghi_chu\", header: \"
Ghi chú
\", width: 200 },\r\n ],\r\n pager: \"pagerA\",\r\n scheme: {\r\n //$group: {\r\n //by: \"nhom\",\r\n //,css:{ \"text-align\": \"right\" }\r\n // map:{\r\n // \tnguoi_lien_he:[\"nguoi_lien_he\", \"count\"]\r\n // }\r\n //},\r\n //$sort: { by: \"stt\", dir: \"asc\" }\r\n },\r\n ready: function () {\r\n //this.open(this.getFirstId());\r\n //this.sort({ by: \"stt\", dir: \"asc\" });\r\n this.openAll();\r\n this.adjustRowHeight(\"ghi_chu\", true);\r\n this.refresh();\r\n },\r\n //url: app.config.host + \"/System/ExecuteQuery?sql=\" + sql\r\n //autoheight: true,\r\n //autowidth:true,\r\n //data: big_film_set\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChangebangkebanra\", function (item) {\r\n var table = $$(\"bangkebanra\");\r\n // webix.extend(table, webix.OverlayBox);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n table.config.rpParameter = item;\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/GetTinhHinhSuDungHoaDon\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (!json.hasOwnProperty(\"error\")) {\r\n //console.log(json);\r\n $$(\"bangkebanra\").clearAll();\r\n $$(\"bangkebanra\").parse(json);\r\n $$(\"bangkebanra\").refresh();\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n });\r\n },\r\n };\r\n});\r\n\n\r\ndefine('views/modules/minvoiceplugin',[\"app\", \"models/user\"], function (app, user) {\r\n\r\n var isConnected = false;\r\n var isWindowXP = function () {\r\n return navigator.userAgent.indexOf(\"Windows NT 5.1\") != -1;\r\n }\r\n var isLocked = false;\r\n if (!isWindowXP()) {\r\n var urls = [\"http://localhost:17997/signalr\", \"http://localhost:19898/signalr\"];\r\n var connection = null;\r\n var hub = null;\r\n\r\n function connectToSignalR(urlIndex) {\r\n if (urlIndex >= urls.length) {\r\n console.log('All connection attempts failed.');\r\n return;\r\n }\r\n\r\n var url = urls[urlIndex];\r\n var conn = $.hubConnection(url, {\r\n useDefaultPath: false\r\n });\r\n\r\n hub = conn.createHubProxy('invoiceHub');\r\n\r\n // Xử lý khi nhận sự kiện từ hub\r\n hub.on('resCommand', function (result) {\r\n\r\n });\r\n\r\n // Xử lý khi kết nối bị ngắt\r\n conn.disconnected(function () {\r\n console.log('Connection disconnected');\r\n isConnected = false;\r\n isLocked = false;\r\n });\r\n\r\n // Bắt đầu kết nối\r\n conn.start().done(function () {\r\n console.log(\"Connected to Plugin Id: \" + hub.connection.id + \" at \" + urls[urlIndex]);\r\n isConnected = true;\r\n isLocked = false;\r\n }).fail(function () {\r\n console.log('Failed to connect to ' + urls[urlIndex]);\r\n // Nếu kết nối thất bại, thử kết nối URL tiếp theo\r\n if (urlIndex == urls.length - 1) {\r\n isConnected = false;\r\n var userApp = user.getAppCookie();\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(url,\r\n {\r\n command: \"CM00005\",\r\n parameter: {\r\n wb_user_id: userApp.wb_user_id\r\n }\r\n }\r\n , function (text) {\r\n var json = JSON.parse(text);\r\n if (json.length > 0 && json.filter(function (x) { return x.chon1 == 'C' }).length > 0)\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn (Tiện ích > Plugin ký hóa đơn) hoặc Plugin ký hóa đơn chưa được bật !\", \"debug\");\r\n });\r\n }\r\n else {\r\n connectToSignalR(urlIndex + 1);\r\n }\r\n });\r\n connection = conn;\r\n\r\n }\r\n\r\n // Bắt đầu kết nối ngay lập tức khi module được nạp\r\n connectToSignalR(0);\r\n\r\n return {\r\n hub: function () {\r\n return hub;\r\n },\r\n conn: function () {\r\n return connection;\r\n },\r\n isConnected: isConnected,\r\n setLocked: function (locked) {\r\n isLocked = locked;\r\n },\r\n getLocked: function () {\r\n return isLocked;\r\n }\r\n };\r\n\r\n } else {\r\n var url = \"ws://localhost:19898/service\";\r\n var hub = {};\r\n window.fn = undefined;\r\n window.state = undefined;\r\n hub.ws = undefined;\r\n\r\n hub.conn = function () {\r\n window.state = 1;\r\n hub.ws = new WebSocket(url);\r\n // hub.ws.onopen = hub.onOpen;\r\n hub.ws.onclose = hub.onClose;\r\n // hub.ws.onmessage = hub.on;\r\n hub.ws.onerror = hub.onError;\r\n }\r\n var conn = function () {\r\n return { state: window.state };\r\n }\r\n hub.off = function (_) {\r\n\r\n }\r\n hub.invoke = function (_, str2, json) {\r\n if (hub.ws != undefined) {\r\n hub.ws.onopen = function () {\r\n var obj = {\r\n execCommand: str2,\r\n arg: JSON.parse(json)\r\n }\r\n if (hub.ws.readyState == WebSocket.OPEN) {\r\n hub.ws.send(JSON.stringify(obj));\r\n }\r\n }\r\n\r\n } else {\r\n console.log('Websocket is not initialized');\r\n }\r\n return hub;\r\n };\r\n hub.onError = function (arg) {\r\n window.state = -1;\r\n if (hub.ws != undefined) {\r\n isConnected = false;\r\n var userApp = user.getAppCookie();\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(url,\r\n {\r\n command: \"CM00005\",\r\n parameter: {\r\n wb_user_id: userApp.wb_user_id\r\n }\r\n }\r\n , function (text) {\r\n console.log(1);\r\n var json = JSON.parse(text);\r\n if (json.length > 0 && json.filter(function (x) { return x.chon1 == 'C' }).length > 0)\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn (Tiện ích > Plugin ký hóa đơn) hoặc Plugin ký hóa đơn chưa được bật !\", \"debug\");\r\n });\r\n } else {\r\n console.log('Websocket is not initialized');\r\n }\r\n }\r\n hub.on = function (str, fn_in) {\r\n if (hub.ws != undefined) {\r\n window.fn = fn_in;\r\n hub.ws.onmessage = func;\r\n } else {\r\n console.log('Websocket is not initialized');\r\n }\r\n }\r\n var func = function (result) {\r\n return window.fn(result.data);\r\n }\r\n hub.onClose = function (arg) {\r\n if (hub.ws != undefined) {\r\n console.log('DISCONNECTED');\r\n isConnected = false;\r\n isLocked = false;\r\n } else {\r\n console.log('Websocket is not initialized');\r\n }\r\n };\r\n\r\n hub.onOpen = function (arg) {\r\n if (hub.ws != undefined) {\r\n isConnected = true;\r\n isLocked = false;\r\n window.state = hub.ws.readyState;\r\n } else {\r\n isConnected = false;\r\n isLocked = true;\r\n console.log('Websocket is not initialized');\r\n }\r\n };\r\n hub.done = function (fn) {\r\n fn();\r\n return hub;\r\n }\r\n hub.fail = function (fn) {\r\n return hub;\r\n }\r\n\r\n return {\r\n hub: function () {\r\n hub.conn();\r\n\r\n return hub;\r\n },\r\n conn: function () {\r\n return conn();\r\n },\r\n isConnected: isConnected,\r\n setLocked: function (locked) {\r\n isLocked = locked;\r\n },\r\n getLocked: function () {\r\n return isLocked;\r\n }\r\n };\r\n }\r\n});\ndefine('views/forms/68_dangkysudung_bienlai',[\"app\", \"locale\", \"models/user\", \"views/modules/minvoiceplugin\"], function (app, _, user, plugin) {\r\n \r\n\r\n webix.$$(\"title\").parse({ title: \"Đăng ký sử dụng\", details: \"Đăng ký sử dụng\" });\r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n //view: \"toolbar\",\r\n // css: { \"box-shadow\": \"0 -2px #3498db inset !important\", \"background\": \"#ffffff !important\" },\r\n //css: { \"background\": \"#e6f2ff !important\" },\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-icondksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formdksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Đăng ký/thay đổi thông tin sử dụng biên lai
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_dksdForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n // var form = webix.$$(\"window-form\");\r\n // hint_form(form.config.hint);\r\n },\r\n },\r\n ],\r\n },\r\n id: \"dangkysudungForms\",\r\n resize: true,\r\n fullscreen: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () {},\r\n },\r\n body: {\r\n view: \"form\",\r\n id: \"dangkysudung\",\r\n // width: 1500,\r\n position: \"center\",\r\n // autowidth:true,\r\n paddingY: 10,\r\n paddingX: 15,\r\n complexData: true,\r\n scroll: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n cols: [\r\n {\r\n view: \"radio\",\r\n id: \"loai\",\r\n name: \"loai\",\r\n width: 200,\r\n value: 1,\r\n options: [\r\n { id: 1, value: \"Đăng ký\" }, // the initially selected item\r\n { id: 2, value: \"Thay đổi\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"header\").define(\"template\", \"
TỜ KHAI
ĐĂNG KÝ THÔNG TIN SỬ DỤNG BIÊN LAI ĐIỆN TỬ
\");\r\n $$(\"header\").refresh();\r\n } else {\r\n $$(\"header\").define(\"template\", \"
TỜ KHAI
THAY ĐỔI THÔNG TIN SỬ DỤNG BIÊN LAI ĐIỆN TỬ
\");\r\n $$(\"header\").refresh();\r\n }\r\n },\r\n },\r\n },\r\n {\r\n id: \"header\",\r\n template: \"
TỜ KHAI
ĐĂNG KÝ THÔNG TIN SỬ DỤNG BIÊN LAI ĐIỆN TỬ
\",\r\n borderless: true,\r\n height: 40,\r\n },\r\n ],\r\n },\r\n {\r\n paddingX: 40,\r\n rows: [\r\n {\r\n view: \"text\",\r\n label: \"Tên người nộp thuế: \",\r\n labelWidth: 150,\r\n name: \"tnnt\",\r\n id: \"tnnt\",\r\n required: true,\r\n invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n css: \"mcls_uppercase\",\r\n },\r\n {\r\n view: \"search\",\r\n label: \"Mã số thuế\",\r\n id: \"mst\",\r\n name: \"mst\",\r\n labelWidth: 150,\r\n required: true,\r\n invalidMessage: \"Mã số thuế không được để trống !\",\r\n on: {\r\n onSearchIconClick: function () {\r\n var mst = this.getValue();\r\n window.open(\"http://tracuunnt.gdt.gov.vn/tcnnt/mstdn.jsp?mst=\" + mst);\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"cqtqly\",\r\n view: \"combo\",\r\n name: \"cqtqly\",\r\n label: \"Cơ quan thuế quản lý: \",\r\n labelWidth: 150,\r\n options: {\r\n view: \"gridsuggest\",\r\n columnName: \"name\",\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00251\";\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n body: {\r\n columns: [{ id: \"name\", width: 350, header: \"name\" }],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n $$(\"mcqtqly\").setValue(obj[\"code\"]);\r\n $$(\"mcqtqly\").refresh();\r\n },\r\n },\r\n },\r\n required: true,\r\n invalidMessage: \"Cơ quan thuế quản lý không được để trống !\",\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Mã CQT quản lý: \",\r\n labelWidth: 150,\r\n name: \"mcqtqly\",\r\n id: \"mcqtqly\",\r\n required: true,\r\n invalidMessage: \"Mã cơ quan thuế quản lý không được để trống !\",\r\n attributes: { maxlength: 5 },\r\n readonly: true,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Địa danh: \",\r\n labelWidth: 80,\r\n name: \"ddanh\",\r\n id: \"ddanh\",\r\n required: true,\r\n invalidMessage: \"Địa danh không được để trống !\",\r\n attributes: { maxlength: 20 },\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Người liên hệ: \",\r\n labelWidth: 150,\r\n name: \"nlhe\",\r\n id: \"nlhe\",\r\n required: true,\r\n invalidMessage: \"Người liên hệ không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Điện thoại liên hệ: \",\r\n labelWidth: 150,\r\n name: \"dtlhe\",\r\n id: \"dtlhe\",\r\n required: true,\r\n invalidMessage: \"Địa chỉ không được để trống !\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Địa chỉ liên hệ: \",\r\n labelWidth: 150,\r\n name: \"dclhe\",\r\n id: \"dclhe\",\r\n required: true,\r\n invalidMessage: \"Địa chỉ không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Thư điện tử: \",\r\n labelWidth: 150,\r\n name: \"dctdtu\",\r\n id: \"dctdtu\",\r\n validate: webix.rules.isEmail,\r\n required: true,\r\n invalidMessage: \"Thư điện tử không hợp lệ !\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n /*{\r\n view: \"text\",\r\n label: \"Căn cứ: \",\r\n labelWidth: 150,\r\n name: \"ccu\",\r\n id: \"ccu\",\r\n required: true,\r\n invalidMessage: \"Căn cứ không được để trống !\",\r\n },*/\r\n {\r\n view: \"text\",\r\n label: \"Thư điện tử: \",\r\n labelWidth: 150,\r\n name: \"dctdtu\",\r\n id: \"dctdtu\",\r\n validate: webix.rules.isEmail,\r\n required: true,\r\n invalidMessage: \"Thư điện tử không hợp lệ !\",\r\n },\r\n ],\r\n },\r\n { height: 5 },\r\n ],\r\n },\r\n {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"label\",\r\n label: \"Theo nghị định số: 123/2020/NĐ-CP ngày 19 tháng 10 năm 2020 của Chính phủ, chúng tôi/tôi thuộc đối tượng sử dụng biên lai điện tử. Chúng tôi/tôi đăng ký/thay đổi thông tin đã đăng ký với cơ quan thuế về việc sử dụng biên lai điện tử như sau:\",\r\n },\r\n ],\r\n },\r\n { view: \"label\", label: \"1. Hình thức biên lai:\" },\r\n {\r\n view: \"checkbox\",\r\n id: \"tccnphanh\",\r\n name: \"tccnphanh\",\r\n labelRight: \"Tổ chức, cá nhân phát hành\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"dcqtphanh\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"dcqtphanh\",\r\n name: \"dcqtphanh\",\r\n labelRight: \"Do CQT phát hành\",\r\n value: 1,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"tccnphanh\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n { view: \"label\", label: \"2. Loại hình sử dụng:\" },\r\n {\r\n view: \"checkbox\",\r\n id: \"bldin\",\r\n name: \"bldin\",\r\n labelRight: \"Biên lai đặt in\",\r\n },\r\n\r\n {\r\n view: \"checkbox\",\r\n id: \"bltin\",\r\n name: \"bltin\",\r\n labelRight: \"Biên lai tự in\",\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"blhddt\",\r\n name: \"blhddt\",\r\n labelRight: \"Biên lai HĐĐT\",\r\n },\r\n {\r\n view: \"label\",\r\n label: \"Ghi chú\",\r\n },\r\n {\r\n view: \"label\",\r\n label: \"- Nêu cụ thể từng loại có mấy liên, chức năng sử dụng của từng liên, số lượng từng loại biên lai, ký hiệu từ số... đến số...\",\r\n },\r\n {\r\n view: \"label\",\r\n label: \"- Đối với Biên lai đặt in ghi rõ: số biên lai này được đặt in tại... (ghi rõ tên nhà in) và đăng ký sử dụng tại địa phương... từ ngày....\",\r\n },\r\n {\r\n view: \"label\",\r\n label: \"- Đối với biên lai tự in ghi rõ: số biên lai này đăng ký sử dụng tại địa phương... từ ngày...\",\r\n },\r\n {\r\n view: \"label\",\r\n label: \"- Tên hệ thống thiết bị ( máy tính, máy in, phần mềm ứng dụng) dùng để in biên lai; bộ phận kỹ thuật hoặc tên nhà cung cấp dịch vụ kỹ thuật tự in biên lai thu tiền, lệ phí.\",\r\n },\r\n {\r\n view: \"label\",\r\n label: \"- Đối với biên lai điện tử ghi rõ Tên phần mềm hoặc giải pháp tạo biên lai điện tử, tên nhà cung cấp giải pháp biên lai tiền phí, lệ phí điện tử.\",\r\n },\r\n /*{\r\n view: \"checkbox\",\r\n id: \"sllien\",\r\n name: \"sllien\",\r\n labelRight: \"Số lượng liên\",\r\n },*/\r\n { view: \"label\", label: \"3. Hình thức gửi dữ liệu biên lai điện tử:\" },\r\n {\r\n view: \"checkbox\",\r\n id: \"cttdtu\",\r\n name: \"cttdtu\",\r\n labelRight: \"Cổng thông tin điện tử (Trên Cổng thông tin điện tử của cơ quan thuế)\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"cdvcong\").setValue(0);\r\n $$(\"htudttoan\").setValue(0);\r\n $$(\"tcccdvu\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"cdvcong\",\r\n name: \"cdvcong\",\r\n labelRight: \"Cổng dịch vụ công (Trên Cổng dịch vụ công quốc gia)\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"cttdtu\").setValue(0);\r\n $$(\"htudttoan\").setValue(0);\r\n $$(\"tcccdvu\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"htudttoan\",\r\n name: \"htudttoan\",\r\n labelRight: \"Hệ thống ứng dụng thanh toán (Trên hệ thống ứng dụng thanh toán điện tử của ngân hàng)\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"cdvcong\").setValue(0);\r\n $$(\"cttdtu\").setValue(0);\r\n $$(\"tcccdvu\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"tcccdvu\",\r\n name: \"tcccdvu\",\r\n value: 1,\r\n labelRight: \"Tổ chức cung cấp dịch vụ (Thông qua tổ chức cung ứng dịch vụ trung gian thanh toán)\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"cdvcong\").setValue(0);\r\n $$(\"htudttoan\").setValue(0);\r\n $$(\"cttdtu\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n { view: \"label\", label: \"4. Tên biên lai sử dụng:\" },\r\n {\r\n view: \"checkbox\",\r\n id: \"tpvphckin\",\r\n name: \"tpvphckin\",\r\n labelRight: \"Thu phạt vi phạm hành chính không in (Biên lai thu phạt vi phạm hành chính không in sẵn mệnh giá)\",\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"tpvphcisan\",\r\n name: \"tpvphcisan\",\r\n labelRight: \"Thu phạt vi phạm hành chính in sẵn (Biên lai thu phạt vi phạm hành chính in sẵn mệnh giá)\",\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"tplpkin\",\r\n name: \"tplpkin\",\r\n labelRight: \"Thu phí, lệ phí không in (Biên lai thu phí, lệ phí không in sẵn mệnh giá)\",\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"tplpin\",\r\n name: \"tplpin\",\r\n labelRight: \"Thu phí, lệ phí in (Biên lai thu phí, lệ phí in sẵn mệnh giá)\",\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"tplpvtphat\",\r\n name: \"tplpvtphat\",\r\n labelRight: \"Thu phí, lệ phí và thu phạt (Biên lai thu phí, lệ phí và thu phạt vi phạm hành chính)\",\r\n },\r\n ],\r\n },\r\n {\r\n rows: [\r\n {\r\n view: \"label\",\r\n label: \"5. Danh sách chứng thư số sử dụng:\",\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n label: \" Thêm\",\r\n // width: 60,\r\n autowidth: true,\r\n icon: \"fas fa-plus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var item = {\r\n stt: $$(\"danhsach_chukyso\").count() + 1,\r\n ttchuc: cert.subject_name,\r\n seri: cert.cer_serial,\r\n tngay: cert.begin_date,\r\n dngay: cert.end_date,\r\n hthuc: \"1\",\r\n };\r\n\r\n // $$(\"danhsach_chukyso\").clearAll();\r\n $$(\"danhsach_chukyso\").add(item);\r\n return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetCTS_HSM_ToKhai\", function (result) {\r\n var ctsHSM = JSON.parse(result);\r\n\r\n if (ctsHSM.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: ctsHSM.error });\r\n } else {\r\n var item = {\r\n stt: $$(\"danhsach_chukyso\").count() + 1,\r\n ttchuc: ctsHSM.subjectname,\r\n seri: ctsHSM.so_serial,\r\n tngay: ctsHSM.ngaybatdau,\r\n dngay: ctsHSM.ngayketthuc,\r\n hthuc: \"1\",\r\n };\r\n\r\n // $$(\"danhsach_chukyso\").clearAll();\r\n $$(\"danhsach_chukyso\").add(item);\r\n }\r\n });\r\n } else {\r\n var hub = plugin.hub();\r\n\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var callback = json.callback;\r\n\r\n if (callback == \"RegisterCert\") {\r\n var item = {\r\n stt: $$(\"danhsach_chukyso\").count() + 1,\r\n ttchuc: json.data.subjectname,\r\n seri: json.data.so_serial,\r\n tngay: json.data.ngaybatdau,\r\n dngay: json.data.ngayketthuc,\r\n hthuc: \"1\",\r\n };\r\n\r\n // $$(\"danhsach_chukyso\").clearAll();\r\n $$(\"danhsach_chukyso\").add(item);\r\n }\r\n }\r\n });\r\n\r\n var arg = {\r\n callback: \"RegisterCert\",\r\n };\r\n\r\n hub.invoke(\"execCommand\", arg.callback, JSON.stringify(arg));\r\n }\r\n });\r\n }\r\n });\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n autowidth: true,\r\n label: \" Xóa\",\r\n // width: 60,\r\n icon: \"fas fa-minus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_chukyso\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n var editor = table.getEditState();\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_chukyso\",\r\n height: 250,\r\n name: \"danhsach_chukyso\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n tooltip: true,\r\n editable: true,\r\n scroll: true,\r\n fullscreen: true,\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n on: {},\r\n columns: [\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"ttchuc\",\r\n name: \"ttchuc\",\r\n header: \"Tên tổ chức cơ quan chứng thực/cấp/công nhận chữ ký số, chữ ký điện tử\",\r\n width: 450,\r\n },\r\n {\r\n id: \"seri\",\r\n name: \"seri\",\r\n header: \"Số sê-ri chứng thư số\",\r\n width: 300,\r\n },\r\n {\r\n id: \"tngay\",\r\n name: \"tngay\",\r\n header: [\r\n {\r\n text: \"Thời hạn sử dụng chứng thư số\",\r\n colspan: 2,\r\n },\r\n {\r\n text: \"Từ ngày\",\r\n },\r\n ],\r\n width: 200,\r\n //format: webix.i18n.dateFormatStr,\r\n },\r\n {\r\n id: \"dngay\",\r\n name: \"dngay\",\r\n header: [\r\n null,\r\n {\r\n text: \"Đến ngày\",\r\n },\r\n ],\r\n width: 200,\r\n //format: webix.i18n.dateFormatStr,\r\n },\r\n {\r\n id: \"hthuc\",\r\n name: \"hthuc\",\r\n header: \"Hình thức đăng ký ( Thêm mới, Gia hạn, ngừng sử dụng)\",\r\n fillspace: true,\r\n editor: \"combo\",\r\n options: [\r\n { id: \"1\", value: \"Thêm mới\" },\r\n { id: \"2\", value: \"Gia hạn\" },\r\n { id: \"3\", value: \"Ngừng sử dụng\" },\r\n ],\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n { height: 5 },\r\n {\r\n css: \"fixbottom\",\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Ghi (F10)\",\r\n id: \"btnDKSDSave1\",\r\n width: 150,\r\n align: \"center\",\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"dangkysudung\").getValues();\r\n item.ltkhai = 2;\r\n var table = $$(\"dangkysudung\");\r\n\r\n if (table.validate()) {\r\n var cks = $$(\"danhsach_chukyso\").serialize();\r\n if (cks.length == 0) {\r\n webix.message(\"Bạn chưa đăng ký chữ ký số cho thông báo phát hành !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: $$(\"danhsach_chukyso\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/dangkysudungSave\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangeDangkysudung68\", [editmode, null]);\r\n\r\n webix.message(\"Thành công !\", \"success\");\r\n webix.$$(\"dangkysudungForms\").close();\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 120,\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n webix.$$(\"dangkysudungForms\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n { height: 5 },\r\n ],\r\n },\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1) {\r\n icon = \"\";\r\n var result = webix\r\n .ajax()\r\n .sync()\r\n .get(app.config.host + \"/System/GetDmDvcsByUser\");\r\n var json = JSON.parse(result.response);\r\n\r\n $$(\"dclhe\").setValue(json[0].address);\r\n $$(\"tnnt\").setValue(json[0].name);\r\n $$(\"mst\").setValue(json[0].tax_code);\r\n $$(\"dtlhe\").setValue(json[0].tel);\r\n $$(\"dctdtu\").setValue(json[0].email);\r\n $$(\"nlhe\").setValue(json[0].manage);\r\n } else {\r\n if (editmode == 2) icon = \"\";\r\n else icon = \"\";\r\n }\r\n\r\n webix.$$(\"head-icondksd\").setHTML(icon);\r\n webix.$$(\"head-icondksd\").refresh();\r\n },\r\n setValues: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n\r\n // item[\"tdlap\"] = removeTimeZoneT(item[\"tdlap\"]);\r\n form.setValues(item);\r\n\r\n // if (editmode == 2) {\r\n\r\n // }\r\n\r\n var tableDetail = webix.$$(\"danhsach_chukyso\");\r\n var url = app.config.host + \"/Invoice68/GetDataDangkysudungDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n },\r\n // $oninit: function (view, $scope) {\r\n // var url = app.config.host + \"/Invoice68/getDangkysudung\";\r\n\r\n // webix.ajax(url, function (text) {\r\n // var json = JSON.parse(text);\r\n\r\n // $$(\"dangkysudung\").setValues(json);\r\n // $$(\"danhsach_chukyso\").parse(json[\"data\"]);\r\n // });\r\n // }\r\n };\r\n});\r\n\ndefine('views/68_dangkysudung_bienlai',[\"app\", \"locale\", \"models/user\", \"views/forms/68_dangkysudung_bienlai\", \"views/forms/68_hoadon_history\"], function (app, _, user, dangkysudung, hoadonHistory) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Đăng ký/ Thay đổi thông tin SD Biên lai\",\r\n details: \"Đăng ký/ Thay đổi thông tin SD Biên lai\",\r\n });\r\n\r\n var initUI = function () {\r\n //var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetDataDkysdung01\";\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n //console.log(JSON.stringify(array));\r\n }\r\n }\r\n url = url + \"<khai=2\";\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dangkysudung.$ui);\r\n dangkysudung.setEditMode(1);\r\n\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu đăng ký cần sửa ! \", \"error\");\r\n return;\r\n }\r\n // if (selectedItem.trang_thai == 1) {\r\n // webix.message(\"Đã gửi CQT không thể sửa\", \"error\");\r\n // return;\r\n // }\r\n var detailForm = this.$scope.ui(dangkysudung.$ui);\r\n\r\n dangkysudung.setEditMode(2);\r\n dangkysudung.setValues(selectedItem);\r\n\r\n if (selectedItem.trang_thai == 1) {\r\n var form = $$(\"dangkysudung\").elements;\r\n for (var key in form) {\r\n var $el = form[key];\r\n $el.define(\"readonly\", \"true\");\r\n $el.define(\"css\", \"mcls_readonly_text\");\r\n $el.refresh();\r\n }\r\n\r\n // $$(\"btnDKSDSave\").destructor();\r\n $$(\"btnDKSDSave1\").destructor();\r\n }\r\n\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu đăng ký ! \", \"error\");\r\n return;\r\n }\r\n\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Thông báo đã được ký. Bạn không thể thực hiện chức năng này ! \", \"error\");\r\n return;\r\n }\r\n selectedItem.editmode = 3;\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/deleteMau01\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n table.remove(selectedItem.id);\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Ký (F7)\") + \"\",\r\n id: \"btnPreview\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var tableDK = webix.$$(\"dangkysudung01Views\");\r\n var selectedItem = tableDK.getSelectedItem();\r\n\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu đăng ký ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Mẫu đã được ký, bạn không thể ký lại ! \", \"error\");\r\n return;\r\n }\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n mau01_id: selectedItem.id,\r\n };\r\n\r\n if (postData.mau01_id == undefined || postData.mau01_id == \"\") {\r\n webix.message(\"Bạn chưa ghi dữ liệu, không thể ký !\", \"error\");\r\n return;\r\n } else {\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignDangkysudung\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n } else {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n app.callEvent(\"dataChangeDangkysudung68\", [1, null]);\r\n\r\n webix.message(\"Ký thành công !\", \"success\");\r\n }\r\n },\r\n });\r\n\r\n // return;\r\n }\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"dangkysudung01Views\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n // ký HSM\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n mau01_id: selectedItem.id,\r\n };\r\n\r\n var url = app.config.host + \"/Invoice68/SignDangkysudung_HSM\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, postData, function (text) {\r\n var res = JSON.parse(text);\r\n\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n webix.message(\"Đã thực hiện xong\");\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n } else {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlMau01?id=\" + selectedItem.id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, selectedItem]).then(function (results) {\r\n // webix.extend(tblInvoice, webix.ProgressBar);\r\n // tblInvoice.disable();\r\n // tblInvoice.showProgress();\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký biên lai hoặc Plugin ký biên lai chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item.id,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMau01\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangeDangkysudung68\", [1, null]);\r\n\r\n webix.message(\"Ký thành công!\", \"success\");\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n }\r\n });\r\n }\r\n });\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"dangkysudung01Views\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.date_new) {\r\n // obj.date_new = new Date(obj.date_new);\r\n // }\r\n },\r\n },\r\n onClick: {\r\n dowloadXmlDKSD: function (event, cell, target) {\r\n var win = webix.$$(\"dangkysudung01Views\");\r\n var record = win.getItem(cell.row);\r\n if (record.trang_thai != 1) {\r\n webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n return;\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau01?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"Mau01.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n // return false; // here it blocks the default behavior\r\n },\r\n btndowloadXMLRep: function (event, cell, target) {\r\n var win = webix.$$(\"dangkysudung01Views\");\r\n var record = win.getItem(cell.row);\r\n if (record.ket_qua == null || record.ket_qua == \"\") {\r\n webix.message(\"Mẫu chưa được CQT trả về không thể tải !\", \"error\");\r\n return;\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau02?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"Mau02.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n // return false; // here it blocks the default behavior\r\n },\r\n btndowloadXMLRepTiepNhan: function (event, cell, target) {\r\n var win = webix.$$(\"dangkysudung01Views\");\r\n var record = win.getItem(cell.row);\r\n if (record.ketqua_tiepnhan == null || record.ketqua_tiepnhan == \"\") {\r\n webix.message(\"Mẫu chưa được CQT trả về không thể tải !\", \"error\");\r\n return;\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau03?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"Mau03.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n // return false; // here it blocks the default behavior\r\n },\r\n InMau01: function (event, cell, target) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var item = table.getItem(cell.row);\r\n\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMau01?id=\" + item.id + \"&type=PDF&loaitk=2\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n InMau02: function (event, cell, target) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var item = table.getItem(cell.row);\r\n\r\n if (item.ket_qua == 3) {\r\n webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMau02?id=\" + item.id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n InMau03: function (event, cell, target) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var item = table.getItem(cell.row);\r\n\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMau03?id=\" + item.id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"stt\",\r\n header: [{ text: \"Mẫu 01/ĐK-BL - Tờ khai Đăng ký/thay đổi thông tin sử dụng Biên lai\", colspan: \"6\" }, \"STT\"],\r\n width: 40,\r\n },\r\n // {\r\n // id: \"mtdiep_gui\",\r\n // header: [\"\", \"Mã thông điệp\"],\r\n // width: 350,\r\n // },\r\n {\r\n id: \"ngay_gui\",\r\n header: [\"\", \"Ngày ký\"],\r\n width: 200,\r\n css: { \"text-align\": \"center\" },\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"nlap\",\r\n header: [\"\", \"Ngày lập\"],\r\n width: 200,\r\n css: { \"text-align\": \"center\" },\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"noi_dung\",\r\n header: [\"\", \"Nội dung\"],\r\n width: 250,\r\n },\r\n /*{\r\n id: \"btnMessagetn\",\r\n header: [\"\", \"Lịch sử xử lý\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n return \" \";\r\n },\r\n width: 180,\r\n },*/\r\n {\r\n id: \"btndowload\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.trang_thai == 1) {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },\r\n {\r\n id: \"btnInMau01\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.trang_thai == 1) {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.$$(\"title\").parse({ title: \"DS TỜ KHAI ĐĂNG KÝ/ THAY ĐỔI THÔNG TIN \", details: \"DANH SÁCH TỜ KHAI ĐĂNG KÝ/ THAY ĐỔI THÔNG TIN \" });\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n webix.extend(view, webix.ProgressBar);\r\n $scope.on(app, \"dataChangeDangkysudung68\", function (mode, item) {\r\n if (mode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (mode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_dangkysudung_thue_TNCN',[\"app\", \"locale\", \"models/user\", \"views/modules/minvoiceplugin\"], function (app, _, user, plugin) {\r\n \r\n\r\n webix.$$(\"title\").parse({ title: \"Đăng ký sử dụng\", details: \"Đăng ký sử dụng\" });\r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n //view: \"toolbar\",\r\n // css: { \"box-shadow\": \"0 -2px #3498db inset !important\", \"background\": \"#ffffff !important\" },\r\n //css: { \"background\": \"#e6f2ff !important\" },\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-icondksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formdksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Đăng ký/thay đổi thông tin sử dụng khấu trừ thuế thu nhập cá nhân
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_dksdForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n // var form = webix.$$(\"window-form\");\r\n // hint_form(form.config.hint);\r\n },\r\n },\r\n ],\r\n },\r\n id: \"dangkysudungForms\",\r\n resize: true,\r\n fullscreen: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () {},\r\n },\r\n body: {\r\n view: \"form\",\r\n id: \"dangkysudung\",\r\n // width: 1500,\r\n position: \"center\",\r\n // autowidth:true,\r\n paddingY: 10,\r\n paddingX: 15,\r\n complexData: true,\r\n scroll: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n cols: [\r\n {\r\n view: \"radio\",\r\n id: \"loai\",\r\n name: \"loai\",\r\n width: 200,\r\n value: 1,\r\n options: [\r\n { id: 1, value: \"Đăng ký\" }, // the initially selected item\r\n { id: 2, value: \"Thay đổi\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"header\").define(\r\n \"template\",\r\n \"
TỜ KHAI
THAY ĐỔI THÔNG TIN SỬ DỤNG CHỨNG TỪ THUẾ THU NHẬP CÁ NHÂN
\"\r\n );\r\n $$(\"header\").refresh();\r\n } else {\r\n $$(\"header\").define(\r\n \"template\",\r\n \"
TỜ KHAI
ĐĂNG KÝ THÔNG TIN SỬ DỤNG CHỨNG TỪ THUẾ THU NHẬP CÁ NHÂN
\"\r\n );\r\n $$(\"header\").refresh();\r\n }\r\n },\r\n },\r\n },\r\n {\r\n id: \"header\",\r\n template: \"
TỜ KHAI
ĐĂNG KÝ THÔNG TIN SỬ DỤNG CHỨNG TỪ THUẾ THU NHẬP CÁ NHÂN
\",\r\n borderless: true,\r\n height: 40,\r\n },\r\n ],\r\n },\r\n {\r\n paddingX: 40,\r\n rows: [\r\n {\r\n view: \"text\",\r\n label: \"Tên người nộp thuế: \",\r\n labelWidth: 150,\r\n name: \"tnnt\",\r\n id: \"tnnt\",\r\n required: true,\r\n invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n css: \"mcls_uppercase\",\r\n },\r\n {\r\n view: \"search\",\r\n label: \"Mã số thuế\",\r\n id: \"mst\",\r\n name: \"mst\",\r\n labelWidth: 150,\r\n required: true,\r\n invalidMessage: \"Mã số thuế không được để trống !\",\r\n on: {\r\n onSearchIconClick: function () {\r\n var mst = this.getValue();\r\n window.open(\"http://tracuunnt.gdt.gov.vn/tcnnt/mstdn.jsp?mst=\" + mst);\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"cqtqly\",\r\n view: \"combo\",\r\n name: \"cqtqly\",\r\n label: \"Cơ quan thuế quản lý: \",\r\n labelWidth: 150,\r\n options: {\r\n view: \"gridsuggest\",\r\n columnName: \"name\",\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00251\";\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n body: {\r\n columns: [{ id: \"name\", width: 350, header: \"name\" }],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n $$(\"mcqtqly\").setValue(obj[\"code\"]);\r\n $$(\"mcqtqly\").refresh();\r\n },\r\n },\r\n },\r\n required: true,\r\n invalidMessage: \"Cơ quan thuế quản lý không được để trống !\",\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Mã CQT quản lý: \",\r\n labelWidth: 150,\r\n name: \"mcqtqly\",\r\n id: \"mcqtqly\",\r\n required: true,\r\n invalidMessage: \"Mã cơ quan thuế quản lý không được để trống !\",\r\n attributes: { maxlength: 5 },\r\n readonly: true,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Địa danh: \",\r\n labelWidth: 80,\r\n name: \"ddanh\",\r\n id: \"ddanh\",\r\n required: true,\r\n invalidMessage: \"Địa danh không được để trống !\",\r\n attributes: { maxlength: 20 },\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Người liên hệ: \",\r\n labelWidth: 150,\r\n name: \"nlhe\",\r\n id: \"nlhe\",\r\n required: true,\r\n invalidMessage: \"Người liên hệ không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Điện thoại liên hệ: \",\r\n labelWidth: 150,\r\n name: \"dtlhe\",\r\n id: \"dtlhe\",\r\n required: true,\r\n invalidMessage: \"Địa chỉ không được để trống !\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Địa chỉ liên hệ: \",\r\n labelWidth: 150,\r\n name: \"dclhe\",\r\n id: \"dclhe\",\r\n required: true,\r\n invalidMessage: \"Địa chỉ không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Thư điện tử: \",\r\n labelWidth: 150,\r\n name: \"dctdtu\",\r\n id: \"dctdtu\",\r\n validate: webix.rules.isEmail,\r\n required: true,\r\n invalidMessage: \"Thư điện tử không hợp lệ !\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Căn cứ: \",\r\n labelWidth: 100,\r\n name: \"ccu\",\r\n id: \"ccu\",\r\n required: true,\r\n invalidMessage: \"Căn cứ không được để trống !\",\r\n attributes: {\r\n maxlength: 500,\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Thư điện tử: \",\r\n labelWidth: 150,\r\n name: \"dctdtu\",\r\n id: \"dctdtu\",\r\n validate: webix.rules.isEmail,\r\n required: true,\r\n invalidMessage: \"Thư điện tử không hợp lệ !\",\r\n },\r\n ],\r\n },\r\n { height: 5 },\r\n ],\r\n },\r\n {\r\n rows: [\r\n { view: \"label\", label: \"1. Hình thức chứng từ khấu trừ:\" },\r\n {\r\n view: \"checkbox\",\r\n id: \"tccnphanh\",\r\n name: \"tccnphanh\",\r\n labelRight: \"Tổ chức, cá nhân phát hành\",\r\n value: 1,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n // if (newv == 1) {\r\n // $$(\"adhdcma\").setValue(1);\r\n // $$(\"adhdkma\").setValue(0);\r\n // }\r\n },\r\n },\r\n },\r\n { view: \"label\", label: \"2. Loại hình sử dụng:\" },\r\n {\r\n view: \"checkbox\",\r\n id: \"tphanh\",\r\n name: \"tphanh\",\r\n labelRight: \"Tự phát hành (Chứng từ điện tử tự phát hành)\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"tqtcccap\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"tqtcccap\",\r\n name: \"tqtcccap\",\r\n value: 1,\r\n labelRight: \"Thông qua tổ chức cung cấp (Chứng từ điện tử thông qua tổ chức cung cấp giải pháp, chứng từ điện tử)\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"tphanh\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n { view: \"label\", label: \"3. Hình thức gửi dữ liệu chứng từ điện tử:\" },\r\n {\r\n view: \"checkbox\",\r\n id: \"cttdtu\",\r\n name: \"cttdtu\",\r\n labelRight: \"Cổng thông tin điện tử (Trên Cổng thông tin điện tử của cơ quan thuế)\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"cdvcong\").setValue(0);\r\n $$(\"htudttoan\").setValue(0);\r\n $$(\"tcccdvu\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"cdvcong\",\r\n name: \"cdvcong\",\r\n labelRight: \"Cổng dịch vụ công (Trên Cổng dịch vụ công quốc gia)\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"cttdtu\").setValue(0);\r\n $$(\"htudttoan\").setValue(0);\r\n $$(\"tcccdvu\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"htudttoan\",\r\n name: \"htudttoan\",\r\n labelRight: \"Hệ thống ứng dụng thanh toán (Trên hệ thống ứng dụng thanh toán điện tử của ngân hàng)\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"cdvcong\").setValue(0);\r\n $$(\"cttdtu\").setValue(0);\r\n $$(\"tcccdvu\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"tcccdvu\",\r\n name: \"tcccdvu\",\r\n labelRight: \"Tổ chức cung cấp dịch vụ (Thông qua tổ chức cung ứng dịch vụ trung gian thanh toán)\",\r\n value: 1,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"cdvcong\").setValue(0);\r\n $$(\"htudttoan\").setValue(0);\r\n $$(\"cttdtu\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n rows: [\r\n {\r\n view: \"label\",\r\n label: \"4. Danh sách chứng thư số sử dụng:\",\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n label: \" Thêm\",\r\n // width: 60,\r\n autowidth: true,\r\n icon: \"fas fa-plus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var item = {\r\n stt: $$(\"danhsach_chukyso\").count() + 1,\r\n ttchuc: cert.subject_name,\r\n seri: cert.cer_serial,\r\n tngay: cert.begin_date,\r\n dngay: cert.end_date,\r\n hthuc: \"1\",\r\n };\r\n\r\n // $$(\"danhsach_chukyso\").clearAll();\r\n $$(\"danhsach_chukyso\").add(item);\r\n return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetCTS_HSM_ToKhai\", function (result) {\r\n var ctsHSM = JSON.parse(result);\r\n\r\n if (ctsHSM.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: ctsHSM.error });\r\n } else {\r\n var item = {\r\n stt: $$(\"danhsach_chukyso\").count() + 1,\r\n ttchuc: ctsHSM.subjectname,\r\n seri: ctsHSM.so_serial,\r\n tngay: ctsHSM.ngaybatdau,\r\n dngay: ctsHSM.ngayketthuc,\r\n hthuc: \"1\",\r\n };\r\n\r\n // $$(\"danhsach_chukyso\").clearAll();\r\n $$(\"danhsach_chukyso\").add(item);\r\n }\r\n });\r\n } else {\r\n var hub = plugin.hub();\r\n\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var callback = json.callback;\r\n\r\n if (callback == \"RegisterCert\") {\r\n var item = {\r\n stt: $$(\"danhsach_chukyso\").count() + 1,\r\n ttchuc: json.data.subjectname,\r\n seri: json.data.so_serial,\r\n tngay: json.data.ngaybatdau,\r\n dngay: json.data.ngayketthuc,\r\n hthuc: \"1\",\r\n };\r\n\r\n // $$(\"danhsach_chukyso\").clearAll();\r\n $$(\"danhsach_chukyso\").add(item);\r\n }\r\n }\r\n });\r\n\r\n var arg = {\r\n callback: \"RegisterCert\",\r\n };\r\n\r\n hub.invoke(\"execCommand\", arg.callback, JSON.stringify(arg));\r\n }\r\n });\r\n }\r\n });\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n autowidth: true,\r\n label: \" Xóa\",\r\n // width: 60,\r\n icon: \"fas fa-minus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_chukyso\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n var editor = table.getEditState();\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_chukyso\",\r\n height: 250,\r\n name: \"danhsach_chukyso\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n tooltip: true,\r\n editable: true,\r\n scroll: true,\r\n fullscreen: true,\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n on: {},\r\n columns: [\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"ttchuc\",\r\n name: \"ttchuc\",\r\n header: \"Tên tổ chức cơ quan chứng thực/cấp/công nhận chữ ký số, chữ ký điện tử\",\r\n width: 450,\r\n },\r\n {\r\n id: \"seri\",\r\n name: \"seri\",\r\n header: \"Số sê-ri chứng thư số\",\r\n width: 300,\r\n },\r\n {\r\n id: \"tngay\",\r\n name: \"tngay\",\r\n header: [\r\n {\r\n text: \"Thời hạn sử dụng chứng thư số\",\r\n colspan: 2,\r\n },\r\n {\r\n text: \"Từ ngày\",\r\n },\r\n ],\r\n width: 200,\r\n //format: webix.i18n.dateFormatStr,\r\n },\r\n {\r\n id: \"dngay\",\r\n name: \"dngay\",\r\n header: [\r\n null,\r\n {\r\n text: \"Đến ngày\",\r\n },\r\n ],\r\n width: 200,\r\n //format: webix.i18n.dateFormatStr,\r\n },\r\n {\r\n id: \"hthuc\",\r\n name: \"hthuc\",\r\n header: \"Hình thức đăng ký ( Thêm mới, Gia hạn, ngừng sử dụng)\",\r\n fillspace: true,\r\n editor: \"combo\",\r\n options: [\r\n { id: \"1\", value: \"Thêm mới\" },\r\n { id: \"2\", value: \"Gia hạn\" },\r\n { id: \"3\", value: \"Ngừng sử dụng\" },\r\n ],\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n { height: 5 },\r\n {\r\n css: \"fixbottom\",\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Ghi (F10)\",\r\n id: \"btnDKSDSave1\",\r\n width: 150,\r\n align: \"center\",\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"dangkysudung\").getValues();\r\n item.ltkhai = 3;\r\n var table = $$(\"dangkysudung\");\r\n\r\n if (table.validate()) {\r\n var cks = $$(\"danhsach_chukyso\").serialize();\r\n if (cks.length == 0) {\r\n webix.message(\"Bạn chưa đăng ký chữ ký số cho thông báo phát hành !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: $$(\"danhsach_chukyso\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/dangkysudungSave\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangeDangkysudung68\", [editmode, null]);\r\n\r\n webix.message(\"Thành công !\", \"success\");\r\n webix.$$(\"dangkysudungForms\").close();\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 120,\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n webix.$$(\"dangkysudungForms\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n { height: 5 },\r\n ],\r\n },\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1) {\r\n icon = \"\";\r\n var result = webix\r\n .ajax()\r\n .sync()\r\n .get(app.config.host + \"/System/GetDmDvcsByUser\");\r\n var json = JSON.parse(result.response);\r\n\r\n $$(\"dclhe\").setValue(json[0].address);\r\n $$(\"tnnt\").setValue(json[0].name);\r\n $$(\"mst\").setValue(json[0].tax_code);\r\n $$(\"dtlhe\").setValue(json[0].tel);\r\n $$(\"dctdtu\").setValue(json[0].email);\r\n $$(\"nlhe\").setValue(json[0].manage);\r\n } else {\r\n if (editmode == 2) icon = \"\";\r\n else icon = \"\";\r\n }\r\n\r\n webix.$$(\"head-icondksd\").setHTML(icon);\r\n webix.$$(\"head-icondksd\").refresh();\r\n },\r\n setValues: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n\r\n // item[\"tdlap\"] = removeTimeZoneT(item[\"tdlap\"]);\r\n form.setValues(item);\r\n\r\n // if (editmode == 2) {\r\n\r\n // }\r\n\r\n var tableDetail = webix.$$(\"danhsach_chukyso\");\r\n var url = app.config.host + \"/Invoice68/GetDataDangkysudungDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n },\r\n // $oninit: function (view, $scope) {\r\n // var url = app.config.host + \"/Invoice68/getDangkysudung\";\r\n\r\n // webix.ajax(url, function (text) {\r\n // var json = JSON.parse(text);\r\n\r\n // $$(\"dangkysudung\").setValues(json);\r\n // $$(\"danhsach_chukyso\").parse(json[\"data\"]);\r\n // });\r\n // }\r\n };\r\n});\r\n\ndefine('views/68_dangkysudung_cthue_THCN',[\"app\", \"locale\", \"models/user\", \"views/forms/68_dangkysudung_thue_TNCN\", \"views/forms/68_hoadon_history\"], function (app, _, user, dangkysudung, hoadonHistory) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Đăng ký/ Thay đổi thông tin SD CTTNCN\",\r\n details: \"Đăng ký/ Thay đổi thông tin SD CTTNCN\",\r\n });\r\n\r\n var initUI = function () {\r\n //var windowno = app.path[1].params[0];\r\n //var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetDataDkysdung01\";\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n //console.log(JSON.stringify(array));\r\n }\r\n }\r\n url = url + \"<khai=3\";\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dangkysudung.$ui);\r\n dangkysudung.setEditMode(1);\r\n\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu đăng ký cần sửa ! \", \"error\");\r\n return;\r\n }\r\n // if (selectedItem.trang_thai == 1) {\r\n // webix.message(\"Đã gửi CQT không thể sửa\", \"error\");\r\n // return;\r\n // }\r\n var detailForm = this.$scope.ui(dangkysudung.$ui);\r\n\r\n dangkysudung.setEditMode(2);\r\n dangkysudung.setValues(selectedItem);\r\n\r\n if (selectedItem.trang_thai == 1) {\r\n var form = $$(\"dangkysudung\").elements;\r\n for (var key in form) {\r\n var $el = form[key];\r\n $el.define(\"readonly\", \"true\");\r\n $el.define(\"css\", \"mcls_readonly_text\");\r\n $el.refresh();\r\n }\r\n\r\n // $$(\"btnDKSDSave\").destructor();\r\n $$(\"btnDKSDSave1\").destructor();\r\n }\r\n\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu đăng ký ! \", \"error\");\r\n return;\r\n }\r\n\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Thông báo đã được ký. Bạn không thể thực hiện chức năng này ! \", \"error\");\r\n return;\r\n }\r\n selectedItem.editmode = 3;\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/deleteMau01\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n table.remove(selectedItem.id);\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Ký (F7)\") + \"\",\r\n id: \"btnPreview\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var tableDK = webix.$$(\"dangkysudung01Views\");\r\n var selectedItem = tableDK.getSelectedItem();\r\n\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu đăng ký ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Mẫu đã được ký, bạn không thể ký lại ! \", \"error\");\r\n return;\r\n }\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n mau01_id: selectedItem.id,\r\n };\r\n\r\n if (postData.mau01_id == undefined || postData.mau01_id == \"\") {\r\n webix.message(\"Bạn chưa ghi dữ liệu, không thể ký !\", \"error\");\r\n return;\r\n } else {\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignDangkysudung\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n } else {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n app.callEvent(\"dataChangeDangkysudung68\", [1, null]);\r\n\r\n webix.message(\"Ký thành công!\", \"success\");\r\n }\r\n },\r\n });\r\n\r\n // return;\r\n }\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"dangkysudung01Views\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n // ký HSM\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n mau01_id: selectedItem.id,\r\n };\r\n\r\n var url = app.config.host + \"/Invoice68/SignDangkysudung_HSM\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, postData, function (text) {\r\n var res = JSON.parse(text);\r\n\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n webix.message(\"Đã thực hiện xong\");\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n } else {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlMau01?id=\" + selectedItem.id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, selectedItem]).then(function (results) {\r\n // webix.extend(tblInvoice, webix.ProgressBar);\r\n // tblInvoice.disable();\r\n // tblInvoice.showProgress();\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item.id,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMau01\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangeDangkysudung68\", [1, null]);\r\n\r\n webix.message(\"Ký thành công !\", \"success\");\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n }\r\n });\r\n }\r\n });\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"dangkysudung01Views\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.date_new) {\r\n // obj.date_new = new Date(obj.date_new);\r\n // }\r\n },\r\n },\r\n onClick: {\r\n dowloadXmlDKSD: function (event, cell, target) {\r\n var win = webix.$$(\"dangkysudung01Views\");\r\n var record = win.getItem(cell.row);\r\n if (record.trang_thai != 1) {\r\n webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n return;\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau01?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"Mau01.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n // return false; // here it blocks the default behavior\r\n },\r\n btndowloadXMLRep: function (event, cell, target) {\r\n var win = webix.$$(\"dangkysudung01Views\");\r\n var record = win.getItem(cell.row);\r\n if (record.ket_qua == null || record.ket_qua == \"\") {\r\n webix.message(\"Mẫu chưa được CQT trả về không thể tải !\", \"error\");\r\n return;\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau02?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"Mau02.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n // return false; // here it blocks the default behavior\r\n },\r\n btndowloadXMLRepTiepNhan: function (event, cell, target) {\r\n var win = webix.$$(\"dangkysudung01Views\");\r\n var record = win.getItem(cell.row);\r\n if (record.ketqua_tiepnhan == null || record.ketqua_tiepnhan == \"\") {\r\n webix.message(\"Mẫu chưa được CQT trả về không thể tải !\", \"error\");\r\n return;\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau03?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"Mau03.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n // return false; // here it blocks the default behavior\r\n },\r\n InMau01: function (event, cell, target) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var item = table.getItem(cell.row);\r\n\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMau01?id=\" + item.id + \"&type=PDF&loaitk=3\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n InMau02: function (event, cell, target) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var item = table.getItem(cell.row);\r\n\r\n if (item.ket_qua == 3) {\r\n webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMau02?id=\" + item.id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n InMau03: function (event, cell, target) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var item = table.getItem(cell.row);\r\n\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMau03?id=\" + item.id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"stt\",\r\n header: [{ text: \"Tờ khai Đăng ký/thay đổi thông tin sử dụng chứng từ khấu trừ thuế thu nhập cá nhân\", colspan: \"6\" }, \"STT\"],\r\n width: 40,\r\n },\r\n // {\r\n // id: \"mtdiep_gui\",\r\n // header: [\"\", \"Mã thông điệp\"],\r\n // width: 350,\r\n // },\r\n {\r\n id: \"ngay_gui\",\r\n header: [\"\", \"Ngày ký\"],\r\n width: 200,\r\n css: { \"text-align\": \"center\" },\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"nlap\",\r\n header: [\"\", \"Ngày lập\"],\r\n width: 200,\r\n css: { \"text-align\": \"center\" },\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"noi_dung\",\r\n header: [\"\", \"Nội dung\"],\r\n width: 250,\r\n },\r\n /*{\r\n id: \"btnMessagetn\",\r\n header: [\"\", \"Lịch sử xử lý\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n return \" \";\r\n },\r\n width: 180,\r\n },*/\r\n {\r\n id: \"btndowload\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.trang_thai == 1) {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },\r\n {\r\n id: \"btnInMau01\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.trang_thai == 1) {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },\r\n /*{\r\n id: \"nguoi_gui\",\r\n header: [\"\", \"Người gửi\"],\r\n width: 200,\r\n },*/\r\n /*{\r\n id: \"ketqua_tiepnhan\",\r\n header: [{ text: \"Mẫu 01/TB-TNĐT - Thông tin tiếp nhận tờ khai của Cơ quan Thuế\", colspan: \"5\" }, \"Kết quả\"],\r\n width: 300,\r\n template: function (obj) {\r\n if (obj.ketqua_tiepnhan == 1) {\r\n return \"Tiếp nhận tờ khai đăng ký \";\r\n } else {\r\n if (obj.ketqua_tiepnhan == 2) {\r\n return \"Không tiếp nhận tờ khai đăng ký \";\r\n } else {\r\n if (obj.ketqua_tiepnhan == 3) {\r\n return \"Tiếp nhận tờ khai đăng ký thay đổi \";\r\n } else {\r\n if (obj.ketqua_tiepnhan == 4) {\r\n return \"Không tiếp nhận tờ khai đăng ký thay đổi \";\r\n } else {\r\n if (obj.ketqua_tiepnhan == 0) {\r\n return \"Không tiếp nhận tờ khai đăng ký thay đổi \";\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n },\r\n {\r\n id: \"lydo_tiepnhan\",\r\n header: [\"\", \"Lý do\"],\r\n width: 300,\r\n },\r\n {\r\n id: \"ngay_tbao_tiepnhan\",\r\n header: [\"\", \"Ngày thông báo\"],\r\n width: 200,\r\n css: { \"text-align\": \"center\" },\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"btndowloadXMLRepTiepNhan\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.ketqua_tiepnhan != null && obj.ketqua_tiepnhan != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },*/\r\n /*{\r\n id: \"btnInMau03\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.ketqua_tiepnhan != null && obj.ketqua_tiepnhan != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },*/\r\n // {\r\n // id: \"mtdiep_tiepnhan_cqt\",\r\n // header: [\"\", \"Mã thông điệp CQT\"],\r\n // width: 350,\r\n // },\r\n /*{\r\n id: \"ket_qua\",\r\n header: [{ text: \"Mẫu 01/TB-ĐKĐT - Thông tin chấp nhận Tờ khai của Cơ quan Thuế\", colspan: \"5\" }, \"Kết quả\"],\r\n width: 200,\r\n template: function (obj) {\r\n if (obj.ket_qua == 1) {\r\n return \"Chấp thuận \";\r\n } else {\r\n if (obj.ket_qua == 2) {\r\n return \"Không chấp thuận \";\r\n } else {\r\n if (obj.ket_qua == 3) {\r\n return \"Đã phản hồi kết quả \";\r\n } else {\r\n return \"Chờ phản hồi\";\r\n }\r\n }\r\n }\r\n },\r\n },\r\n {\r\n id: \"ly_do\",\r\n header: [\"\", \"Lý do\"],\r\n width: 300,\r\n },\r\n {\r\n id: \"ngay_tbao\",\r\n header: [\"\", \"Ngày thông báo\"],\r\n width: 200,\r\n css: { \"text-align\": \"center\" },\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"btndowloadXMLRep\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.ket_qua != null && obj.ket_qua != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },\r\n {\r\n id: \"btnInMau02\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.ket_qua != null && obj.ket_qua != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },*/\r\n // {\r\n // id: \"mtdiep_cqt\",\r\n // header: [\"\", \"Mã thông điệp CQT\"],\r\n // width: 350,\r\n // },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n webix.extend(view, webix.ProgressBar);\r\n $scope.on(app, \"dataChangeDangkysudung68\", function (mode, item) {\r\n if (mode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (mode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_dangkysudung',[\"app\", \"locale\", \"models/user\", \"views/modules/minvoiceplugin\"], function (app, _, user, plugin) {\r\n \r\n\r\n webix.$$(\"title\").parse({ title: \"Đăng ký sử dụng\", details: \"Đăng ký sử dụng\" });\r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n //view: \"toolbar\",\r\n // css: { \"box-shadow\": \"0 -2px #3498db inset !important\", \"background\": \"#ffffff !important\" },\r\n //css: { \"background\": \"#e6f2ff !important\" },\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-icondksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formdksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Đăng ký/thay đổi thông tin sử dụng hóa đơn điện tử
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_dksdForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n // var form = webix.$$(\"window-form\");\r\n // hint_form(form.config.hint);\r\n },\r\n },\r\n ],\r\n },\r\n id: \"dangkysudungForms\",\r\n resize: true,\r\n fullscreen: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () {},\r\n },\r\n body: {\r\n view: \"form\",\r\n id: \"dangkysudung\",\r\n // width: 1500,\r\n position: \"center\",\r\n // autowidth:true,\r\n paddingY: 10,\r\n paddingX: 15,\r\n complexData: true,\r\n scroll: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n cols: [\r\n {\r\n view: \"radio\",\r\n id: \"loai\",\r\n name: \"loai\",\r\n width: 200,\r\n value: 1,\r\n options: [\r\n { id: 1, value: \"Đăng ký\" }, // the initially selected item\r\n { id: 2, value: \"Thay đổi\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"header\").define(\"template\", \"
TỜ KHAI
THAY ĐỔI THÔNG TIN SỬ DỤNG HÓA ĐƠN ĐIỆN TỬ
\");\r\n $$(\"header\").refresh();\r\n } else {\r\n $$(\"header\").define(\"template\", \"
TỜ KHAI
ĐĂNG KÝ THÔNG TIN SỬ DỤNG HÓA ĐƠN ĐIỆN TỬ
\");\r\n $$(\"header\").refresh();\r\n }\r\n },\r\n },\r\n },\r\n {\r\n id: \"header\",\r\n template: \"
TỜ KHAI
ĐĂNG KÝ THÔNG TIN SỬ DỤNG HÓA ĐƠN ĐIỆN TỬ
\",\r\n borderless: true,\r\n height: 40,\r\n },\r\n ],\r\n },\r\n {\r\n paddingX: 40,\r\n rows: [\r\n {\r\n view: \"text\",\r\n label: \"Tên người nộp thuế: \",\r\n labelWidth: 150,\r\n name: \"tnnt\",\r\n id: \"tnnt\",\r\n required: true,\r\n invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n },\r\n {\r\n view: \"search\",\r\n label: \"Mã số thuế\",\r\n id: \"mst\",\r\n name: \"mst\",\r\n labelWidth: 150,\r\n required: true,\r\n invalidMessage: \"Mã số thuế không được để trống !\",\r\n on: {\r\n onSearchIconClick: function () {\r\n var mst = this.getValue();\r\n window.open(\"http://tracuunnt.gdt.gov.vn/tcnnt/mstdn.jsp?mst=\" + mst);\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"cqtqly\",\r\n view: \"combo\",\r\n name: \"cqtqly\",\r\n label: \"Cơ quan thuế quản lý: \",\r\n labelWidth: 150,\r\n options: {\r\n view: \"gridsuggest\",\r\n columnName: \"name\",\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00251\";\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n body: {\r\n columns: [{ id: \"name\", width: 350, header: \"name\" }],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n $$(\"mcqtqly\").setValue(obj[\"code\"]);\r\n $$(\"mcqtqly\").refresh();\r\n },\r\n },\r\n },\r\n required: true,\r\n invalidMessage: \"Cơ quan thuế quản lý không được để trống !\",\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Mã CQT quản lý: \",\r\n labelWidth: 150,\r\n name: \"mcqtqly\",\r\n id: \"mcqtqly\",\r\n required: true,\r\n invalidMessage: \"Mã cơ quan thuế quản lý không được để trống !\",\r\n attributes: { maxlength: 5 },\r\n readonly: true,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Địa danh: \",\r\n labelWidth: 80,\r\n name: \"ddanh\",\r\n id: \"ddanh\",\r\n required: true,\r\n invalidMessage: \"Địa danh không được để trống !\",\r\n attributes: { maxlength: 20 },\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Người liên hệ: \",\r\n labelWidth: 150,\r\n name: \"nlhe\",\r\n id: \"nlhe\",\r\n required: true,\r\n invalidMessage: \"Người liên hệ không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Điện thoại liên hệ: \",\r\n labelWidth: 150,\r\n name: \"dtlhe\",\r\n id: \"dtlhe\",\r\n required: true,\r\n invalidMessage: \"Địa chỉ không được để trống !\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Địa chỉ liên hệ: \",\r\n labelWidth: 150,\r\n name: \"dclhe\",\r\n id: \"dclhe\",\r\n required: true,\r\n invalidMessage: \"Địa chỉ không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Thư điện tử: \",\r\n labelWidth: 150,\r\n name: \"dctdtu\",\r\n id: \"dctdtu\",\r\n validate: webix.rules.isEmail,\r\n required: true,\r\n invalidMessage: \"Thư điện tử không hợp lệ !\",\r\n },\r\n ],\r\n },\r\n\r\n { height: 5 },\r\n ],\r\n },\r\n {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"label\",\r\n label: \"Theo nghị định số: 123/2020/NĐ-CP ngày 19 tháng 10 năm 2020 của Chính phủ, chúng tôi/tôi thuộc đối tượng sử dụng hóa đơn điện tử. Chúng tôi/tôi đăng ký/thay đổi thông tin đã đăng ký với cơ quan thuế về việc sử dụng hóa đơn điện tử như sau:\",\r\n },\r\n ],\r\n },\r\n { view: \"label\", label: \"1. Áp dụng hóa đơn điện tử:\" },\r\n {\r\n view: \"checkbox\",\r\n id: \"adhdcma\",\r\n name: \"adhdcma\",\r\n labelRight: \"Có mã của cơ quan thuế\",\r\n labelWidth: 0,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"htgdlhddtcma\").disable();\r\n $$(\"htgdlhddtcma\").setValue(0);\r\n $$(\"htgdlhddtcmkkhan\").disable();\r\n $$(\"htgdlhddtcmkkhan\").setValue(0);\r\n $$(\"htgdlhddtcmkcncao\").disable();\r\n $$(\"htgdlhddtcmkcncao\").setValue(0);\r\n\r\n $$(\"htgdlhddtkma\").disable();\r\n $$(\"htgdlhddtkma\").setValue(0);\r\n $$(\"htgdlhddtkmttiep\").disable();\r\n $$(\"htgdlhddtkmttiep\").setValue(0);\r\n $$(\"htgdlhddtkmtchuc\").disable();\r\n $$(\"htgdlhddtkmtchuc\").setValue(0);\r\n $$(\"hdbtscong\").enable();\r\n $$(\"hdbhdtqgia\").enable();\r\n $$(\"qlnhdon\").enable();\r\n }\r\n if (newv == 0) {\r\n if ($$(\"adhdmttcma\").getValue() != 1) {\r\n $$(\"htgdlhddtcma\").enable();\r\n $$(\"htgdlhddtcmkkhan\").enable();\r\n $$(\"htgdlhddtcmkcncao\").enable();\r\n \r\n $$(\"htgdlhddtkma\").enable();\r\n $$(\"htgdlhddtkmttiep\").enable();\r\n $$(\"htgdlhddtkmtchuc\").enable();\r\n }\r\n\r\n if ($$(\"adhdmttcma\").getValue() == 1 && $$(\"adhdkma\").getValue() != 1) {\r\n $$(\"hdbtscong\").disable();\r\n $$(\"hdbtscong\").setValue(0);\r\n $$(\"hdbhdtqgia\").disable();\r\n $$(\"hdbhdtqgia\").setValue(0);\r\n $$(\"qlnhdon\").disable();\r\n $$(\"qlnhdon\").setValue(0);\r\n }\r\n }\r\n\r\n if (newv == 1 && $$(\"adhdkma\").getValue() == 1) {\r\n $$(\"htgdlhddtcma\").enable();\r\n $$(\"htgdlhddtcmkkhan\").enable();\r\n $$(\"htgdlhddtcmkcncao\").enable();\r\n\r\n $$(\"htgdlhddtkma\").enable();\r\n $$(\"htgdlhddtkmttiep\").enable();\r\n $$(\"htgdlhddtkmtchuc\").enable();\r\n }\r\n\r\n if (newv == 0 && $$(\"adhdkma\").getValue() == 1 && $$(\"adhdmttcma\").getValue() != 1) {\r\n $$(\"htgdlhddtcma\").disable();\r\n $$(\"htgdlhddtcma\").setValue(0);\r\n $$(\"htgdlhddtcmkkhan\").disable();\r\n $$(\"htgdlhddtcmkkhan\").setValue(0);\r\n $$(\"htgdlhddtcmkcncao\").disable();\r\n $$(\"htgdlhddtcmkcncao\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"adhdkma\",\r\n name: \"adhdkma\",\r\n value: 1,\r\n labelRight: \"Không có mã của cơ quan thuế\",\r\n labelWidth: 0,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"htgdlhddtcma\").disable();\r\n $$(\"htgdlhddtcma\").setValue(0);\r\n $$(\"htgdlhddtcmkkhan\").disable();\r\n $$(\"htgdlhddtcmkkhan\").setValue(0);\r\n $$(\"htgdlhddtcmkcncao\").disable();\r\n $$(\"htgdlhddtcmkcncao\").setValue(0);\r\n $$(\"hdbtscong\").enable();\r\n $$(\"hdbhdtqgia\").enable();\r\n $$(\"qlnhdon\").enable();\r\n }\r\n\r\n if (newv == 0) {\r\n $$(\"htgdlhddtcma\").enable();\r\n $$(\"htgdlhddtcmkkhan\").enable();\r\n $$(\"htgdlhddtcmkcncao\").enable();\r\n if ($$(\"adhdmttcma\").getValue() == 1 && $$(\"adhdcma\").getValue() != 1) {\r\n $$(\"hdbtscong\").disable();\r\n $$(\"hdbtscong\").setValue(0);\r\n $$(\"hdbhdtqgia\").disable();\r\n $$(\"hdbhdtqgia\").setValue(0);\r\n $$(\"qlnhdon\").disable();\r\n $$(\"qlnhdon\").setValue(0);\r\n }\r\n }\r\n\r\n if (newv == 1 && ($$(\"adhdcma\").getValue() == 1 || $$(\"adhdmttcma\").getValue() == 1)) {\r\n $$(\"htgdlhddtcma\").enable();\r\n $$(\"htgdlhddtcmkkhan\").enable();\r\n $$(\"htgdlhddtcmkcncao\").enable();\r\n\r\n $$(\"htgdlhddtkma\").enable();\r\n $$(\"htgdlhddtkmttiep\").enable();\r\n $$(\"htgdlhddtkmtchuc\").enable();\r\n }\r\n\r\n if (newv == 0 && $$(\"adhdcma\").getValue() == 1) {\r\n $$(\"htgdlhddtcma\").disable();\r\n $$(\"htgdlhddtcma\").setValue(0);\r\n $$(\"htgdlhddtcmkkhan\").disable();\r\n $$(\"htgdlhddtcmkkhan\").setValue(0);\r\n $$(\"htgdlhddtcmkcncao\").disable();\r\n $$(\"htgdlhddtcmkcncao\").setValue(0);\r\n\r\n $$(\"htgdlhddtkma\").disable();\r\n $$(\"htgdlhddtkma\").setValue(0);\r\n $$(\"htgdlhddtkmttiep\").disable();\r\n $$(\"htgdlhddtkmttiep\").setValue(0);\r\n $$(\"htgdlhddtkmtchuc\").disable();\r\n $$(\"htgdlhddtkmtchuc\").setValue(0);\r\n }\r\n\r\n if (newv == 0 && $$(\"adhdmttcma\").getValue() == 1) {\r\n $$(\"htgdlhddtcma\").disable();\r\n $$(\"htgdlhddtcma\").setValue(0);\r\n $$(\"htgdlhddtcmkkhan\").disable();\r\n $$(\"htgdlhddtcmkkhan\").setValue(0);\r\n $$(\"htgdlhddtcmkcncao\").disable();\r\n $$(\"htgdlhddtcmkcncao\").setValue(0);\r\n\r\n $$(\"htgdlhddtkma\").disable();\r\n $$(\"htgdlhddtkma\").setValue(0);\r\n $$(\"htgdlhddtkmttiep\").disable();\r\n $$(\"htgdlhddtkmttiep\").setValue(0);\r\n $$(\"htgdlhddtkmtchuc\").disable();\r\n $$(\"htgdlhddtkmtchuc\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"adhdmttcma\",\r\n name: \"adhdmttcma\",\r\n value: 1,\r\n labelRight: \"Có mã khởi tạo từ máy tính tiền\",\r\n labelWidth: 0,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n if ($$(\"adhdkma\").getValue() != 1) {\r\n $$(\"htgdlhddtcma\").disable();\r\n $$(\"htgdlhddtcma\").setValue(0);\r\n $$(\"htgdlhddtcmkkhan\").disable();\r\n $$(\"htgdlhddtcmkkhan\").setValue(0);\r\n $$(\"htgdlhddtcmkcncao\").disable();\r\n $$(\"htgdlhddtcmkcncao\").setValue(0);\r\n \r\n $$(\"htgdlhddtkma\").disable();\r\n $$(\"htgdlhddtkma\").setValue(0);\r\n $$(\"htgdlhddtkmttiep\").disable();\r\n $$(\"htgdlhddtkmttiep\").setValue(0);\r\n $$(\"htgdlhddtkmtchuc\").disable();\r\n $$(\"htgdlhddtkmtchuc\").setValue(0);\r\n }\r\n\r\n if ($$(\"adhdcma\").getValue() != 1 && $$(\"adhdkma\").getValue() != 1) {\r\n $$(\"hdbtscong\").disable();\r\n $$(\"hdbtscong\").setValue(0);\r\n $$(\"hdbhdtqgia\").disable();\r\n $$(\"hdbhdtqgia\").setValue(0);\r\n $$(\"qlnhdon\").disable();\r\n $$(\"qlnhdon\").setValue(0);\r\n }\r\n }\r\n if (newv == 0 && $$(\"adhdkma\").getValue() == 1) {\r\n $$(\"htgdlhddtcma\").enable();\r\n $$(\"htgdlhddtcmkkhan\").enable();\r\n $$(\"htgdlhddtcmkcncao\").enable();\r\n\r\n $$(\"htgdlhddtkma\").enable();\r\n $$(\"htgdlhddtkmttiep\").enable();\r\n $$(\"htgdlhddtkmtchuc\").enable();\r\n\r\n $$(\"hdbtscong\").enable();\r\n $$(\"hdbhdtqgia\").enable();\r\n $$(\"qlnhdon\").enable();\r\n }\r\n\r\n if (newv == 1 && $$(\"adhdkma\").getValue() == 1) {\r\n $$(\"htgdlhddtcma\").enable();\r\n $$(\"htgdlhddtcmkkhan\").enable();\r\n $$(\"htgdlhddtcmkcncao\").enable();\r\n\r\n $$(\"htgdlhddtkma\").enable();\r\n $$(\"htgdlhddtkmttiep\").enable();\r\n $$(\"htgdlhddtkmtchuc\").enable();\r\n }\r\n\r\n if (newv == 0 && $$(\"adhdkma\").getValue() == 1 && $$(\"adhdcma\").getValue() != 1) {\r\n $$(\"htgdlhddtcma\").disable();\r\n $$(\"htgdlhddtcma\").setValue(0);\r\n $$(\"htgdlhddtcmkkhan\").disable();\r\n $$(\"htgdlhddtcmkkhan\").setValue(0);\r\n $$(\"htgdlhddtcmkcncao\").disable();\r\n $$(\"htgdlhddtcmkcncao\").setValue(0);\r\n }\r\n\r\n if (newv == 0 && $$(\"adhdkma\").getValue() == 0 && $$(\"adhdcma\").getValue() == 0) {\r\n $$(\"htgdlhddtcma\").enable();\r\n $$(\"htgdlhddtcmkkhan\").enable();\r\n $$(\"htgdlhddtcmkcncao\").enable();\r\n\r\n $$(\"htgdlhddtkma\").enable();\r\n $$(\"htgdlhddtkmttiep\").enable();\r\n $$(\"htgdlhddtkmtchuc\").enable();\r\n\r\n $$(\"hdbtscong\").enable();\r\n $$(\"hdbhdtqgia\").enable();\r\n $$(\"qlnhdon\").enable();\r\n }\r\n },\r\n },\r\n },\r\n { view: \"label\", id: \"label\", label: \"2. Hình thức gửi dữ liệu hóa đơn điện tử:\" },\r\n {\r\n view: \"checkbox\",\r\n id: \"htgdlhddtcma\",\r\n name: \"htgdlhddtcma\",\r\n labelRight: \"Trường hợp sử dụng hóa đơn điện tử có mã không phải trả tiền dịch vụ theo khoản 1 Điều 14 của nghị định:\",\r\n label: \"a. \",\r\n labelWidth: 10,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"htgdlhddtkma\").setValue(0);\r\n $$(\"htgdlhddtcma\").setValue(1);\r\n $$(\"htgdlhddtcmkkhan\").setValue(1);\r\n $$(\"htgdlhddtcmkcncao\").setValue(0);\r\n $$(\"htgdlhddtkmttiep\").setValue(0);\r\n $$(\"htgdlhddtkmtchuc\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"htgdlhddtcmkkhan\",\r\n name: \"htgdlhddtcmkkhan\",\r\n labelRight:\r\n \"Doanh nghiệp nhỏ và vừa, hợp tác xã, cá nhân kinh doanh tại địa bàn có điều kiện kinh tế xã hội khó khăn, địa bàn có điều kiện kinh tế xã hội đặc biệt khó khăn.\",\r\n labelWidth: 50,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"htgdlhddtkma\").setValue(0);\r\n $$(\"htgdlhddtcma\").setValue(1);\r\n $$(\"htgdlhddtcmkcncao\").setValue(0);\r\n $$(\"htgdlhddtcmkkhan\").setValue(1);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"htgdlhddtcmkcncao\",\r\n name: \"htgdlhddtcmkcncao\",\r\n labelRight:\r\n \"Doanh nghiệp nhỏ và vừa khác theo đề nghị của Ủy ban nhân dân tỉnh, thành phố trực thuộc trung ương gửi Bộ Tài chính trừ doanh nghiệp hoạt động tại các khu vực kinh tế, khu công nghiệp, khu công nghệ cao.\",\r\n labelWidth: 50,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"htgdlhddtkma\").setValue(0);\r\n $$(\"htgdlhddtcma\").setValue(1);\r\n $$(\"htgdlhddtcmkcncao\").setValue(1);\r\n $$(\"htgdlhddtcmkkhan\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"htgdlhddtkma\",\r\n name: \"htgdlhddtkma\",\r\n labelRight:\r\n \"Trường hợp sử dụng hóa đơn điện tử không có mã của cơ quan thuế: (Chú ý: Trường hợp sử dụng hóa đơn có mã của cơ quan thuế không cần chọn mục này, hệ thống của cơ quan thuế mặc định hiểu gửi thông tin qua tổ chức cung cấp dịch vụ) \",\r\n label: \"b. \",\r\n labelWidth: 10,\r\n value: 1,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"htgdlhddtkma\").setValue(1);\r\n $$(\"htgdlhddtcma\").setValue(0);\r\n $$(\"htgdlhddtcmkkhan\").setValue(0);\r\n $$(\"htgdlhddtcmkcncao\").setValue(0);\r\n $$(\"htgdlhddtkmttiep\").setValue(1);\r\n $$(\"htgdlhddtkmtchuc\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"htgdlhddtkmttiep\",\r\n name: \"htgdlhddtkmttiep\",\r\n labelRight: \"Chuyển dữ liệu hóa đơn điện tử trực tiếp đến cơ quan thuế (điểm b1, khoản 3, Điều 22 của Nghị định).\",\r\n labelWidth: 50,\r\n value: 1,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"htgdlhddtkma\").setValue(1);\r\n $$(\"htgdlhddtcma\").setValue(0);\r\n $$(\"htgdlhddtkmtchuc\").setValue(0);\r\n $$(\"htgdlhddtkmttiep\").setValue(1);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"htgdlhddtkmtchuc\",\r\n name: \"htgdlhddtkmtchuc\",\r\n labelRight: \"Thông qua tổ chức cung cấp dịch vụ hóa đơn điện tử (điểm b2, khoản 3, Điều 22 của Nghị định).\",\r\n labelWidth: 50,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"htgdlhddtkma\").setValue(1);\r\n $$(\"htgdlhddtcma\").setValue(0);\r\n $$(\"htgdlhddtkmtchuc\").setValue(1);\r\n $$(\"htgdlhddtkmttiep\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n\r\n { view: \"label\", label: \"3. Phương thức chuyển dữ liệu hóa đơn điện tử:\" },\r\n {\r\n view: \"checkbox\",\r\n id: \"ptcdlhdndthdon\",\r\n name: \"ptcdlhdndthdon\",\r\n labelRight: \"Chuyển đầy đủ nội dung từng hóa đơn\",\r\n value: 1,\r\n labelWidth: 50,\r\n // on: {\r\n // onChange: function (newv, oldv) {\r\n // if (newv == 1) {\r\n // $$(\"ptcdlhdndthdon\").setValue(1);\r\n // $$(\"ptcdlhdbthop\").setValue(0);\r\n // }\r\n // },\r\n // },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"ptcdlhdbthop\",\r\n name: \"ptcdlhdbthop\",\r\n labelRight: \"Chuyển theo bảng tổng hợp dữ liệu hóa đơn điện tử (điểm a1, khoản 3, Điều 22 của Nghị định)\",\r\n labelWidth: 50,\r\n // on: {\r\n // onChange: function (newv, oldv) {\r\n // if (newv == 1) {\r\n // $$(\"ptcdlhdndthdon\").setValue(0);\r\n // $$(\"ptcdlhdbthop\").setValue(1);\r\n // }\r\n // },\r\n // },\r\n },\r\n\r\n { view: \"label\", label: \"4. Loại hóa đơn sử dụng:\" },\r\n {\r\n view: \"checkbox\",\r\n id: \"hdgtgt\",\r\n name: \"hdgtgt\",\r\n labelRight: \"Hóa đơn GTGT\",\r\n value: 1,\r\n labelWidth: 50,\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"hdbhang\",\r\n name: \"hdbhang\",\r\n labelRight: \"Hóa đơn bán hàng\",\r\n labelWidth: 50,\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"hdbtscong\",\r\n name: \"hdbtscong\",\r\n labelRight: \"Hóa đơn bán tài sản công\",\r\n labelWidth: 50,\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"hdbhdtqgia\",\r\n name: \"hdbhdtqgia\",\r\n labelRight: \"Hóa đơn bán hàng dự trữ quốc gia\",\r\n labelWidth: 50,\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"hdkhac\",\r\n name: \"hdkhac\",\r\n labelRight: \"Hóa đơn khác (Tem, vé, thẻ, phiếu....)\",\r\n labelWidth: 50,\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"qlnhdon\",\r\n name: \"qlnhdon\",\r\n labelRight: \"Các chứng từ được in, phát hành, sử dụng và quản lý như hóa đơn (VD HĐ phiếu xuất kho,...)\",\r\n labelWidth: 50,\r\n },\r\n ],\r\n },\r\n {\r\n rows: [\r\n {\r\n view: \"label\",\r\n label: \"5. Danh sách chứng thư số sử dụng:\",\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n label: \" Thêm\",\r\n // width: 60,\r\n autowidth: true,\r\n icon: \"fas fa-plus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n \r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n \r\n var item = {\r\n stt: $$(\"danhsach_chukyso\").count() + 1,\r\n ttchuc: cert.issuer,\r\n seri: cert.cer_serial,\r\n tngay: cert.begin_date,\r\n dngay: cert.end_date,\r\n hthuc: \"1\",\r\n };\r\n $$(\"danhsach_chukyso\").add(item);\r\n return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetCTS_HSM_ToKhai\", function (result) {\r\n var ctsHSM = JSON.parse(result);\r\n\r\n if (ctsHSM.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: ctsHSM.error });\r\n } else {\r\n var item = {\r\n stt: $$(\"danhsach_chukyso\").count() + 1,\r\n ttchuc: ctsHSM.issuer,\r\n seri: ctsHSM.so_serial,\r\n tngay: ctsHSM.ngaybatdau,\r\n dngay: ctsHSM.ngayketthuc,\r\n hthuc: \"1\",\r\n };\r\n\r\n // $$(\"danhsach_chukyso\").clearAll();\r\n $$(\"danhsach_chukyso\").add(item);\r\n }\r\n });\r\n } else {\r\n var hub = plugin.hub();\r\n\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var callback = json.callback;\r\n\r\n if (callback == \"RegisterCert\") {\r\n var item = {\r\n stt: $$(\"danhsach_chukyso\").count() + 1,\r\n ttchuc: json.data.issuer,\r\n seri: json.data.so_serial,\r\n tngay: json.data.ngaybatdau,\r\n dngay: json.data.ngayketthuc,\r\n hthuc: \"1\",\r\n };\r\n\r\n // $$(\"danhsach_chukyso\").clearAll();\r\n $$(\"danhsach_chukyso\").add(item);\r\n }\r\n }\r\n });\r\n\r\n var arg = {\r\n callback: \"RegisterCert\",\r\n };\r\n\r\n hub.invoke(\"execCommand\", arg.callback, JSON.stringify(arg));\r\n }\r\n });\r\n }\r\n });\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n autowidth: true,\r\n label: \" Xóa\",\r\n // width: 60,\r\n icon: \"fas fa-minus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_chukyso\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n var editor = table.getEditState();\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_chukyso\",\r\n height: 250,\r\n name: \"danhsach_chukyso\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n tooltip: true,\r\n editable: true,\r\n scroll: true,\r\n fullscreen: true,\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n on: {},\r\n columns: [\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"ttchuc\",\r\n name: \"ttchuc\",\r\n header: \"Tên tổ chức cơ quan chứng thực/cấp/công nhận chữ ký số, chữ ký điện tử\",\r\n width: 450,\r\n },\r\n {\r\n id: \"seri\",\r\n name: \"seri\",\r\n header: \"Số sê-ri chứng thư số\",\r\n width: 300,\r\n },\r\n {\r\n id: \"tngay\",\r\n name: \"tngay\",\r\n header: [\r\n {\r\n text: \"Thời hạn sử dụng chứng thư số\",\r\n colspan: 2,\r\n },\r\n {\r\n text: \"Từ ngày\",\r\n },\r\n ],\r\n width: 200,\r\n //format: webix.i18n.dateFormatStr,\r\n },\r\n {\r\n id: \"dngay\",\r\n name: \"dngay\",\r\n header: [\r\n null,\r\n {\r\n text: \"Đến ngày\",\r\n },\r\n ],\r\n width: 200,\r\n //format: webix.i18n.dateFormatStr,\r\n },\r\n {\r\n id: \"hthuc\",\r\n name: \"hthuc\",\r\n header: \"Hình thức đăng ký ( Thêm mới, Gia hạn, ngừng sử dụng)\",\r\n fillspace: true,\r\n editor: \"combo\",\r\n options: [\r\n { id: \"1\", value: \"Thêm mới\" },\r\n { id: \"2\", value: \"Gia hạn\" },\r\n { id: \"3\", value: \"Ngừng sử dụng\" },\r\n ],\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n { height: 10 },\r\n {\r\n view: \"combo\",\r\n label: \"Loại đăng ký ủy nhiệm\",\r\n id: \"ldkunhiem\",\r\n name: \"ldkunhiem\",\r\n labelWidth: 150,\r\n options: [\r\n { id: 1, value: \"Ủy nhiệm\" },\r\n { id: 2, value: \"Nhận ủy nhiệm\" },\r\n ],\r\n width: 400,\r\n },\r\n { height: 10 },\r\n {\r\n rows: [\r\n {\r\n view: \"label\",\r\n label: \"6. Đăng ký ủy nhiệm lập hóa đơn:\",\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n label: \" Thêm\",\r\n // width: 60,\r\n autowidth: true,\r\n icon: \"fas fa-plus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var item = {\r\n stt: $$(\"danhsach_uynhiem\").count() + 1,\r\n tlhdunhiem: \"\",\r\n khmhdon: \"\",\r\n khhdunhiem: \"\",\r\n mstunhiem: \"\",\r\n ttcdunhiem: \"\",\r\n mdunhiem: \"\",\r\n thunhiem: \"\",\r\n tngay: new Date(),\r\n dngay: new Date(),\r\n pttthdunhiem: 1,\r\n ket_qua: 0,\r\n };\r\n // $$(\"danhsach_uynhiem\").clearAll();\r\n $$(\"danhsach_uynhiem\").add(item);\r\n\r\n $$(\"ldkunhiem\").define(\"required\", true);\r\n $$(\"ldkunhiem\").define(\"invalidMessage\", \"Loại đăng ký ủy nhiệm không được để trống !\");\r\n $$(\"ldkunhiem\").refresh();\r\n\r\n return;\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n autowidth: true,\r\n label: \" Xóa\",\r\n // width: 60,\r\n icon: \"fas fa-minus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_uynhiem\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n\r\n if (table.count() == 0) {\r\n $$(\"ldkunhiem\").define(\"required\", false);\r\n $$(\"ldkunhiem\").refresh();\r\n } else {\r\n $$(\"ldkunhiem\").define(\"required\", true);\r\n $$(\"ldkunhiem\").define(\"invalidMessage\", \"Loại đăng ký ủy nhiệm không được để trống !\");\r\n $$(\"ldkunhiem\").refresh();\r\n }\r\n\r\n return;\r\n }\r\n var editor = table.getEditState();\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n\r\n if (table.count() == 0) {\r\n $$(\"ldkunhiem\").define(\"required\", false);\r\n $$(\"ldkunhiem\").refresh();\r\n } else {\r\n $$(\"ldkunhiem\").define(\"required\", true);\r\n $$(\"ldkunhiem\").define(\"invalidMessage\", \"Loại đăng ký ủy nhiệm không được để trống !\");\r\n $$(\"ldkunhiem\").refresh();\r\n }\r\n\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_uynhiem\",\r\n height: 250,\r\n name: \"danhsach_uynhiem\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n tooltip: true,\r\n editable: true,\r\n scroll: true,\r\n fullscreen: true,\r\n scheme: {\r\n $init: function (obj) {\r\n obj.tngay = new Date(obj.tngay);\r\n obj.dngay = new Date(obj.dngay);\r\n },\r\n },\r\n on: {},\r\n columns: [\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"tlhdunhiem\",\r\n name: \"tlhdunhiem\",\r\n header: \"Tên loại hóa đơn ủy nhiệm\",\r\n width: 200,\r\n editor: \"text\",\r\n },\r\n {\r\n id: \"khmhdon\",\r\n name: \"khmhdon\",\r\n header: \"Ký hiệu mẫu hóa đơn\",\r\n width: 150,\r\n editor: \"text\",\r\n },\r\n {\r\n id: \"khhdunhiem\",\r\n name: \"khhdunhiem\",\r\n header: \"Ký hiệu hóa đơn ủy nhiệm\",\r\n width: 150,\r\n editor: \"text\",\r\n },\r\n {\r\n id: \"mstunhiem\",\r\n name: \"mstunhiem\",\r\n header: \"Mã số thuế\",\r\n width: 150,\r\n editor: \"text\",\r\n },\r\n {\r\n id: \"ttcdunhiem\",\r\n name: \"ttcdunhiem\",\r\n header: \"Tên tổ chức được ủy nhiệm\",\r\n width: 300,\r\n editor: \"text\",\r\n },\r\n {\r\n id: \"mdunhiem\",\r\n name: \"mdunhiem\",\r\n header: \"Mục đích ủy nhiệm\",\r\n width: 300,\r\n editor: \"text\",\r\n },\r\n {\r\n id: \"tngay\",\r\n name: \"tngay\",\r\n header: [\r\n {\r\n text: \"Thời hạn sử dụng chứng thư số\",\r\n colspan: 2,\r\n },\r\n {\r\n text: \"Từ ngày\",\r\n },\r\n ],\r\n width: 150,\r\n editor: \"date\",\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"dngay\",\r\n name: \"dngay\",\r\n header: [\r\n null,\r\n {\r\n text: \"Đến ngày\",\r\n },\r\n ],\r\n width: 150,\r\n editor: \"date\",\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"pttthdunhiem\",\r\n name: \"pttthdunhiem\",\r\n header: \"PTTT hóa đơn ủy nhiệm\",\r\n fillspace: true,\r\n editor: \"text\",\r\n //editor: \"combo\",\r\n // options: [\r\n // { id: 1, value: \"Tiền mặt\" },\r\n // { id: 2, value: \"Chuyển khoản\" },\r\n // { id: 3, value: \"Tiền mặt/Chuyển khoản\" },\r\n // { id: 4, value: \"Đối trừ công nợ\" },\r\n // { id: 5, value: \"Không thu tiền\" },\r\n // { id: 9, value: \"Khác\" },\r\n // ],\r\n width: 150,\r\n },\r\n {\r\n id: \"ket_qua\",\r\n name: \"ket_qua\",\r\n header: \"Kết quả\",\r\n fillspace: true,\r\n format: function (text) {\r\n var result = \"\";\r\n if (text == 0) {\r\n result = \"Chờ phản hồi\";\r\n } else if (text == 1) {\r\n result = \"Chấp nhận\";\r\n } else if (text == 2) {\r\n result = \"Không chấp nhận\";\r\n }\r\n return result;\r\n },\r\n width: 150,\r\n },\r\n ],\r\n rules: {\r\n tlhdunhiem: webix.rules.isNotEmpty,\r\n khmhdon: webix.rules.isNotEmpty,\r\n khhdunhiem: webix.rules.isNotEmpty,\r\n mstunhiem: webix.rules.isNotEmpty,\r\n ttcdunhiem: webix.rules.isNotEmpty,\r\n mdunhiem: webix.rules.isNotEmpty,\r\n tngay: webix.rules.isNotEmpty,\r\n dngay: webix.rules.isNotEmpty,\r\n pttthdunhiem: webix.rules.isNotEmpty,\r\n },\r\n ready: function () {\r\n var tableUyNhiem = webix.$$(\"danhsach_uynhiem\");\r\n if (tableUyNhiem.count() == 0) {\r\n $$(\"ldkunhiem\").define(\"required\", false);\r\n $$(\"ldkunhiem\").refresh();\r\n } else {\r\n $$(\"ldkunhiem\").define(\"required\", true);\r\n $$(\"ldkunhiem\").define(\"invalidMessage\", \"Loại đăng ký ủy nhiệm không được để trống !\");\r\n $$(\"ldkunhiem\").refresh();\r\n }\r\n },\r\n },\r\n ],\r\n },\r\n { height: 5 },\r\n {\r\n css: \"fixbottom\",\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Ghi (F10)\",\r\n id: \"btnDKSDSave1\",\r\n width: 150,\r\n align: \"center\",\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"dangkysudung\").getValues();\r\n var table = $$(\"dangkysudung\");\r\n\r\n if (table.validate()) {\r\n var cks = $$(\"danhsach_chukyso\").serialize();\r\n if (cks.length == 0) {\r\n webix.message(\"Bạn chưa đăng ký chữ ký số cho thông báo phát hành !\", \"error\");\r\n return;\r\n }\r\n if (!$$(\"danhsach_uynhiem\").validate()) {\r\n webix.message(\"Bạn chưa nhập đầy đủ thông tin ủy nhiệm hóa đơn !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: $$(\"danhsach_chukyso\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var uynhiems = [];\r\n uynhiems.push({ data: $$(\"danhsach_uynhiem\").serialize() });\r\n item[\"uynhiems\"] = uynhiems;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/dangkysudungSave\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangeDangkysudung68\", [editmode, null]);\r\n\r\n webix.message(\"Thành công !\", \"success\");\r\n webix.$$(\"dangkysudungForms\").close();\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 120,\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n webix.$$(\"dangkysudungForms\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n { height: 25 },\r\n ],\r\n },\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1) {\r\n icon = \"\";\r\n var result = webix\r\n .ajax()\r\n .sync()\r\n .get(app.config.host + \"/System/GetDmDvcsByUser\");\r\n var json = JSON.parse(result.response);\r\n\r\n $$(\"dclhe\").setValue(json[0].address);\r\n $$(\"tnnt\").setValue(json[0].name);\r\n $$(\"mst\").setValue(json[0].tax_code);\r\n $$(\"dtlhe\").setValue(json[0].tel);\r\n $$(\"dctdtu\").setValue(json[0].email);\r\n $$(\"nlhe\").setValue(json[0].manage);\r\n } else {\r\n if (editmode == 2) icon = \"\";\r\n else icon = \"\";\r\n }\r\n\r\n webix.$$(\"head-icondksd\").setHTML(icon);\r\n webix.$$(\"head-icondksd\").refresh();\r\n },\r\n setValues: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n\r\n // item[\"tdlap\"] = removeTimeZoneT(item[\"tdlap\"]);\r\n form.setValues(item);\r\n\r\n // if (editmode == 2) {\r\n\r\n // }\r\n\r\n var tableDetail = webix.$$(\"danhsach_chukyso\");\r\n var url = app.config.host + \"/Invoice68/GetDataDangkysudungDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n\r\n var tableUyNhiem = webix.$$(\"danhsach_uynhiem\");\r\n var urlUyNhiem = app.config.host + \"/Invoice68/GetDataDangkysudungUyNhiem?id=\" + item.id;\r\n tableUyNhiem.clearAll();\r\n tableUyNhiem.load(urlUyNhiem);\r\n },\r\n // $oninit: function (view, $scope) {\r\n // var url = app.config.host + \"/Invoice68/getDangkysudung\";\r\n\r\n // webix.ajax(url, function (text) {\r\n // var json = JSON.parse(text);\r\n\r\n // $$(\"dangkysudung\").setValues(json);\r\n // $$(\"danhsach_chukyso\").parse(json[\"data\"]);\r\n // });\r\n // }\r\n };\r\n});\r\n\ndefine('views/68_dangkysudung',[\"app\", \"locale\", \"models/user\", \"views/forms/68_dangkysudung\", \"views/forms/68_hoadon_history\"], function (app, _, user, dangkysudung, hoadonHistory) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Đăng ký/ Thay đổi thông tin SD HDDT\",\r\n details: \"Đăng ký/ Thay đổi thông tin SD HDDT\",\r\n });\r\n\r\n var initUI = function () {\r\n //var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetDataDkysdung01\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dangkysudung.$ui);\r\n dangkysudung.setEditMode(1);\r\n\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu đăng ký cần sửa ! \", \"error\");\r\n return;\r\n }\r\n // if (selectedItem.trang_thai == 1) {\r\n // webix.message(\"Đã gửi CQT không thể sửa\", \"error\");\r\n // return;\r\n // }\r\n var detailForm = this.$scope.ui(dangkysudung.$ui);\r\n\r\n dangkysudung.setEditMode(2);\r\n dangkysudung.setValues(selectedItem);\r\n\r\n if (selectedItem.trang_thai == 1) {\r\n var form = $$(\"dangkysudung\").elements;\r\n for (var key in form) {\r\n var $el = form[key];\r\n $el.define(\"readonly\", \"true\");\r\n $el.define(\"css\", \"mcls_readonly_text\");\r\n $el.refresh();\r\n }\r\n\r\n // $$(\"btnDKSDSave\").destructor();\r\n $$(\"btnDKSDSave1\").destructor();\r\n }\r\n\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu đăng ký ! \", \"error\");\r\n return;\r\n }\r\n\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Thông báo đã được ký và gửi CQT. Bạn không thể thực hiện chức năng này ! \", \"error\");\r\n return;\r\n }\r\n selectedItem.editmode = 3;\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/deleteMau01\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n table.remove(selectedItem.id);\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Ký và gửi CQT (F7)\") + \"\",\r\n id: \"btnPreview\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var tableDK = webix.$$(\"dangkysudung01Views\");\r\n var selectedItem = tableDK.getSelectedItem();\r\n\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu đăng ký ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Mẫu đã được ký và gửi đi, bạn không thể ký lại ! \", \"error\");\r\n return;\r\n }\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n mau01_id: selectedItem.id,\r\n };\r\n\r\n if (postData.mau01_id == undefined || postData.mau01_id == \"\") {\r\n webix.message(\"Bạn chưa ghi dữ liệu, không thể ký và gửi đi !\", \"error\");\r\n return;\r\n } else {\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignDangkysudung\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n } else {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n app.callEvent(\"dataChangeDangkysudung68\", [1, null]);\r\n\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n }\r\n },\r\n });\r\n\r\n // return;\r\n }\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"dangkysudung01Views\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") { // ký HSM\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n mau01_id: selectedItem.id\r\n };\r\n\r\n var url = app.config.host + \"/Invoice68/SignDangkysudung_HSM\";\r\n\r\n webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, postData, function (text) {\r\n var res = JSON.parse(text);\r\n\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n }\r\n else {\r\n webix.message(\"Đã thực hiện xong\");\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n }\r\n else {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlMau01?id=\" + selectedItem.id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, selectedItem]).then(function (results) {\r\n // webix.extend(tblInvoice, webix.ProgressBar);\r\n // tblInvoice.disable();\r\n // tblInvoice.showProgress();\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item.id,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMau01\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangeDangkysudung68\", [1, null]);\r\n\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n }\r\n });\r\n }\r\n });\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"dangkysudung01Views\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.date_new) {\r\n // obj.date_new = new Date(obj.date_new);\r\n // }\r\n },\r\n },\r\n onClick: {\r\n dowloadXmlDKSD: function (event, cell, target) {\r\n var win = webix.$$(\"dangkysudung01Views\");\r\n var record = win.getItem(cell.row);\r\n if (record.trang_thai != 1) {\r\n webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n return;\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau01?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"Mau01.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n // return false; // here it blocks the default behavior\r\n },\r\n btndowloadXMLRep: function (event, cell, target) {\r\n var win = webix.$$(\"dangkysudung01Views\");\r\n var record = win.getItem(cell.row);\r\n if (record.ket_qua == null || record.ket_qua == \"\") {\r\n webix.message(\"Mẫu chưa được CQT trả về không thể tải !\", \"error\");\r\n return;\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau02?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"Mau02.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n // return false; // here it blocks the default behavior\r\n },\r\n btndowloadXMLRepTiepNhan: function (event, cell, target) {\r\n var win = webix.$$(\"dangkysudung01Views\");\r\n var record = win.getItem(cell.row);\r\n if (record.ketqua_tiepnhan == null || record.ketqua_tiepnhan == \"\") {\r\n webix.message(\"Mẫu chưa được CQT trả về không thể tải !\", \"error\");\r\n return;\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau03?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"Mau03.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n // return false; // here it blocks the default behavior\r\n },\r\n InMau01: function (event, cell, target) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var item = table.getItem(cell.row);\r\n\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMau01?id=\" + item.id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n InMau02: function (event, cell, target) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var item = table.getItem(cell.row);\r\n\r\n if (item.ket_qua == 3) {\r\n webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMau02?id=\" + item.id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n InMau03: function (event, cell, target) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var item = table.getItem(cell.row);\r\n\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMau03?id=\" + item.id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"stt\",\r\n header: [{ text: \"Mẫu 01ĐKTK/HĐĐT - Tờ khai Đăng ký/thay đổi thông tin sử dụng HĐĐT\", colspan: \"6\" }, \"STT\"],\r\n width: 40,\r\n },\r\n // {\r\n // id: \"mtdiep_gui\",\r\n // header: [\"\", \"Mã thông điệp\"],\r\n // width: 350,\r\n // },\r\n {\r\n id: \"ngay_gui\",\r\n header: [\"\", \"Ngày gửi\"],\r\n width: 200,\r\n css: { \"text-align\": \"center\" },\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"noi_dung\",\r\n header: [\"\", \"Nội dung\"],\r\n width: 250,\r\n },\r\n {\r\n id: \"btnMessagetn\",\r\n header: [\"\", \"Lịch sử xử lý\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n return \" \";\r\n },\r\n width: 180,\r\n },\r\n {\r\n id: \"btndowload\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.trang_thai == 1) {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },\r\n {\r\n id: \"btnInMau01\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.trang_thai == 1) {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },\r\n {\r\n id: \"nguoi_gui\",\r\n header: [\"\", \"Người gửi\"],\r\n width: 200,\r\n },\r\n {\r\n id: \"ketqua_tiepnhan\",\r\n header: [{ text: \"Mẫu 01/TB-TNĐT - Thông tin tiếp nhận tờ khai của Cơ quan Thuế\", colspan: \"5\" }, \"Kết quả\"],\r\n width: 300,\r\n template: function (obj) {\r\n if (obj.ketqua_tiepnhan == 1) {\r\n return \"Tiếp nhận tờ khai đăng ký \";\r\n } else {\r\n if (obj.ketqua_tiepnhan == 2) {\r\n return \"Không tiếp nhận tờ khai đăng ký \";\r\n } else {\r\n if (obj.ketqua_tiepnhan == 3) {\r\n return \"Tiếp nhận tờ khai đăng ký thay đổi \";\r\n } else {\r\n if (obj.ketqua_tiepnhan == 4) {\r\n return \"Không tiếp nhận tờ khai đăng ký thay đổi \";\r\n } else {\r\n if (obj.ketqua_tiepnhan == 0) {\r\n return \"Không tiếp nhận tờ khai đăng ký thay đổi \";\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n },\r\n {\r\n id: \"lydo_tiepnhan\",\r\n header: [\"\", \"Lý do\"],\r\n width: 300,\r\n },\r\n {\r\n id: \"ngay_tbao_tiepnhan\",\r\n header: [\"\", \"Ngày thông báo\"],\r\n width: 200,\r\n css: { \"text-align\": \"center\" },\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"btndowloadXMLRepTiepNhan\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.ketqua_tiepnhan != null && obj.ketqua_tiepnhan != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },\r\n {\r\n id: \"btnInMau03\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.ketqua_tiepnhan != null && obj.ketqua_tiepnhan != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },\r\n // {\r\n // id: \"mtdiep_tiepnhan_cqt\",\r\n // header: [\"\", \"Mã thông điệp CQT\"],\r\n // width: 350,\r\n // },\r\n {\r\n id: \"ket_qua\",\r\n header: [{ text: \"Mẫu 01/TB-ĐKĐT - Thông tin chấp nhận Tờ khai của Cơ quan Thuế\", colspan: \"5\" }, \"Kết quả\"],\r\n width: 200,\r\n template: function (obj) {\r\n if (obj.ket_qua == 1) {\r\n return \"Chấp thuận \";\r\n } else {\r\n if (obj.ket_qua == 2) {\r\n return \"Không chấp thuận \";\r\n } else {\r\n if (obj.ket_qua == 3) {\r\n return \"Đã phản hồi kết quả \";\r\n } else {\r\n return \"Chờ phản hồi\";\r\n }\r\n }\r\n }\r\n },\r\n },\r\n {\r\n id: \"ly_do\",\r\n header: [\"\", \"Lý do\"],\r\n width: 300,\r\n },\r\n {\r\n id: \"ngay_tbao\",\r\n header: [\"\", \"Ngày thông báo\"],\r\n width: 200,\r\n css: { \"text-align\": \"center\" },\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"btndowloadXMLRep\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.ket_qua != null && obj.ket_qua != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },\r\n {\r\n id: \"btnInMau02\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.ket_qua != null && obj.ket_qua != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },\r\n // {\r\n // id: \"mtdiep_cqt\",\r\n // header: [\"\", \"Mã thông điệp CQT\"],\r\n // width: 350,\r\n // },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n webix.extend(view, webix.ProgressBar);\r\n $scope.on(app, \"dataChangeDangkysudung68\", function (mode, item) {\r\n if (mode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (mode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_lichsu_history',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n \r\n\r\n var hdon_id = \"\";\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-icondksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formdksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Lịch sử xử lý
\";\r\n },\r\n },\r\n ],\r\n },\r\n id: \"responseMessageForms\",\r\n resize: true,\r\n width: 1000,\r\n height: 500,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () {},\r\n },\r\n body: {\r\n view: \"form\",\r\n id: \"message\",\r\n // width: 1500,\r\n position: \"center\",\r\n // autowidth:true,\r\n paddingY: 10,\r\n paddingX: 15,\r\n complexData: true,\r\n scroll: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n // id: \"header\",\r\n template: \"
LỊCH SỬ XỬ LÝ
\",\r\n borderless: true,\r\n height: 40,\r\n },\r\n { height: 3 },\r\n {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_history\",\r\n // height: 250,\r\n //name: \"danhsach_history\",\r\n // select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n tooltip: true,\r\n editable: true,\r\n select: \"cell\",\r\n scroll: true,\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n url:{\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n // var hdon_id = \"87de11a4-0b4e-42d4-a86c-45ba10b80337\";\r\n if(hdon_id != \"\"){\r\n var url = app.config.host + \"/Invoice68/GetHistoryTruyenNhan_ChiTiet?id=\" + hdon_id;\r\n webix.ajax(url, callback, view);\r\n }\r\n }\r\n },\r\n onClick: {\r\n dowloadXmlDKSD: function (event, cell, target) {\r\n var win = webix.$$(\"danhsach_history\");\r\n var record = win.getItem(cell.row);\r\n var file = new Blob([record.xml_thongdiep], {type: \"application/xml\"});\r\n webix.html.download(file, \"file.xml\");\r\n }\r\n },\r\n columns: [\r\n {\r\n id: \"tg_gui\",\r\n header: [\"
Thời gian gửi
\"],\r\n // template: function (obj, common) {\r\n // console.log(obj.tthdon);\r\n // return \"\" + obj.ttthdon + \"\";\r\n // },\r\n width: 250,\r\n format: function (text) {\r\n var test = new Date(text);\r\n if(test !== null && test !== 'null') {\r\n var format = webix.Date.dateToStr(\"%d-%m-%Y %H:%i:%s\");\r\n text = removeTimeZoneT(test);\r\n return format(text);\r\n }\r\n return '';\r\n },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"mngui_ft\",\r\n header: [\"
Mã nơi gửi
\"],\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"mltdiep_gui\",\r\n header: [\"
Mã loại thông điệp
\"],\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"mtdiep_gui\",\r\n header: [\"
Mã thông điệp
\"],\r\n width: 300,\r\n columnType: \"xml\",\r\n },{\r\n\r\n id: \"mtdiep_thamchieu\",\r\n header: [\"
Mã thông điệp tham chiếu
\"],\r\n width: 300,\r\n columnType: \"xml\",\r\n },\r\n {\r\n id: \"xml_thongdiep\",\r\n header: [\"
Xml thông điệp
\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n return \" \";\r\n },\r\n width: 120,\r\n },\r\n {\r\n id: \"mnnhan\",\r\n header: [\"
Mã nơi nhận
\"],\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"tg_nhan\",\r\n header: [\"
Thời gian nhận
\"],\r\n width: 250,\r\n format: function (text) {\r\n var test = new Date(text);\r\n var format = webix.Date.dateToStr(\"%d-%m-%Y %H:%i:%s\");\r\n text = removeTimeZoneT(test);\r\n return format(text);\r\n },\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"vendor\",\r\n header: [\"
Tên giải pháp
\"],\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"mngui\",\r\n header: [\"
Mã số thuế
\"],\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n }\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n id: \"btnHuyHDDT\",\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 120,\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n hdon_id = \"\";\r\n webix.$$(\"responseMessageForms\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n setEditMode: function (id) {\r\n hdon_id = id;\r\n var table = $$(\"danhsach_history\");\r\n table.load(table.config.url);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_hoadon_history_view',[\"app\", \"locale\", \"models/user\", \"views/forms/68_lichsu_history\"], function (app, _, user, hoadonHistory) {\r\n \r\n webix.$$(\"title\").parse({ title: \"Lịch sử truyền nhận\", details: \"Lịch sử truyền nhận\" });\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"truyenhanview\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n scroll: true,\r\n //autowidth: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetHistoryTruyenNhan\";\r\n\r\n var tlbParams = $$(\"param\");\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch;\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count;\r\n }\r\n\r\n var tlbParams = $$(\"param\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n var format = webix.Date.dateToStr(\"%Y-%m-%d\");\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n // console.log(child);\r\n var id = child.config.id;\r\n //var value_field = child.config.value_field;\r\n switch (id) {\r\n case \"filter\":\r\n url = url + \"&filter=\" + $$(id).getValue();\r\n break;\r\n case \"tggui_tu\":\r\n url = url + \"&tggui_tu=\" + format($$(id).getValue());\r\n break;\r\n case \"tggui_den\":\r\n url = url + \"&tggui_den=\" + format($$(id).getValue());\r\n break;\r\n case \"check_error\":\r\n url = url + \"&check_error=\" + $$(id).getValue();\r\n break;\r\n }\r\n }\r\n }\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n onClick: {\r\n dowloadXmlDKSD: function (event, cell, target) {\r\n var win = webix.$$(\"truyenhanview\");\r\n var record = win.getItem(cell.row);\r\n var file = new Blob([record.xml_thongdiep], { type: \"application/xml\" });\r\n webix.html.download(file, \"file.xml\");\r\n },\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"truyenhanview\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var record = table.getItem(cell.row);\r\n var historyid = record.reg_id;\r\n hoadonHistory.setEditMode(historyid);\r\n win.show();\r\n },\r\n /*ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"truyenhanview\");\r\n var record = win.getItem(cell.row);\r\n var historyid = record.reg_id;\r\n hoadonHistory.setEditMode(historyid);\r\n hoadonHistory.show();\r\n },*/\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n { id: \"stt\", header: \"STT\", width: 50 },\r\n {\r\n id: \"tg_gui\",\r\n header: [\"
Thời gian gửi
\"],\r\n // template: function (obj, common) {\r\n // console.log(obj.tthdon);\r\n // return \"\" + obj.ttthdon + \"\";\r\n // },\r\n width: 250,\r\n format: function (text) {\r\n var test = new Date(text);\r\n if (test !== null && test !== \"null\") {\r\n var format = webix.Date.dateToStr(\"%d-%m-%Y %H:%i:%s\");\r\n text = removeTimeZoneT(test);\r\n return format(text);\r\n }\r\n return \"\";\r\n },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"mngui_ft\",\r\n header: [\"
Mã nơi gửi
\"],\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"btnMessagetn\",\r\n header: \"Lịch sử\",\r\n template: function (obj) {\r\n return \" \";\r\n },\r\n width: 120,\r\n },\r\n {\r\n id: \"mltdiep_gui\",\r\n header: [\"
Mã loại thông điệp
\"],\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"mtdiep_gui\",\r\n header: [\"
Mã thông điệp
\"],\r\n width: 300,\r\n columnType: \"xml\",\r\n },\r\n {\r\n id: \"mtdiep_thamchieu\",\r\n header: [\"
Mã thông điệp tham chiếu
\"],\r\n width: 300,\r\n columnType: \"xml\",\r\n },\r\n {\r\n id: \"xml_thongdiep\",\r\n header: [\"
Xml thông điệp
\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n return \" \";\r\n },\r\n width: 120,\r\n },\r\n {\r\n id: \"mnnhan\",\r\n header: [\"
Mã nơi nhận
\"],\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"tg_nhan\",\r\n header: [\"
Thời gian nhận
\"],\r\n width: 250,\r\n format: function (text) {\r\n var test = new Date(text);\r\n if (test !== null && test !== \"null\") {\r\n var format = webix.Date.dateToStr(\"%d-%m-%Y %H:%i:%s\");\r\n text = removeTimeZoneT(test);\r\n return format(text);\r\n }\r\n return \"\";\r\n },\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"vendor\",\r\n header: [\"
Tên giải pháp
\"],\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"mngui\",\r\n header: [\"
Mã số thuế
\"],\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n // cols: [\r\n // {\r\n // view: \"icon\",\r\n // icon: \"fas fa-question-circle\",\r\n // id: \"help_form_main\",\r\n // tooltip: _(\"HELPER\"),\r\n // css: \"helper\",\r\n // click: function () {\r\n // webix.alert({\r\n // title: \"Thông báo !\",\r\n // text: \"Bạn chưa khai báo hướng dẫn nhanh cho màn hình này !\",\r\n // type: \"alert-warning\",\r\n // callback: function (result) {},\r\n // });\r\n // },\r\n // },\r\n // {\r\n // view: \"combo\",\r\n // label: _(\"MENU_QUICK\"),\r\n // id: \"QuickMenuMain\",\r\n // hide: true,\r\n // options: {\r\n // // view: \"gridsuggest\",\r\n // // id: \"grid_window\",\r\n // // template: \"#name#\",\r\n // // body: {\r\n // // scroll: true,\r\n // // autoheight: false,\r\n // // columns: [\r\n // // { id: \"window_id\", header: \"Window Id\", editor: \"text\", width: 100 },\r\n // // { id: \"name\", header: \"Window Name\", editor: \"text\", width: 400 }\r\n // // ],\r\n // // url: app.config.host + \"/System/GetQuickMenu\"\r\n // // },\r\n // // on: {\r\n // // onValueSuggest: function (obj) {\r\n // // var start = obj.window_id != \"\" ? obj.code + \":\" + obj.window_id : obj.code;\r\n // // window.location.hash = \"!/app/\" + start;\r\n // // $$(\"QuickMenu\").setValue(null);\r\n // // }\r\n // // }\r\n // },\r\n // on: {\r\n // onChange: function (newv, oldv) {},\r\n // },\r\n // },\r\n // {},\r\n // {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n // },\r\n // ],\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n id: \"param\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"filter\",\r\n view: \"text\",\r\n label: \"TK nhanh\",\r\n width: 350,\r\n // value_field: item.value_field,\r\n // isDefault: item.has_default,\r\n },\r\n {\r\n id: \"tggui_tu\",\r\n view: \"datepicker\",\r\n label: \"Gửi từ\",\r\n width: 200,\r\n // value_field: item.value_field,\r\n // isDefault: item.has_default,\r\n },\r\n {\r\n id: \"tggui_den\",\r\n view: \"datepicker\",\r\n label: \"đến\",\r\n width: 200,\r\n // value_field: item.value_field,\r\n // isDefault: item.has_default,\r\n },\r\n {\r\n id: \"check_error\",\r\n view: \"checkbox\",\r\n label: \"TĐ lỗi\",\r\n width: 120,\r\n // value_field: item.value_field,\r\n // isDefault: item.has_default,\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: '' + _(\"Refresh\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"truyenhanview\");\r\n table.clearAll();\r\n var tlbParams = $$(\"param\");\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n // console.log(child);\r\n var id = child.config.id;\r\n if (id === \"filter\" || id === \"tggui_tu\" || id === \"tggui_den\" || id === \"check_error\") {\r\n $$(id).setValue(null);\r\n }\r\n //var value_field = child.config.value_field;\r\n }\r\n }\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: '' + _(\"Tìm kiếm\") + \"\",\r\n id: \"btnTimKiem\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"truyenhanview\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n };\r\n});\r\n\ndefine('views/forms/68_invoiceForms_code',[\"app\", \"locale\", \"models/user\", \"views/commonHD\"], function (app, _, user, commonHD) {\r\n var editmode = 0;\r\n var mau04 = {};\r\n var formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n };\r\n function f(a) {\r\n return webix.Number.format(a, formatSoDefault);\r\n }\r\n function g(a) {\r\n return webix.Number.parse(a, formatSoDefault);\r\n }\r\n /*function fmNumber(a){\r\n if(a !== undefined)\r\n return f(a);\r\n return a;\r\n };*/\r\n var fmNumber = {\r\n parse: function (a) {\r\n return g(a);\r\n },\r\n edit: function (a) {\r\n if (a !== undefined) return f(a);\r\n return a;\r\n },\r\n };\r\n\r\n var mess = \"Tổng tiền chiết khấu lớn hơn tổng tiền hàng hóa thông thương trên hóa đơn. Vui lòng lập riêng hóa đơn chiết khấu mới.\";\r\n\r\n function renderFormat(val) {\r\n if (val === undefined) val = \"VND\";\r\n var url = app.config.host + \"/Invoice68/GetDecimalPlace?ma_nt=\" + val;\r\n var table_chitiet = webix.$$(\"hoadon68_chitiet\");\r\n var table_phi = webix.$$(\"hoadon68_phi\");\r\n var table = $$(\"invoiceForms\");\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var arr = JSON.parse(text);\r\n var decimal_place = Array(Number(arr[0][\"hoadon123\"]) + 1).join(\"9\");\r\n var decimal_format = Number(arr[0][\"hoadon123\"]);\r\n var format_numeric = {\r\n maximumValue: Number(\"999999999999.\" + decimal_place),\r\n minValue: Number(\"-999999999999.\" + decimal_place),\r\n decimalPlaces: Number(decimal_format),\r\n };\r\n formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimal_format,\r\n };\r\n\r\n var formatSo = webix.Number.numToStr(formatSoDefault);\r\n\r\n var arrayString_chitiet = [\"sluong\", \"dgia\", \"thtien\", \"stckhau\", \"tthue\", \"tgtien\"];\r\n for (var i = 0; i < arrayString_chitiet.length; i++) {\r\n var format_config = table_chitiet.getColumnConfig(arrayString_chitiet[i]);\r\n\r\n format_config.format = formatSo;\r\n\r\n format_config.numericConfig = format_numeric;\r\n }\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n\r\n var format_config_phi = table_phi.getColumnConfig(\"tienphi\");\r\n format_config_phi.format = formatSo;\r\n format_config_phi.numericConfig = format_numeric;\r\n\r\n table_chitiet.refreshColumns();\r\n table_phi.refreshColumns();\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n $$(arrayString[i]).refresh();\r\n }\r\n });\r\n }\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n //view: \"toolbar\",\r\n // css: { \"box-shadow\": \"0 -2px #3498db inset !important\", \"background\": \"#ffffff !important\" },\r\n //css: { \"background\": \"#e6f2ff !important\" },\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-iconInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Hóa đơn 01GTGT
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_InvoiceForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n // var form = webix.$$(\"window-form\");\r\n // hint_form(form.config.hint);\r\n },\r\n },\r\n ],\r\n },\r\n id: \"invoice68\",\r\n resize: true,\r\n fullscreen: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () {},\r\n },\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 100 },\r\n view: \"form\",\r\n id: \"invoiceForms\",\r\n width: 800,\r\n height: 500,\r\n complexData: true,\r\n margin: 0,\r\n on: {\r\n // onViewShow: function () {\r\n // }\r\n },\r\n elements: [\r\n {\r\n view: \"scrollview\",\r\n scroll: \"y\",\r\n body: {\r\n paddingX: 18,\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin hóa đơn\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n { view: \"text\", label: \"cctbao_id\", id: \"cctbao_id\", name: \"cctbao_id\", hidden: true },\r\n {\r\n view: \"datepicker\",\r\n name: \"nlap\",\r\n label: \"Ngày hóa đơn\",\r\n //labelPosition: \"top\",\r\n id: \"nlap\",\r\n required: true,\r\n // css: \"mcls_readonly_text\",\r\n // readonly: true,\r\n },\r\n {\r\n view: \"text\",\r\n name: \"shdon\",\r\n id: \"shdon\",\r\n label: \"Số HĐ\",\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: _(\"Ký hiệu\"),\r\n name: \"khieu\",\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n id: \"khieu\",\r\n // type:\"number\",\r\n attributes: { maxlength: 7 },\r\n },\r\n {\r\n view: \"text\",\r\n label: _(\"Số đơn hàng\"),\r\n name: \"sdhang\",\r\n id: \"sdhang\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"combo\",\r\n name: \"dvtte\",\r\n label: \"Mã tiền tệ\",\r\n //labelPosition: \"top\",\r\n id: \"dvtte\",\r\n required: true,\r\n value: \"VND\",\r\n invalidMessage: \"Trạng thái hóa đơn không thể bỏ trống !\",\r\n options: {\r\n view: \"gridsuggest\",\r\n value: \"VND\",\r\n template: \"#value#\",\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00188\",\r\n body: {\r\n columns: [{ id: \"value\", header: _(\"Mã tiền tệ\"), width: 120 }],\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) {\r\n this.load(this.config.url);\r\n return;\r\n }\r\n\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00188\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n },\r\n on: {\r\n onChange: function (newv, oldv) {\r\n commonHD.renderFormat(newv);\r\n var type_curency = $$(\"dvtte\").getValue();\r\n\r\n if (type_curency != \"VND\") {\r\n $$(\"docngoaitetv\").show();\r\n $$(\"docngoaitetv\").setValue(1);\r\n } else {\r\n $$(\"docngoaitetv\").hide();\r\n }\r\n\r\n commonHD.ExeCuteCheckReadCurencyTV($$(\"docngoaitetv\").getValue());\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"docngoaitetv\",\r\n name: \"docngoaitetv\",\r\n value: 0,\r\n labelRight: _(\"Đọc ngoại tệ Tiếng Việt\"),\r\n labelWidth: 2,\r\n width: 180,\r\n hidden: true,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n commonHD.ExeCuteCheckReadCurencyTV(newv);\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Tỷ giá\",\r\n type: \"number\",\r\n value: 1,\r\n name: \"tgia\",\r\n id: \"tgia\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == undefined) return;\r\n if (newv == \"\") return;\r\n if (!webix.rules.isNumber(newv)) {\r\n webix.message(\"Tỷ giá phải nhập số\", \"error\");\r\n this.focus();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"combo\",\r\n name: \"htttoan\",\r\n label: \"HT thanh toán\",\r\n //labelPosition: \"top\",\r\n value: \"đồng\",\r\n id: \"htttoan\",\r\n value: \"Tiền mặt/Chuyển khoản\",\r\n options: {\r\n view: \"gridsuggest\",\r\n template: \"#name#\",\r\n value: \"Tiền mặt/Chuyển khoản\",\r\n body: {\r\n scroll: true,\r\n autoheight: false,\r\n columns: [\r\n // { id: \"id\", header: _(\"MS_THUE\"), width: 150 },\r\n { id: \"code\", header: _(\"Mã ngoại tệ\"), width: 150 },\r\n { id: \"name\", header: _(\"Tên ngoại tệ\"), width: 550 },\r\n ],\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00252\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00252\",\r\n },\r\n on: {},\r\n },\r\n {\r\n cols: [\r\n { view: \"text\", label: _(\"STK người bán\"), name: \"stknban\", id: \"stknban\" },\r\n { view: \"text\", label: _(\"Ngân hàng\"), name: \"tnhban\", id: \"tnhban\" },\r\n ],\r\n },\r\n {},\r\n ],\r\n },\r\n },\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin khách hàng\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n editor: \"textsearch\",\r\n label: \"Mã khách hàng\",\r\n id: \"mnmua\",\r\n name: \"mnmua\",\r\n suggest: {\r\n view: \"gridsuggest\",\r\n columnName: \"code\",\r\n body: {\r\n columns: [\r\n { id: \"id\", hidden: true, header: \"id\" },\r\n { id: \"code\", width: 120, header: \"code\" },\r\n { id: \"name\", width: 350, header: \"name\" },\r\n ],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00002\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n var table = $$(\"invoiceForms\");\r\n var selectedItem = $$(\"invoiceForms\").getValues();\r\n\r\n selectedItem[\"mnmua\"] = obj[\"code\"];\r\n selectedItem[\"tnmua\"] = obj[\"buyer_name\"];\r\n selectedItem[\"ten\"] = obj[\"name\"];\r\n selectedItem[\"dchi\"] = obj[\"address\"];\r\n selectedItem[\"mst\"] = obj[\"tax_code\"];\r\n selectedItem[\"email\"] = obj[\"email\"];\r\n selectedItem[\"stknmua\"] = obj[\"bank_account\"];\r\n table.setValues(selectedItem);\r\n },\r\n },\r\n },\r\n },\r\n {\r\n id: \"mst\",\r\n name: \"mst\",\r\n view: \"search\",\r\n label: \"Mã số thuế\",\r\n //align: \"center\",\r\n validate: webix.rules.isTaxCode,\r\n invalidMessage: \"Mã số thuế không hợp lệ\",\r\n placeholder: _(\"SEARCH\") + \"...\",\r\n // width: 300,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == undefined) return;\r\n if (newv == \"\") return;\r\n if (!webix.rules.isTaxCode(newv)) {\r\n webix.message(\"Mã số thuế không hợp lệ\", \"error\");\r\n this.focus();\r\n return;\r\n }\r\n // if (newv.length != 11) {\r\n // webix.message({ type: \"error\", text: \"Độ dài mẫu số phải là 11 ký tự\" });\r\n // this.focus();\r\n // return;\r\n // }\r\n },\r\n onTimedKeyPress: function () {\r\n // var table = $$(\"tblSearch\");\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n },\r\n onSearchIconClick: function (e) {\r\n // var text = this.getValue();\r\n // var datapost = { masothue: text };\r\n // var table = $$(\"invoiceForms\");\r\n // webix.extend(table, webix.ProgressBar);\r\n // table.disable();\r\n // table.showProgress();\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-type\": \"application/json\" })\r\n // .post(app.config.host + \"/System/GetInfoByMST\", datapost, function (text) {\r\n // var json = JSON.parse(text);\r\n // table.enable();\r\n // table.hideProgress();\r\n // if (!json.hasOwnProperty(\"error\")) {\r\n // $$(\"inv_Invoice_sellerName\").setValue(json.ten_cty);\r\n // $$(\"inv_Invoice_sellerAdress\").setValue(json.dia_chi);\r\n // } else {\r\n // // nếu không tồn tại mã số thuế phải xóa địa chỉ + tên cty ở đây\r\n // webix.message(json.error, \"error\", 1500);\r\n // }\r\n // });\r\n\r\n var mst = this.getValue();\r\n // window.location.href = \"http://tracuunnt.gdt.gov.vn/tcnnt/mstdn.jsp?mst=\" + mst;\r\n window.open(\"http://tracuunnt.gdt.gov.vn/tcnnt/mstdn.jsp?mst=\" + mst);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n { view: \"text\", label: _(\"Tên người mua\"), name: \"tnmua\", id: \"tnmua\" },\r\n {\r\n view: \"text\",\r\n label: _(\"Email\"),\r\n name: \"email\",\r\n id: \"email\",\r\n validate: function (value) {\r\n if (value) {\r\n var re = /\\S+@\\S+\\.\\S+/;\r\n return re.test(value);\r\n }\r\n return true;\r\n },\r\n invalidMessage: \"Bạn nhập không đúng email\",\r\n },\r\n ],\r\n },\r\n {\r\n view: \"text\",\r\n label: _(\"Tên đơn vị\"),\r\n name: \"ten\",\r\n id: \"ten\",\r\n validate: function (value) {\r\n var item = $$(\"invoiceForms\").getValues();\r\n if (item[\"mst\"] && item[\"mst\"] !== null && (!value || value === null)) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n invalidMessage: \"Bắt buộc khi có mã số thuế\",\r\n },\r\n { view: \"text\", label: _(\"Địa chỉ\"), name: \"dchi\", id: \"dchi\" },\r\n {\r\n cols: [\r\n { view: \"text\", label: _(\"STK người mua\"), name: \"stknmua\", id: \"stknmua\" },\r\n { view: \"text\", label: _(\"Ngân hàng\"), name: \"tnhmua\", id: \"tnhmua\" },\r\n ],\r\n },\r\n {\r\n view: \"text\",\r\n label: _(\"Số điện thoại\"),\r\n name: \"sdtnmua\",\r\n id: \"sdtnmua\",\r\n },\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n borderless: true,\r\n view: \"tabview\",\r\n scrollX: true,\r\n tabbar: {\r\n width: 300,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n rows: [\r\n {\r\n id: \"mainInvoiceManage\",\r\n css: {\r\n \"padding-bottom\": \"5px !important\",\r\n },\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n var item = {\r\n id: webix.uid(),\r\n };\r\n table.add(item);\r\n table.select(item.id, \"ma\", false);\r\n table.edit({\r\n row: item.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n var copy = webix.copy(item);\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, \"ma\", false);\r\n table.edit({\r\n row: copy.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"check_chietkhau\",\r\n value: 0,\r\n labelRight: _(\"Chiết khấu\"),\r\n labelWidth: 2,\r\n tooltip: \"Tích vào đây nếu hóa đơn có chiết khấu\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"hoadon68_chitiet\").showColumn(\"stckhau\");\r\n $$(\"hoadon68_chitiet\").showColumn(\"tlckhau\");\r\n } else {\r\n $$(\"hoadon68_chitiet\").hideColumn(\"stckhau\");\r\n $$(\"hoadon68_chitiet\").hideColumn(\"tlckhau\");\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_chitiet\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n scroll: true,\r\n columns: [\r\n {\r\n id: \"stt\",\r\n header: \"\",\r\n width: 30,\r\n },\r\n {\r\n id: \"ma\",\r\n header: _(\"Mã hàng hóa\"),\r\n editor: \"textsearch\",\r\n width: 100,\r\n editable: true,\r\n suggest: {\r\n view: \"gridsuggest\",\r\n columnName: \"ma_hanghoa\",\r\n body: {\r\n columns: [\r\n { id: \"id\", hidden: true, header: \"id\" },\r\n { id: \"code\", width: 120, header: \"code\" },\r\n { id: \"name\", width: 350, header: \"name\" },\r\n ],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00005\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n var table = $$(\"hoadon68_chitiet\");\r\n var selectedItem = table.getSelectedItem();\r\n selectedItem[\"ma\"] = obj[\"code\"];\r\n selectedItem[\"ten\"] = obj[\"name\"];\r\n selectedItem[\"mdvtinh\"] = obj[\"unit_code\"];\r\n selectedItem[\"dgia\"] = obj[\"unit_price\"];\r\n selectedItem[\"tsuat\"] = obj[\"vat_type\"];\r\n selectedItem[\"tsuatstr\"] = obj[\"vat_name\"];\r\n table.updateItem(selectedItem.id, selectedItem);\r\n },\r\n },\r\n },\r\n },\r\n {\r\n id: \"ten\",\r\n header: _(\"Tên hàng hóa\"),\r\n editor: \"text\",\r\n width: 350,\r\n editable: true,\r\n },\r\n {\r\n id: \"mdvtinh\",\r\n header: _(\"ĐVT\"),\r\n editor: \"text\",\r\n width: 80,\r\n editable: true,\r\n suggest: {\r\n view: \"gridsuggest\",\r\n columnName: \"name\",\r\n body: {\r\n columns: [\r\n { id: \"id\", hidden: true, header: \"id\" },\r\n { id: \"name\", width: 120, header: \"name\" },\r\n ],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00035\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n var table = $$(\"hoadon68_chitiet\");\r\n var selectedItem = table.getSelectedItem();\r\n selectedItem[\"mdvtinh\"] = obj[\"code\"];\r\n\r\n table.updateItem(selectedItem.id, selectedItem);\r\n },\r\n },\r\n },\r\n },\r\n {\r\n id: \"sluong\",\r\n header: _(\"Số lượng\"),\r\n editor: \"autonumeric\",\r\n width: 100,\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"dgia\",\r\n header: _(\"Đơn giá\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"thtien\",\r\n header: _(\"Tiền trước thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tlckhau\",\r\n header: _(\"% CK\"),\r\n width: 80,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n hidden: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"stckhau\",\r\n header: _(\"Tiền CK\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n hidden: true,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tsuat\",\r\n header: _(\"Thuế suất\"),\r\n width: 100,\r\n editor: \"combo\",\r\n //editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00019\",\r\n optionslist: true,\r\n },\r\n {\r\n id: \"tthue\",\r\n header: _(\"Tiền thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tgtien\",\r\n header: _(\"Tiền sau thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"kmai\",\r\n name: \"kmai\",\r\n header: _(\"Tính chất\"),\r\n width: 200,\r\n editor: \"combo\",\r\n editable: true,\r\n value: \"1\",\r\n options: [\r\n { id: \"1\", value: \"Hàng hóa dịch vụ\" },\r\n { id: \"2\", value: \"Khuyến mại\" },\r\n { id: \"3\", value: \"Chiếu khấu thương mại\" },\r\n { id: \"4\", value: \"Ghi chú\" },\r\n ],\r\n },\r\n ],\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onAfterLoad: function () {\r\n var table = this;\r\n var data = table.serialize();\r\n data.forEach(function (entry) {\r\n if (entry[\"stckhau\"] != undefined || entry[\"tlckhau\"] != undefined) {\r\n if (entry[\"stckhau\"] != 0 || entry[\"tlckhau\"] != 0) {\r\n var ck = $$(\"check_chietkhau\");\r\n if (ck != undefined) {\r\n ck.setValue(1);\r\n return false;\r\n }\r\n }\r\n }\r\n });\r\n },\r\n onCheck: function (row, column, state) {\r\n var table = this;\r\n if (column == \"khuyen_mai\") {\r\n if (state == true) {\r\n }\r\n }\r\n },\r\n onAfterAdd: function (id, index) {\r\n var table = $$(this.config.id);\r\n var data = table.serialize();\r\n\r\n var tong_tien_tt_dp = 0;\r\n var tong_tien_thue_dp = 0;\r\n var tong_tien_ck_dp = 0;\r\n var tong_tien_dp = 0;\r\n data.forEach(function (entry) {\r\n tong_tien_tt_dp += entry[\"tien_tt\"] == null ? 0 : entry[\"tien_tt\"];\r\n tong_tien_thue_dp += entry[\"tien_thue\"] == null ? 0 : entry[\"tien_thue\"];\r\n tong_tien_ck_dp += entry[\"tien_ck\"] == null ? 0 : entry[\"tien_ck\"];\r\n tong_tien_dp += entry[\"tong_tien\"] == null ? 0 : entry[\"tong_tien\"];\r\n });\r\n },\r\n onAfterDelete: function (id) {\r\n var table = $$(this.config.id);\r\n var data = table.serialize();\r\n var tien_tt_all = 0;\r\n var tien_thue_all = 0;\r\n var tien_ck_all = 0;\r\n var tong_tien_all = 0;\r\n\r\n var tien_tt_10 = 0;\r\n var tien_thue_10 = 0;\r\n var tien_ck_10 = 0;\r\n var tong_tien_10 = 0;\r\n\r\n var tien_tt_5 = 0;\r\n var tien_thue_5 = 0;\r\n var tien_ck_5 = 0;\r\n var tong_tien_5 = 0;\r\n\r\n var tien_tt_0 = 0;\r\n var tien_thue_0 = 0;\r\n var tien_ck_0 = 0;\r\n var tong_tien_0 = 0;\r\n\r\n var tien_tt_k = 0;\r\n var tien_thue_k = 0;\r\n var tien_ck_k = 0;\r\n var tong_tien_k = 0;\r\n\r\n var tien_tt_kct = 0;\r\n var tien_thue_kct = 0;\r\n var tien_ck_kct = 0;\r\n var tong_tien_kct = 0;\r\n\r\n var tien_tt_kkk = 0;\r\n var tien_thue_kkk = 0;\r\n var tien_ck_kkk = 0;\r\n var tong_tien_kkk = 0;\r\n\r\n data.forEach(function (entry) {\r\n if (entry.kmai && (entry.kmai.toString() === \"1\" || entry.kmai.toString() === \"3\")) {\r\n if (entry.kmai.toString() === \"1\") {\r\n tien_tt_all += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_all += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_all += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_all += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n if (entry[\"tsuat\"] == 10) {\r\n tien_tt_10 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_10 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_10 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_10 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 5) {\r\n tien_tt_5 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_5 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_5 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_5 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 0) {\r\n tien_tt_0 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_0 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_0 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_0 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -1) {\r\n tien_tt_kct += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kct += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kct += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kct += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -2) {\r\n tien_tt_kkk += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kkk += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kkk += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kkk += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else {\r\n tien_tt_k += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_k += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_k += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_k += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n } else {\r\n tien_tt_all -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_all -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_all -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_all -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n if (entry[\"tsuat\"] == 10) {\r\n tien_tt_10 -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_10 -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_10 -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_10 -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 5) {\r\n tien_tt_5 -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_5 -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_5 -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_5 -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 0) {\r\n tien_tt_0 -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_0 -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_0 -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_0 -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -1) {\r\n tien_tt_kct -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kct -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kct -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kct -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -2) {\r\n tien_tt_kkk -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kkk -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kkk -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kkk -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else {\r\n tien_tt_k -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_k -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_k -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_k -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n }\r\n }\r\n });\r\n\r\n $$(\"tgtcthue\").setValue(tien_tt_all);\r\n $$(\"tgtcthue10\").setValue(tien_tt_10);\r\n $$(\"tgtcthue5\").setValue(tien_tt_5);\r\n $$(\"tgtcthue0\").setValue(tien_tt_0);\r\n $$(\"tgtcthuek\").setValue(tien_tt_k);\r\n $$(\"tgtcthuekct\").setValue(tien_tt_kct);\r\n $$(\"tgtcthuekkk\").setValue(tien_tt_kkk);\r\n\r\n $$(\"ttcktmai\").setValue(tien_ck_all);\r\n $$(\"ttcktmai10\").setValue(tien_ck_10);\r\n $$(\"ttcktmai5\").setValue(tien_ck_5);\r\n $$(\"ttcktmai0\").setValue(tien_ck_0);\r\n $$(\"ttcktmaik\").setValue(tien_ck_k);\r\n $$(\"ttcktmaikct\").setValue(tien_ck_kct);\r\n $$(\"ttcktmaikkk\").setValue(tien_ck_kkk);\r\n\r\n $$(\"tgtthue\").setValue(tien_thue_all);\r\n $$(\"tgtthue10\").setValue(tien_thue_10);\r\n $$(\"tgtthue5\").setValue(tien_thue_5);\r\n $$(\"tgtthue0\").setValue(tien_thue_0);\r\n $$(\"tgtthuek\").setValue(tien_thue_k);\r\n $$(\"tgtthuekct\").setValue(tien_thue_kct);\r\n $$(\"tgtthuekkk\").setValue(tien_thue_kkk);\r\n\r\n $$(\"tgtttbso\").setValue(tong_tien_all);\r\n $$(\"tgtttbso10\").setValue(tong_tien_10);\r\n $$(\"tgtttbso5\").setValue(tong_tien_5);\r\n $$(\"tgtttbso0\").setValue(tong_tien_0);\r\n $$(\"tgtttbsok\").setValue(tong_tien_k);\r\n $$(\"tgtttbsokct\").setValue(tong_tien_kct);\r\n $$(\"tgtttbsokkk\").setValue(tong_tien_kkk);\r\n\r\n //if ($$(\"tkcktmn\").getValue() != null && $$(\"tkcktmn\").getValue() != \"\") tong_tien_all -= Number($$(\"tkcktmn\").getValue());\r\n if ($$(\"tgtphi\").getValue() != null && $$(\"tgtphi\").getValue() != \"\") tong_tien_all += Number($$(\"tgtphi\").getValue());\r\n\r\n $$(\"tgtttbso_last\").setValue(tong_tien_all);\r\n var tien_chietkhauthuongmai = 0;\r\n data.forEach(function (entry) {\r\n if (entry[\"kmai\"] && entry[\"kmai\"].toString() == \"3\") {\r\n tien_chietkhauthuongmai += entry[\"tgtien\"] == null ? 0 : Number(entry[\"tgtien\"]);\r\n }\r\n });\r\n $$(\"tkcktmn\").setValue(tien_chietkhauthuongmai);\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n var table_inv_views = webix.$$(\"invoiceViews\");\r\n var item_inv = table_inv_views.getSelectedItem();\r\n var item_note = \"\";\r\n if (item_inv != undefined && item_inv.hasOwnProperty(\"note\") == true) {\r\n item_note = item_inv.note ? item_inv.note : \"\";\r\n }\r\n var table = $$(this.config.id);\r\n 1;\r\n var selectedItem = table.getItem(editor.row);\r\n var columnId = editor.config.id;\r\n if (!selectedItem.kmai) selectedItem.kmai = \"1\";\r\n var so_luong = webix.rules.isNumber(selectedItem.sluong) ? selectedItem.sluong : 0;\r\n var don_gia = webix.rules.isNumber(selectedItem.dgia) ? selectedItem.dgia : 0;\r\n var tien_tt = webix.rules.isNumber(selectedItem.thtien) ? selectedItem.thtien : 0;\r\n var pt_ck = webix.rules.isNumber(selectedItem.tlckhau) ? selectedItem.tlckhau : 0;\r\n var tien_ck = webix.rules.isNumber(selectedItem.stckhau) ? selectedItem.stckhau : 0;\r\n var pt_thue = webix.rules.isNumber(selectedItem.tsuat) ? selectedItem.tsuat : 0;\r\n var tien_thue = webix.rules.isNumber(selectedItem.tthue) ? selectedItem.tthue : 0;\r\n var tong_tien = webix.rules.isNumber(selectedItem.tgtien) ? selectedItem.tgtien : 0;\r\n /*if (columnId == \"tsuatstr\") {\r\n var tien_thue_str = selectedItem.tsuatstr;\r\n var re = /^([0-9]{1,2})(\\.[0-9]{1,2}){0,1}%$/;\r\n if (tien_thue_str === \"KCT\" || tien_thue_str === \"KKKNT\") pt_thue = 0;\r\n else if (tien_thue_str !== \"KHAC\") {\r\n var checkDD = re.test(tien_thue_str);\r\n if (!checkDD) {\r\n webix.message(\"Không đúng định dạng nhập phần trăm\");\r\n selectedItem.tsuatstr = state.old;\r\n table.updateItem(selectedItem.id, selectedItem);\r\n return;\r\n } else {\r\n pt_thue = Number(tien_thue_str.replace(\"%\", \"\"));\r\n }\r\n }\r\n }*/\r\n tien_tt += tien_ck;\r\n if (\r\n columnId == \"tsuat\" ||\r\n columnId == \"sluong\" ||\r\n columnId == \"dgia\" ||\r\n columnId == \"tlckhau\" ||\r\n columnId == \"tsuatstr\" ||\r\n columnId == \"kmai\" ||\r\n columnId == \"ma\"\r\n ) {\r\n if (item_note != \"reduce_change_invoice\") {\r\n if (don_gia < 0) {\r\n don_gia = 0;\r\n }\r\n }\r\n\r\n if (so_luong < 0) {\r\n so_luong = 0;\r\n }\r\n\r\n if (!(item_note == \"reduce_change_invoice\") && don_gia > 0) {\r\n tien_tt = so_luong * don_gia;\r\n } else tien_tt = so_luong * don_gia;\r\n\r\n if (pt_ck < 0) {\r\n pt_ck = 0;\r\n }\r\n if (pt_ck > 100) {\r\n pt_ck = 0;\r\n }\r\n tien_ck = (tien_tt * pt_ck) / 100;\r\n if (!(item_note == \"reduce_change_invoice\") && tien_ck - tien_tt > 0) {\r\n tien_ck = 0;\r\n }\r\n\r\n tien_thue = ((tien_tt - tien_ck) * (pt_thue < 0 ? 0 : pt_thue)) / 100;\r\n tong_tien = tien_tt - tien_ck + parseFloat(tien_thue);\r\n\r\n if (item_note == \"reduce_change_invoice\") {\r\n if (don_gia > 0) {\r\n don_gia = don_gia * -1;\r\n tien_tt = so_luong * don_gia;\r\n tien_ck = tien_ck * -1;\r\n tien_thue = tien_thue * -1;\r\n tong_tien = tong_tien * -1;\r\n }\r\n }\r\n }\r\n tien_tt -= tien_ck;\r\n selectedItem.sluong = so_luong;\r\n selectedItem.dgia = don_gia;\r\n selectedItem.thtien = tien_tt;\r\n selectedItem.tlckhau = pt_ck;\r\n selectedItem.stckhau = tien_ck;\r\n selectedItem.tthue = tien_thue;\r\n /*if(selectedItem.kmai.toString() !== \"3\"){\r\n }*/\r\n selectedItem.tgtien = tong_tien;\r\n table.updateItem(selectedItem.id, selectedItem);\r\n if (selectedItem.kmai.toString() === \"2\") {\r\n //selectedItem.sluong = null;\r\n //selectedItem.dgia = null;\r\n //selectedItem.tsuat = null;\r\n //selectedItem.tsuatstr = null;\r\n selectedItem.thtien = 0;\r\n //selectedItem.tlckhau = null;\r\n //selectedItem.stckhau = null;\r\n selectedItem.tthue = 0;\r\n selectedItem.tgtien = 0;\r\n if (columnId == \"kmai\") {\r\n selectedItem.sluong = null;\r\n selectedItem.dgia = null;\r\n selectedItem.tsuat = null;\r\n selectedItem.tsuatstr = null;\r\n selectedItem.tlckhau = null;\r\n selectedItem.stckhau = null;\r\n }\r\n table.updateItem(selectedItem.id, selectedItem);\r\n } else if (selectedItem.kmai.toString() === \"3\") {\r\n //selectedItem.tsuat = \"0\";\r\n //selectedItem.tsuatstr = \"0%\";\r\n selectedItem.tlckhau = null;\r\n selectedItem.stckhau = null;\r\n //selectedItem.tthue = 0;\r\n /*if(columnId !== \"tgtien\"){\r\n selectedItem.tgtien = selectedItem.thtien\r\n }*/\r\n } else if (selectedItem.kmai.toString() === \"4\") {\r\n selectedItem.sluong = null;\r\n selectedItem.dgia = null;\r\n selectedItem.tsuat = null;\r\n selectedItem.tsuatstr = null;\r\n selectedItem.thtien = null;\r\n selectedItem.tlckhau = null;\r\n selectedItem.stckhau = null;\r\n selectedItem.tthue = null;\r\n selectedItem.tgtien = null;\r\n table.updateItem(selectedItem.id, selectedItem);\r\n }\r\n var data = table.serialize();\r\n\r\n var tien_tt_all = 0;\r\n var tien_thue_all = 0;\r\n var tien_ck_all = 0;\r\n var tong_tien_all = 0;\r\n\r\n var tien_tt_10 = 0;\r\n var tien_thue_10 = 0;\r\n var tien_ck_10 = 0;\r\n var tong_tien_10 = 0;\r\n\r\n var tien_tt_5 = 0;\r\n var tien_thue_5 = 0;\r\n var tien_ck_5 = 0;\r\n var tong_tien_5 = 0;\r\n\r\n var tien_tt_0 = 0;\r\n var tien_thue_0 = 0;\r\n var tien_ck_0 = 0;\r\n var tong_tien_0 = 0;\r\n\r\n var tien_tt_k = 0;\r\n var tien_thue_k = 0;\r\n var tien_ck_k = 0;\r\n var tong_tien_k = 0;\r\n\r\n var tien_tt_kct = 0;\r\n var tien_thue_kct = 0;\r\n var tien_ck_kct = 0;\r\n var tong_tien_kct = 0;\r\n\r\n var tien_tt_kkk = 0;\r\n var tien_thue_kkk = 0;\r\n var tien_ck_kkk = 0;\r\n var tong_tien_kkk = 0;\r\n\r\n data.forEach(function (entry) {\r\n if (entry.kmai && (entry.kmai.toString() === \"1\" || entry.kmai.toString() === \"3\")) {\r\n if (entry.kmai.toString() === \"1\") {\r\n tien_tt_all += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_all += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_all += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_all += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n if (entry[\"tsuat\"] == 10) {\r\n tien_tt_10 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_10 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_10 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_10 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 5) {\r\n tien_tt_5 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_5 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_5 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_5 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 0) {\r\n tien_tt_0 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_0 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_0 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_0 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -1) {\r\n tien_tt_kct += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kct += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kct += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kct += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -2) {\r\n tien_tt_kkk += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kkk += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kkk += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kkk += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else {\r\n tien_tt_k += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_k += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_k += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_k += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n } else {\r\n tien_tt_all -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_all -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_all -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_all -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n if (entry[\"tsuat\"] == 10) {\r\n tien_tt_10 -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_10 -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_10 -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_10 -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 5) {\r\n tien_tt_5 -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_5 -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_5 -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_5 -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 0) {\r\n tien_tt_0 -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_0 -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_0 -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_0 -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -1) {\r\n tien_tt_kct -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kct -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kct -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kct -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -2) {\r\n tien_tt_kkk -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kkk -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kkk -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kkk -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else {\r\n tien_tt_k -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_k -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_k -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_k -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n }\r\n }\r\n });\r\n\r\n $$(\"tgtcthue\").setValue(tien_tt_all);\r\n $$(\"tgtcthue10\").setValue(tien_tt_10);\r\n $$(\"tgtcthue5\").setValue(tien_tt_5);\r\n $$(\"tgtcthue0\").setValue(tien_tt_0);\r\n $$(\"tgtcthuek\").setValue(tien_tt_k);\r\n $$(\"tgtcthuekct\").setValue(tien_tt_kct);\r\n $$(\"tgtcthuekkk\").setValue(tien_tt_kkk);\r\n\r\n $$(\"ttcktmai\").setValue(tien_ck_all);\r\n $$(\"ttcktmai10\").setValue(tien_ck_10);\r\n $$(\"ttcktmai5\").setValue(tien_ck_5);\r\n $$(\"ttcktmai0\").setValue(tien_ck_0);\r\n $$(\"ttcktmaik\").setValue(tien_ck_k);\r\n $$(\"ttcktmaikct\").setValue(tien_ck_kct);\r\n $$(\"ttcktmaikkk\").setValue(tien_ck_kkk);\r\n\r\n $$(\"tgtthue\").setValue(tien_thue_all);\r\n $$(\"tgtthue10\").setValue(tien_thue_10);\r\n $$(\"tgtthue5\").setValue(tien_thue_5);\r\n $$(\"tgtthue0\").setValue(tien_thue_0);\r\n $$(\"tgtthuek\").setValue(tien_thue_k);\r\n $$(\"tgtthuekct\").setValue(tien_thue_kct);\r\n $$(\"tgtthuekkk\").setValue(tien_thue_kkk);\r\n\r\n $$(\"tgtttbso\").setValue(tong_tien_all);\r\n $$(\"tgtttbso10\").setValue(tong_tien_10);\r\n $$(\"tgtttbso5\").setValue(tong_tien_5);\r\n $$(\"tgtttbso0\").setValue(tong_tien_0);\r\n $$(\"tgtttbsok\").setValue(tong_tien_k);\r\n $$(\"tgtttbsokct\").setValue(tong_tien_kct);\r\n $$(\"tgtttbsokkk\").setValue(tong_tien_kkk);\r\n\r\n //if ($$(\"tkcktmn\").getValue() != null && $$(\"tkcktmn\").getValue() != \"\") tong_tien_all -= Number($$(\"tkcktmn\").getValue());\r\n if ($$(\"tgtphi\").getValue() != null && $$(\"tgtphi\").getValue() != \"\") tong_tien_all += Number($$(\"tgtphi\").getValue());\r\n\r\n $$(\"tgtttbso_last\").setValue(tong_tien_all);\r\n var tien_chietkhauthuongmai = 0;\r\n data.forEach(function (entry) {\r\n if (entry[\"kmai\"] && entry[\"kmai\"].toString() == \"3\") {\r\n tien_chietkhauthuongmai += entry[\"tgtien\"] == null ? 0 : Number(entry[\"tgtien\"]);\r\n }\r\n });\r\n $$(\"tkcktmn\").setValue(tien_chietkhauthuongmai);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n {\r\n header: \"Tiền phí/lệ phí\",\r\n select: \"cell\",\r\n body: {\r\n rows: [\r\n {\r\n id: \"mainInvoiceManage\",\r\n css: {\r\n \"padding-bottom\": \"5px !important\",\r\n },\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n var item = {\r\n id: webix.uid(),\r\n tienphi: 0,\r\n };\r\n table.add(item);\r\n table.select(item.id);\r\n table.edit({\r\n row: item.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n var copy = webix.copy(item);\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id);\r\n table.edit({\r\n row: copy.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_phi\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n columns: [\r\n {\r\n id: \"tnphi\",\r\n name: \"tnphi\",\r\n header: _(\"Tên phí\"),\r\n editor: \"text\",\r\n width: 350,\r\n\r\n editable: true,\r\n },\r\n {\r\n id: \"tienphi\",\r\n name: \"tienphi\",\r\n header: _(\"Tiền phí\"),\r\n editor: \"text\",\r\n width: 350,\r\n editable: true,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n ],\r\n on: {\r\n onAfterDelete: function (id) {\r\n var table = $$(this.config.id);\r\n var data = table.serialize();\r\n var tien_phi_moi = 0;\r\n data.forEach(function (entry) {\r\n tien_phi_moi += entry[\"tienphi\"] == null ? 0 : Number(entry[\"tienphi\"]);\r\n });\r\n $$(\"tgtphi\").setValue(tien_phi_moi);\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n var table = $$(this.config.id);\r\n var data = table.serialize();\r\n var tien_phi_moi = 0;\r\n data.forEach(function (entry) {\r\n tien_phi_moi += entry[\"tienphi\"] == null ? 0 : Number(entry[\"tienphi\"]);\r\n });\r\n $$(\"tgtphi\").setValue(tien_phi_moi);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n rows: [\r\n { view: \"label\", label: \"Loại thuế\", css: \"lblTongtien\" },\r\n {\r\n view: \"label\",\r\n label: \" + Tổng cộng hàng hóa, dịch vụ\",\r\n height: 22,\r\n css: { \"padding-left\": \"5px\", \"font-weight\": \"bold\", \"background-color\": \"#86b2cf\" },\r\n },\r\n { view: \"label\", label: \"Thuế suất 10%\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Thuế suất 5%\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Thuế suất 0%\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Thuế suất khác\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Không chịu thuế GTGT\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Không kê khai, tính nộp thuế GTGT\", css: \"lblSubTongtien\", height: 22 },\r\n {},\r\n {},\r\n {},\r\n // { view: \"label\", label: \"Tổng cộng phí lệ phí\", css: { \"font-weight\": \"bold\", \"background-color\": \"#86b2cf\" } , height: 22 },\r\n // { view: \"label\", label: \"Tổng cộng thanh toán\", css: { \"font-weight\": \"bold\", \"background-color\": \"#86b2cf\" } , height: 22 },\r\n ],\r\n },\r\n {\r\n rows: [\r\n {\r\n view: \"label\",\r\n label: \"Thành tiền trước thuế\",\r\n css: \"lblTongtien\",\r\n validate: function (value) {\r\n if (Number(value) > 0 || Number(value) === 0) {\r\n return true;\r\n }\r\n webix.message(mess, \"error\");\r\n return false;\r\n },\r\n invalidMessage: mess,\r\n },\r\n { view: \"text\", format: fmNumber, id: \"tgtcthue\", name: \"tgtcthue\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtcthue10\", name: \"tgtcthue10\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtcthue5\", name: \"tgtcthue5\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtcthue0\", name: \"tgtcthue0\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtcthuek\", name: \"tgtcthuek\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtcthuekct\", name: \"tgtcthuekct\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtcthuekkk\", name: \"tgtcthuekkk\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n {},\r\n {},\r\n {},\r\n // { view: \"text\", id: \"2\", name: \"2\", css: \"txtTongtien\", readonly: true, height: 22 }\r\n ],\r\n },\r\n\r\n {\r\n rows: [\r\n { view: \"label\", label: \"Tiền chiết khấu\", css: \"lblTongtien\" },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmai\", name: \"ttcktmai\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmai10\", name: \"ttcktmai10\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmai5\", name: \"ttcktmai5\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmai0\", name: \"ttcktmai0\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmaik\", name: \"ttcktmaik\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmaikct\", name: \"ttcktmaikct\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmaikkk\", name: \"ttcktmaikkk\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n {},\r\n {},\r\n {},\r\n ],\r\n },\r\n {\r\n rows: [\r\n {\r\n view: \"label\",\r\n label: \"Tiền thuế\",\r\n css: \"lblTongtien\",\r\n validate: function (value) {\r\n if (Number(value) > 0 || Number(value) === 0) {\r\n return true;\r\n }\r\n webix.message(mess, \"error\");\r\n return false;\r\n },\r\n invalidMessage: mess,\r\n },\r\n { view: \"text\", format: fmNumber, id: \"tgtthue\", name: \"tgtthue\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtthue10\", name: \"tgtthue10\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtthue5\", name: \"tgtthue5\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtthue0\", name: \"tgtthue0\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtthuek\", name: \"tgtthuek\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtthuekct\", name: \"tgtthuekct\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtthuekkk\", name: \"tgtthuekkk\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"label\", label: \"Chiết khấu thương mại\", labelAlign: \"right\", labelPosition: \"top\" },\r\n { view: \"label\", label: \"Tổng tiền phí/lệ phí\", labelAlign: \"right\", labelPosition: \"top\" },\r\n { view: \"label\", label: \"Thành tiền\", labelAlign: \"right\", labelPosition: \"top\" },\r\n ],\r\n },\r\n {\r\n rows: [\r\n { view: \"label\", label: \"Tổng tiền sau thuế\", css: \"lblTongtien\" },\r\n {\r\n view: \"text\",\r\n id: \"tgtttbso\",\r\n name: \"tgtttbso\",\r\n css: \"txtTongtien\",\r\n readonly: true,\r\n height: 22,\r\n format: fmNumber,\r\n },\r\n { view: \"text\", format: fmNumber, id: \"tgtttbso10\", name: \"tgtttbso10\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtttbso5\", name: \"tgtttbso5\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtttbso0\", name: \"tgtttbso0\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtttbsok\", name: \"tgtttbsok\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtttbsokct\", name: \"tgtttbsokct\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtttbsokkk\", name: \"tgtttbsokkk\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n {\r\n id: \"tkcktmn\",\r\n view: \"text\",\r\n editor: \"numeric\",\r\n labelWidth: 200,\r\n width: 600,\r\n format: fmNumber,\r\n name: \"tkcktmn\",\r\n /*on: {\r\n onChange: function (newValue, oldValue, config) {\r\n var tong_tien_cu = 0;\r\n if ($$(\"tgtttbso_last\").getValue() != null && $$(\"tgtttbso\").getValue() != \"\") tong_tien_cu = Number($$(\"tgtttbso_last\").getValue());\r\n if (oldValue != null && oldValue != \"\") tong_tien_cu += Number(oldValue);\r\n if (tong_tien_cu > $$(\"tkcktmn\").getValue()) {\r\n $$(\"tgtttbso_last\").setValue(tong_tien_cu - newValue);\r\n $$(\"tkcktmn\").setValue(newValue);\r\n } else {\r\n $$(\"tgtttbso_last\").setValue(tong_tien_cu);\r\n }\r\n },\r\n },*/\r\n },\r\n {\r\n view: \"text\",\r\n format: fmNumber,\r\n id: \"tgtphi\",\r\n name: \"tgtphi\",\r\n readonly: true,\r\n on: {\r\n onChange: function (newValue, oldValue, config) {\r\n var tong_tien_cu = 0;\r\n if ($$(\"tgtttbso_last\").getValue() != null && $$(\"tgtttbso\").getValue() != \"\") tong_tien_cu = Number($$(\"tgtttbso_last\").getValue());\r\n if (oldValue != null && oldValue != \"\") tong_tien_cu -= Number(oldValue);\r\n tong_tien_cu += Number(newValue);\r\n $$(\"tgtttbso_last\").setValue(tong_tien_cu);\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n id: \"tgtttbso_last\",\r\n name: \"tgtttbso_last\",\r\n readonly: true,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n commonHD.ExeCuteCheckReadCurencyTV($$(\"docngoaitetv\").getValue());\r\n },\r\n },\r\n validate: function (value) {\r\n var table_inv_views = webix.$$(\"invoiceViews\");\r\n var item_inv = table_inv_views.getSelectedItem();\r\n var item_note = \"\";\r\n if (item_inv != undefined && item_inv.hasOwnProperty(\"note\") == true) {\r\n item_note = item_inv.note ? item_inv.note : \"\";\r\n }\r\n if (item_note == \"reduce_change_invoice\") return true;\r\n if (Number(value) > 0 || Number(value) === 0) {\r\n return true;\r\n }\r\n webix.message(mess, \"error\");\r\n return false;\r\n },\r\n invalidMessage: mess,\r\n format: fmNumber,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"label\",\r\n width: 140,\r\n label: \"Đọc tiền bằng chữ:\",\r\n css: { \"font-weight\": \"bold\", \"padding-left\": \"5px\" },\r\n height: 22,\r\n },\r\n { view: \"text\", id: \"tgtttbchu\", name: \"tgtttbchu\", readonly: true, height: 22 },\r\n ],\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n id: \"btnHoadonSaveMau04\",\r\n hidden: true,\r\n label: \"Ký và gửi CQT\",\r\n align: \"center\",\r\n type: \"form\",\r\n width: 120,\r\n click: function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n var tableHoadon = $$(\"invoiceForms\");\r\n\r\n if (tableHoadon.validate()) {\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n if (record.length == 0) {\r\n webix.message(\"Bạn chưa nhập chi tiết hóa đơn\", \"error\");\r\n return;\r\n } else {\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n if (it.ten == null || it.ten == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai.toString() === \"1\") {\r\n var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + tiền thuế != tiền sau thuế\");\r\n return;\r\n }\r\n if (it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n var t = webix.$$(\"invoiceViews\");\r\n var k = t.getSelectedItem();\r\n var details = [];\r\n details.push({ data: $$(\"hoadon68_chitiet\").serialize() });\r\n item[\"details\"] = details;\r\n item[\"tthdon\"] = 2;\r\n item[\"hdon68_id_lk\"] = k.id;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 1;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n data_post.mau04 = mau04;\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n };\r\n data_post.sign = postData;\r\n\r\n // console.log(data_post);\r\n webix.extend(tableHoadon, webix.ProgressBar);\r\n tableHoadon.disable();\r\n tableHoadon.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyHoadonTaomoi\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n $$(\"invoice68\").close();\r\n $$(\"huyhoadonForms\").close();\r\n\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n\r\n return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n webix.extend(tableHoadon, webix.ProgressBar);\r\n tableHoadon.disable();\r\n tableHoadon.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyHoadonTaomoiUSB\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlMau0405?id=\" + json.idMau04);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, json]).then(function (results) {\r\n // webix.extend(tblInvoice, webix.ProgressBar);\r\n // tblInvoice.disable();\r\n // tblInvoice.showProgress();\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n // tblInvoice.enable();\r\n // tblInvoice.hideProgress();\r\n webix.message(\r\n \"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\",\r\n \"error\"\r\n );\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item.idMau04,\r\n tthdon: 3,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMau0405\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n $$(\"invoice68\").close();\r\n $$(\"huyhoadonForms\").close();\r\n\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n }\r\n });\r\n }\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n // webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n // $$(\"invoice68\").close();\r\n // $$(\"huyhoadonForms\").close();\r\n\r\n // app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n });\r\n });\r\n }\r\n }\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnHoadonSave\",\r\n label: \"Lưu tạm (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n if (it.ten == null || it.ten == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai.toString() === \"1\") {\r\n var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + tiền thuế != tiền sau thuế\");\r\n return;\r\n }\r\n if (it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n if (table.validate()) {\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: $$(\"hoadon68_chitiet\").serialize() });\r\n item[\"details\"] = details;\r\n // hóa đơn có mã\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 1;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonSaveChange\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.$$(\"invoice68\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F11\",\r\n view: \"button\",\r\n id: \"btnHoadonCQT\",\r\n label: \"Ký và gửi CQT (F11)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 150,\r\n on: {\r\n onClick: function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n if (it.ten == null || it.ten == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai.toString() === \"1\") {\r\n var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + tiền thuế != tiền sau thuế\");\r\n return;\r\n }\r\n if (it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n if (table.validate()) {\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: $$(\"hoadon68_chitiet\").serialize() });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 1;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonSaveChange\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var _res = JSON.parse(text);\r\n table.enable();\r\n table.hideProgress();\r\n if (!_res.hasOwnProperty(\"error\")) {\r\n webix.$$(\"invoice68\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, _res.data]);\r\n\r\n var lsthdon_id = [];\r\n lsthdon_id.push(_res.data.hdon_id);\r\n commonHD.ExcuteHoaDon(lsthdon_id, true, true);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n align: \"center\",\r\n type: \"danger\",\r\n width: 120,\r\n click: function () {\r\n this.getTopParentView().close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n setValues: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n if (item != null) {\r\n item[\"tdlap\"] = removeTimeZoneT(item[\"tdlap\"]);\r\n form.setValues(item);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n tablePhi.clearAll();\r\n tablePhi.load(urlPhi);\r\n }\r\n\r\n if (editmode == 2) {\r\n }\r\n // nếu có mẫu 04 (hóa đơn hủy)\r\n if (winconfig != null) {\r\n mau04 = winconfig;\r\n $$(\"btnHoadonSaveMau04\").show();\r\n $$(\"btnHoadonCQT\").destructor();\r\n $$(\"btnHoadonSave\").destructor();\r\n }\r\n this.getFormat();\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n //var form = webix.$$(\"invoiceForms\");\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1) {\r\n icon = \"\";\r\n } else {\r\n if (editmode == 2) icon = \"\";\r\n else icon = \"\";\r\n }\r\n\r\n webix.$$(\"head-iconInvoice\").setHTML(icon);\r\n webix.$$(\"head-iconInvoice\").refresh();\r\n },\r\n copyValues: function (item) {\r\n var form = webix.$$(\"invoiceForms\");\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"cthdon_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tableDetail.clearAll();\r\n tableDetail.parse(data);\r\n });\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlPhi, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"phi_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tablePhi.clearAll();\r\n tablePhi.parse(data);\r\n });\r\n // tableDetail.clearAll();\r\n // tableDetail.load(url);\r\n item[\"tthdon\"] = 0;\r\n item[\"hdon_id\"] = null;\r\n item[\"nky\"] = null;\r\n item[\"id\"] = webix.uid();\r\n form.setValues(item);\r\n this.getFormat();\r\n },\r\n initUINew: function (cctbao_id) {\r\n $$(\"cctbao_id\").setValue(cctbao_id);\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/getKyhieu?cctbao_id=\" + cctbao_id, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (data.length > 0) {\r\n var form = $$(\"invoiceForms\");\r\n var values = form.getValues();\r\n\r\n values[\"khieu\"] = data[0][\"khhdon\"];\r\n\r\n form.setValues(values);\r\n }\r\n });\r\n this.getFormat();\r\n },\r\n getFormat: function (val) {\r\n commonHD.renderFormat(val);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_huyhoadon',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\"], function (app, _, user, invoiceForms) {\r\n \r\n\r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n //view: \"toolbar\",\r\n // css: { \"box-shadow\": \"0 -2px #3498db inset !important\", \"background\": \"#ffffff !important\" },\r\n //css: { \"background\": \"#e6f2ff !important\" },\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-icondksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formdksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Thông báo sai sót hóa đơn điện tử
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_dksdForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n // var form = webix.$$(\"window-form\");\r\n // hint_form(form.config.hint);\r\n },\r\n },\r\n ],\r\n },\r\n id: \"huyhoadonForms\",\r\n resize: true,\r\n width: 1100,\r\n height: 600,\r\n // fullscreen: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () {},\r\n },\r\n body: {\r\n view: \"form\",\r\n id: \"huyhoadon\",\r\n // width: 1500,\r\n position: \"center\",\r\n // autowidth:true,\r\n paddingY: 10,\r\n paddingX: 15,\r\n complexData: true,\r\n scroll: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n // id: \"header\",\r\n template: \"
THÔNG BÁO SAI SÓT HÓA ĐƠN ĐIỆN TỬ
\",\r\n borderless: true,\r\n height: 40,\r\n },\r\n {\r\n paddingX: 30,\r\n rows: [\r\n {\r\n cols: [\r\n {},\r\n {\r\n label: \"Kính gửi: \",\r\n id: \"tcqt\",\r\n name: \"tcqt\",\r\n view: \"combo\",\r\n labelWidth: 100,\r\n width: 300,\r\n options: {\r\n view: \"gridsuggest\",\r\n columnName: \"name\",\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00251\";\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n body: {\r\n columns: [{ id: \"name\", width: 500, header: \"Tên cơ quan thuế quản lý\" }],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n console.log(obj);\r\n $$(\"mcqt\").setValue(obj[\"code\"]);\r\n\r\n $$(\"mcqt\").refresh();\r\n },\r\n },\r\n },\r\n required: true,\r\n invalidMessage: \"Kính gửi không được để trống !\",\r\n },\r\n {},\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Mã số thuế\",\r\n id: \"mst\",\r\n name: \"mst\",\r\n required: true,\r\n invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Mã đơn vị quan hệ ngân sách\",\r\n id: \"mdvqhnsach\",\r\n name: \"mdvqhnsach\",\r\n labelWidth: 200,\r\n //required: true,\r\n //invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Tên người nộp thuế\",\r\n labelWidth: 150,\r\n required: true,\r\n invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n id: \"tnnt\",\r\n name: \"tnnt\",\r\n },\r\n {\r\n id: \"mcqt\",\r\n name: \"mcqt\",\r\n label: \"Mã cơ quan thuế\",\r\n labelWidth: 150,\r\n required: true,\r\n invalidMessage: \"Mã cơ quan thuế quản lý không được để trống !\",\r\n view: \"text\",\r\n attributes: { maxlength: 5 },\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Địa danh\",\r\n labelWidth: 150,\r\n id: \"ddanh\",\r\n name: \"ddanh\",\r\n required: true,\r\n invalidMessage: \"Địa danh không được để trống !\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"combo\",\r\n label: \"Loại TBSS\",\r\n labelWidth: 150,\r\n id: \"tctbao_all\",\r\n name: \"tctbao_all\",\r\n options: [\r\n { id: \"1\", value: \"Hủy\" },\r\n { id: \"3\", value: \"Thay thế\" },\r\n { id: \"4\", value: \"Giải trình\" },\r\n { id: \"5\", value: \"Điều chỉnh tăng\" },\r\n { id: \"6\", value: \"Điều chỉnh giảm\" },\r\n { id: \"7\", value: \"Điều chỉnh khác\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var datatable = $$(\"danhsach_hoadonhuy\");\r\n var items = datatable.serialize(); \r\n if(items.length < 1){\r\n return;\r\n }\r\n for (var i = 0; i < items.length; i++) {\r\n datatable.updateItem(items[i].id, { tctbao: newv }); \r\n }\r\n \r\n }\r\n }\r\n },\r\n {\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Lý do\",\r\n labelWidth: 150,\r\n id: \"ldo_all\",\r\n name: \"ldo_all\",\r\n on: {\r\n onblur: function () {\r\n var datatable = $$(\"danhsach_hoadonhuy\");\r\n var items = datatable.serialize(); \r\n if(items.length < 1){\r\n return;\r\n }\r\n for (var i = 0; i < items.length; i++) {\r\n datatable.updateItem(items[i].id, { ldo: this.getValue()}); \r\n }\r\n \r\n }\r\n }\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n { height: 3 },\r\n {\r\n template: \"Người nộp thuế thông báo về việc hủy/điều chỉnh/thay thế/giải trình hóa đơn điện tử do sai sót như sau:\",\r\n borderless: true,\r\n height: 40,\r\n },\r\n { height: 3 },\r\n {\r\n rows: [\r\n {\r\n id: \"btnHuyhoadon\",\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n label: \" (F9)\",\r\n // width: 60,\r\n autowidth: true,\r\n icon: \"fas fa-plus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_hoadonhuy\");\r\n var item = { id: webix.uid() };\r\n table.add(item);\r\n table.select(item.id, \"khieu\", false);\r\n table.edit({ row: item.id, column: \"khieu\" });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n autowidth: true,\r\n label: \" (F8)\",\r\n // width: 60,\r\n icon: \"fas fa-minus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_hoadonhuy\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n var editor = table.getEditState();\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_hoadonhuy\",\r\n // height: 250,\r\n name: \"danhsach_hoadonhuy\",\r\n // select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n tooltip: true,\r\n editable: true,\r\n select: \"cell\",\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onBeforeEditStart: function (id) {\r\n if (id.column == \"stt\") {\r\n // block editors in 'year' column\r\n return false;\r\n } else if (id.column == \"khieu\") {\r\n return false;\r\n } else if (id.column == \"shdon\") {\r\n return false;\r\n } else if (id.column == \"ladhddt\") {\r\n return false;\r\n } else if (id.column == \"ngay\") {\r\n return false;\r\n } else if (id.column == \"huygiaitrinh\") {\r\n return false;\r\n }\r\n },\r\n },\r\n columns: [\r\n { editor: \"text\", id: \"hdon_id\", name: \"hdon_id\", hidden: true },\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"mcqtcap\",\r\n name: \"mcatcap\",\r\n header: \"Mã cơ quan thuế cấp\",\r\n width: 150,\r\n editor: \"text\",\r\n },\r\n {\r\n id: \"khieu\",\r\n header: _(\"Ký hiệu hóa đơn điện tử\"),\r\n editor: \"text\",\r\n width: 250,\r\n editable: true,\r\n suggest: {\r\n view: \"gridsuggest\",\r\n // value_suggest: field.value_suggest,\r\n // fieldExpression: field.field_expression,\r\n // displayField: field.display_field,\r\n // tableId: \"edit_inv_InvoiceDetail\",\r\n columnName: \"ky_hieu\",\r\n body: {\r\n columns: [\r\n { id: \"id\", hidden: true, header: \"id\" },\r\n { id: _(\"khieu\"), width: 120, header: \"khieu\" },\r\n { id: _(\"shdon\"), width: 350, header: \"shdon\" },\r\n ],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataByReferencesId?id=29f51d47-8bf6-4b32-a679-52e75b8cacc8\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n var table = $$(\"danhsach_hoadonhuy\");\r\n var selectedItem = table.getSelectedItem();\r\n selectedItem[\"shdon\"] = obj[\"shdon\"];\r\n selectedItem[\"ngay\"] = obj[\"nlap\"];\r\n selectedItem[\"huygiaitrinh\"] = 1;\r\n selectedItem[\"hdon_id\"] = obj[\"hdon_id\"];\r\n table.updateItem(selectedItem.id, selectedItem);\r\n },\r\n },\r\n },\r\n },\r\n {\r\n id: \"shdon\",\r\n name: \"shdon\",\r\n header: \"Số hóa đơn điện tử\",\r\n width: 200,\r\n editor: \"text\",\r\n },\r\n {\r\n id: \"ngay\",\r\n name: \"ngay\",\r\n header: \"Ngày lập hóa đơn\",\r\n width: 200,\r\n editor: \"text\",\r\n //format: webix.i18n.dateFormatStr,\r\n },\r\n {\r\n id: \"ladhddt\",\r\n name: \"ladhddt\",\r\n header: \"Loại áp dụng hóa đơn điện tử\",\r\n editable: true,\r\n width: 200,\r\n editor: \"combo\",\r\n options: [\r\n // { id: \"1\", value: \"HĐĐT Nghị đinh số 119/2018\" },\r\n { id: \"1\", value: \"HĐĐT Nghị đinh số 123/2020/NĐ-CP\" },\r\n { id: \"2\", value: \"HĐĐT có mã của cơ quan thuế\" },\r\n { id: \"3\", value: \"Các loại hóa đơn theo Nghị đinh 51/2010\" },\r\n { id: \"4\", value: \"Hóa đơn đặt in theo Nghị định số 123/2020/NĐ-CP\" },\r\n ],\r\n },\r\n {\r\n id: \"tctbao\",\r\n name: \"tctbao\",\r\n header: \"Hủy/Điều chỉnh/Thay thế/Giải trình\",\r\n editable: true,\r\n width: 200,\r\n editor: \"combo\",\r\n options: [\r\n { id: \"1\", value: \"Hủy\" },\r\n //{ id: \"2\", value: \"Điều chỉnh\" },\r\n // { id: \"2\", value: \"Hủy có lập hóa đơn thay thế\" },\r\n // { id: \"3\", value: \"Hủy không lập hóa đơn thay thế\" },\r\n { id: \"3\", value: \"Thay thế\" },\r\n { id: \"4\", value: \"Giải trình\" },\r\n { id: \"5\", value: \"Điều chỉnh tăng\" },\r\n { id: \"6\", value: \"Điều chỉnh giảm\" },\r\n { id: \"7\", value: \"Điều chỉnh khác\" },\r\n // { id: \"8\", value: \"Điều chỉnh thông tin không tạo mới hóa đơn\" },\r\n ],\r\n },\r\n {\r\n id: \"ldo\",\r\n name: \"ldo\",\r\n header: \"Lý do\",\r\n editable: true,\r\n editor: \"text\",\r\n width: 300,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n id: \"btnHuyHDDT\",\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n id: \"btnStep299\",\r\n label: \"Lưu, chuyển sang bước tiếp theo\",\r\n type: \"form\",\r\n hidden: true,\r\n align: \"center\",\r\n click: function () {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"huyhoadon\").getValues();\r\n var details = [];\r\n details.push({ data: $$(\"danhsach_hoadonhuy\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var detailForm = self.$scope.ui(invoiceForms.$ui);\r\n\r\n var cctbao_id = webix.$$(\"kyhieu_id\").getValue();\r\n invoiceForms.initUINew(cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(null, data_post, null);\r\n detailForm.show();\r\n }, 100);\r\n\r\n // $$(\"huyhoadonForms\").close();\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnGhiHuyhoadon\",\r\n label: \"Ghi (F10)\",\r\n width: 150,\r\n align: \"center\",\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"huyhoadon\").getValues();\r\n var table = $$(\"huyhoadon\");\r\n\r\n if (table.validate()) {\r\n var cks = $$(\"danhsach_hoadonhuy\").serialize();\r\n if (cks.length == 0) {\r\n webix.message(\"Bạn chưa nhập thông tin hóa đơn cần hủy !\", \"error\");\r\n return;\r\n }\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: $$(\"danhsach_hoadonhuy\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSave\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n\r\n table.enable();\r\n table.hideProgress();\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n\r\n webix.message(\"Thành công !\", \"success\");\r\n webix.$$(\"huyhoadonForms\").close();\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F4\",\r\n view: \"button\",\r\n id: \"btnGhiSignHuyHDDT\",\r\n label: \"Ký và gửi CQT (F14)\",\r\n width: 150,\r\n align: \"center\",\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"huyhoadon\").getValues();\r\n var table = $$(\"huyhoadon\");\r\n\r\n if (table.validate()) {\r\n var cks = $$(\"danhsach_hoadonhuy\").serialize();\r\n if (cks.length == 0) {\r\n webix.message(\"Bạn chưa nhập thông tin hóa đơn cần hủy !\", \"error\");\r\n return;\r\n }\r\n var details = [];\r\n details.push({ data: $$(\"danhsach_hoadonhuy\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var tableDK = $$(\"huyhoadon\");\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n } \r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n };\r\n data_post.sign = postData;\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSaveSign\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n\r\n // return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"huyhoadon\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n check_HSM: \"1\",\r\n };\r\n data_post.sign = postData;\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSaveSign\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSave\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n } else {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlMau0405?id=\" + json.id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, json]).then(function (results) {\r\n // webix.extend(tblInvoice, webix.ProgressBar);\r\n // tblInvoice.disable();\r\n // tblInvoice.showProgress();\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\r\n \"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\",\r\n \"error\"\r\n );\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item.id,\r\n tthdon: 3,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMau0405\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n\r\n webix.message(\"Thành công !\", \"success\");\r\n webix.$$(\"huyhoadonForms\").close();\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n // app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n\r\n // webix.message(\"Thành công !\", \"success\");\r\n // webix.$$(\"huyhoadonForms\").close();\r\n }\r\n },\r\n });\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F4\",\r\n view: \"button\",\r\n id: \"btnSaveSignGiaiTrinh\",\r\n label: \"Ký và gửi CQT\",\r\n width: 150,\r\n hidden: true,\r\n align: \"center\",\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"huyhoadon\").getValues();\r\n var table = $$(\"huyhoadon\");\r\n\r\n if (table.validate()) {\r\n var cks = $$(\"danhsach_hoadonhuy\").serialize();\r\n if (cks.length == 0) {\r\n webix.message(\"Bạn chưa nhập thông tin hóa đơn cần hủy !\", \"error\");\r\n return;\r\n }\r\n var details = [];\r\n details.push({ data: $$(\"danhsach_hoadonhuy\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var tableDK = $$(\"huyhoadon\");\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n \r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n };\r\n data_post.sign = postData;\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/giaitrinhSaveSign\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n\r\n // return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"huyhoadon\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSave\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n } else {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlMau0405?id=\" + json.id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, json]).then(function (results) {\r\n // webix.extend(tblInvoice, webix.ProgressBar);\r\n // tblInvoice.disable();\r\n // tblInvoice.showProgress();\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item.id,\r\n tthdon: 1,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMau0405\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n\r\n webix.message(\"Thành công !\", \"success\");\r\n webix.$$(\"huyhoadonForms\").close();\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n // app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n\r\n // webix.message(\"Thành công !\", \"success\");\r\n // webix.$$(\"huyhoadonForms\").close();\r\n }\r\n },\r\n });\r\n }\r\n });\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 120,\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n webix.$$(\"huyhoadonForms\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1) {\r\n icon = \"\";\r\n var result = webix\r\n .ajax()\r\n .sync()\r\n .get(app.config.host + \"/System/GetDmDvcsByUser\");\r\n var json = JSON.parse(result.response);\r\n\r\n // $$(\"dclhe\").setValue(json[0].address);\r\n $$(\"tnnt\").setValue(json[0].name);\r\n $$(\"mst\").setValue(json[0].tax_code);\r\n $$(\"tcqt\").setValue(json[0].cqt_ql);\r\n $$(\"ddanh\").setValue(json[0].city);\r\n $$(\"mcqt\").setValue(json[0].manage_tax_authorities);\r\n console.log(json);\r\n // $$(\"dctdtu\").setValue(json[0].email);\r\n // $$(\"nlhe\").setValue(json[0].manage);\r\n } else {\r\n if (editmode == 2) icon = \"\";\r\n else icon = \"\";\r\n }\r\n\r\n webix.$$(\"head-icondksd\").setHTML(icon);\r\n webix.$$(\"head-icondksd\").refresh();\r\n },\r\n setValues: function (item, winconfig, params) {\r\n $$(\"danhsach_hoadonhuy\").parse(item);\r\n },\r\n setValuesTongQuat: function (item, winconfig, params) {\r\n var data = $$(\"huyhoadon\").getValues();\r\n data.so = item.so;\r\n data.ntbccqt = item.ntbccqt;\r\n data.loai = item.loai;\r\n $$(\"huyhoadon\").parse(data);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_huyhoadon_1/68_mau04form',[\"app\", \"models/user\"], function (app, user) {\r\n var controls = {\r\n cols: [\r\n {\r\n view: \"icon\",\r\n icon: \"plus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsachhoadonhuy\");\r\n table.add({});\r\n },\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"minus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsachhoadonhuy\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n var editor = table.getEditState();\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n };\r\n\r\n var controls2 = {\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n type: \"form\",\r\n label: \"Lưu và Chuyển bước 2 (F10)\",\r\n shortcut: \"F10\",\r\n width: 200,\r\n align: \"center\",\r\n on: {\r\n onClick: function () {\r\n $$(\"tabbar\").setValue(\"formView\");\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n type: \"danger\",\r\n label: \"Thoát (ESC)\",\r\n hotkey: \"esc\",\r\n width: 150,\r\n align: \"center\",\r\n on: {\r\n onClick: function () {\r\n webix.$$(\"huyhoadon-win\").close();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ],\r\n };\r\n\r\n var table = {\r\n id: \"danhsachhoadonhuy\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: true,\r\n tooltip: true,\r\n height: 200,\r\n scheme: {},\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n width: 40,\r\n },\r\n {\r\n id: \"khieu\",\r\n name: \"khieu\",\r\n header: \"Ký hiệu mẫu hóa đơn và ký hiệu hóa đơn\",\r\n width: 200,\r\n },\r\n {\r\n id: \"shdon\",\r\n name: \"shdon\",\r\n header: \"Số hóa đơn điện tử\",\r\n width: 120,\r\n },\r\n {\r\n id: \"tdlap\",\r\n name: \"tdlap\",\r\n header: \"Ngày lập hóa đơn\",\r\n width: 120,\r\n format: webix.i18n.dateFormatStr,\r\n editor: \"date\",\r\n },\r\n {\r\n id: \"ladhddt\",\r\n name: \"ladhddt\",\r\n header: \"Loại áp dụng hóa đơn điện tử\",\r\n template: function (obj) {\r\n switch (obj.ladhddt) {\r\n case 1:\r\n return \"HĐĐT Nghị đinh số 123/2020/NĐ-CP \";\r\n case 2:\r\n return \"HĐĐT có mã của cơ quan thu \";\r\n case 3:\r\n return \"Các loại hóa đơn theo Nghị đinh 51/2010 \";\r\n case 4:\r\n return \"Hóa đơn đặt in theo Nghị định số 123/2020/NĐ-C \";\r\n default:\r\n break;\r\n }\r\n },\r\n width: 180,\r\n },\r\n {\r\n id: \"tctbao\",\r\n name: \"tctbao\",\r\n header: \"Hủy/Giải trình\",\r\n width: 180,\r\n },\r\n {\r\n id: \"ldo\",\r\n name: \"ldo\",\r\n header: \"Lý do\",\r\n width: 180,\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n };\r\n\r\n var pagination = {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n };\r\n\r\n var ui = {\r\n id: \"infoView\",\r\n margin: 0,\r\n rows: [\r\n controls,\r\n table,\r\n pagination,\r\n {\r\n height: 10,\r\n },\r\n controls2,\r\n ],\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n };\r\n});\r\n\ndefine('views/forms/68_huyhoadon_1/68_huyhoadonchitietform',[\"app\", \"models/user\"], function (app, user) {\r\n var editmode = 0;\r\n\r\n var table = {\r\n id: \"hoadon\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {},\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n width: 40,\r\n },\r\n {\r\n id: \"khieu\",\r\n name: \"khieu\",\r\n header: \"Ký hiệu mẫu hóa đơn và ký hiệu hóa đơn\",\r\n width: 200,\r\n },\r\n {\r\n id: \"shdon\",\r\n name: \"shdon\",\r\n header: \"Số hóa đơn điện tử\",\r\n width: 120,\r\n },\r\n {\r\n id: \"tdlap\",\r\n name: \"tdlap\",\r\n header: \"Ngày lập hóa đơn\",\r\n width: 120,\r\n format: webix.i18n.dateFormatStr,\r\n editor: \"date\",\r\n },\r\n {\r\n id: \"ladhddt\",\r\n name: \"ladhddt\",\r\n header: \"Loại áp dụng hóa đơn điện tử\",\r\n template: function (obj) {\r\n switch (obj.ladhddt) {\r\n case 1:\r\n return \"HĐĐT Nghị đinh số 123/2020/NĐ-CP \";\r\n case 2:\r\n return \"HĐĐT có mã của cơ quan thu \";\r\n case 3:\r\n return \"Các loại hóa đơn theo Nghị đinh 51/2010 \";\r\n case 4:\r\n return \"Hóa đơn đặt in theo Nghị định số 123/2020/NĐ-C \";\r\n default:\r\n break;\r\n }\r\n },\r\n width: 180,\r\n },\r\n {\r\n id: \"tctbao\",\r\n name: \"tctbao\",\r\n header: \"Hủy/Giải trình\",\r\n width: 180,\r\n },\r\n {\r\n id: \"ldo\",\r\n name: \"ldo\",\r\n header: \"Lý do\",\r\n width: 180,\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n };\r\n\r\n var buttons = {\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F8\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"save\",\r\n label: \"Lưu tạm (F8)\",\r\n width: 120,\r\n align: \"center\",\r\n on: {\r\n onClick: function () {},\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F9\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"signal\",\r\n label: \"Ký chờ xử lý (F9)\",\r\n width: 150,\r\n align: \"center\",\r\n on: {\r\n onClick: function () {},\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n type: \"icon\",\r\n icon: \"paper-plane\",\r\n view: \"button\",\r\n label: \"Ký và gửi CQT (F10)\",\r\n width: 150,\r\n align: \"center\",\r\n on: {\r\n onClick: function () {},\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F11\",\r\n view: \"button\",\r\n label: \"Kết xuất mẫu 04 (F11)\",\r\n type: \"icon\",\r\n icon: \"file-export\",\r\n width: 150,\r\n align: \"center\",\r\n on: {\r\n onClick: function () {},\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 120,\r\n type: \"icon\",\r\n icon: \"ban\",\r\n align: \"center\",\r\n click: function () {\r\n webix.$$(\"huyhoadon-win\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n };\r\n\r\n var ui = {\r\n id: \"previewView\",\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n height: 600,\r\n view: \"template\",\r\n id: \"pdfViewInfoOld\",\r\n },\r\n {\r\n height: 600,\r\n view: \"template\",\r\n id: \"pdfViewInfoNew\",\r\n },\r\n ],\r\n },\r\n buttons,\r\n ],\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n\r\n setValues: function (item) {},\r\n };\r\n});\r\n\ndefine('views/forms/68_huyhoadon_1/68_hoadonform',[\"app\", \"models/user\", \"locale\"], function (app, user, _) {\r\n var header = {\r\n view: \"template\",\r\n template: \"Hóa đơn gia trị gia tăng (01GTKT)\",\r\n type: \"header\",\r\n };\r\n\r\n var master = {\r\n cols: [\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin hóa đơn\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n id: \"tdlap\",\r\n view: \"datepicker\",\r\n label: \"Ngày hóa đơn\",\r\n labelWidth: 100,\r\n name: \"tdlap\",\r\n },\r\n {\r\n id: \"shdon\",\r\n view: \"text\",\r\n label: \"Số hóa đơn\",\r\n labelWidth: 100,\r\n name: \"shdon\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"tmau\",\r\n view: \"text\",\r\n label: \"Mẫu hóa đơn\",\r\n labelWidth: 100,\r\n name: \"tmau\",\r\n },\r\n {\r\n id: \"khieu\",\r\n view: \"text\",\r\n label: \"Ký hiệu\",\r\n labelWidth: 100,\r\n name: \"khieu\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"dvtte\",\r\n view: \"text\",\r\n label: \"Mã tiền tệ\",\r\n labelWidth: 100,\r\n name: \"dvtte\",\r\n },\r\n {\r\n id: \"tgia\",\r\n view: \"text\",\r\n label: \"Tỷ giá\",\r\n labelWidth: 100,\r\n name: \"tgia\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"htttoan\",\r\n view: \"combo\",\r\n label: \"HT thanh toán\",\r\n labelWidth: 100,\r\n name: \"htttoan\",\r\n },\r\n {\r\n id: \"sdhang\",\r\n view: \"text\",\r\n label: \"Số đơn hàng\",\r\n labelWidth: 100,\r\n name: \"sdhang\",\r\n },\r\n ],\r\n },\r\n {\r\n id: \"stknban\",\r\n view: \"text\",\r\n label: \"STK bên bán\",\r\n labelWidth: 100,\r\n name: \"stknban\",\r\n },\r\n ],\r\n },\r\n },\r\n {\r\n width: 10,\r\n },\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin khách hàng\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n id: \"mst\",\r\n view: \"search\",\r\n labelWidth: 110,\r\n label: \"Mã số thuế\",\r\n name: \"mst\",\r\n },\r\n {\r\n id: \"mnmua\",\r\n view: \"gridsuggest\",\r\n label: \"Mã đối tượng\",\r\n labelWidth: 110,\r\n width: 300,\r\n name: \"mnmua\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"tnmua\",\r\n view: \"text\",\r\n name: \"tnmua\",\r\n label: \"Tên người mua\",\r\n labelWidth: 110,\r\n },\r\n {\r\n id: \"email\",\r\n view: \"text\",\r\n labelWidth: 110,\r\n label: \"Email\",\r\n name: \"email\",\r\n },\r\n ],\r\n },\r\n {\r\n id: \"ten\",\r\n view: \"text\",\r\n name: \"ten\",\r\n label: \"Tên đơn vị\",\r\n labelWidth: 110,\r\n },\r\n {\r\n id: \"dchi\",\r\n view: \"text\",\r\n labelWidth: 110,\r\n label: \"Địa chỉ\",\r\n name: \"dchi\",\r\n },\r\n {\r\n id: \"stknmua\",\r\n view: \"text\",\r\n label: \"STK người mua\",\r\n labelWidth: 110,\r\n name: \"stknmua\",\r\n },\r\n {\r\n id: \"mccqthue\",\r\n view: \"combo\",\r\n label: \"Cơ quan thuế\",\r\n labelWidth: 110,\r\n name: \"mccqthue\",\r\n },\r\n ],\r\n },\r\n },\r\n ],\r\n };\r\n\r\n var detail = {\r\n borderless: true,\r\n scrollX: true,\r\n tabbar: {\r\n width: 200,\r\n },\r\n view: \"tabview\",\r\n id: \"tab_replace\",\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn (01GTKT)\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"icon\",\r\n icon: \"plus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"chitiethoadon\");\r\n table.add({});\r\n },\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"minus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"chitiethoadon\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n var editor = table.getEditState();\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n id: \"chitiethoadon\",\r\n height: 220,\r\n name: \"chitiethoadon\",\r\n resizeColumn: true,\r\n footer: false,\r\n editable: true,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"cthdon_id\",\r\n name: \"cthdon_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"hdon_id\",\r\n name: \"hdon_id\",\r\n hidden: true,\r\n },\r\n {\r\n width: 120,\r\n id: \"choose\",\r\n header: \"Chọn\",\r\n editor: \"checkbox\",\r\n width: 90,\r\n template: function () {\r\n return \"\";\r\n },\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n width: 40,\r\n },\r\n {\r\n id: \"ma\",\r\n name: \"ma\",\r\n header: \"Mã hàng\",\r\n width: 150,\r\n editor: \"combo\",\r\n suggest: {\r\n view: \"gridsuggest\",\r\n body: {\r\n url: null,\r\n columns: [\r\n {\r\n id: \"ma\",\r\n header: \"Mã hàng hóa\",\r\n width: 120,\r\n },\r\n {\r\n id: \"ten\",\r\n header: \"Tên hàng hóa\",\r\n width: 250,\r\n },\r\n ],\r\n dataFeed: function (filtervalue, filter) {},\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {},\r\n },\r\n },\r\n },\r\n {\r\n id: \"ten\",\r\n name: \"Tên hàng hóa\",\r\n header: \"Tên hàng hóa\",\r\n width: 250,\r\n editor: \"text\",\r\n },\r\n {\r\n id: \"mdvtinh\",\r\n name: \"mdvtinh\",\r\n header: \"ĐVT\",\r\n width: 150,\r\n editor: \"combo\",\r\n suggest: {\r\n view: \"gridsuggest\",\r\n body: {\r\n url: null,\r\n columns: [\r\n {\r\n id: \"ten\",\r\n header: \"Tên ĐVT\",\r\n width: 150,\r\n },\r\n ],\r\n dataFeed: function (filtervalue, filter) {},\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {},\r\n },\r\n },\r\n },\r\n {\r\n id: \"sluong\",\r\n name: \"sluong\",\r\n header: \"Số lượng\",\r\n width: 120,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n {\r\n id: \"dgia\",\r\n name: \"dgia\",\r\n header: \"Đơn giá\",\r\n width: 120,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n\r\n {\r\n id: \"thtien\",\r\n name: \"thtien\",\r\n header: \"Tiền trước thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n\r\n {\r\n id: \"tlckhau\",\r\n name: \"tlckhau\",\r\n header: \"% CK\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n\r\n {\r\n id: \"stckhau\",\r\n name: \"stckhau\",\r\n header: \"Tiền CK\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n\r\n {\r\n id: \"tsuat\",\r\n name: \"tsuat\",\r\n header: \"Thuế suất\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"combo\",\r\n options: null,\r\n },\r\n\r\n {\r\n id: \"tthue\",\r\n name: \"tthue\",\r\n header: \"Tiền thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n\r\n {\r\n id: \"tgtien\",\r\n name: \"tgtien\",\r\n header: \"Tiền sau thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n ],\r\n };\r\n\r\n var totalFooter = {\r\n rows: [\r\n {\r\n view: \"treetable\",\r\n autoheight: true,\r\n autowidth: true,\r\n columns: [\r\n {\r\n id: \"value\",\r\n header: \"Loại thuế\",\r\n width: 250,\r\n template: \"{common.icon()} #value#\",\r\n },\r\n {\r\n id: \"ttthue_total\",\r\n header: \"Thành tiền trước thuế\",\r\n width: 200,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n },\r\n {\r\n id: \"tckhau_total\",\r\n header: \"Tiền chiết khấu\",\r\n width: 200,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n },\r\n {\r\n id: \"tthue_total\",\r\n header: \"Tiền thuế\",\r\n width: 200,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n },\r\n {\r\n id: \"ttsthue_total\",\r\n header: \"Tiền thuế\",\r\n width: 200,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n },\r\n ],\r\n data: [\r\n {\r\n id: \"1\",\r\n value: \"Tổng cộng hàng hóa dịch vụ\",\r\n open: true,\r\n ttthue_total: 3000000,\r\n tckhau_total: 500000,\r\n tthue_total: 100000,\r\n ttsthue_total: 3100000,\r\n data: [\r\n {\r\n id: \"1.1\",\r\n value: \"Thuế suất 0%\",\r\n ttthue_total: 1000000,\r\n tckhau_total: 0,\r\n tthue_total: 0,\r\n ttsthue_total: 1000000,\r\n },\r\n {\r\n id: \"1.2\",\r\n value: \"Thuế suất 5%\",\r\n ttthue_total: 1000000,\r\n tckhau_total: 0,\r\n tthue_total: 50000,\r\n ttsthue_total: 1050000,\r\n },\r\n {\r\n id: \"1.3\",\r\n value: \"Thuế suất 10%\",\r\n ttthue_total: 1000000,\r\n tckhau_total: 500000,\r\n tthue_total: 50000,\r\n ttsthue_total: 1050000,\r\n },\r\n {\r\n id: \"1.4\",\r\n value: \"Không chịu thuế GTGT\",\r\n ttthue_total: 1000000,\r\n tckhau_total: 0,\r\n tthue_total: 0,\r\n ttsthue_total: 0,\r\n },\r\n {\r\n id: \"1.5\",\r\n value: \"Không kê thai, tính nộp thuế GTGT\",\r\n ttthue_total: 0,\r\n tckhau_total: 0,\r\n tthue_total: 0,\r\n ttsthue_total: 0,\r\n },\r\n ],\r\n },\r\n {\r\n id: \"2\",\r\n value: \"Tổng cộng phí lệ phí\",\r\n open: true,\r\n ttthue_total: 0,\r\n tckhau_total: 0,\r\n tthue_total: 0,\r\n ttsthue_total: 0,\r\n },\r\n {\r\n id: \"3\",\r\n value: \"Tổng cộng thanh toán\",\r\n open: true,\r\n ttthue_total: 0,\r\n tckhau_total: 0,\r\n tthue_total: 0,\r\n ttsthue_total: 0,\r\n },\r\n {\r\n id: \"4\",\r\n value: \"Đọc tiền bằng chữ\",\r\n open: true,\r\n ttthue_total: 0,\r\n tckhau_total: 0,\r\n tthue_total: 0,\r\n ttsthue_total: 0,\r\n },\r\n ],\r\n },\r\n {\r\n id: \"amount_to_word_inv_invoiceauth\",\r\n view: \"text\",\r\n label: \"Đọc tiền bằng chữ\",\r\n labelWidth: 150,\r\n name: \"amount_to_word\",\r\n },\r\n ],\r\n };\r\n\r\n var controls = {\r\n cols: [\r\n {\r\n view: \"button\",\r\n label: \"Chuyển đến giai đoạn 3\",\r\n width: 200,\r\n on: {\r\n onClick: function () {\r\n $$(\"tabbar\").setValue(\"previewView\");\r\n var win = webix.$$(\"previewView\");\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n\r\n var url = \"http://localhost:18374/hopdong/printhopdong?id=b9496ff0-360d-4852-8153-4b3c54fbe167&type=pdf\";\r\n webix.ajax().get(url, function (response) {\r\n win.enable();\r\n win.hideProgress();\r\n var file = new Blob([response], {\r\n type: \"application/pdf\",\r\n });\r\n var fileURL = URL.createObjectURL(file);\r\n\r\n var builder = '';\r\n\r\n $$(\"pdfViewInfo\").setHTML(builder);\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Quay lại\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n $$(\"tabbar\").setValue(\"infoView\");\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n ],\r\n };\r\n\r\n var ui = {\r\n view: \"form\",\r\n scroll: true,\r\n id: \"formView\",\r\n elements: [header, master, detail, totalFooter, controls],\r\n };\r\n return {\r\n $ui: {\r\n // paddingY: 10,\r\n // paddingX: 10,\r\n // elementsConfig: { labelWidth: 100 },\r\n view: \"form\",\r\n id: \"huyhoadon_add\",\r\n // complexData: true,\r\n scroll: true,\r\n margin: 0,\r\n on: {\r\n // onViewShow: function () {\r\n // }\r\n },\r\n elements: [\r\n {\r\n view: \"scrollview\",\r\n scroll: \"y\",\r\n body: {\r\n paddingX: 18,\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin hóa đơn\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n { view: \"text\", label: \"cctbao_id\", id: \"cctbao_id\", name: \"cctbao_id\", hidden: true },\r\n {\r\n view: \"datepicker\",\r\n name: \"tdlap\",\r\n label: \"Ngày lập\",\r\n //labelPosition: \"top\",\r\n id: \"tdlap\",\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n },\r\n {\r\n view: \"text\",\r\n name: \"shdon\",\r\n id: \"shdon\",\r\n label: \"Số HĐ\",\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: _(\"Ký hiệu\"),\r\n name: \"khieu\",\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n id: \"khieu\",\r\n // type:\"number\",\r\n attributes: { maxlength: 7 },\r\n },\r\n {\r\n view: \"text\",\r\n label: _(\"Số đơn hàng\"),\r\n name: \"sdhang\",\r\n id: \"sdhang\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"combo\",\r\n name: \"dvtte\",\r\n label: \"Mã tiền tệ\",\r\n //labelPosition: \"top\",\r\n id: \"dvtte\",\r\n required: true,\r\n value: \"1\",\r\n invalidMessage: \"Trạng thái hóa đơn không thể bỏ trống !\",\r\n options: {\r\n view: \"gridsuggest\",\r\n value: \"1\",\r\n template: \"#value#\",\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00188\",\r\n body: {\r\n columns: [{ id: \"value\", header: _(\"Mã tiền tệ\"), width: 220 }],\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) {\r\n this.load(this.config.url);\r\n return;\r\n }\r\n\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00188\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Tỷ giá\",\r\n type: \"number\",\r\n value: 1,\r\n name: \"tgia\",\r\n id: \"tgia\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == undefined) return;\r\n if (newv == \"\") return;\r\n if (!webix.rules.isNumber(newv)) {\r\n webix.message(\"Tỷ giá phải nhập số\", \"error\");\r\n this.focus();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"combo\",\r\n name: \"htttoan\",\r\n label: \"HT thanh toán\",\r\n //labelPosition: \"top\",\r\n value: \"đồng\",\r\n id: \"htttoan\",\r\n options: {\r\n view: \"gridsuggest\",\r\n template: \"#name#\",\r\n body: {\r\n scroll: true,\r\n autoheight: false,\r\n columns: [\r\n // { id: \"id\", header: _(\"MS_THUE\"), width: 150 },\r\n { id: \"code\", header: _(\"Mã ngoại tệ\"), width: 150 },\r\n { id: \"name\", header: _(\"Tên ngoại tệ\"), width: 550 },\r\n ],\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00252\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00252\",\r\n },\r\n on: {},\r\n },\r\n {\r\n view: \"text\",\r\n label: _(\"STK người bán\"),\r\n id: \"stknban\",\r\n name: \"stknban\",\r\n },\r\n ],\r\n },\r\n },\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin khách hàng\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n id: \"mst\",\r\n name: \"mst\",\r\n view: \"search\",\r\n label: \"Mã số thuế\",\r\n //align: \"center\",\r\n validate: webix.rules.isTaxCode,\r\n invalidMessage: \"Mã số thuế không hợp lệ\",\r\n placeholder: _(\"SEARCH\") + \"...\",\r\n // width: 300,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == undefined) return;\r\n if (newv == \"\") return;\r\n if (!webix.rules.isTaxCode(newv)) {\r\n webix.message(\"Mã số thuế không hợp lệ\", \"error\");\r\n this.focus();\r\n return;\r\n }\r\n // if (newv.length != 11) {\r\n // webix.message({ type: \"error\", text: \"Độ dài mẫu số phải là 11 ký tự\" });\r\n // this.focus();\r\n // return;\r\n // }\r\n },\r\n onTimedKeyPress: function () {\r\n // var table = $$(\"tblSearch\");\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n },\r\n onSearchIconClick: function (e) {\r\n var mst = this.getValue();\r\n // window.location.href = \"http://tracuunnt.gdt.gov.vn/tcnnt/mstdn.jsp?mst=\" + mst;\r\n window.open(\"http://tracuunnt.gdt.gov.vn/tcnnt/mstdn.jsp?mst=\" + mst);\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n editor: \"textsearch\",\r\n label: \"Mã đối tượng\",\r\n id: \"mnmua\",\r\n name: \"mnmua\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n { view: \"text\", label: _(\"Tên người mua\"), name: \"tnmua\", id: \"tnmua\" },\r\n { view: \"text\", label: _(\"Email\"), name: \"email\", id: \"email\" },\r\n ],\r\n },\r\n { view: \"text\", label: _(\"Tên đơn vị\"), name: \"ten\", id: \"ten\" },\r\n { view: \"text\", label: _(\"Địa chỉ\"), name: \"dchi\", id: \"dchi\" },\r\n { view: \"text\", label: _(\"STK người mua\"), name: \"stknmua\", id: \"stknmua\" },\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n borderless: true,\r\n view: \"tabview\",\r\n scrollX: true,\r\n tabbar: {\r\n width: 200,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n rows: [\r\n {\r\n id: \"mainInvoiceManage\",\r\n css: { \"padding-bottom\": \"5px !important\" },\r\n // view: \"toolbar\",\r\n // height: 18,\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n // id: \"btnPrint\",\r\n // view: \"button\", type: \"icon\",\r\n // //view: \"icon\",\r\n id: \"addrow\",\r\n // label: \" (F9)\",\r\n // width: 60,\r\n // icon: \"fas fa-plus\",\r\n css: \"btnForm\",\r\n //css: { \"font-size\": \"15px\" },\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n var item = { id: webix.uid() };\r\n table.add(item);\r\n table.select(item.id, \"ma\", false);\r\n table.edit({ row: item.id, column: \"ma\" });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n // view: \"button\",\r\n id: \"removerow\",\r\n // type: \"icon\",\r\n // //view: \"icon\",\r\n // label: \" (F8)\",\r\n // width: 60,\r\n css: \"btnForm\",\r\n // icon: \"fas fa-minus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow\",\r\n // type: \"icon\",\r\n //view: \"icon\",\r\n // label: \" (F7)\",\r\n // width: 60,\r\n // icon: \"fas fa-copy\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n //item.id = webix.uid();\r\n var copy = webix.copy(item);\r\n copy.id = webix.uid();\r\n //copy[tab.tab_table + \"_id\"] = null;\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, \"ma\", false);\r\n table.edit({ row: copy.id, column: \"ma\" });\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"check_chietkhau\",\r\n value: 0,\r\n labelRight: _(\"Chiết khấu\"),\r\n labelWidth: 2,\r\n tooltip: \"Tích vào đây nếu hóa đơn có chiết khấu\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"hoadon68_chitiet\").showColumn(\"stckhau\");\r\n $$(\"hoadon68_chitiet\").showColumn(\"tlckhau\");\r\n } else {\r\n $$(\"hoadon68_chitiet\").hideColumn(\"stckhau\");\r\n $$(\"hoadon68_chitiet\").hideColumn(\"tlckhau\");\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_chitiet\",\r\n // tab_table: tab.tab_table,\r\n // tab_id: tab.tab_id,\r\n editable: true,\r\n select: \"cell\",\r\n height: 260,\r\n drag: true,\r\n // select_change: tab.select_change,\r\n // cell_editstop: tab.cell_editstop,\r\n // after_addrow: tab.after_addrow,\r\n // after_delrow: tab.after_delrow,\r\n // oncheck: tab.oncheck,\r\n columns: [\r\n { id: \"stt\", header: \"\", width: 30 },\r\n {\r\n id: \"ma\",\r\n header: _(\"Mã hàng hóa\"),\r\n editor: \"textsearch\",\r\n width: 100,\r\n editable: true,\r\n suggest: {\r\n view: \"gridsuggest\",\r\n // value_suggest: field.value_suggest,\r\n // fieldExpression: field.field_expression,\r\n // displayField: field.display_field,\r\n // tableId: \"edit_inv_InvoiceDetail\",\r\n columnName: \"ma_hanghoa\",\r\n body: {\r\n columns: [\r\n { id: \"id\", hidden: true, header: \"id\" },\r\n { id: \"code\", width: 120, header: \"code\" },\r\n { id: \"name\", width: 350, header: \"name\" },\r\n ],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00005\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n var table = $$(\"hoadon68_chitiet\");\r\n var selectedItem = table.getSelectedItem();\r\n selectedItem[\"ma\"] = obj[\"code\"];\r\n selectedItem[\"ten\"] = obj[\"name\"];\r\n selectedItem[\"mdvtinh\"] = obj[\"unit_code\"];\r\n selectedItem[\"dgia\"] = obj[\"unit_price\"];\r\n selectedItem[\"tsuat\"] = obj[\"vat_type\"];\r\n table.updateItem(selectedItem.id, selectedItem);\r\n },\r\n },\r\n },\r\n },\r\n {\r\n id: \"ten\",\r\n header: _(\"Tên hàng hóa\"),\r\n editor: \"text\",\r\n width: 350,\r\n editable: true,\r\n },\r\n {\r\n id: \"mdvtinh\",\r\n header: _(\"ĐVT\"),\r\n editor: \"text\",\r\n width: 80,\r\n editable: true,\r\n suggest: {\r\n view: \"gridsuggest\",\r\n columnName: \"name\",\r\n body: {\r\n columns: [\r\n { id: \"id\", hidden: true, header: \"id\" },\r\n { id: \"name\", width: 120, header: \"name\" },\r\n ],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?id=RF00035\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n var table = $$(\"hoadon68_chitiet\");\r\n var selectedItem = table.getSelectedItem();\r\n selectedItem[\"mdvtinh\"] = obj[\"code\"];\r\n\r\n table.updateItem(selectedItem.id, selectedItem);\r\n },\r\n },\r\n },\r\n },\r\n {\r\n id: \"sluong\",\r\n header: _(\"Số lượng\"),\r\n editor: \"autonumeric\",\r\n width: 100,\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"dgia\",\r\n header: _(\"Đơn giá\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"thtien\",\r\n header: _(\"Tiền trước thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"tlckhau\",\r\n header: _(\"% CK\"),\r\n width: 80,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n hidden: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"stckhau\",\r\n header: _(\"Tiền CK\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n hidden: true,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tsuat\",\r\n header: _(\"Thuế suất\"),\r\n width: 100,\r\n // editor: \"combo\",\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n // on: {\r\n // onChange: function (newv, oldv) {\r\n // }\r\n // },\r\n // options: app.config.host + \"/System/GetDataByReferencesId?id=D6FAEAFC-4EF2-4ABD-AB45-F3DCB4805740\",\r\n // optionslist: true\r\n },\r\n {\r\n id: \"tthue\",\r\n header: _(\"Tiền thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tgtien\",\r\n header: _(\"Tiền sau thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"kmai\",\r\n header: _(\"Khuyến mại\"),\r\n width: 100,\r\n editor: \"checkbox\",\r\n editable: true,\r\n template: \"{common.checkbox()}\",\r\n checkValue: true,\r\n uncheckValue: false,\r\n },\r\n ],\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onAfterLoad: function () {\r\n var table = this;\r\n var data = table.serialize();\r\n data.forEach(function (entry) {\r\n if (entry[\"stckhau\"] != undefined || entry[\"tlckhau\"] != undefined) {\r\n if (entry[\"stckhau\"] != 0 || entry[\"tlckhau\"] != 0) {\r\n var ck = $$(\"check_chietkhau\");\r\n if (ck != undefined) {\r\n ck.setValue(1);\r\n return false;\r\n // $$(\"edit_\" + tab.tab_table).showColumn(\"inv_discountAmount\");\r\n // $$(\"edit_\" + tab.tab_table).showColumn(\"inv_discountPercentage\");\r\n }\r\n }\r\n }\r\n });\r\n },\r\n onCheck: function (row, column, state) {\r\n var table = this;\r\n if (column == \"khuyen_mai\") {\r\n if (state == true) {\r\n // var selectedItem = table.getItem(row);\r\n // selectedItem.don_gia = null;\r\n // selectedItem.tien_tt = null;\r\n // selectedItem.pt_ck = null;\r\n // selectedItem.tien_ck = null;\r\n // selectedItem.pt_thue = null;\r\n // selectedItem.tien_thue = null;\r\n // selectedItem.tong_tien = null;\r\n // table.updateItem(selectedItem.id, selectedItem);\r\n // table.callEvent(\"onAfterAdd\");\r\n }\r\n }\r\n },\r\n onAfterAdd: function (id, index) {\r\n var table = $$(this.config.id);\r\n var data = table.serialize();\r\n\r\n var tong_tien_tt_dp = 0;\r\n var tong_tien_thue_dp = 0;\r\n var tong_tien_ck_dp = 0;\r\n var tong_tien_dp = 0;\r\n data.forEach(function (entry) {\r\n tong_tien_tt_dp += entry[\"tien_tt\"] == null ? 0 : entry[\"tien_tt\"];\r\n tong_tien_thue_dp += entry[\"tien_thue\"] == null ? 0 : entry[\"tien_thue\"];\r\n tong_tien_ck_dp += entry[\"tien_ck\"] == null ? 0 : entry[\"tien_ck\"];\r\n tong_tien_dp += entry[\"tong_tien\"] == null ? 0 : entry[\"tong_tien\"];\r\n\r\n // $$(\"inv_Invoice_tien_tt\").setValue(tong_tien_tt_dp);\r\n // $$(\"inv_Invoice_tien_ck\").setValue(tong_tien_ck_dp);\r\n // $$(\"inv_Invoice_tien_thue\").setValue(tong_tien_thue_dp);\r\n // $$(\"inv_Invoice_tong_tien\").setValue(tong_tien_dp);\r\n });\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n var table = $$(this.config.id);\r\n var selectedItem = table.getItem(editor.row);\r\n var columnId = editor.config.id;\r\n\r\n var so_luong = webix.rules.isNumber(selectedItem.sluong) ? selectedItem.sluong : 0;\r\n var don_gia = webix.rules.isNumber(selectedItem.dgia) ? selectedItem.dgia : 0;\r\n var tien_tt = webix.rules.isNumber(selectedItem.thtien) ? selectedItem.thtien : 0;\r\n var pt_ck = webix.rules.isNumber(selectedItem.tlckhau) ? selectedItem.tlckhau : 0;\r\n var tien_ck = webix.rules.isNumber(selectedItem.stckhau) ? selectedItem.stckhau : 0;\r\n var pt_thue = webix.rules.isNumber(selectedItem.tsuat) ? selectedItem.tsuat : 0;\r\n var tien_thue = webix.rules.isNumber(selectedItem.tthue) ? selectedItem.tthue : 0;\r\n var tong_tien = webix.rules.isNumber(selectedItem.tgtien) ? selectedItem.tgtien : 0;\r\n if (\r\n columnId == \"tsuat\" ||\r\n columnId == \"sluong\" ||\r\n columnId == \"dgia\" ||\r\n columnId == \"thtien\" ||\r\n columnId == \"tgtien\" ||\r\n columnId == \"tlckhau\" ||\r\n columnId == \"stckhau\"\r\n ) {\r\n if (don_gia < 0) {\r\n don_gia = 0;\r\n }\r\n if (so_luong < 0) {\r\n so_luong = 0;\r\n }\r\n\r\n if (don_gia > 0) {\r\n tien_tt = so_luong * don_gia;\r\n }\r\n\r\n if (pt_ck < 0) {\r\n pt_ck = 0;\r\n }\r\n if (pt_ck > 100) {\r\n pt_ck = 0;\r\n }\r\n\r\n tien_ck = (tien_tt * pt_ck) / 100;\r\n if (tien_ck - tien_tt > 0) {\r\n tien_ck = 0;\r\n }\r\n tien_thue = ((tien_tt - tien_ck) * pt_thue) / 100;\r\n\r\n tong_tien = Math.round(tien_tt - tien_ck + parseFloat(tien_thue));\r\n }\r\n selectedItem.sluong = so_luong;\r\n selectedItem.dgia = don_gia;\r\n selectedItem.tsuat = pt_thue;\r\n selectedItem.thtien = tien_tt;\r\n selectedItem.tlckhau = pt_ck;\r\n selectedItem.stckhau = tien_ck;\r\n selectedItem.tthue = tien_thue;\r\n selectedItem.tgtien = tong_tien;\r\n table.updateItem(selectedItem.id, selectedItem);\r\n\r\n var data = table.serialize();\r\n var tien_tt_all = 0;\r\n var tien_thue_all = 0;\r\n var tien_ck_all = 0;\r\n var tong_tien_all = 0;\r\n\r\n var tien_tt_10 = 0;\r\n var tien_thue_10 = 0;\r\n var tien_ck_10 = 0;\r\n var tong_tien_10 = 0;\r\n\r\n var tien_tt_5 = 0;\r\n var tien_thue_5 = 0;\r\n var tien_ck_5 = 0;\r\n var tong_tien_5 = 0;\r\n\r\n var tien_tt_0 = 0;\r\n var tien_thue_0 = 0;\r\n var tien_ck_0 = 0;\r\n var tong_tien_0 = 0;\r\n\r\n var tien_tt_kct = 0;\r\n var tien_thue_kct = 0;\r\n var tien_ck_kct = 0;\r\n var tong_tien_kct = 0;\r\n\r\n var tien_tt_kkk = 0;\r\n var tien_thue_kkk = 0;\r\n var tien_ck_kkk = 0;\r\n var tong_tien_kkk = 0;\r\n\r\n data.forEach(function (entry) {\r\n tien_tt_all += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_all += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_all += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_all += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n\r\n if (entry[\"tsuat\"] == 10) {\r\n tien_tt_10 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_10 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_10 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_10 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n if (entry[\"tsuat\"] == 5) {\r\n tien_tt_5 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_5 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_5 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_5 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n if (entry[\"tsuat\"] == 0) {\r\n tien_tt_0 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_0 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_0 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_0 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n if (entry[\"tsuat\"] == -1) {\r\n tien_tt_kct += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kct += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kct += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kct += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n if (entry[\"tsuat\"] == -2) {\r\n tien_tt_kkk += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kkk += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kkk += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kkk += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n });\r\n\r\n $$(\"tgtcthue\").setValue(tien_tt_all);\r\n $$(\"tgtcthue10\").setValue(tien_tt_10);\r\n $$(\"tgtcthue5\").setValue(tien_tt_5);\r\n $$(\"tgtcthue0\").setValue(tien_tt_0);\r\n $$(\"tgtcthuekct\").setValue(tien_tt_kct);\r\n $$(\"tgtcthuekkk\").setValue(tien_tt_kkk);\r\n\r\n $$(\"ttcktmai\").setValue(tien_ck_all);\r\n $$(\"ttcktmai10\").setValue(tien_ck_10);\r\n $$(\"ttcktmai5\").setValue(tien_ck_5);\r\n $$(\"ttcktmai0\").setValue(tien_ck_0);\r\n $$(\"ttcktmaikct\").setValue(tien_ck_kct);\r\n $$(\"ttcktmaikkk\").setValue(tien_ck_kkk);\r\n\r\n $$(\"tgtthue\").setValue(tien_thue_all);\r\n $$(\"tgtthue10\").setValue(tien_thue_10);\r\n $$(\"tgtthue5\").setValue(tien_thue_5);\r\n $$(\"tgtthue0\").setValue(tien_thue_0);\r\n $$(\"tgtthuekct\").setValue(tien_thue_kct);\r\n $$(\"tgtthuekkk\").setValue(tien_thue_kkk);\r\n\r\n $$(\"tgtttbso\").setValue(tong_tien_all);\r\n $$(\"tgtttbso10\").setValue(tong_tien_10);\r\n $$(\"tgtttbso5\").setValue(tong_tien_5);\r\n $$(\"tgtttbso0\").setValue(tong_tien_0);\r\n $$(\"tgtttbsokct\").setValue(tong_tien_kct);\r\n $$(\"tgtttbsokkk\").setValue(tong_tien_kkk);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n rows: [\r\n { view: \"label\", label: \"Loại thuế\", css: \"lblTongtien\" },\r\n {\r\n view: \"label\",\r\n label: \" + Tổng cộng hàng hóa, dịch vụ\",\r\n height: 22,\r\n css: { \"padding-left\": \"5px\", \"font-weight\": \"bold\", \"background-color\": \"#86b2cf\" },\r\n },\r\n { view: \"label\", label: \"Thuế suất 10%\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Thuế suất 5%\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Thuế suất 0%\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Không chịu thuế GTGT\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Không kê khai, tính nộp thuế GTGT\", css: \"lblSubTongtien\", height: 22 },\r\n // { view: \"label\", label: \"Tổng cộng phí lệ phí\", css: { \"font-weight\": \"bold\", \"background-color\": \"#86b2cf\" } , height: 22 },\r\n // { view: \"label\", label: \"Tổng cộng thanh toán\", css: { \"font-weight\": \"bold\", \"background-color\": \"#86b2cf\" } , height: 22 },\r\n ],\r\n },\r\n {\r\n rows: [\r\n { view: \"label\", label: \"Thành tiền trước thuế\", css: \"lblTongtien\" },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtcthue\", name: \"tgtcthue\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtcthue10\", name: \"tgtcthue10\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtcthue5\", name: \"tgtcthue5\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtcthue0\", name: \"tgtcthue0\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtcthuekct\", name: \"tgtcthuekct\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtcthuekkk\", name: \"tgtcthuekkk\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n // { view: \"text\", id: \"2\", name: \"2\", css: \"txtTongtien\", readonly: true, height: 22 }\r\n ],\r\n },\r\n {\r\n rows: [\r\n { view: \"label\", label: \"Tiền chiết khấu\", css: \"lblTongtien\" },\r\n { view: \"text\", format: \"1.111,00\", id: \"ttcktmai\", name: \"ttcktmai\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"ttcktmai10\", name: \"ttcktmai10\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"ttcktmai5\", name: \"ttcktmai5\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"ttcktmai0\", name: \"ttcktmai0\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"ttcktmaikct\", name: \"ttcktmaikct\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"ttcktmaikkk\", name: \"ttcktmaikkk\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n ],\r\n },\r\n {\r\n rows: [\r\n { view: \"label\", label: \"Tiền thuế\", css: \"lblTongtien\" },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtthue\", name: \"tgtthue\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtthue10\", name: \"tgtthue10\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtthue5\", name: \"tgtthue5\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtthue0\", name: \"tgtthue0\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtthuekct\", name: \"tgtthuekct\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtthuekkk\", name: \"tgtthuekkk\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n ],\r\n },\r\n {\r\n rows: [\r\n { view: \"label\", label: \"Tổng tiền sau thuế\", css: \"lblTongtien\" },\r\n {\r\n view: \"text\",\r\n id: \"tgtttbso\",\r\n name: \"tgtttbso\",\r\n css: \"txtTongtien\",\r\n readonly: true,\r\n height: 22,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var total_amount = $$(\"tgtttbso\").getValue();\r\n var type_curency = $$(\"dvtte\").getValue();\r\n var url = app.config.host + \"/Invoice68/Amount_ToWord?number=\" + total_amount + \"&type_amount=\" + type_curency;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, {\r\n error: function (text, data, XmlHttpRequest) {\r\n //webix.modalbox.hide(box);\r\n webix.alert({\r\n title: \"Lỗi !\",\r\n text: err,\r\n type: \"alert-error\",\r\n });\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var c_result = JSON.parse(text);\r\n $$(\"tgtttbchu\").setValue(c_result.data);\r\n },\r\n });\r\n },\r\n },\r\n format: \"1.111,00\",\r\n },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtttbso10\", name: \"tgtttbso10\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtttbso5\", name: \"tgtttbso5\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtttbso0\", name: \"tgtttbso0\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtttbsokct\", name: \"tgtttbsokct\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtttbsokkk\", name: \"tgtttbsokkk\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n { view: \"label\", width: 309, label: \"Đọc tiền bằng chữ\", css: { \"font-weight\": \"bold\", \"background-color\": \"#86b2cf\", \"padding-left\": \"5px\" }, height: 22 },\r\n { view: \"text\", id: \"tgtttbchu\", name: \"tgtttbchu\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n ],\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Lưu tạm (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var item = $$(\"huyhoadon_add\").getValues();\r\n var table = $$(\"huyhoadon_add\");\r\n\r\n if (table.validate()) {\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: $$(\"hoadon68_chitiet\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonSaveChange\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.$$(\"invoice68\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F11\",\r\n view: \"button\",\r\n label: \"Ký và gửi CQT (F11)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 150,\r\n on: {\r\n onClick: function () {\r\n var item = $$(\"huyhoadon_add\").getValues();\r\n var table = $$(\"huyhoadon_add\");\r\n\r\n if (table.validate()) {\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: $$(\"hoadon68_chitiet\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonSaveChange\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.$$(\"invoice68\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var item = json.data;\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n hdon_id: item.id,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignInvoiceCertFile68\", postData, function (text) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n return;\r\n }\r\n\r\n if (result.ok == true) {\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // webix.ajax()\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .post(app.config.host + \"/System/ExecuteCommand\",\r\n // {\r\n // command: \"CM00025\",\r\n // parameter: {\r\n\r\n // }\r\n // }\r\n // , function (text) {\r\n // var json = JSON.parse(text);\r\n // // auto send SMS\r\n // if (json[1].value == \"C\") {\r\n // var data = { id: item.inv_InvoiceAuth_id };\r\n\r\n // webix.ajax()\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .post(app.config.host + \"/Sms/NotifyInvoice\", data, function (text) {\r\n // var data = JSON.parse(text);\r\n\r\n // if (!data.hasOwnProperty(\"error\")) {\r\n\r\n // }\r\n // else {\r\n // webix.message(data.error, \"error\");\r\n // }\r\n // });\r\n // }\r\n\r\n // });\r\n\r\n webix.modalbox.hide();\r\n }\r\n });\r\n\r\n return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n align: \"center\",\r\n type: \"danger\",\r\n width: 120,\r\n click: function () {\r\n this.getTopParentView().close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_huyhoadon_1',[\"app\", \"models/user\", \"views/forms/68_huyhoadon_1/68_mau04form\", \"views/forms/68_huyhoadon_1/68_huyhoadonchitietform\", \"views/forms/68_huyhoadon_1/68_hoadonform\"], function (\r\n app,\r\n user,\r\n mau04form,\r\n huyhoadonchitietform,\r\n hoadonform\r\n) {\r\n var editmode = 0;\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"huyhoadon-win\",\r\n position: \"center\",\r\n head: {\r\n view: \"toolbar\",\r\n elements: [\r\n {\r\n width: 50,\r\n },\r\n {\r\n template: function () {\r\n return '

Hủy và tạo mới hóa đơn

';\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"times\",\r\n on: {\r\n onClick: function () {\r\n $$(\"huyhoadon-win\").close();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n ],\r\n },\r\n body: {\r\n rows: [\r\n {\r\n view: \"tabbar\",\r\n id: \"tabbar\",\r\n multiview: true,\r\n height: 50,\r\n width: 1500,\r\n value: \"infoView\",\r\n options: [\r\n { value: \"Bước 1: Lập mẫu 04\", id: \"infoView\" },\r\n { value: \"Bước 2: Tạo hóa đơn mới\", id: \"formView\" },\r\n { value: \"Bước 3: Ký và gửi\", id: \"previewView\" },\r\n ],\r\n on: {\r\n onBeforeTabClick: function (id, ev) {\r\n if (id == \"previewView\") {\r\n var win = webix.$$(\"previewView\");\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n\r\n var url = \"http://localhost:18374/hopdong/printhopdong?id=b9496ff0-360d-4852-8153-4b3c54fbe167&type=pdf\";\r\n webix.ajax().get(url, function (response) {\r\n win.enable();\r\n win.hideProgress();\r\n var file = new Blob([response], {\r\n type: \"application/pdf\",\r\n });\r\n var fileURL = URL.createObjectURL(file);\r\n\r\n var builder = '

Mẫu hóa đơn

';\r\n\r\n $$(\"pdfViewInfoOld\").setHTML(builder);\r\n $$(\"pdfViewInfoNew\").setHTML(builder);\r\n });\r\n }\r\n\r\n if (id == \"formView\") {\r\n // Load data tab formView\r\n }\r\n\r\n if (id == \"infoView\") {\r\n // Load data tab infoView\r\n }\r\n },\r\n onAfterRender: function () {\r\n // Load data tab 1\r\n },\r\n },\r\n },\r\n {\r\n height: 650,\r\n cells: [mau04form.$ui, hoadonform, huyhoadonchitietform],\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n\r\n setValues: function (item) {},\r\n };\r\n});\r\n\ndefine('views/68_invoiceViews_code',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms_code\", \"views/forms/68_huyhoadon\", \"views/forms/68_huyhoadon_1\", \"views/forms/68_hoadon_history\", \"views/commonHD\"], function (\r\n app,\r\n _,\r\n user,\r\n invoiceForms,\r\n huyhoadon,\r\n huyhoadon_1,\r\n hoadonHistory,\r\n commonHD\r\n) {\r\n \r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n\r\n var op = [];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n data: [\r\n // {\r\n // id: \"huyhoadon\",\r\n // value: \"Hủy hóa đơn\",\r\n // },\r\n // {\r\n // id: \"huyhoadon2\",\r\n // value: \"Hủy hóa đơn có tạo mới\",\r\n // },\r\n // {\r\n // id: \"giaitrinh\",\r\n // value: \"Giải trình\",\r\n // },\r\n {\r\n id: \"notifyErrorInvoice\",\r\n value: \"Thông báo HĐĐT có sai sót\",\r\n },\r\n {\r\n id: \"replace_invoice\",\r\n value: \"Thay thế\",\r\n },\r\n {\r\n id: \"increase_change_invoice\",\r\n value: \"Điều chỉnh tăng\",\r\n },\r\n {\r\n id: \"reduce_change_invoice\",\r\n value: \"Điều chỉnh giảm\",\r\n },\r\n {\r\n id: \"info_change\",\r\n value: \"Điều chỉnh thông tin\",\r\n },\r\n {\r\n id: \"dowloadXml\",\r\n value: \"Tải XML\",\r\n },\r\n {\r\n id: \"dowloadXmlMessageHD\",\r\n value: \"Tải XML thông điệp gửi HĐ\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n this.hide();\r\n // console.log(record);\r\n if (record.id == \"huyhoadon\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"Hóa đơn đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"huyhoadon2\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"Hóa đơn đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnStep299\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // webix.$$(\"btnStep299\").define(\"hidden\", false);\r\n // webix.$$(\"btnStep2\").show();\r\n // webix.$$(\"btnStep299\").hide();\r\n // $$(\"btnHuyHDDT\").addView({ view:\"button\",label: \"Bước 2\" }, 1);\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"dowloadXml\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký/chờ gửi không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlInvoice.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"dowloadXmlMessageHD\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"Hóa đơn chưa được gửi tới CQT, không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLThongDiepHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlThongDiepHoaDon.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"giaitrinh\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon != \"4\" && item.tthdon != \"0\") {\r\n webix.message(\"Hóa đơn không ở trạng thái rà soát không thể lập giải trình !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n // webix.$$(\"tctbao\").setValue(2);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n this.hide();\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 2,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n\r\n // var fn = Function(\"_\", \"user\", item.on_click);\r\n // fn(_, user);\r\n }\r\n if (record.id == \"notifyErrorInvoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var cungshd = true;\r\n for (var k = 1; k <= data.length - 1; k++) {\r\n if (data[k][\"stbao\"] !== data[0][\"stbao\"]) {\r\n cungshd = false;\r\n break;\r\n }\r\n }\r\n if (cungshd === true) {\r\n var loai = 1;\r\n if (data[0][\"stbao\"] !== null) loai = 2;\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai == \"Chờ gửi\" || data[i].tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n if (data[i].ladhddt == undefined) {\r\n data[i].ladhddt = \"1\";\r\n }\r\n if (data[i].tctbao == undefined) {\r\n data[i].tctbao = \"1\";\r\n }\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n var tongquat = {\r\n so: data[0].stbao,\r\n ntbccqt: data[0].ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n data.forEach(function (item) {\r\n var put = {\r\n mcqtcap: item.mccqthue,\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n //this.hide();\r\n win.show();\r\n });\r\n } else {\r\n webix.message(\"Các hóa đơn chọn phải có số thông báo giống nhau\", \"error\");\r\n }\r\n } else {\r\n var item = table.getSelectedItem();\r\n\r\n var loai = 1;\r\n if (item[\"stbao\"] !== null) loai = 2;\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\" || item.tthai == \"Đã ký\") {\r\n webix.message(\"Hóa đơn chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.ladhddt == undefined) {\r\n item[\"ladhddt\"] = \"1\";\r\n }\r\n if (item.tctbao == undefined) {\r\n item[\"tctbao\"] = \"1\";\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n var tongquat = {\r\n so: item.stbao,\r\n ntbccqt: item.ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n\r\n var put = {\r\n mcqtcap: item.mccqthue,\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n\r\n //this.hide();\r\n win.show();\r\n }\r\n\r\n // var win = table.$scope.ui(huyhoadon.$ui);\r\n // huyhoadon.setEditMode(1);\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n // webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // this.hide();\r\n // win.show();\r\n }\r\n\r\n if (record.id == \"replace_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 2;\r\n item.tthdon_original = 2;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.mccqthue = \"\";\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"increase_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 19;\r\n item.tthdon_original = 19;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.mccqthue = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"reduce_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 21;\r\n item.tthdon_original = 21;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.note = \"reduce_change_invoice\";\r\n item.mccqthue = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"info_change\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 23;\r\n item.tthdon_original = 23;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.mccqthue = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n /*tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tthue\").editor = null;*/\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n },\r\n },\r\n });\r\n\r\n webix.$$(\"title\").parse({ title: \"Lập hóa đơn -> Hóa đơn GTGT (Loại 1)\", details: \"Lập hóa đơn -> Hóa đơn GTGT (Loại 1)\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n { value: \"Thêm (F4)\", icon: \"far fa-plus\" },\r\n { value: \"Sửa (F3)\", icon: \"far fa-edit\" },\r\n { value: \"Xóa (F8)\", icon: \"far fa-trash\" },\r\n { $template: \"Separator\" },\r\n { value: \"Tải File đính kèm\", icon: \"fas fa-file-text-o\" },\r\n { value: \"Xem in\", icon: \"fas fa-print\" },\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm (F4)\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa (F3)\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa (F8)\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Tải File đính kèm\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n webix.message(\"Continue !\", \"debug\");\r\n //console.log(item);\r\n // if (item.inv_originalId != null && item.inv_originalId != undefined) {\r\n // var box = webix.modalbox({\r\n // title: \"Đang in chứng từ\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // //var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n // //newWin.location = fileURL;\r\n // window.open(fileURL, '_blank');\r\n\r\n // }\r\n // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // // var file = new Blob([data], { type: 'application/pdf' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, '_blank');\r\n // // // webix.html.download(file, $$('tenfile').getValue());\r\n // // });\r\n // }\r\n // else {\r\n // webix.message(\"Không tồn tại hóa đơn gốc !\", \"error\");\r\n // return;\r\n // }\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Thêm (F4)\") + \"\",\r\n id: \"btnPlus\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n\r\n var cctbao_id = $$(\"kyhieu_id\").getValue();\r\n invoiceForms.initUINew(cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n detailForm.show();\r\n // if (vc_window.after_new != null) {\r\n // var fn = Function(\"app\", vc_window.after_new);\r\n // fn(app);\r\n // }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Sửa (F3)\") + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n //var detailForm = this.$scope.ui(webix.$$(\"main\"));\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\") {\r\n webix.message(\"Hóa đơn đã ký hoặc đã gửi lên cơ quan thuế, không thể sửa !\", \"error\");\r\n return;\r\n }\r\n // main.setEditMode(0);\r\n // main.initUI(windowconfig);\r\n item.nlap = new Date(item.nlap);\r\n invoiceForms.setEditMode(2);\r\n invoiceForms.setValues(item, null);\r\n\r\n detailForm.show();\r\n //main.focusFirstElement();\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Xóa (F8)\") + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần xóa !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\") {\r\n webix.message(\"Không thể xóa hóa đơn đã ký,đã gửi !\", \"error\");\r\n return;\r\n }\r\n\r\n var khData = {};\r\n // khData.windowid = windowconfig.data[0].window_id;\r\n khData.editmode = 3;\r\n khData.data = [];\r\n khData.data.push(item);\r\n\r\n webix.confirm({\r\n title: \"XÓA HÓA ĐƠN\",\r\n text: \"Bạn có muốn xóa hóa đơn số: \" + item.shdon + \"\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonSaveChange\", khData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.ExceptionMessage, \"error\");\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n table.remove(item.id);\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"COPY\") + \"\",\r\n id: \"btnCopy\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-files-o\",\r\n // label: _(\"COPY\"),\r\n // width: 85,\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\");\r\n return;\r\n }\r\n // var vc_window = windowconfig[\"data\"][0];\r\n // windowform.$ui.id = vc_window.code;\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n item.mccqthue = \"\";\r\n item.shdon = null;\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.copyValues(item);\r\n detailForm.show();\r\n // windowform.focusFirstElement();\r\n // if (vc_window.after_new != null) {\r\n // var fn = Function(vc_window.after_new);\r\n // fn();\r\n // }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Email\") + \"\",\r\n id: \"btnEmail\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể gửi email !\", \"error\");\r\n return;\r\n }\r\n if (item.mccqthue == \"\" || item.mccqthue == null) {\r\n webix.message(\"Hóa đơn chưa có mã cơ quan thuế không thể gửi email !\", \"error\");\r\n return;\r\n }\r\n\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n // var box = webix.modalbox({\r\n // title: \"Đang gửi email ....\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200,\r\n // });\r\n\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-type\": \"application/json\" })\r\n // .post(app.config.host + \"/Invoice68/SendInvoiceByEmail\", item, {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // webix.message(XmlHttpRequest.statusText, \"error\");\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // var data = JSON.parse(text);\r\n\r\n // if (!data.hasOwnProperty(\"error\")) {\r\n // webix.message(\"Gửi Email thành công !\", \"debug\");\r\n // } else {\r\n // webix.message(data.error, \"error\");\r\n // }\r\n // },\r\n // });\r\n\r\n require([\"views/forms/sendemail\", \"app\"], function (sendemail, app) {\r\n var url = \"/Invoice68/GetEmailTemplate?type=Gửi hóa đơn&id=\" + item.hdon_id;\r\n webix.ajax(app.config.host + url, function (text) {\r\n var json = JSON.parse(text);\r\n var win = webix.$$(\"invoiceViews\").$scope.ui(sendemail.$ui);\r\n var hoadon = {\r\n nguoi_gui: json.sender,\r\n tieude: json.subject,\r\n noidung: json.body,\r\n mat_khau: json.pass,\r\n inv_invoiceauth_id: item.hdon_id,\r\n id: item.hdon_id,\r\n type: \"Gửi hóa đơn\",\r\n nguoinhan: item.email,\r\n his_email: json.his_email,\r\n lst_email: json.lst_email,\r\n hdon68: 1,\r\n alias: json.alias,\r\n };\r\n\r\n //console.log(JSON.stringify(json.lst_email));\r\n sendemail.setValues(hoadon);\r\n win.show();\r\n });\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Ký chờ xử lý\") + \"\",\r\n id: \"btnKyCXL\",\r\n click: function () {\r\n //check validate và return ra list hoadon_id\r\n var lsthdon_id = commonHD.validate_HD_ReturnListHdonId();\r\n if (lsthdon_id.length > 0) {\r\n //call function excute hoa don\r\n commonHD.ExcuteHoaDon(lsthdon_id, false, true);\r\n }\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Ký và gửi CQT\") + \"\",\r\n id: \"btnKyGuiCQT\",\r\n click: function () {\r\n //check validate và return ra list hoadon_id\r\n var lsthdon_id = commonHD.validate_HD_ReturnListHdonId();\r\n if (lsthdon_id.length > 0) {\r\n //call function excute hoa don\r\n commonHD.ExcuteHoaDon(lsthdon_id, true, true);\r\n }\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Gửi CQT\") + \"\",\r\n id: \"btnGuiCQT\",\r\n click: function () {\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var datafrm = tableHdon.serialize();\r\n\r\n var data = [];\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i].hdon_id);\r\n }\r\n }\r\n }\r\n }\r\n\r\n var postData = {\r\n invs: data,\r\n mltdiep: \"200\",\r\n };\r\n\r\n if (data.length > 0) {\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai != null && data[i].tthai == \"Đã gửi\") {\r\n webix.message(\"Hóa đơn đã gửi không thể gửi !\", \"error\");\r\n return;\r\n }\r\n }\r\n webix.confirm({\r\n text: \"Bạn có muốn gửi hóa đơn tới CQT không?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SendInvoiceToCQT68\", postData, function (text) {\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n webix.message(\"Gửi CQT thành công!\");\r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n });\r\n }\r\n },\r\n });\r\n } else webix.message(\"Bạn chưa chọn hóa đơn!\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Nghiệp vụ\") + \"\",\r\n id: \"btnChucNang\",\r\n // label: _(\"CHUC_NANG\"),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-tasks\",\r\n // width: 100,\r\n click: function () {\r\n subChucNang.show(webix.$$(\"btnChucNang\").$view);\r\n },\r\n },\r\n // {\r\n // view: \"button\", type: \"htmlbutton\", width: 115,\r\n // label: ' ' +\r\n // '' + _(\"EXPORT_EXCEL\") + '',\r\n // id: \"btnExport\",\r\n // on: {\r\n // onClick: function () {\r\n // var box = webix.modalbox({\r\n // title: \"Đang kết suất Excel ... \",\r\n // buttons: [\"Hủy bỏ\"],\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200,\r\n // callback: function (result) {\r\n // switch (result) {\r\n // case \"0\":\r\n // clearTimeout(interVal);\r\n // webix.modalbox.hide(box);\r\n // break;\r\n // }\r\n // }\r\n // });\r\n // var interVal = setTimeout(function () {\r\n // var table = $$(\"invoiceViews\");\r\n // webix.toExcel(table, {\r\n // filename: \"danh sach hoa don\",\r\n // rawValues: true,\r\n // filterHTML: true\r\n // });\r\n // clearTimeout(interVal);\r\n // webix.modalbox.hide(box);\r\n // }, 1500);\r\n\r\n // // var rpParameter = table.config.rpParameter;\r\n // // if (rpParameter == undefined || rpParameter == null) {\r\n // // webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n // // return;\r\n // // }\r\n // // rpParameter.type = \"xlsx\";\r\n\r\n // // if (rpParameter != null) {\r\n // // var box = webix.modalbox({\r\n // // title: \"Đang kết xuất Excel ....\",\r\n // // text: \"

\",\r\n // // width: 350,\r\n // // height: 200\r\n // // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .headers({ 'Content-type': 'application/json' })\r\n // // .post(app.config.host + \"/Bcthsd/PrintPDFBangKeBanRa\", rpParameter,\r\n // // {\r\n // // error: function (text, data, XmlHttpRequest) {\r\n // // webix.modalbox.hide(box);\r\n // // webix.message(XmlHttpRequest.statusText, \"error\");\r\n // // },\r\n // // success: function (text, data, XmlHttpRequest) {\r\n // // var file = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // webix.modalbox.hide(box);\r\n // // window.location.href = fileURL;\r\n // // }\r\n // // }\r\n // // // function (text, data) {\r\n\r\n // // // var file = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n // // // var fileURL = URL.createObjectURL(file);\r\n\r\n // // // window.location.href = fileURL;\r\n // // // }\r\n // // );\r\n // // }\r\n // }\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // }\r\n\r\n // },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n //autowidth: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n //get count list combo ký hiệu\r\n var countkyHieu = $$(\"kyhieu_id\") != undefined ? $$(\"kyhieu_id\").getPopup().getList().serialize().length : 0;\r\n if (countkyHieu > 0) {\r\n var url = app.config.host + \"/Invoice68/GetDataInvoice\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n var tlbParams = $$(\"paramKH\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n // console.log(child);\r\n var id = child.config.id;\r\n //var value_field = child.config.value_field;\r\n\r\n var item = {\r\n columnName: \"cctbao_id\",\r\n value: $$(id).getValue(),\r\n };\r\n if (item.value !== \"\") {\r\n parameters.push(item);\r\n } else {\r\n return;\r\n }\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n\r\n var urlMiniDashBoard = url.replace(\"GetDataInvoice\", \"GetDataInvoiceThongTin\");\r\n webix.ajax().get(urlMiniDashBoard, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"choCapMa\").setValue(\"Số hóa đơn chờ cấp mã: \" + json[\"chocapma\"]);\r\n });\r\n webix.ajax().get(urlMiniDashBoard, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"choCapMaError\").setValue(\"Số hóa đơn CQT không cấp mã: \" + json[\"chocapmaerror\"]);\r\n });\r\n webix.ajax().get(urlMiniDashBoard, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"duocCapMa\").setValue(\"Số hóa đơn được cấp mã: \" + json[\"duoccapma\"]);\r\n });\r\n webix.ajax().get(urlMiniDashBoard, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"chuaGui\").setValue(\"Số hóa đơn chưa ký gửi CQT: \" + json[\"chuagui\"]);\r\n });\r\n webix.ajax().get(urlMiniDashBoard, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"doanhThu\").setValue(\"Doanh thu xuất hóa đơn: \" + fm(json[\"doanhthu\"]));\r\n });\r\n webix.ajax(url, callback, view);\r\n }\r\n },\r\n },\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n if (id.column == \"ten_loai\") {\r\n //webix.confirm()\r\n //webix.message(\"Continue Dowloading ... !\", \"debug\");\r\n }\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {\r\n // webix.delay(function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n // }, this);\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n },\r\n subview: {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n css: \"subInvoice\",\r\n scrollX: true,\r\n // tabbar: {\r\n // width: 200\r\n // },\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n margin: 10,\r\n id: \"hoadon68_chitiet_view\",\r\n height: 200,\r\n columns: [\r\n { id: \"stt\", header: \"\", width: 30 },\r\n {\r\n id: \"ma\",\r\n header: _(\"Mã hàng hóa\"),\r\n editor: \"text\",\r\n width: 100,\r\n editable: true,\r\n },\r\n {\r\n id: \"ten\",\r\n header: _(\"Tên hàng hóa\"),\r\n editor: \"text\",\r\n width: 350,\r\n editable: true,\r\n },\r\n {\r\n id: \"mdvtinh\",\r\n header: _(\"ĐVT\"),\r\n editor: \"text\",\r\n width: 80,\r\n editable: true,\r\n },\r\n {\r\n id: \"sluong\",\r\n header: _(\"Số lương\"),\r\n editor: \"autonumeric\",\r\n width: 100,\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"dgia\",\r\n header: _(\"Đơn giá\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"thtien\",\r\n header: _(\"Tiền trước thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"tlckhau\",\r\n header: _(\"% CK\"),\r\n width: 80,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"stckhau\",\r\n header: _(\"Tiền CK\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tsuat\",\r\n header: _(\"Thuế suất\"),\r\n width: 100,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tthue\",\r\n header: _(\"Tiền thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tgtien\",\r\n header: _(\"Tiền sau thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"khuyen_mai\",\r\n header: _(\"Khuyến mại\"),\r\n width: 100,\r\n editor: \"checkbox\",\r\n editable: true,\r\n template: \"{common.checkbox()}\",\r\n checkValue: true,\r\n uncheckValue: false,\r\n },\r\n ],\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n },\r\n {\r\n id: \"stt\",\r\n header: [\"
STT
\"],\r\n //header: \"\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"ttthdon\",\r\n header: [\"
Trạng thái
\", { content: \"textFilter\" }],\r\n template: \"#ttthdon#\",\r\n // template: function (obj, common) {\r\n // console.log(obj.tthdon);\r\n // return \"\" + obj.ttthdon + \"\";\r\n // },\r\n width: 150,\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"tthai\",\r\n header: [\"
Trạng thái gửi CQT
\", { content: \"textFilter\" }],\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"btnMessagetn\",\r\n header: [\"
Lịch sử xử lý
\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n return \" \";\r\n },\r\n width: 180,\r\n },\r\n {\r\n id: \"issendmail\",\r\n header: [\"
Gửi Email
\"],\r\n css: { \"text-align\": \"center\" },\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.rcheckbox()}\",\r\n },\r\n {\r\n id: \"error_status\",\r\n header: [\"
Có lỗi/Không có lỗi
\"],\r\n css: { \"text-align\": \"center\" },\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n template: function (obj) {\r\n if (obj.error_status == \"1\") {\r\n return \"Có lỗi \";\r\n } else {\r\n return \"\";\r\n }\r\n },\r\n },\r\n {\r\n id: \"nlap\",\r\n header: [\"
Ngày hóa đơn
\", { content: \"serverDateRangeFilter\" }],\r\n width: 120,\r\n css: { \"text-align\": \"center\" },\r\n //format:webix.i18n.dateFormatStr\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n // template: function (obj, common) {\r\n // if(obj.tthai!=\"Chờ ký\"){\r\n // return obj.nlap=\"\";\r\n // }\r\n // else{\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // var text = removeTimeZoneT(obj.nlap);\r\n // return format(text);\r\n // }\r\n // },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"nky\",\r\n header: [\"
Ngày ký
\", { content: \"serverDateRangeFilter\" }],\r\n width: 150,\r\n css: { \"text-align\": \"center\" },\r\n //format:webix.i18n.dateFormatStr\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"khieu\",\r\n header: [\"
Ký hiệu
\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"nvarchar\",\r\n },\r\n // {\r\n // id: \"khieu\", header: [\"
Ký hiệu
\", { content: \"textFilter\" }],\r\n // template: function (obj, common) {\r\n // return \"\" + obj.ten_trang_thai + \"\";\r\n // }, width: 100, columnType: \"nvarchar\"\r\n // },\r\n { id: \"shdon\", header: [\"
Số hóa đơn
\", { content: \"textFilter\" }], width: 100, columnType: \"nvarchar\", css: { \"text-align\": \"center\" } },\r\n\r\n { id: \"mst\", header: [\"
Mã số thuế
\", { content: \"textFilter\" }], width: 120, columnType: \"nvarchar\" },\r\n { id: \"mccqthue\", header: [\"
Mã CQT
\", { content: \"textFilter\" }], width: 100, columnType: \"nvarchar\" },\r\n // { id: \"mtdiep_gui\", header: [\"
Mã thông điệp gửi đi
\", { content: \"textFilter\" }], width: 350, columnType: \"nvarchar\" },\r\n // { id: \"mtdiep_cqt\", header: [\"
Mã thông điệp cơ quan thuế
\", { content: \"textFilter\" }], width: 300, columnType: \"nvarchar\" },\r\n { id: \"ten\", header: [\"
Tên đơn vị/ Tên người mua
\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n {\r\n id: \"tgtttbso\",\r\n header: [\"
Thành tiền sau thuế
\", { content: \"textFilter\" }],\r\n width: 150,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \".\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \",\",\r\n // decimalSize: 0\r\n // }),\r\n css: { \"text-align\": \"right\" },\r\n template: function (obj, common) {\r\n return obj.tgtttbso == null ? 0 : fm(obj.tgtttbso);\r\n },\r\n columnType: \"decimal\",\r\n },\r\n { id: \"htttoan\", header: [\"
Hình thức TT
\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\", css: { \"text-align\": \"center\" } },\r\n // {\r\n // id: \"tdlap\",\r\n // header: [\"
Thời điểm lập
\", { content: \"textFilter\" }],\r\n // width: 200,\r\n // columnType: \"nvarchar\",\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // },\r\n {\r\n id: \"nglap\",\r\n header: [\"
Người lập
\", { content: \"textFilter\" }],\r\n width: 200,\r\n columnType: \"nvarchar\",\r\n },\r\n // { id: \"ten_loai\", header: [\"
Tên loại HĐ
\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\" }\r\n ],\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n // cols: [\r\n // {\r\n // view: \"icon\",\r\n // icon: \"fas fa-question-circle\",\r\n // id: \"help_form_main\",\r\n // tooltip: _(\"HELPER\"),\r\n // css: \"helper\",\r\n // hide: true,\r\n // click: function () {\r\n // webix.alert({\r\n // title: \"Thông báo !\",\r\n // text: \"Bạn chưa khai báo hướng dẫn nhanh cho màn hình này !\",\r\n // type: \"alert-warning\",\r\n // callback: function (result) {},\r\n // });\r\n // },\r\n // },\r\n // {\r\n // view: \"combo\",\r\n // label: _(\"MENU_QUICK\"),\r\n // id: \"QuickMenuMain\",\r\n // hide: true,\r\n // options: {\r\n // // view: \"gridsuggest\",\r\n // // id: \"grid_window\",\r\n // // template: \"#name#\",\r\n // // body: {\r\n // // scroll: true,\r\n // // autoheight: false,\r\n // // columns: [\r\n // // { id: \"window_id\", header: \"Window Id\", editor: \"text\", width: 100 },\r\n // // { id: \"name\", header: \"Window Name\", editor: \"text\", width: 400 }\r\n // // ],\r\n // // url: app.config.host + \"/System/GetQuickMenu\"\r\n // // },\r\n // // on: {\r\n // // onValueSuggest: function (obj) {\r\n // // var start = obj.window_id != \"\" ? obj.code + \":\" + obj.window_id : obj.code;\r\n // // window.location.hash = \"!/app/\" + start;\r\n // // $$(\"QuickMenu\").setValue(null);\r\n // // }\r\n // // }\r\n // },\r\n // on: {\r\n // onChange: function (newv, oldv) {},\r\n // },\r\n // },\r\n // {},\r\n // {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n // },\r\n // ],\r\n },\r\n ],\r\n };\r\n\r\n var mini_dashboard = {\r\n type: \"clean\",\r\n borderless: true,\r\n cols: [\r\n {\r\n id: \"choCapMa\",\r\n name: \"choCapMa\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"choCapMaError\",\r\n name: \"choCapMaError\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"duocCapMa\",\r\n name: \"duocCapMa\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"chuaGui\",\r\n name: \"chuaGui\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"doanhThu\",\r\n name: \"doanhThu\",\r\n view: \"label\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n id: \"paramKH\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"kyhieu_id\",\r\n view: \"combo\",\r\n width: 300,\r\n label: _(\"Ký hiệu\"),\r\n options: {\r\n body: {\r\n //comboId: comp.id,\r\n // isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00058\",\r\n ready: function () {\r\n // if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n\r\n if (count > 0) {\r\n var combo = webix.$$(\"kyhieu_id\");\r\n combo.setValue(this.getFirstId());\r\n }\r\n // }\r\n },\r\n },\r\n },\r\n // value_field: item.value_field,\r\n // isDefault: item.has_default,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n rows: [mini_dashboard],\r\n },\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n\r\n if (editmode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (editmode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n // var table = $$(\"invoiceViews\");\r\n // var url = {\r\n // $proxy: true,\r\n // load: function (view, callback, params) {\r\n // console.log(view.config);\r\n // console.log(callback);\r\n // console.log(params);\r\n // /*var windowno = app.path[1].params[0];\r\n // var url = app.config.host + \"/System/GetDataByWindowNo?window_id=\" + windowno;\r\n\r\n // if (params == null) {\r\n // url = url + \"&start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n // }\r\n // else {\r\n // url = url + \"&start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n // if (params.filter != null) {\r\n // var array = [];\r\n\r\n // for (var property in params.filter) {\r\n\r\n // var column = view.getColumnConfig(property);\r\n\r\n // if (column !== undefined) {\r\n // var item = {\r\n // columnName: property,\r\n // columnType: column.columnType,\r\n // value: params.filter[property]\r\n // };\r\n\r\n // array.push(item);\r\n // }\r\n // }\r\n\r\n // //console.log(JSON.stringify(array));\r\n // if (array.length > 0) {\r\n // url = url + \"&filter=\" + JSON.stringify(array);\r\n // }\r\n // else {\r\n // url = url + \"&filter=null\";\r\n // }\r\n\r\n // }\r\n // else {\r\n // url = url + \"&filter=null\";\r\n // }\r\n // }\r\n\r\n // if (view.config.infoparam != null) {\r\n // url = url + \"&infoparam=\" + JSON.stringify(view.config.infoparam);\r\n // }\r\n // else {\r\n // url = url + \"&infoparam=null\";\r\n // }\r\n\r\n // var tlbParams = $$(\"tlbParams\");\r\n\r\n // if (tlbParams !== undefined) {\r\n // var childViews = tlbParams.getChildViews();\r\n\r\n // var parameters = [];\r\n\r\n // for (var i = 0; i < childViews.length; i++) {\r\n // var child = childViews[i];\r\n\r\n // var id = child.config.id;\r\n // var value_field = child.config.value_field;\r\n\r\n // var item = {\r\n // columnName: value_field,\r\n // value: $$(id).getValue()\r\n // };\r\n\r\n // parameters.push(item);\r\n // }\r\n\r\n // url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n\r\n // }\r\n // else {\r\n // url = url + \"&tlbparam=null\";\r\n // }*/\r\n\r\n // //console.log(url);\r\n\r\n // /* webix.ajax().bind(view)\r\n // .get(url,function(text){\r\n // var json =JSON.parse(text);\r\n\r\n // this.clearAll();\r\n\r\n // if (!json.hasOwnProperty(\"error\")){\r\n // this.parse(json.data,\"json\");\r\n // }\r\n // }); */\r\n\r\n // //webix.ajax(url, callback, view);\r\n\r\n // }\r\n // };\r\n\r\n // table.define(\"url\", url);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_invoiceViews',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\", \"views/forms/68_huyhoadon\", \"views/forms/68_huyhoadon_1\", \"views/forms/68_hoadon_history\", \"views/commonHD\"], function (\r\n app,\r\n _,\r\n user,\r\n invoiceForms,\r\n huyhoadon,\r\n huyhoadon_1,\r\n hoadonHistory,\r\n commonHD\r\n) {\r\n \r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var op = [];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n data: [\r\n // {\r\n // id: \"huyhoadon\",\r\n // value: \"Hủy hóa đơn\",\r\n // },\r\n // {\r\n // id: \"huyhoadon2\",\r\n // value: \"Hủy hóa đơn có tạo mới\",\r\n // },\r\n // {\r\n // id: \"giaitrinh\",\r\n // value: \"Giải trình\",\r\n // },\r\n {\r\n id: \"notifyErrorInvoice\",\r\n value: \"Thông báo HĐĐT có sai sót\",\r\n },\r\n {\r\n id: \"replace_invoice\",\r\n value: \"Thay thế\",\r\n },\r\n {\r\n id: \"increase_change_invoice\",\r\n value: \"Điều chỉnh tăng\",\r\n },\r\n {\r\n id: \"reduce_change_invoice\",\r\n value: \"Điều chỉnh giảm\",\r\n },\r\n {\r\n id: \"info_change\",\r\n value: \"Điều chỉnh thông tin\",\r\n },\r\n {\r\n id: \"dowloadXml\",\r\n value: \"Tải XML\",\r\n },\r\n {\r\n id: \"dowloadXmlMessageHD\",\r\n value: \"Tải XML thông điệp gửi HĐ\",\r\n },\r\n {\r\n id: \"nhanExcel\",\r\n value: \"Nhận Excel hàng loạt\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n this.hide();\r\n if (record.id == \"nhanExcel\") {\r\n var table = $$(\"invoiceViews\");\r\n\r\n require([\"views/forms/uploadexcel\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id: \"EX00010\", filename: \"Nhan hang loat hoa don 68 (GTGT).xlsx\" });\r\n webix.$$(\"uploader\").hide();\r\n });\r\n }\r\n // console.log(record);\r\n if (record.id == \"huyhoadon\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"Hóa đơn đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"huyhoadon2\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"Hóa đơn đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnStep299\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // webix.$$(\"btnStep299\").define(\"hidden\", false);\r\n // webix.$$(\"btnStep2\").show();\r\n // webix.$$(\"btnStep299\").hide();\r\n // $$(\"btnHuyHDDT\").addView({ view:\"button\",label: \"Bước 2\" }, 1);\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"dowloadXml\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký/chờ gửi không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlInvoice.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"dowloadXmlMessageHD\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"Hóa đơn chưa được gửi tới CQT, không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLThongDiepHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlThongDiepHoaDon.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"giaitrinh\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon != \"4\" && item.tthdon != \"0\") {\r\n webix.message(\"Hóa đơn không ở trạng thái rà soát không thể lập giải trình !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n // webix.$$(\"tctbao\").setValue(2);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n this.hide();\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 2,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n\r\n // var fn = Function(\"_\", \"user\", item.on_click);\r\n // fn(_, user);\r\n }\r\n if (record.id == \"notifyErrorInvoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var cungshd = true;\r\n for (var k = 1; k <= data.length - 1; k++) {\r\n if (data[k][\"stbao\"] !== data[0][\"stbao\"]) {\r\n cungshd = false;\r\n break;\r\n }\r\n }\r\n if (cungshd === true) {\r\n var loai = 1;\r\n if (data[0][\"stbao\"] !== null) loai = 2;\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai == \"Chờ gửi\" || data[i].tthai == \"Chờ ký\" || data[i].tthai == \"Đã ký\") {\r\n webix.message(\"Hóa đơn chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n if (data[i].ladhddt == undefined) {\r\n data[i].ladhddt = \"1\";\r\n }\r\n if (data[i].tctbao == undefined) {\r\n data[i].tctbao = \"1\";\r\n }\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n var tongquat = {\r\n so: data[0].stbao,\r\n ntbccqt: data[0].ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n data.forEach(function (item) {\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n //this.hide();\r\n win.show();\r\n });\r\n } else {\r\n webix.message(\"Các hóa đơn chọn phải có số thông báo giống nhau\", \"error\");\r\n }\r\n } else {\r\n var item = table.getSelectedItem();\r\n\r\n var loai = 1;\r\n if (item[\"stbao\"] !== null) loai = 2;\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\" || item.tthai == \"Đã ký\") {\r\n webix.message(\"Hóa đơn chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.ladhddt == undefined) {\r\n item[\"ladhddt\"] = \"1\";\r\n }\r\n if (item.tctbao == undefined) {\r\n item[\"tctbao\"] = \"1\";\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n var tongquat = {\r\n so: item.stbao,\r\n ntbccqt: item.ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n\r\n //this.hide();\r\n win.show();\r\n }\r\n\r\n // var win = table.$scope.ui(huyhoadon.$ui);\r\n // huyhoadon.setEditMode(1);\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n // webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // this.hide();\r\n // win.show();\r\n }\r\n if (record.id == \"replace_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 2;\r\n item.tthdon_original = 2;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"increase_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 19;\r\n item.tthdon_original = 19;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n // var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n // tableDetail.clearAll();\r\n // tableDetail.refresh();\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n /*tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tthue\").editor = null;*/\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n\r\n //detailForm.show();\r\n }\r\n if (record.id == \"reduce_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 21;\r\n item.tthdon_original = 21;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.note = \"reduce_change_invoice\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"info_change\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 23;\r\n item.tthdon_original = 23;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n // tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n // tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n // tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tthue\").editor = null;\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n },\r\n },\r\n });\r\n\r\n webix.$$(\"title\").parse({ title: \"Lập hóa đơn -> Hóa đơn giá trị gia tăng\", details: \"Lập hóa đơn -> Hóa đơn giá trị gia tăng\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n { value: \"Thêm (F4)\", icon: \"far fa-plus\" },\r\n { value: \"Sửa (F3)\", icon: \"far fa-edit\" },\r\n { value: \"Xóa (F8)\", icon: \"far fa-trash\" },\r\n { $template: \"Separator\" },\r\n { value: \"Tải File đính kèm\", icon: \"fas fa-file-text-o\" },\r\n { value: \"Xem in\", icon: \"fas fa-print\" },\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm (F4)\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa (F3)\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa (F8)\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Tải File đính kèm\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n webix.message(\"Continue !\", \"debug\");\r\n //console.log(item);\r\n // if (item.inv_originalId != null && item.inv_originalId != undefined) {\r\n // var box = webix.modalbox({\r\n // title: \"Đang in chứng từ\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // //var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n // //newWin.location = fileURL;\r\n // window.open(fileURL, '_blank');\r\n\r\n // }\r\n // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // // var file = new Blob([data], { type: 'application/pdf' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, '_blank');\r\n // // // webix.html.download(file, $$('tenfile').getValue());\r\n // // });\r\n // }\r\n // else {\r\n // webix.message(\"Không tồn tại hóa đơn gốc !\", \"error\");\r\n // return;\r\n // }\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Thêm (F4)\") + \"\",\r\n id: \"btnPlus\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n\r\n var cctbao_id = $$(\"kyhieu_id\").getValue();\r\n invoiceForms.initUINew(cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n detailForm.show();\r\n // if (vc_window.after_new != null) {\r\n // var fn = Function(\"app\", vc_window.after_new);\r\n // fn(app);\r\n // }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Sửa (F3)\") + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n //var detailForm = this.$scope.ui(webix.$$(\"main\"));\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\") {\r\n webix.message(\"Hóa đơn đã ký hoặc đã gửi lên cơ quan thuế, không thể sửa !\", \"error\");\r\n return;\r\n }\r\n // main.setEditMode(0);\r\n // main.initUI(windowconfig);\r\n\r\n item.nlap = new Date(item.nlap);\r\n invoiceForms.setEditMode(2);\r\n invoiceForms.setValues(item, null);\r\n\r\n detailForm.show();\r\n //main.focusFirstElement();\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Xóa (F8)\") + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần xóa !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\") {\r\n webix.message(\"Không thể xóa hóa đơn đã ký,đã gửi !\", \"error\");\r\n return;\r\n }\r\n var khData = {};\r\n // khData.windowid = windowconfig.data[0].window_id;\r\n khData.editmode = 3;\r\n khData.data = [];\r\n khData.data.push(item);\r\n\r\n webix.confirm({\r\n title: \"XÓA HÓA ĐƠN\",\r\n text: \"Bạn có muốn xóa hóa đơn số: \" + item.shdon + \"\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonSaveChange\", khData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.ExceptionMessage, \"error\");\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n table.enable();\r\n table.hideProgress();\r\n return;\r\n } else {\r\n table.remove(item.id);\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"COPY\") + \"\",\r\n id: \"btnCopy\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-files-o\",\r\n // label: _(\"COPY\"),\r\n // width: 85,\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n // var vc_window = windowconfig[\"data\"][0];\r\n // windowform.$ui.id = vc_window.code;\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n item.shdon = null;\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.copyValues(item);\r\n detailForm.show();\r\n // windowform.focusFirstElement();\r\n // if (vc_window.after_new != null) {\r\n // var fn = Function(vc_window.after_new);\r\n // fn();\r\n // }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"In chuyển đổi\") + \"\",\r\n id: \"btnPrintConvert\",\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Email\") + \"\",\r\n id: \"btnEmail\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể gửi email !\", \"error\");\r\n return;\r\n }\r\n require([\"views/forms/sendemail\", \"app\"], function (sendemail, app) {\r\n var url = \"/Invoice68/GetEmailTemplate?type=Gửi hóa đơn&id=\" + item.hdon_id;\r\n webix.ajax(app.config.host + url, function (text) {\r\n var json = JSON.parse(text);\r\n var win = webix.$$(\"invoiceViews\").$scope.ui(sendemail.$ui);\r\n var hoadon = {\r\n nguoi_gui: json.sender,\r\n tieude: json.subject,\r\n noidung: json.body,\r\n mat_khau: json.pass,\r\n inv_invoiceauth_id: item.hdon_id,\r\n id: item.hdon_id,\r\n type: \"Gửi hóa đơn\",\r\n nguoinhan: item.email,\r\n his_email: json.his_email,\r\n lst_email: json.lst_email,\r\n hdon68: 1,\r\n alias: json.alias,\r\n };\r\n\r\n //console.log(JSON.stringify(json.lst_email));\r\n sendemail.setValues(hoadon);\r\n win.show();\r\n });\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Ký chờ xử lý\") + \"\",\r\n id: \"btnKyCXL\",\r\n click: function () {\r\n //check validate và return ra list hoadon_id\r\n var lsthdon_id = commonHD.validate_HD_ReturnListHdonId();\r\n if (lsthdon_id.length > 0) {\r\n //call function excute hoa don\r\n commonHD.ExcuteHoaDon(lsthdon_id, false);\r\n }\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Ký và gửi CQT\") + \"\",\r\n id: \"btnKyGuiCQT\",\r\n click: function () {\r\n //check validate và return ra list hoadon_id\r\n var lsthdon_id = commonHD.validate_HD_ReturnListHdonId();\r\n if (lsthdon_id.length > 0) {\r\n //call function excute hoa don\r\n commonHD.ExcuteHoaDon(lsthdon_id, true);\r\n }\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Gửi CQT\") + \"\",\r\n id: \"btnGuiCQT\",\r\n click: function () {\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var itemHdon = tableHdon.getSelectedItem();\r\n\r\n var datafrm = tableHdon.serialize();\r\n\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i].hdon_id);\r\n }\r\n }\r\n }\r\n }\r\n\r\n var postData = {\r\n invs: data,\r\n mltdiep: \"203\",\r\n };\r\n\r\n if (data.length > 0) {\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai != null && data[i].tthai == \"Đã gửi\") {\r\n webix.message(\"Hóa đơn đã gửi không thể gửi !\", \"error\");\r\n return;\r\n }\r\n }\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn gửi hóa đơn tới CQT không?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SendInvoiceToCQT68\", postData, function (text) {\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n webix.message(\"Gửi CQT thành công!\");\r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n });\r\n }\r\n },\r\n });\r\n } else webix.message(\"Bạn chưa chọn hóa đơn!\");\r\n },\r\n },\r\n\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Nghiệp vụ\") + \"\",\r\n id: \"btnChucNang\",\r\n // label: _(\"CHUC_NANG\"),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-tasks\",\r\n // width: 100,\r\n click: function () {\r\n subChucNang.show(webix.$$(\"btnChucNang\").$view);\r\n },\r\n },\r\n // {\r\n // view: \"button\", type: \"htmlbutton\", width: 115,\r\n // label: ' ' +\r\n // '' + _(\"EXPORT_EXCEL\") + '',\r\n // id: \"btnExport\",\r\n // on: {\r\n // onClick: function () {\r\n // var box = webix.modalbox({\r\n // title: \"Đang kết suất Excel ... \",\r\n // buttons: [\"Hủy bỏ\"],\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200,\r\n // callback: function (result) {\r\n // switch (result) {\r\n // case \"0\":\r\n // clearTimeout(interVal);\r\n // webix.modalbox.hide(box);\r\n // break;\r\n // }\r\n // }\r\n // });\r\n // var interVal = setTimeout(function () {\r\n // var table = $$(\"invoiceViews\");\r\n // webix.toExcel(table, {\r\n // filename: \"danh sach hoa don\",\r\n // rawValues: true,\r\n // filterHTML: true\r\n // });\r\n // clearTimeout(interVal);\r\n // webix.modalbox.hide(box);\r\n // }, 1500);\r\n\r\n // // var rpParameter = table.config.rpParameter;\r\n // // if (rpParameter == undefined || rpParameter == null) {\r\n // // webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n // // return;\r\n // // }\r\n // // rpParameter.type = \"xlsx\";\r\n\r\n // // if (rpParameter != null) {\r\n // // var box = webix.modalbox({\r\n // // title: \"Đang kết xuất Excel ....\",\r\n // // text: \"

\",\r\n // // width: 350,\r\n // // height: 200\r\n // // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .headers({ 'Content-type': 'application/json' })\r\n // // .post(app.config.host + \"/Bcthsd/PrintPDFBangKeBanRa\", rpParameter,\r\n // // {\r\n // // error: function (text, data, XmlHttpRequest) {\r\n // // webix.modalbox.hide(box);\r\n // // webix.message(XmlHttpRequest.statusText, \"error\");\r\n // // },\r\n // // success: function (text, data, XmlHttpRequest) {\r\n // // var file = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // webix.modalbox.hide(box);\r\n // // window.location.href = fileURL;\r\n // // }\r\n // // }\r\n // // // function (text, data) {\r\n\r\n // // // var file = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n // // // var fileURL = URL.createObjectURL(file);\r\n\r\n // // // window.location.href = fileURL;\r\n // // // }\r\n // // );\r\n // // }\r\n // }\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // }\r\n\r\n // },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n //autowidth: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n //get count list combo ký hiệu\r\n var countkyHieu = $$(\"kyhieu_id\") != undefined ? $$(\"kyhieu_id\").getPopup().getList().serialize().length : 0;\r\n\r\n if (countkyHieu > 0) {\r\n var url = app.config.host + \"/Invoice68/GetDataInvoice\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n var tlbParams = $$(\"paramKH\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n // console.log(child);\r\n var id = child.config.id;\r\n //var value_field = child.config.value_field;\r\n var item = {\r\n columnName: \"cctbao_id\",\r\n value: $$(id).getValue(),\r\n };\r\n if (item.value !== \"\") {\r\n parameters.push(item);\r\n } else {\r\n return;\r\n }\r\n parameters.push(item);\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n\r\n var urlMiniDashBoard = url.replace(\"GetDataInvoice\", \"GetDataInvoiceThongTin\");\r\n\r\n webix.ajax().get(urlMiniDashBoard, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"khongMa\").setValue(\"Số hóa đơn đã gửi CQT: \" + json[\"khongma\"]);\r\n });\r\n webix.ajax().get(urlMiniDashBoard, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"khongMaError\").setValue(\"Số hóa đơn CQT thông báo lỗi: \" + json[\"khongmaerror\"]);\r\n });\r\n webix.ajax().get(urlMiniDashBoard, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"doanhThuNoCode\").setValue(\"Doanh thu xuất hóa đơn: \" + fm(json[\"doanhthunocode\"]));\r\n });\r\n\r\n webix.ajax(url, callback, view);\r\n }\r\n },\r\n },\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n if (id.column == \"ten_loai\") {\r\n //webix.confirm()\r\n //webix.message(\"Continue Dowloading ... !\", \"debug\");\r\n }\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {\r\n // webix.delay(function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n // }, this);\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n },\r\n subview: {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n css: \"subInvoice\",\r\n scrollX: true,\r\n // tabbar: {\r\n // width: 200\r\n // },\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n margin: 10,\r\n id: \"hoadon68_chitiet_view\",\r\n height: 200,\r\n columns: [\r\n { id: \"stt\", header: \"\", width: 30 },\r\n {\r\n id: \"ma\",\r\n header: _(\"Mã hàng hóa\"),\r\n editor: \"text\",\r\n width: 100,\r\n editable: true,\r\n },\r\n {\r\n id: \"ten\",\r\n header: _(\"Tên hàng hóa\"),\r\n editor: \"text\",\r\n width: 350,\r\n editable: true,\r\n },\r\n {\r\n id: \"mdvtinh\",\r\n header: _(\"ĐVT\"),\r\n editor: \"text\",\r\n width: 80,\r\n editable: true,\r\n },\r\n {\r\n id: \"sluong\",\r\n header: _(\"Số lương\"),\r\n editor: \"autonumeric\",\r\n width: 100,\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"dgia\",\r\n header: _(\"Đơn giá\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"thtien\",\r\n header: _(\"Tiền trước thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"tlckhau\",\r\n header: _(\"% CK\"),\r\n width: 80,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"stckhau\",\r\n header: _(\"Tiền CK\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tsuat\",\r\n header: _(\"Thuế suất\"),\r\n width: 100,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tthue\",\r\n header: _(\"Tiền thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tgtien\",\r\n header: _(\"Tiền sau thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"khuyen_mai\",\r\n header: _(\"Khuyến mại\"),\r\n width: 100,\r\n editor: \"checkbox\",\r\n editable: true,\r\n template: \"{common.checkbox()}\",\r\n checkValue: true,\r\n uncheckValue: false,\r\n },\r\n ],\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n },\r\n {\r\n id: \"stt\",\r\n header: [\"
STT
\"],\r\n //header: \"\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"nvarchar\",\r\n //css: { \"line-height\": \"20px !important\", \"height\": \"63px !important\"}\r\n },\r\n {\r\n id: \"ttthdon\",\r\n header: [\"
Trạng thái
\", { content: \"textFilter\" }],\r\n template: \"#ttthdon#\",\r\n // template: function (obj, common) {\r\n // console.log(obj.tthdon);\r\n // return \"\" + obj.ttthdon + \"\";\r\n // },\r\n width: 150,\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"tthai\",\r\n header: [\"
Trạng thái gửi CQT
\", { content: \"textFilter\" }],\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n },\r\n\r\n {\r\n id: \"btnMessagetn\",\r\n header: [\"
Lịch sử xử lý
\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n return \" \";\r\n },\r\n width: 180,\r\n },\r\n {\r\n id: \"issendmail\",\r\n header: [\"
Gửi Email
\"],\r\n css: { \"text-align\": \"center\" },\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.rcheckbox()}\",\r\n },\r\n {\r\n id: \"error_status\",\r\n header: [\"
Có lỗi/Không có lỗi
\"],\r\n css: { \"text-align\": \"center\" },\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n template: function (obj) {\r\n if (obj.error_status == \"1\") {\r\n return \"Có lỗi \";\r\n } else {\r\n return \"\";\r\n }\r\n },\r\n },\r\n {\r\n id: \"nlap\",\r\n header: [\"
Ngày hóa đơn
\", { content: \"serverDateRangeFilter\" }],\r\n width: 120,\r\n css: { \"text-align\": \"center\" },\r\n //format:webix.i18n.dateFormatStr\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n // template: function (obj, common) {\r\n // if(obj.tthai!=\"Chờ ký\"){\r\n // return obj.nlap=\"\";\r\n // }\r\n // else{\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // var text = removeTimeZoneT(obj.nlap);\r\n // return format(text);\r\n // }\r\n // },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"nky\",\r\n header: [\"
Ngày ký
\", { content: \"serverDateRangeFilter\" }],\r\n width: 150,\r\n css: { \"text-align\": \"center\" },\r\n //format:webix.i18n.dateFormatStr\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"khieu\",\r\n header: [\"
Ký hiệu
\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"nvarchar\",\r\n },\r\n // {\r\n // id: \"khieu\", header: [\"
Ký hiệu
\", { content: \"textFilter\" }],\r\n // template: function (obj, common) {\r\n // return \"\" + obj.ten_trang_thai + \"\";\r\n // }, width: 100, columnType: \"nvarchar\"\r\n // },\r\n { id: \"shdon\", header: [\"
Số hóa đơn
\", { content: \"textFilter\" }], width: 100, columnType: \"numeric\", css: { \"text-align\": \"center\" } },\r\n\r\n { id: \"mst\", header: [\"
Mã số thuế
\", { content: \"textFilter\" }], width: 120, columnType: \"nvarchar\" },\r\n // { id: \"mtdiep_gui\", header: [\"
Mã thông điệp gửi đi
\", { content: \"textFilter\" }], width: 350, columnType: \"nvarchar\" },\r\n // { id: \"mtdiep_cqt\", header: [\"
Mã thông điệp cơ quan thuế
\", { content: \"textFilter\" }], width: 300, columnType: \"nvarchar\" },\r\n { id: \"ten\", header: [\"
Tên đơn vị/ Tên người mua
\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n {\r\n id: \"tgtttbso\",\r\n header: [\"
Thành tiền sau thuế
\", { content: \"textFilter\" }],\r\n width: 150,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \".\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \",\",\r\n // decimalSize: 0\r\n // }),\r\n css: { \"text-align\": \"right\" },\r\n template: function (obj, common) {\r\n return obj.tgtttbso == null ? 0 : fm(obj.tgtttbso);\r\n },\r\n columnType: \"numeric\",\r\n },\r\n { id: \"htttoan\", header: [\"
Hình thức TT
\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\", css: { \"text-align\": \"center\" } },\r\n // {\r\n // id: \"tdlap\",\r\n // header: [\"
Thời điểm lập
\", { content: \"textFilter\" }],\r\n // width: 200,\r\n // columnType: \"nvarchar\",\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // },\r\n {\r\n id: \"nglap\",\r\n header: [\"
Người lập
\", { content: \"textFilter\" }],\r\n width: 200,\r\n columnType: \"nvarchar\",\r\n },\r\n // { id: \"ten_loai\", header: [\"
Tên loại HĐ
\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\" }\r\n ],\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n // cols: [\r\n // {\r\n // view: \"icon\",\r\n // icon: \"fas fa-question-circle\",\r\n // id: \"help_form_main\",\r\n // tooltip: _(\"HELPER\"),\r\n // css: \"helper\",\r\n // click: function () {\r\n // webix.alert({\r\n // title: \"Thông báo !\",\r\n // text: \"Bạn chưa khai báo hướng dẫn nhanh cho màn hình này !\",\r\n // type: \"alert-warning\",\r\n // callback: function (result) {},\r\n // });\r\n // },\r\n // },\r\n // {\r\n // view: \"combo\",\r\n // label: _(\"MENU_QUICK\"),\r\n // id: \"QuickMenuMain\",\r\n // hide: true,\r\n // options: {\r\n // // view: \"gridsuggest\",\r\n // // id: \"grid_window\",\r\n // // template: \"#name#\",\r\n // // body: {\r\n // // scroll: true,\r\n // // autoheight: false,\r\n // // columns: [\r\n // // { id: \"window_id\", header: \"Window Id\", editor: \"text\", width: 100 },\r\n // // { id: \"name\", header: \"Window Name\", editor: \"text\", width: 400 }\r\n // // ],\r\n // // url: app.config.host + \"/System/GetQuickMenu\"\r\n // // },\r\n // // on: {\r\n // // onValueSuggest: function (obj) {\r\n // // var start = obj.window_id != \"\" ? obj.code + \":\" + obj.window_id : obj.code;\r\n // // window.location.hash = \"!/app/\" + start;\r\n // // $$(\"QuickMenu\").setValue(null);\r\n // // }\r\n // // }\r\n // },\r\n // on: {\r\n // onChange: function (newv, oldv) {},\r\n // },\r\n // },\r\n // {},\r\n // {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n // },\r\n // ],\r\n },\r\n ],\r\n };\r\n\r\n var mini_dashboard = {\r\n type: \"clean\",\r\n borderless: true,\r\n cols: [\r\n {\r\n id: \"khongMa\",\r\n name: \"khongMa\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"khongMaError\",\r\n name: \"khongMaError\",\r\n css: \"\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"doanhThuNoCode\",\r\n name: \"doanhThuNoCode\",\r\n view: \"label\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n id: \"paramKH\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"kyhieu_id\",\r\n view: \"combo\",\r\n width: 300,\r\n label: _(\"Ký hiệu\"),\r\n options: {\r\n body: {\r\n //comboId: comp.id,\r\n // isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00054\",\r\n ready: function () {\r\n // if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n\r\n if (count > 0) {\r\n var combo = webix.$$(\"kyhieu_id\");\r\n combo.setValue(this.getFirstId());\r\n }\r\n // }\r\n },\r\n },\r\n },\r\n // value_field: item.value_field,\r\n // isDefault: item.has_default,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n rows: [mini_dashboard],\r\n },\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n if (editmode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (editmode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n // var table = $$(\"invoiceViews\");\r\n // var url = {\r\n // $proxy: true,\r\n // load: function (view, callback, params) {\r\n // console.log(view.config);\r\n // console.log(callback);\r\n // console.log(params);\r\n // /*var windowno = app.path[1].params[0];\r\n // var url = app.config.host + \"/System/GetDataByWindowNo?window_id=\" + windowno;\r\n\r\n // if (params == null) {\r\n // url = url + \"&start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n // }\r\n // else {\r\n // url = url + \"&start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n // if (params.filter != null) {\r\n // var array = [];\r\n\r\n // for (var property in params.filter) {\r\n\r\n // var column = view.getColumnConfig(property);\r\n\r\n // if (column !== undefined) {\r\n // var item = {\r\n // columnName: property,\r\n // columnType: column.columnType,\r\n // value: params.filter[property]\r\n // };\r\n\r\n // array.push(item);\r\n // }\r\n // }\r\n\r\n // //console.log(JSON.stringify(array));\r\n // if (array.length > 0) {\r\n // url = url + \"&filter=\" + JSON.stringify(array);\r\n // }\r\n // else {\r\n // url = url + \"&filter=null\";\r\n // }\r\n\r\n // }\r\n // else {\r\n // url = url + \"&filter=null\";\r\n // }\r\n // }\r\n\r\n // if (view.config.infoparam != null) {\r\n // url = url + \"&infoparam=\" + JSON.stringify(view.config.infoparam);\r\n // }\r\n // else {\r\n // url = url + \"&infoparam=null\";\r\n // }\r\n\r\n // var tlbParams = $$(\"tlbParams\");\r\n\r\n // if (tlbParams !== undefined) {\r\n // var childViews = tlbParams.getChildViews();\r\n\r\n // var parameters = [];\r\n\r\n // for (var i = 0; i < childViews.length; i++) {\r\n // var child = childViews[i];\r\n\r\n // var id = child.config.id;\r\n // var value_field = child.config.value_field;\r\n\r\n // var item = {\r\n // columnName: value_field,\r\n // value: $$(id).getValue()\r\n // };\r\n\r\n // parameters.push(item);\r\n // }\r\n\r\n // url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n\r\n // }\r\n // else {\r\n // url = url + \"&tlbparam=null\";\r\n // }*/\r\n\r\n // //console.log(url);\r\n\r\n // /* webix.ajax().bind(view)\r\n // .get(url,function(text){\r\n // var json =JSON.parse(text);\r\n\r\n // this.clearAll();\r\n\r\n // if (!json.hasOwnProperty(\"error\")){\r\n // this.parse(json.data,\"json\");\r\n // }\r\n // }); */\r\n\r\n // //webix.ajax(url, callback, view);\r\n\r\n // }\r\n // };\r\n\r\n // table.define(\"url\", url);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_kyhieuForm_bienlai',[\"app\", \"models/user\"], function (app, user) {\r\n var editmode = 0;\r\n var param;\r\n var dt = new Date();\r\n var y = dt.getFullYear();\r\n var yearlast = y.toString().substring(2, 4);\r\n\r\n function onChangeKhmbl() {\r\n var res = $$(\"khm1\").getValue() + \"BLP\" + $$(\"khm2\").getValue() + \"-\" + $$(\"khm3\").getValue();\r\n $$(\"khmbl\").setValue(res);\r\n $$(\"khmbl\").refresh();\r\n }\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"kyhieu-form\").getValues();\r\n var table = $$(\"kyhieu-form\");\r\n\r\n var khhdon = item.khhdon;\r\n\r\n if (table.validate() && $$(\"kh2\").getValue().toString().length == 2 && $$(\"khm3\").getValue().toString().length == 3) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n item.editmode = editmode;\r\n item.code = param.code;\r\n item.loaikh = 2;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/quanlykyhieu68\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"kyhieu-win\").close();\r\n var table = $$(\"kyhieu\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n if ($$(\"kh2\").getValue().toString().length != 2) {\r\n webix.message(\"Ký hiệu nhập sai định dạng\", \"error\");\r\n } else if ($$(\"khm3\").getValue().toString().length != 3) {\r\n webix.message(\"Ký hiệu mẫu nhập sai định dạng\", \"error\");\r\n } else {\r\n webix.message(\"Dữ liệu nhập sai định dạng\", \"error\");\r\n }\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"kyhieu-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"kyhieu-win\",\r\n position: \"center\",\r\n head: \"Đăng ký ký hiệu biên lai\",\r\n on: {\r\n onBeforeShow: function () {\r\n if (editmode == 1) {\r\n var date = new Date();\r\n var year = date.getFullYear();\r\n $$(\"khhdon\").setValue(\"AB-\" + year.toString().substring(2, 4) + \"E\");\r\n }\r\n },\r\n },\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"kyhieu-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n // {\r\n // view: \"text\",\r\n // label: \"Tên mẫu\",\r\n // name: \"ten_mau\",\r\n // required: true,\r\n // invalidMessage: \"Tên mẫu không được bỏ trống\",\r\n // labelWidth: 120\r\n // },\r\n {\r\n view: \"combo\",\r\n name: \"loaibl\",\r\n label: \"Loại biên lai\",\r\n //labelPosition: \"top\",\r\n id: \"loaibl\",\r\n required: true,\r\n labelWidth: 120,\r\n value: \"01\",\r\n invalidMessage: \"Loại biên lai không được bỏ trống !\",\r\n options: [\r\n { id: \"01\", value: \"Biên lai thu phí, lệ phí không có mệnh giá\" },\r\n { id: \"02\", value: \"Biên lai thu phí, lệ phí có mệnh giá\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n // var kyhieu = $$(\"khmbl\").getValue();\r\n // var res = kyhieu.replace(kyhieu.substring(0, 2), newv);\r\n // $$(\"khmbl\").setValue(res);\r\n // $$(\"khmbl\").refresh();\r\n $$(\"khm1\").setValue(newv);\r\n $$(\"khm1\").refresh();\r\n },\r\n },\r\n },\r\n {\r\n rows: [{\r\n cols: [\r\n {\r\n view: \"label\",\r\n label: \"Ký hiệu mẫu\",\r\n width: 120\r\n },\r\n {\r\n view: \"text\",\r\n name: \"khm1\",\r\n id: \"khm1\",\r\n value: \"01\",\r\n readonly: true,\r\n on: {\r\n onChange: onChangeKhmbl\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n name: \"khm2\",\r\n id: \"khm2\",\r\n value: \"0\",\r\n required: true,\r\n readonly: true,\r\n attributes: {\r\n maxlength: 1\r\n },\r\n on: {\r\n onchange: onChangeKhmbl\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n name: \"khm3\",\r\n id: \"khm3\",\r\n value: \"001\",\r\n required: true,\r\n attributes: {\r\n maxlength: 3\r\n },\r\n on: {\r\n onChange: onChangeKhmbl\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n name: \"khmbl\",\r\n id: \"khmbl\",\r\n required: true,\r\n value: \"01BLP0-001\",\r\n invalidMessage: \"Không được bỏ trống\",\r\n readonly: true,\r\n }\r\n ]\r\n }]\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Hình thức biên lai\",\r\n name: \"htbl\",\r\n id: \"htbl\",\r\n required: true,\r\n invalidMessage: \"Không được bỏ trống\",\r\n labelWidth: 120,\r\n value: \"E\",\r\n options: [\r\n { id: \"T\", value: \"Biên lai thu phí, lệ phí tự in\" },\r\n { id: \"P\", value: \"Biên lai đặt in\" },\r\n { id: \"E\", value: \"Biên lai điện tử\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n // var kyhieu = $$(\"khhdon\").getValue();\r\n // var res = kyhieu.substring(0, kyhieu.length - 1) + newv;\r\n // $$(\"khhdon\").setValue(res);\r\n // $$(\"khhdon\").refresh();\r\n $$(\"kh3\").setValue(newv);\r\n $$(\"kh3\").refresh();\r\n },\r\n },\r\n },\r\n {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"label\",\r\n label: \"Ký hiệu\",\r\n width: 100,\r\n },\r\n {},\r\n {\r\n view: \"text\",\r\n id: \"kh2\",\r\n name: \"kh2\",\r\n value: \"AB\",\r\n width: 40,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n newv = newv.toUpperCase();\r\n var res = newv + \"-\" + yearlast + $$(\"kh3\").getValue();\r\n $$(\"kh2\").setValue(newv);\r\n $$(\"kh2\").refresh();\r\n $$(\"khhdon\").setValue(res);\r\n $$(\"khhdon\").refresh();\r\n },\r\n },\r\n attributes: {\r\n maxlength: 2,\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n id: \"kh3\",\r\n name: \"kh3\",\r\n width: 30,\r\n value: \"E\",\r\n readonly: true,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var res = $$(\"kh2\").getValue() + \"-\" + yearlast + $$(\"kh3\").getValue();;\r\n $$(\"khhdon\").setValue(res);\r\n $$(\"khhdon\").refresh();\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n // label: \"Ký hiệu\",\r\n name: \"khhdon\",\r\n id: \"khhdon\",\r\n readonly: true,\r\n // labelWidth: 120,\r\n width: 290,\r\n required: true,\r\n value: \"AA-22P\",\r\n invalidMessage: \"Ký hiệu không được bỏ trống\",\r\n attributes: {\r\n maxlength: 8,\r\n },\r\n // validate: webix.rules.isMauSo\r\n },\r\n ]\r\n }\r\n ]\r\n },\r\n // {\r\n // view: \"text\",\r\n // label: \"Ký hiệu\",\r\n // name: \"khhdon\",\r\n // id: \"khhdon\",\r\n // disabled : true,\r\n // labelWidth: 120,\r\n // required: true,\r\n // value: \"01AA-22P\",\r\n // invalidMessage: \"Ký hiệu không được bỏ trống\",\r\n // attributes: {\r\n // maxlength: 8,\r\n // },\r\n // // validate: webix.rules.isMauSo\r\n // },\r\n {\r\n id: \"sdmau\",\r\n name: \"sdmau\",\r\n label: \"Số dòng in mẫu\",\r\n labelWidth: 120,\r\n view: \"text\",\r\n value: 1,\r\n validate: function (val) {\r\n return !isNaN(val * 1) && val * 1 >= 0;\r\n },\r\n invalidMessage: \"Phải nhập số dương\",\r\n attributes: { type: \"number\" },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Mẫu thiết kế\",\r\n name: \"qlmtke_id\",\r\n id: \"qlmtke_id\",\r\n labelWidth: 120,\r\n required: true,\r\n invalidMessage: \"Mẫu không được bỏ trống\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF02005\",\r\n on: {\r\n onChange: function (newv, oldv) { },\r\n },\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n initUI: function (item) {\r\n param = item;\r\n },\r\n setValues: function (item) {\r\n $$(\"kyhieu-form\").setValues(item);\r\n\r\n var khm = $$(\"khmbl\").getValue();\r\n $$(\"khm1\").setValue(khm.substring(0, 2));\r\n $$(\"khm2\").setValue(khm.substring(5, 6));\r\n $$(\"khm3\").setValue(khm.substring(7, 10));\r\n\r\n var khhd = $$(\"khhdon\").getValue();\r\n $$(\"kh2\").setValue(khhd.substring(2, 4));\r\n $$(\"kh3\").setValue(khhd.substring(7, 8));\r\n\r\n if (khhd.length == 6) {\r\n $$(\"kh2\").setValue(khhd.substring(0, 2));\r\n $$(\"kh3\").setValue(khhd.substring(5, 6));\r\n }\r\n },\r\n };\r\n});\r\n\ndefine('views/68_kyhieu_bienlai',[\"app\", \"locale\", \"models/user\", \"views/forms/68_kyhieuForm_bienlai\"], function (app, _, user, kyhieuForm) {\r\n \r\n\r\n var initUI = function () {\r\n // var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"kyhieu\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var url = app.config.host + \"/Invoice68/GetDataquanlykyhieu68bienlai\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n // console.log(child);\r\n var id = child.config.id;\r\n //var value_field = child.config.value_field;\r\n\r\n var item = {\r\n columnName: \"code\",\r\n value: $$(id).getValue(),\r\n };\r\n parameters.push(item);\r\n }\r\n\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var submenuChucNang = webix.ui({\r\n id: \"submnchucnang\",\r\n view: \"submenu\",\r\n width: 250,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"UploadTemplate\",\r\n value: \"Tải mẫu lên\",\r\n },\r\n {\r\n id: \"SignTemplate\",\r\n value: \"Ký mẫu biên lai\",\r\n },\r\n {\r\n id: \"PreviewTemplate\",\r\n value: \"Xem mẫu biên lai (PDF)\",\r\n },\r\n {\r\n id: \"DownloadTemplate\",\r\n value: \"Tải mẫu thiết kế (.repx)\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n this.hide();\r\n var selectedItem = webix.$$(\"congvieckinhdoanh\").getSelectedItem();\r\n if (selectedselectedItem == null) {\r\n webix.message(\"Bạn chưa chọn khách hàng !\", \"error\");\r\n return;\r\n }\r\n },\r\n },\r\n });\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n kyhieuForm.setEditMode(1);\r\n var params = null;\r\n\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var item = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n item[id] = $$(id).getValue();\r\n }\r\n\r\n params = item;\r\n }\r\n kyhieuForm.initUI(params);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.tt_sd > 0) {\r\n webix.message(\"Ký hiệu đã sử dụng không thể sửa ! \", \"error\");\r\n return;\r\n }\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n\r\n var params = null;\r\n\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var item = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n item[id] = $$(id).getValue();\r\n }\r\n\r\n params = item;\r\n }\r\n kyhieuForm.initUI(params);\r\n\r\n kyhieuForm.setEditMode(2);\r\n kyhieuForm.setValues(selectedItem);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn ký hiệu biên lai cần xóa ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.tt_sd > 0) {\r\n webix.message(\"Ký hiệu đã sử dụng không thể xóa ! \", \"error\");\r\n return;\r\n }\r\n selectedItem.editmode = 3;\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/deletequanlykyhieu68\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message(res.error, \"error\");\r\n } else {\r\n table.remove(selectedItem.id);\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \" (F7)\" + \"\",\r\n id: \"btnPrint\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMauHoadon?id=\" + item.id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // id: \"btnChucNang\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"fa fa-cube\",\r\n // label: \"Chức năng\",\r\n // width: 100,\r\n // css: \"button_raised\",\r\n // click: function () {\r\n // submenuChucNang.show(webix.$$(\"btnChucNang\").$view);\r\n // },\r\n // },\r\n // {\r\n // view: \"button\",\r\n // id: \"btnRegister\",\r\n // type: \"icon\",\r\n // icon: \"plus\",\r\n // label: \"Đăng ký\",\r\n // width: 100,\r\n // shortcut: \"F1\",\r\n // on: {\r\n // onClick: function () {\r\n // var detailForm = this.$scope.ui(dangkyform.$ui);\r\n // dangkyform.setEditMode(0);\r\n // detailForm.show();\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"kyhieu\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.ngayLap) {\r\n // obj.ngayLap = new Date(obj.ngayLap);\r\n // }\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"kyhieu_id\",\r\n header: \"kyhieu_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"index\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"tmau\",\r\n header: [\r\n \"Tên mẫu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"khmbl\",\r\n header: [\r\n \"Ký hiệu mẫu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"khhdon\",\r\n header: [\r\n \"Ký hiệu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n // {\r\n // id: \"trangThai\",\r\n // header: [\r\n // \"Số dòng in mẫu\",\r\n // {\r\n // content: \"textFilter\",\r\n // },\r\n // ],\r\n // width: 120,\r\n // template: function (obj) {\r\n // return (\r\n // \"\" +\r\n // obj.trangThai +\r\n // \"\"\r\n // );\r\n // }\r\n // },\r\n {\r\n id: \"nlap\",\r\n header: [\r\n \"Ngày lập\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n columnType: \"datetime\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"nglap\",\r\n header: [\r\n \"Người lập\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"tt_sdung\",\r\n header: [\"Sử dụng\"],\r\n editor: \"checkbox\",\r\n width: 90,\r\n template: function (obj) {\r\n var checked = obj.tt_sd > 0 ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n id: \"paramDonvi\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"code\",\r\n view: \"combo\",\r\n width: 500,\r\n label: _(\"Đơn vị\"),\r\n options: {\r\n body: {\r\n //comboId: comp.id,\r\n // isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00195\",\r\n ready: function () {\r\n // if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n\r\n if (count > 0) {\r\n var combo = webix.$$(\"code\");\r\n combo.setValue(this.getFirstId());\r\n }\r\n // }\r\n },\r\n },\r\n },\r\n // value_field: item.value_field,\r\n // isDefault: item.has_default,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var table = $$(\"kyhieu\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n // height: 40,\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var table = webix.$$(\"kyhieu\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.$$(\"title\").parse({\r\n title: \"Quản lý ký hiệu biên lai sử dụng\",\r\n details: \"Quản lý ký hiệu biên lai sử dụng\",\r\n });\r\n var table = webix.$$(\"kyhieu\");\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChangedKyhieu68\", function (mode, item) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_kyhieu_donvi',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n var editmode = 0;\r\n var param;\r\n var branh_code;\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"kyhieu-form\").getValues();\r\n var table = $$(\"kyhieu-form\");\r\n\r\n if (table.validate()) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/kihieudonvi68\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"kyhieu-win\").close();\r\n var table = $$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"kyhieu-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"kyhieu-win\",\r\n position: \"center\",\r\n head: \"Đăng ký ký hiệu\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"kyhieu-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"combo\",\r\n name: \"phanhoadon_78_id\",\r\n label: \"Ký hiệu\",\r\n //labelPosition: \"top\",\r\n id: \"phanhoadon_78_id\",\r\n required: true,\r\n labelWidth: 120,\r\n invalidMessage: \"Ký hiệu không được bỏ trống\",\r\n css: \"mcls_uppercase\",\r\n options: {\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00230\",\r\n },on: {\r\n onChange: function (newv, oldv) {\r\n var test = newv;\r\n },\r\n },\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n initUI: function (item) {\r\n param = item;\r\n },\r\n setValues: function (item) {\r\n $$(\"kyhieu-form\").setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_kyhieu_donvi_bienlai',[\"app\", \"locale\", \"models/user\", \"views/forms/68_kyhieu_donvi\"], function (app, _, user, kyhieuForm) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Phân ký kiệu hoá đơn cho đơn vị\",\r\n details: \"Phân ký kiệu hoá đơn cho đơn vị\",\r\n });\r\n\r\n var initUI = function () {\r\n // var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var url = app.config.host + \"/Invoice68/GetKyHieuDonVi68\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n // console.log(child);\r\n var id = child.config.id;\r\n //var value_field = child.config.value_field;\r\n\r\n var item = {\r\n columnName: id,\r\n value: $$(id).getValue(),\r\n };\r\n parameters.push(item);\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n webix.ajax(url+ \"&loaikh=2\", callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var submenuChucNang = webix.ui({\r\n id: \"submnchucnang\",\r\n view: \"submenu\",\r\n width: 250,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"UploadTemplate\",\r\n value: \"Tải mẫu lên\",\r\n },\r\n {\r\n id: \"SignTemplate\",\r\n value: \"Ký mẫu hóa đơn\",\r\n },\r\n {\r\n id: \"PreviewTemplate\",\r\n value: \"Xem mẫu hóa đơn (PDF)\",\r\n },\r\n {\r\n id: \"DownloadTemplate\",\r\n value: \"Tải mẫu thiết kế (.repx)\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n this.hide();\r\n var selectedItem = webix.$$(\"congvieckinhdoanh\").getSelectedItem();\r\n if (selectedselectedItem == null) {\r\n webix.message(\"Bạn chưa chọn khách hàng !\", \"error\");\r\n return;\r\n }\r\n },\r\n },\r\n });\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n kyhieuForm.setEditMode(1);\r\n var params = null;\r\n\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var item = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n item[\"branch_code\"] = $$(id).getValue();\r\n }\r\n\r\n params = item;\r\n }\r\n kyhieuForm.setValues(params);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n var selectedItem = table.getSelectedItem();\r\n if(selectedItem != null) {\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({\"Content-type\": \"application/json\"})\r\n .post(app.config.host + \"/Invoice68/deletekihieudonvi68\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message(res.error, \"error\");\r\n } else {\r\n table.remove(selectedItem.id);\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n }\r\n else {\r\n webix.message(\"Chưa chọn dòng cần xóa\", \"info\");\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n {},\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"kyhieu_hoadon\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.ngayLap) {\r\n // obj.ngayLap = new Date(obj.ngayLap);\r\n // }\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"phanhoadon_78_donvi_id\",\r\n header: \"phanhoadon_78_donvi_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"phanhoadon_78_id\",\r\n header: \"phanhoadon_78_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"kyhieu_id\",\r\n header: \"kyhieu_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"khhdon\",\r\n header: [\r\n \"Kí hiệu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 240,\r\n },\r\n {\r\n id: \"tongso\",\r\n header: [\r\n \"Tổng số\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"sosudung\",\r\n header: [\r\n \"Số sử dụng\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"ngaybatdau\",\r\n format: function (text) {\r\n var test = new Date(text);\r\n if (test !== null && test !== \"null\") {\r\n var format = webix.Date.dateToStr(\"%d-%m-%Y %H:%i:%s\");\r\n text = removeTimeZoneT(test);\r\n return format(text);\r\n }\r\n return \"\";\r\n },\r\n width: 240,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"branch_code\",\r\n header: [\r\n \"Đơn vị tạo\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"donvisudung\",\r\n header: [\r\n \"Đơn vị sử dụng\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n id: \"paramDonvi\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"branch_code\",\r\n view: \"combo\",\r\n width: 500,\r\n label: _(\"Đơn vị\"),\r\n options: {\r\n body: {\r\n //comboId: comp.id,\r\n // isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00195\",\r\n ready: function () {\r\n // if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n\r\n if (count > 0) {\r\n var combo = webix.$$(\"branch_code\");\r\n combo.setValue(this.getFirstId());\r\n var table = $$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n // }\r\n },\r\n },\r\n },\r\n // value_field: item.value_field,\r\n // isDefault: item.has_default,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var table = $$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n // height: 40,\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n return {\r\n $ui: layout,\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_kyhieu_donvi_tncn',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n var editmode = 0;\r\n var param;\r\n var branh_code;\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"kyhieu-form\").getValues();\r\n var table = $$(\"kyhieu-form\");\r\n\r\n if (table.validate()) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/kihieudonvi68\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"kyhieu-win\").close();\r\n var table = $$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"kyhieu-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"kyhieu-win\",\r\n position: \"center\",\r\n head: \"Đăng ký ký hiệu\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"kyhieu-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n // {\r\n // view: \"text\",\r\n // label: \"Tên mẫu\",\r\n // name: \"ten_mau\",\r\n // required: true,\r\n // invalidMessage: \"Tên mẫu không được bỏ trống\",\r\n // labelWidth: 120\r\n // },\r\n {\r\n view: \"combo\",\r\n name: \"phanhoadon_78_id\",\r\n label: \"Ký hiệu\",\r\n //labelPosition: \"top\",\r\n id: \"phanhoadon_78_id\",\r\n required: true,\r\n labelWidth: 120,\r\n invalidMessage: \"Ký hiệu không được bỏ trống\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF02001\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var test = newv;\r\n },\r\n },\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n initUI: function (item) {\r\n param = item;\r\n },\r\n setValues: function (item) {\r\n $$(\"kyhieu-form\").setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_kyhieu_donvi_tncn',[\"app\", \"locale\", \"models/user\", \"views/forms/68_kyhieu_donvi_tncn\"], function (app, _, user, kyhieuForm) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Phân ký kiệu chứng từ cho đơn vị\",\r\n details: \"Phân ký kiệu chứng từ cho đơn vị\",\r\n });\r\n\r\n var initUI = function () {\r\n // var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var url = app.config.host + \"/Invoice68/GetKyHieuDonVi68\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n // console.log(child);\r\n var id = child.config.id;\r\n //var value_field = child.config.value_field;\r\n\r\n var item = {\r\n columnName: id,\r\n value: $$(id).getValue(),\r\n };\r\n parameters.push(item);\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n webix.ajax(url+ \"&loaikh=3\", callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var submenuChucNang = webix.ui({\r\n id: \"submnchucnang\",\r\n view: \"submenu\",\r\n width: 250,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"UploadTemplate\",\r\n value: \"Tải mẫu lên\",\r\n },\r\n {\r\n id: \"SignTemplate\",\r\n value: \"Ký mẫu hóa đơn\",\r\n },\r\n {\r\n id: \"PreviewTemplate\",\r\n value: \"Xem mẫu hóa đơn (PDF)\",\r\n },\r\n {\r\n id: \"DownloadTemplate\",\r\n value: \"Tải mẫu thiết kế (.repx)\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n this.hide();\r\n var selectedItem = webix.$$(\"congvieckinhdoanh\").getSelectedItem();\r\n if (selectedselectedItem == null) {\r\n webix.message(\"Bạn chưa chọn khách hàng !\", \"error\");\r\n return;\r\n }\r\n },\r\n },\r\n });\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n kyhieuForm.setEditMode(1);\r\n var params = null;\r\n\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var item = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n item[\"branch_code\"] = $$(id).getValue();\r\n }\r\n\r\n params = item;\r\n }\r\n kyhieuForm.setValues(params);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n var selectedItem = table.getSelectedItem();\r\n if(selectedItem != null) {\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({\"Content-type\": \"application/json\"})\r\n .post(app.config.host + \"/Invoice68/deletekihieudonvi68\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message(res.error, \"error\");\r\n } else {\r\n table.remove(selectedItem.id);\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n }\r\n else {\r\n webix.message(\"Chưa chọn dòng cần xóa\", \"info\");\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n {},\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"kyhieu_hoadon\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.ngayLap) {\r\n // obj.ngayLap = new Date(obj.ngayLap);\r\n // }\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"phanhoadon_78_donvi_id\",\r\n header: \"phanhoadon_78_donvi_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"phanhoadon_78_id\",\r\n header: \"phanhoadon_78_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"kyhieu_id\",\r\n header: \"kyhieu_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"khhdon\",\r\n header: [\r\n \"Ký hiệu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 240,\r\n },\r\n {\r\n id: \"tongso\",\r\n header: [\r\n \"Tổng số\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"sosudung\",\r\n header: [\r\n \"Số sử dụng\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"ngaybatdau\",\r\n format: function (text) {\r\n var test = new Date(text);\r\n if (test !== null && test !== \"null\") {\r\n var format = webix.Date.dateToStr(\"%d-%m-%Y %H:%i:%s\");\r\n text = removeTimeZoneT(test);\r\n return format(text);\r\n }\r\n return \"\";\r\n },\r\n width: 240,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"branch_code\",\r\n header: [\r\n \"Đơn vị tạo\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"donvisudung\",\r\n header: [\r\n \"Đơn vị sử dụng\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n id: \"paramDonvi\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"branch_code\",\r\n view: \"combo\",\r\n width: 500,\r\n label: _(\"Đơn vị\"),\r\n options: {\r\n body: {\r\n //comboId: comp.id,\r\n // isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00195\",\r\n ready: function () {\r\n // if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n\r\n if (count > 0) {\r\n var combo = webix.$$(\"branch_code\");\r\n combo.setValue(this.getFirstId());\r\n var table = $$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n // }\r\n },\r\n },\r\n },\r\n // value_field: item.value_field,\r\n // isDefault: item.has_default,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var table = $$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n // height: 40,\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n return {\r\n $ui: layout,\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/68_kyhieu_donvi',[\"views/commonHD\", \"app\", \"locale\", \"models/user\", \"views/forms/68_kyhieu_donvi\"], function (commonHD, app, _, user, kyhieuForm) {\r\n \r\n var initUI = function () {\r\n // var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var url = app.config.host + \"/Invoice68/GetKyHieuDonVi68\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n // console.log(child);\r\n var id = child.config.id;\r\n //var value_field = child.config.value_field;\r\n\r\n var item = {\r\n columnName: id,\r\n value: $$(id).getValue(),\r\n };\r\n parameters.push(item);\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var submenuChucNang = webix.ui({\r\n id: \"submnchucnang\",\r\n view: \"submenu\",\r\n width: 250,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"UploadTemplate\",\r\n value: \"Tải mẫu lên\",\r\n },\r\n {\r\n id: \"SignTemplate\",\r\n value: \"Ký mẫu hóa đơn\",\r\n },\r\n {\r\n id: \"PreviewTemplate\",\r\n value: \"Xem mẫu hóa đơn (PDF)\",\r\n },\r\n {\r\n id: \"DownloadTemplate\",\r\n value: \"Tải mẫu thiết kế (.repx)\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n this.hide();\r\n var selectedItem = webix.$$(\"congvieckinhdoanh\").getSelectedItem();\r\n if (selectedselectedItem == null) {\r\n webix.message(\"Bạn chưa chọn khách hàng !\", \"error\");\r\n return;\r\n }\r\n },\r\n },\r\n });\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n commonHD.clear_filter(table);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n kyhieuForm.setEditMode(1);\r\n var params = null;\r\n\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var item = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n item[\"branch_code\"] = $$(id).getValue();\r\n }\r\n\r\n params = item;\r\n }\r\n kyhieuForm.setValues(params);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem != null) {\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/deletekihieudonvi68\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message(res.error, \"error\");\r\n } else {\r\n table.remove(selectedItem.id);\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n }\r\n else {\r\n webix.message(\"Chưa chọn dòng cần xóa\", \"info\");\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n {},\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"kyhieu_hoadon\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.ngayLap) {\r\n // obj.ngayLap = new Date(obj.ngayLap);\r\n // }\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"phanhoadon_78_donvi_id\",\r\n header: \"phanhoadon_78_donvi_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"phanhoadon_78_id\",\r\n header: \"phanhoadon_78_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"kyhieu_id\",\r\n header: \"kyhieu_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"khhdon\",\r\n header: [\r\n \"Ký hiệu\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 240,\r\n },\r\n {\r\n id: \"tongso\",\r\n header: [\r\n \"Tổng số\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"sosudung\",\r\n header: [\r\n \"Số sử dụng\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"ngaybatdau\",\r\n header: \"Ngày bắt đầu\",\r\n format: function (text) {\r\n var test = new Date(text);\r\n if (test !== null && test !== \"null\") {\r\n var format = webix.Date.dateToStr(\"%d-%m-%Y %H:%i:%s\");\r\n text = removeTimeZoneT(test);\r\n return format(text);\r\n }\r\n return \"\";\r\n },\r\n width: 240,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"branch_code\",\r\n header: [\r\n \"Đơn vị tạo\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"donvisudung\",\r\n header: [\r\n \"Đơn vị sử dụng\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n id: \"paramDonvi\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"branch_code\",\r\n view: \"combo\",\r\n width: 800,\r\n label: _(\"Đơn vị\"),\r\n options: {\r\n body: {\r\n //comboId: comp.id,\r\n // isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00195\",\r\n ready: function () {\r\n // if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n\r\n if (count > 0) {\r\n var combo = webix.$$(\"branch_code\");\r\n combo.setValue(this.getFirstId());\r\n var table = $$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n // }\r\n },\r\n },\r\n },\r\n // value_field: item.value_field,\r\n // isDefault: item.has_default,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var table = $$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n // height: 40,\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n return {\r\n $ui: layout,\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n if (webix.$$(\"head-title\") != null) {\r\n webix.$$(\"head-title\").show()\r\n }\r\n webix.$$(\"title\").parse({\r\n title: \"Phân ký kiệu hoá đơn cho đơn vị\",\r\n details: \"Phân ký kiệu hoá đơn cho đơn vị\",\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_kyhieuForm_tncn',[\"app\", \"models/user\"], function (app, user) {\r\n var editmode = 0;\r\n var param;\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"kyhieu-form\").getValues();\r\n var table = $$(\"kyhieu-form\");\r\n\r\n var khhdon = item.khhdon;\r\n\r\n if (table.validate()) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n item.editmode = editmode;\r\n item.code = param.code;\r\n item.loaikh = 3;\r\n item.id = item.qlkhsdung_id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/quanlykyhieu68\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"kyhieu-win\").close();\r\n var table = $$(\"kyhieu\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"kyhieu-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"kyhieu-win\",\r\n position: \"center\",\r\n head: \"Đăng ký ký hiệu\",\r\n on: {\r\n onBeforeShow: function () {\r\n if (editmode == 1) {\r\n var date = new Date();\r\n var year = date.getFullYear();\r\n $$(\"khhdon\").setValue(\"AB/\" +year.toString() + \"/E\");\r\n }\r\n },\r\n },\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"kyhieu-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n // {\r\n // view: \"text\",\r\n // label: \"Tên mẫu\",\r\n // name: \"ten_mau\",\r\n // required: true,\r\n // invalidMessage: \"Tên mẫu không được bỏ trống\",\r\n // labelWidth: 120\r\n // },\r\n /*{\r\n view: \"combo\",\r\n name: \"loaibl\",\r\n label: \"Loại biên lai\",\r\n //labelPosition: \"top\",\r\n id: \"loaibl\",\r\n required: true,\r\n labelWidth: 120,\r\n value: \"01\",\r\n invalidMessage: \"Loại hóa đơn không được bỏ trống !\",\r\n options: [\r\n { id: \"01\", value: \"Biên lai thu phí, lệ phí không có mệnh giá\" },\r\n { id: \"02\", value: \"Biên lai thu phí, lệ phí có mệnh giá\" }\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var kyhieu = $$(\"khmbl\").getValue();\r\n var res = kyhieu.replace(kyhieu.substring(0, 2), newv);\r\n $$(\"khmbl\").setValue(res);\r\n $$(\"khmbl\").refresh();\r\n },\r\n },\r\n },*/\r\n /*{\r\n view: \"combo\",\r\n label: \"Hình thức\",\r\n name: \"hthuc\",\r\n id: \"hthuc\",\r\n required: true,\r\n invalidMessage: \"Hình thức không được bỏ trống\",\r\n labelWidth: 120,\r\n value: \"K\",\r\n options: [\r\n { id: \"K\", value: \"Hóa đơn không có mã của CQT\" },\r\n { id: \"C\", value: \"Hóa đơn có mã của CQT\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n\r\n },\r\n },\r\n },*/\r\n {\r\n view: \"text\",\r\n label: \"Ký hiệu mẫu\",\r\n name: \"khmbl\",\r\n id: \"khmbl\",\r\n labelWidth: 120,\r\n required: true,\r\n readonly:false,\r\n value :\"03/TNCN\",\r\n invalidMessage: \"Không được bỏ trống\",\r\n },\r\n /*{\r\n view: \"combo\",\r\n label: \"Hình thức biên lai\",\r\n name: \"htbl\",\r\n id: \"htbl\",\r\n required: true,\r\n invalidMessage: \"Không được bỏ trống\",\r\n labelWidth: 120,\r\n value: \"T\",\r\n options: [\r\n { id: \"T\", value: \"Biên lai thu phí, lệ phí tự in\" },\r\n { id: \"P\", value: \"Biên lai đặt in\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var kyhieu = $$(\"khhdon\").getValue();\r\n var res = kyhieu.substring(0,kyhieu.length-1) + newv;\r\n $$(\"khhdon\").setValue(res);\r\n $$(\"khhdon\").refresh();\r\n },\r\n },\r\n },*/\r\n {\r\n view: \"text\",\r\n label: \"Ký hiệu\",\r\n name: \"khhdon\",\r\n id: \"khhdon\",\r\n labelWidth: 120,\r\n required: true,\r\n value :\"AB/2022/E\",\r\n invalidMessage: \"Định dạnh đúng: AB/2022/E. Kí tự cuối cùng phải là E\",\r\n validate: function (val) {\r\n var regText = /^([A-Z]{2})(\\/)(20[1-9]{2})(\\/E)$/g;\r\n if(regText.test(val))\r\n {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n },\r\n // validate: webix.rules.isMauSo\r\n },\r\n {\r\n id: \"sdmau\",\r\n name: \"sdmau\",\r\n label: \"Số dòng in mẫu\",\r\n labelWidth: 120,\r\n view: \"text\",\r\n value: 1,\r\n hidden:true,\r\n validate: function (val) {\r\n return !isNaN(val * 1) && val * 1 >= 0;\r\n },\r\n invalidMessage: \"Phải nhập số dương\",\r\n attributes: { type: \"number\" },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Mẫu thiết kế\",\r\n name: \"qlmtke_id\",\r\n id: \"qlmtke_id\",\r\n labelWidth: 120,\r\n required: true,\r\n invalidMessage: \"Mẫu không được bỏ trống\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF02002\",\r\n on: {\r\n onChange: function (newv, oldv) {},\r\n },\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n initUI: function (item) {\r\n param = item;\r\n },\r\n setValues: function (item) {\r\n $$(\"kyhieu-form\").setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_kyhieu_tncn',[\"app\", \"locale\", \"models/user\", \"views/forms/68_kyhieuForm_tncn\"], function (app, _, user, kyhieuForm) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Quản lý ký hiệu chứng từ sử dụng\",\r\n details: \"Quản lý ký hiệu chứng từ sử dụng\",\r\n });\r\n\r\n var initUI = function () {\r\n // var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"kyhieu\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var url = app.config.host + \"/Invoice68/GetDataquanlykyhieu68\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n // console.log(child);\r\n var id = child.config.id;\r\n //var value_field = child.config.value_field;\r\n\r\n var item = {\r\n columnName: \"code\",\r\n value: $$(id).getValue(),\r\n };\r\n parameters.push(item);\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n webix.ajax(url +\"&loaikh=3\", callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var submenuChucNang = webix.ui({\r\n id: \"submnchucnang\",\r\n view: \"submenu\",\r\n width: 250,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"UploadTemplate\",\r\n value: \"Tải mẫu lên\",\r\n },\r\n {\r\n id: \"SignTemplate\",\r\n value: \"Ký mẫu chứng từ\",\r\n },\r\n {\r\n id: \"PreviewTemplate\",\r\n value: \"Xem mẫu chứng từ (PDF)\",\r\n },\r\n {\r\n id: \"DownloadTemplate\",\r\n value: \"Tải mẫu thiết kế (.repx)\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n this.hide();\r\n var selectedItem = webix.$$(\"congvieckinhdoanh\").getSelectedItem();\r\n if (selectedselectedItem == null) {\r\n webix.message(\"Bạn chưa chọn khách hàng !\", \"error\");\r\n return;\r\n }\r\n },\r\n },\r\n });\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n kyhieuForm.setEditMode(1);\r\n var params = null;\r\n\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var item = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n item[id] = $$(id).getValue();\r\n }\r\n\r\n params = item;\r\n }\r\n kyhieuForm.initUI(params);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.tt_sd > 0) {\r\n webix.message(\"Ký hiệu đã sử dụng không thể sửa ! \", \"error\");\r\n return;\r\n }\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n\r\n var params = null;\r\n\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var item = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n item[id] = $$(id).getValue();\r\n }\r\n\r\n params = item;\r\n }\r\n kyhieuForm.initUI(params);\r\n\r\n kyhieuForm.setEditMode(2);\r\n kyhieuForm.setValues(selectedItem);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn ký hiệu chứng từ cần xóa ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.tt_sd > 0) {\r\n webix.message(\"Ký hiệu đã sử dụng không thể xóa ! \", \"error\");\r\n return;\r\n }\r\n selectedItem.editmode = 3;\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/deletequanlykyhieu68\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message(res.error, \"error\");\r\n } else {\r\n table.remove(selectedItem.id);\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \" (F7)\" + \"\",\r\n id: \"btnPrint\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn chứng từ cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in chứng từ ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"chứng từ điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMauHoadon?id=\" + item.id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // id: \"btnChucNang\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"fa fa-cube\",\r\n // label: \"Chức năng\",\r\n // width: 100,\r\n // css: \"button_raised\",\r\n // click: function () {\r\n // submenuChucNang.show(webix.$$(\"btnChucNang\").$view);\r\n // },\r\n // },\r\n // {\r\n // view: \"button\",\r\n // id: \"btnRegister\",\r\n // type: \"icon\",\r\n // icon: \"plus\",\r\n // label: \"Đăng ký\",\r\n // width: 100,\r\n // shortcut: \"F1\",\r\n // on: {\r\n // onClick: function () {\r\n // var detailForm = this.$scope.ui(dangkyform.$ui);\r\n // dangkyform.setEditMode(0);\r\n // detailForm.show();\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"kyhieu\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.ngayLap) {\r\n // obj.ngayLap = new Date(obj.ngayLap);\r\n // }\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"kyhieu_id\",\r\n header: \"kyhieu_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"index\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"tmau\",\r\n header: [\r\n \"Tên mẫu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"khmbl\",\r\n header: [\r\n \"Ký hiệu mẫu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"khhdon\",\r\n header: [\r\n \"Ký hiệu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n // {\r\n // id: \"trangThai\",\r\n // header: [\r\n // \"Số dòng in mẫu\",\r\n // {\r\n // content: \"textFilter\",\r\n // },\r\n // ],\r\n // width: 120,\r\n // template: function (obj) {\r\n // return (\r\n // \"\" +\r\n // obj.trangThai +\r\n // \"\"\r\n // );\r\n // }\r\n // },\r\n {\r\n id: \"nlap\",\r\n header: [\r\n \"Ngày lập\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n columnType: \"datetime\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"nglap\",\r\n header: [\r\n \"Người lập\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"tt_sdung\",\r\n header: [\"Sử dụng\"],\r\n editor: \"checkbox\",\r\n width: 90,\r\n template: function (obj) {\r\n var checked = obj.tt_sd > 0 ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n id: \"paramDonvi\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"code\",\r\n view: \"combo\",\r\n width: 500,\r\n label: _(\"Đơn vị\"),\r\n options: {\r\n body: {\r\n //comboId: comp.id,\r\n // isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00195\",\r\n ready: function () {\r\n // if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n\r\n if (count > 0) {\r\n var combo = webix.$$(\"code\");\r\n combo.setValue(this.getFirstId());\r\n }\r\n // }\r\n },\r\n },\r\n },\r\n // value_field: item.value_field,\r\n // isDefault: item.has_default,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var table = $$(\"kyhieu\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n // height: 40,\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var table = webix.$$(\"kyhieu\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"kyhieu\");\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChangedKyhieu68\", function (mode, item) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_kyhieuForm',[\"app\", \"models/user\"], function (app, user) {\r\n var editmode = 0;\r\n var param;\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"kyhieu-form\").getValues();\r\n var table = $$(\"kyhieu-form\");\r\n\r\n var khhdon = item.khhdon;\r\n\r\n if (item.lhdon != khhdon[0] || item.hthuc != khhdon[1] || item.khdon != khhdon[4]) {\r\n webix.message(\"Ký hiệu không hợp lệ\", \"error\");\r\n return;\r\n }\r\n var donginmau = item.sdmau;\r\n if (donginmau == undefined || donginmau == \"\") {\r\n webix.message(\"Dòng in mẫu không được để trống\", \"error\");\r\n return;\r\n }\r\n if (table.validate()) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n item.editmode = editmode;\r\n item.code = param.code;\r\n item.loaikh = 1;\r\n item.id = item.qlkhsdung_id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/quanlykyhieu68\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"kyhieu-win\").close();\r\n var table = $$(\"kyhieu\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"kyhieu-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"kyhieu-win\",\r\n position: \"center\",\r\n head: \"Đăng ký ký hiệu hóa đơn\",\r\n on: {\r\n onBeforeShow: function () {\r\n var table = webix.$$(\"kyhieu\");\r\n var selectedItem = table.getSelectedItem();\r\n if (editmode == 1) {\r\n var date = new Date();\r\n var year = date.getFullYear();\r\n $$(\"khhdon\").setValue(\"1K\" + year.toString().substring(2, 4) + \"TYY\");\r\n } else if (editmode == 2) {\r\n if (selectedItem.tt_sd > 0) {\r\n $$(\"lhdon\").disable();\r\n $$(\"hthuc\").disable();\r\n $$(\"khhdon\").disable();\r\n $$(\"qlmtke_id\").disable();\r\n $$(\"khdon\").disable();\r\n }\r\n }\r\n },\r\n },\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"kyhieu-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n // {\r\n // view: \"text\",\r\n // label: \"Tên mẫu\",\r\n // name: \"ten_mau\",\r\n // required: true,\r\n // invalidMessage: \"Tên mẫu không được bỏ trống\",\r\n // labelWidth: 120\r\n // },\r\n {\r\n view: \"combo\",\r\n name: \"lhdon\",\r\n label: \"Loại hóa đơn\",\r\n //labelPosition: \"top\",\r\n id: \"lhdon\",\r\n required: true,\r\n labelWidth: 120,\r\n value: \"1\",\r\n invalidMessage: \"Loại hóa đơn không được bỏ trống !\",\r\n options: [\r\n { id: \"1\", value: \"Hóa đơn GTGT\" },\r\n { id: \"2\", value: \"Hóa đơn bán hàng\" },\r\n { id: \"3\", value: \"Hóa đơn điện tử bán tài sản công\" },\r\n { id: \"4\", value: \"Hóa đơn điện tử bán hàng dự trữ quốc gia\" },\r\n { id: \"5\", value: \"Hóa đơn khác: tem, vé, thẻ, phiếu...\" },\r\n { id: \"6\", value: \"Phiếu xuất kho kiêm vận chuyển nội bộ/ hàng gửi bán đại lý\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var kyhieu = $$(\"khhdon\").getValue();\r\n var res = kyhieu.replace(kyhieu.substring(0, 1), newv);\r\n $$(\"khhdon\").setValue(res);\r\n $$(\"khhdon\").refresh();\r\n },\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Hình thức\",\r\n name: \"hthuc\",\r\n id: \"hthuc\",\r\n required: true,\r\n invalidMessage: \"Hình thức không được bỏ trống\",\r\n labelWidth: 120,\r\n value: \"K\",\r\n options: [\r\n { id: \"K\", value: \"Hóa đơn không có mã của CQT\" },\r\n { id: \"C\", value: \"Hóa đơn có mã của CQT\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var kyhieu = $$(\"khhdon\").getValue();\r\n\r\n var res = kyhieu.replace(kyhieu.substring(1, 2), newv);\r\n $$(\"khhdon\").setValue(res);\r\n $$(\"khhdon\").refresh();\r\n },\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Kiểu hóa đơn\",\r\n name: \"khdon\",\r\n id: \"khdon\",\r\n labelWidth: 120,\r\n required: true,\r\n invalidMessage: \"Hình thức không được bỏ trống\",\r\n value: \"T\",\r\n options: [\r\n { id: \"T\", value: \"Tự đăng ký sử dụng\" },\r\n { id: \"D\", value: \"Hóa đơn đặc thù\" },\r\n { id: \"L\", value: \"Hóa đơn CQT cấp từng lần\" },\r\n { id: \"M\", value: \"Hóa đơn khởi tạo từ máy tính tiền\" },\r\n { id: \"N\", value: \"PXKKVCNB\" },\r\n { id: \"B\", value: \"PXKGBĐL\" },\r\n { id: \"G\", value: \"Tem, vé, thẻ điện tử là hóa đơn giá trị gia tăng\" },\r\n { id: \"H\", value: \"Tem, vé, thẻ điện tử là hóa đơn bán hàng\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var kyhieu = $$(\"khhdon\").getValue();\r\n\r\n var res = kyhieu.replace(kyhieu.substring(4, 5), newv);\r\n $$(\"khhdon\").setValue(res);\r\n $$(\"khhdon\").refresh();\r\n\r\n if(newv === 'M')\r\n {\r\n $$(\"mtttien\").show();\r\n\r\n\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Ký hiệu\",\r\n name: \"khhdon\",\r\n id: \"khhdon\",\r\n labelWidth: 120,\r\n required: true,\r\n invalidMessage: \"Ký hiệu không được bỏ trống hoặc sai định dạng\",\r\n attributes: {\r\n maxlength: 7,\r\n },\r\n validate: function(value) {\r\n var regex = /^[A-Z1-9]{1,7}$/;\r\n return regex.test(value);\r\n }\r\n \r\n },\r\n {\r\n view: \"text\",\r\n label: \"Mã máy tính tiền\",\r\n name: \"mtttien\",\r\n id: \"mtttien\",\r\n hidden: true,\r\n labelWidth: 120,\r\n attributes: {\r\n maxlength: 5,\r\n },\r\n },\r\n {\r\n id: \"sdmau\",\r\n name: \"sdmau\",\r\n label: \"Số dòng in mẫu\",\r\n labelWidth: 120,\r\n view: \"text\",\r\n value: 1,\r\n required: true,\r\n validate: function (val) {\r\n return !isNaN(val * 1) && val * 1 >= 0;\r\n },\r\n invalidMessage: \"Phải nhập số dương\",\r\n attributes: { type: \"number\" },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Mẫu thiết kế\",\r\n name: \"qlmtke_id\",\r\n id: \"qlmtke_id\",\r\n labelWidth: 120,\r\n required: true,\r\n invalidMessage: \"Mẫu không được bỏ trống\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00053\",\r\n on: {\r\n onChange: function (newv, oldv) {},\r\n },\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n initUI: function (item) {\r\n param = item;\r\n if(editmode ==1) {\r\n webix\r\n .ajax()\r\n .get(app.config.host + \"/Invoice68/GetMaTinhTien\", function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"mtttien\").setValue(json['mccqt']);\r\n $$(\"mtttien\").refresh();\r\n });\r\n }\r\n },\r\n setValues: function (item) {\r\n $$(\"kyhieu-form\").setValues(item);\r\n\r\n\r\n },\r\n };\r\n});\r\n\ndefine('views/68_kyhieu',[\"views/commonHD\", \"app\", \"locale\", \"models/user\", \"views/forms/68_kyhieuForm\"], function (commonHD, app, _, user, kyhieuForm) {\r\n \r\n var initUI = function () {\r\n var table = webix.$$(\"kyhieu\");\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var url = app.config.host + \"/Invoice68/GetDataquanlykyhieu68\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n var id = child.config.id;\r\n var item = {\r\n columnName: \"code\",\r\n value: $$(id).getValue(),\r\n };\r\n parameters.push(item);\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var submenuChucNang = webix.ui({\r\n id: \"submnchucnang\",\r\n view: \"submenu\",\r\n width: 250,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"UploadTemplate\",\r\n value: \"Tải mẫu lên\",\r\n },\r\n {\r\n id: \"SignTemplate\",\r\n value: \"Ký mẫu hóa đơn\",\r\n },\r\n {\r\n id: \"PreviewTemplate\",\r\n value: \"Xem mẫu hóa đơn (PDF)\",\r\n },\r\n {\r\n id: \"DownloadTemplate\",\r\n value: \"Tải mẫu thiết kế (.repx)\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n this.hide();\r\n var selectedItem = webix.$$(\"congvieckinhdoanh\").getSelectedItem();\r\n if (selectedselectedItem == null) {\r\n webix.message(\"Bạn chưa chọn khách hàng !\", \"error\");\r\n return;\r\n }\r\n },\r\n },\r\n });\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu\");\r\n commonHD.clear_filter(table);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n kyhieuForm.setEditMode(1);\r\n var params = null;\r\n\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var item = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n item[id] = $$(id).getValue();\r\n }\r\n\r\n params = item;\r\n }\r\n kyhieuForm.initUI(params);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n return;\r\n }\r\n // if (selectedItem.tt_sd > 0) {\r\n // webix.message(\"Ký hiệu đã sử dụng không thể sửa ! \", \"error\");\r\n // return;\r\n // }\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n\r\n var params = null;\r\n\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var item = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n item[id] = $$(id).getValue();\r\n }\r\n\r\n params = item;\r\n }\r\n kyhieuForm.initUI(params);\r\n\r\n kyhieuForm.setEditMode(2);\r\n kyhieuForm.setValues(selectedItem);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn ký hiệu hóa đơn cần xóa ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.tt_sd > 0) {\r\n webix.message(\"Ký hiệu đã sử dụng không thể xóa ! \", \"error\");\r\n return;\r\n }\r\n selectedItem.editmode = 3;\r\n var dataPost = {\r\n id: selectedItem.qlkhsdung_id,\r\n editmode: 3\r\n }\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/deletequanlykyhieu68\", dataPost, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(\"Xóa ký hiệu \" + selectedItem.khhdon + \" không thành công\", \"error\");\r\n console.error(json.error);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message(res.error, \"error\");\r\n } else {\r\n webix.message(\"Xóa ký hiệu \" + selectedItem.khhdon + \" thành công\", \"success\");\r\n table.remove(selectedItem.id);\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \" (F7)\" + \"\",\r\n id: \"btnPrint\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMauHoadon?id=\" + item.qlkhsdung_id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"kyhieu\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.ngayLap) {\r\n // obj.ngayLap = new Date(obj.ngayLap);\r\n // }\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"kyhieu_id\",\r\n header: \"kyhieu_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"index\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"tmau\",\r\n header: [\r\n \"Tên mẫu\",\r\n {\r\n content: \"serverFilter\",\r\n /* Code tối ưu ui \r\n content: \"serverSelectFilter\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00053\",\r\n */\r\n },\r\n ],\r\n width: 250,\r\n },\r\n {\r\n id: \"lhdon\",\r\n header: [\r\n \"Loại hóa đơn\",\r\n {\r\n content: \"serverFilter\",\r\n /* Code tối ưu ui \r\n content: \"serverSelectFilter\",\r\n options: [\r\n { id: \"1\", value: \"Hóa đơn GTGT (1)\" },\r\n { id: \"2\", value: \"Hóa đơn bán hàng (2)\" },\r\n { id: \"3\", value: \"Hóa đơn điện tử bán tài sản công (3)\" },\r\n { id: \"4\", value: \"Hóa đơn điện tử bán hàng dự trữ quốc gia (4)\" },\r\n { id: \"5\", value: \"Hóa đơn khác: tem, vé, thẻ, phiếu... (5)\" },\r\n { id: \"6\", value: \"Phiếu xuất kho kiêm vận chuyển nội bộ/ hàng gửi bán đại lý (6)\" },\r\n ],\r\n */\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n /* Code tối ưu ui \r\n template: function (obj) {\r\n switch (obj.lhdon) {\r\n case 1:\r\n return \"Hóa đơn GTGT (1)\";\r\n case 2:\r\n return \"Hóa đơn bán hàng (2)\";\r\n case 3:\r\n return \"Hóa đơn điện tử bán tài sản công (3)\";\r\n case 4:\r\n return \"Hóa đơn điện tử bán hàng dự trữ quốc gia (4)\";\r\n case 5:\r\n return \"Hóa đơn khác: tem, vé, thẻ, phiếu... (5)\";\r\n case 6:\r\n return \"Phiếu xuất kho kiêm vận chuyển nội bộ/ hàng gửi bán đại lý (6)\";\r\n default:\r\n return obj.lhdon;\r\n }\r\n },\r\n */\r\n },\r\n {\r\n id: \"hthuc\",\r\n header: [\r\n \"Hình thức\",\r\n {\r\n content: \"serverFilter\",\r\n /* Code tối ưu ui \r\n content: \"serverSelectFilter\",\r\n options: [\r\n { id: \"K\", value: \"Hóa đơn không có mã của CQT (K)\" },\r\n { id: \"C\", value: \"Hóa đơn có mã của CQT (C)\" },\r\n ],\r\n */\r\n },\r\n ],\r\n width: 120,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n /* Code tối ưu ui \r\n template: function (obj) {\r\n switch (obj.hthuc) {\r\n case \"K\":\r\n return \"Hóa đơn không có mã của CQT (K)\";\r\n case \"C\":\r\n return \"Hóa đơn có mã của CQT (C)\";\r\n default:\r\n return null; // Handle default case if needed\r\n }\r\n }\r\n */\r\n },\r\n {\r\n id: \"khdon\",\r\n header: [\r\n \"Kiểu hóa đơn\",\r\n {\r\n content: \"serverFilter\",\r\n /* Code tối ưu ui \r\n content: \"serverSelectFilter\",\r\n options: [\r\n { id: \"T\", value: \"Tự đăng ký sử dụng (T)\" },\r\n { id: \"D\", value: \"Hóa đơn đặc thù (D)\" },\r\n { id: \"L\", value: \"Hóa đơn CQT cấp từng lần (L)\" },\r\n { id: \"M\", value: \"Hóa đơn khởi tạo từ máy tính tiền (M)\" },\r\n { id: \"N\", value: \"PXKKVCNB (N)\" },\r\n { id: \"B\", value: \"PXKGBĐL (B)\" },\r\n { id: \"G\", value: \"Tem, vé, thẻ điện tử là hóa đơn giá trị gia tăng (G)\" },\r\n { id: \"H\", value: \"Tem, vé, thẻ điện tử là hóa đơn bán hàng (H)\" },\r\n ],\r\n */\r\n },\r\n ],\r\n width: 120,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n /* Code tối ưu ui \r\n template: function (obj) {\r\n switch (obj.khdon) {\r\n case \"T\":\r\n return \"Tự đăng ký sử dụng (T)\";\r\n case \"D\":\r\n return \"Hóa đơn đặc thù (D)\";\r\n case \"L\":\r\n return \"Hóa đơn CQT cấp từng lần (L)\";\r\n case \"M\":\r\n return \"Hóa đơn khởi tạo từ máy tính tiền (M)\";\r\n case \"N\":\r\n return \"PXKKVCNB (N)\";\r\n case \"B\":\r\n return \"PXKGBĐL (B)\";\r\n case \"G\":\r\n return \"Tem, vé, thẻ điện tử là hóa đơn giá trị gia tăng (G)\";\r\n case \"H\":\r\n return \"Tem, vé, thẻ điện tử là hóa đơn bán hàng (H)\";\r\n default:\r\n return null; // Handle default case if needed\r\n }\r\n }\r\n */\r\n },\r\n {\r\n id: \"khhdon\",\r\n header: [\r\n \"Ký hiệu\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"sdmau\",\r\n header: [\r\n \"Số dòng in mẫu\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"nlap\",\r\n header: [\r\n \"Ngày lập\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 160,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n columnType: \"datetime\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"nglap\",\r\n header: [\r\n \"Người lập\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 150,\r\n },\r\n {\r\n id: \"tt_sd\",\r\n header: [\r\n \"Sử dụng\",\r\n ],\r\n editor: \"checkbox\",\r\n width: 90,\r\n template: function (obj) {\r\n var checked = obj.tt_sd > 0 ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n id: \"paramDonvi\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"code\",\r\n view: \"combo\",\r\n width: 800,\r\n label: _(\"Đơn vị\"),\r\n options: {\r\n body: {\r\n //comboId: comp.id,\r\n // isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00195\",\r\n ready: function () {\r\n // if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n\r\n if (count > 0) {\r\n var combo = webix.$$(\"code\");\r\n combo.setValue(this.getFirstId());\r\n }\r\n // }\r\n },\r\n },\r\n },\r\n // value_field: item.value_field,\r\n // isDefault: item.has_default,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var table = $$(\"kyhieu\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n // height: 40,\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var table = webix.$$(\"kyhieu\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"kyhieu\");\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChangedKyhieu68\", function (mode, item) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n if (webix.$$(\"head-title\") != null) {\r\n webix.$$(\"head-title\").show()\r\n }\r\n \r\n webix.$$(\"title\").parse({\r\n title: \"Quản lý ký hiệu hóa đơn sử dụng\",\r\n details: \"Quản lý ký hiệu hóa đơn sử dụng\",\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_huyhoadon_bienlai',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\"], function (app, _, user, invoiceForms) {\r\n \r\n\r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n //view: \"toolbar\",\r\n // css: { \"box-shadow\": \"0 -2px #3498db inset !important\", \"background\": \"#ffffff !important\" },\r\n //css: { \"background\": \"#e6f2ff !important\" },\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-icondksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formdksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
BIÊN BẢN HỦY BIÊN LAI
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_dksdForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n // var form = webix.$$(\"window-form\");\r\n // hint_form(form.config.hint);\r\n },\r\n },\r\n ],\r\n },\r\n id: \"huyhoadonForms\",\r\n resize: true,\r\n width: 1100,\r\n height: 600,\r\n // fullscreen: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () {},\r\n },\r\n body: {\r\n view: \"form\",\r\n id: \"huyhoadon\",\r\n // width: 1500,\r\n position: \"center\",\r\n // autowidth:true,\r\n paddingY: 10,\r\n paddingX: 15,\r\n complexData: true,\r\n scroll: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n // id: \"header\",\r\n template: \"
BIÊN BẢN HỦY BIÊN LAI
\",\r\n borderless: true,\r\n height: 40,\r\n },\r\n {\r\n paddingX: 30,\r\n rows: [\r\n {\r\n cols: [\r\n {},\r\n {\r\n label: \"Kính gửi: \",\r\n id: \"tcqt\",\r\n name: \"tcqt\",\r\n view: \"combo\",\r\n labelWidth: 100,\r\n width: 300,\r\n options: {\r\n view: \"gridsuggest\",\r\n columnName: \"name\",\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00251\";\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n body: {\r\n columns: [{ id: \"name\", width: 500, header: \"name\" }],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n $$(\"mcqt\").setValue(obj[\"code\"]);\r\n $$(\"mcqt\").refresh();\r\n },\r\n },\r\n },\r\n required: true,\r\n invalidMessage: \"Kính gửi không được để trống !\",\r\n },\r\n {},\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Mã số thuế\",\r\n id: \"mst\",\r\n name: \"mst\",\r\n required: true,\r\n invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Mã đơn vị quan hệ ngân sách\",\r\n id: \"mdvqhnsach\",\r\n name: \"mdvqhnsach\",\r\n labelWidth: 200,\r\n //required: true,\r\n //invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Tên người nộp thuế\",\r\n labelWidth: 150,\r\n required: true,\r\n invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n id: \"tnnt\",\r\n name: \"tnnt\",\r\n },\r\n {\r\n id: \"loaihd\",\r\n name: \"loaihd\",\r\n width: 150,\r\n value: 1,\r\n hidden: true,\r\n editor: \"text\",\r\n },\r\n {\r\n id: \"mcqt\",\r\n name: \"mcqt\",\r\n label: \"Mã cơ quan thuế\",\r\n labelWidth: 150,\r\n required: true,\r\n invalidMessage: \"Mã cơ quan thuế quản lý không được để trống !\",\r\n view: \"text\",\r\n attributes: { maxlength: 5 },\r\n readonly: true,\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Địa danh\",\r\n labelWidth: 150,\r\n id: \"ddanh\",\r\n name: \"ddanh\",\r\n required: true,\r\n invalidMessage: \"Địa danh không được để trống !\",\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n { height: 3 },\r\n { height: 3 },\r\n {\r\n rows: [\r\n {\r\n id: \"btnHuyhoadon\",\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n label: \" (F9)\",\r\n // width: 60,\r\n autowidth: true,\r\n icon: \"fas fa-plus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_hoadonhuy\");\r\n var item = { id: webix.uid() };\r\n table.add(item);\r\n table.select(item.id, \"khieu\", false);\r\n table.edit({ row: item.id, column: \"khieu\" });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n autowidth: true,\r\n label: \" (F8)\",\r\n // width: 60,\r\n icon: \"fas fa-minus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_hoadonhuy\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n var editor = table.getEditState();\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_hoadonhuy\",\r\n // height: 250,\r\n name: \"danhsach_hoadonhuy\",\r\n // select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n tooltip: true,\r\n editable: true,\r\n select: \"cell\",\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onBeforeEditStart: function (id) {\r\n if (id.column == \"stt\") {\r\n // block editors in 'year' column\r\n return false;\r\n } else if (id.column == \"shdon\") {\r\n return false;\r\n }\r\n // else if (id.column == \"ladhddt\") {\r\n // return false;\r\n // }\r\n else if (id.column == \"ngay\") {\r\n return false;\r\n } else if (id.column == \"huygiaitrinh\") {\r\n return false;\r\n }\r\n },\r\n },\r\n columns: [\r\n { editor: \"text\", id: \"hdon_id\", name: \"hdon_id\", hidden: true },\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"khieu\",\r\n header: _(\"Ký hiệu\"),\r\n editor: \"text\",\r\n width: 250,\r\n editable: true,\r\n suggest: {\r\n view: \"gridsuggest\",\r\n // value_suggest: field.value_suggest,\r\n // fieldExpression: field.field_expression,\r\n // displayField: field.display_field,\r\n // tableId: \"edit_inv_InvoiceDetail\",\r\n columnName: \"ky_hieu\",\r\n body: {\r\n columns: [\r\n { id: \"id\", hidden: true, header: \"id\" },\r\n { id: _(\"khieu\"), width: 120, header: \"khieu\" },\r\n { id: _(\"shdon\"), width: 350, header: \"shdon\" },\r\n ],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF02010\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n var table = $$(\"danhsach_hoadonhuy\");\r\n var selectedItem = table.getSelectedItem();\r\n selectedItem[\"shdon\"] = obj[\"shdon\"];\r\n selectedItem[\"ngay\"] = obj[\"nlap\"];\r\n selectedItem[\"huygiaitrinh\"] = 1;\r\n selectedItem[\"hdon_id\"] = obj[\"id\"];\r\n selectedItem[\"ladhddt\"] = 1;\r\n selectedItem[\"tctbao\"] = 1;\r\n table.updateItem(selectedItem.id, selectedItem);\r\n },\r\n },\r\n },\r\n },\r\n {\r\n id: \"shdon\",\r\n name: \"shdon\",\r\n header: \"Số biên lai\",\r\n width: 200,\r\n editor: \"text\",\r\n },\r\n {\r\n id: \"ngay\",\r\n name: \"ngay\",\r\n header: \"Ngày lập\",\r\n width: 200,\r\n editor: \"text\",\r\n //format: webix.i18n.dateFormatStr,\r\n },\r\n {\r\n id: \"tctbao\",\r\n name: \"tctbao\",\r\n header: \"Loại\",\r\n editable: true,\r\n width: 200,\r\n editor: \"combo\",\r\n readonly: true,\r\n value: 1,\r\n options: [{ id: 1, value: \"Hủy\" }],\r\n },\r\n {\r\n id: \"ldo\",\r\n name: \"ldo\",\r\n header: \"Lý do\",\r\n editable: true,\r\n editor: \"text\",\r\n width: 300,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n id: \"btnHuyHDDT\",\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F9\",\r\n view: \"button\",\r\n id: \"btnLuuTamHDDT\",\r\n label: \"Lưu tạm(F9)\",\r\n width: 150,\r\n align: \"center\",\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"huyhoadon\").getValues();\r\n item.loaihd = 2;\r\n var table = $$(\"huyhoadon\");\r\n\r\n if (table.validate()) {\r\n var cks = $$(\"danhsach_hoadonhuy\").serialize();\r\n if (cks.length == 0) {\r\n webix.message(\"Bạn chưa nhập thông tin biên lai cần hủy !\", \"error\");\r\n return;\r\n }\r\n var details = [];\r\n details.push({ data: $$(\"danhsach_hoadonhuy\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var tableDK = $$(\"huyhoadon\");\r\n webix.extend(table, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSaveSignBienLai\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thành công, trạng thái biên lai chỉ thay đổi khi ký biên bản !\", \"success\");\r\n if ($$(\"mau04_68\")) {\r\n var table = $$(\"mau04_68\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnGhiSignHuyHDDT\",\r\n label: \"Ký(F10)\",\r\n width: 150,\r\n align: \"center\",\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"huyhoadon\").getValues();\r\n item.loaihd = 2;\r\n var table = $$(\"huyhoadon\");\r\n\r\n if (table.validate()) {\r\n var cks = $$(\"danhsach_hoadonhuy\").serialize();\r\n if (cks.length == 0) {\r\n webix.message(\"Bạn chưa nhập thông tin biên lai cần hủy !\", \"error\");\r\n return;\r\n }\r\n var details = [];\r\n details.push({ data: $$(\"danhsach_hoadonhuy\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var tableDK = $$(\"huyhoadon\");\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n \r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n };\r\n data_post.sign = postData;\r\n data_post.signMode = 1;\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSaveSignBienLai\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n if ($$(\"mau04_68\")) {\r\n var table = $$(\"mau04_68\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n\r\n // return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"huyhoadon\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n check_HSM: \"1\",\r\n };\r\n data_post.sign = postData;\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSaveSign\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n if ($$(\"mau04_68\")) {\r\n var table = $$(\"mau04_68\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSave\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n } else {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlMau0405?id=\" + json.id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, json]).then(function (results) {\r\n // webix.extend(tblInvoice, webix.ProgressBar);\r\n // tblInvoice.disable();\r\n // tblInvoice.showProgress();\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\r\n \"Quý khách hàng chưa cài Plugin ký biên lai hoặc Plugin ký biên lai chưa được bật !\",\r\n \"error\"\r\n );\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item.id,\r\n tthdon: 3,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMau0405\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n\r\n webix.message(\"Thành công !\", \"success\");\r\n if ($$(\"mau04_68\")) {\r\n var table = $$(\"mau04_68\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n webix.$$(\"huyhoadonForms\").close();\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n // app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n\r\n // webix.message(\"Thành công !\", \"success\");\r\n // webix.$$(\"huyhoadonForms\").close();\r\n }\r\n },\r\n });\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 120,\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n webix.$$(\"huyhoadonForms\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1) {\r\n icon = \"\";\r\n var result = webix\r\n .ajax()\r\n .sync()\r\n .get(app.config.host + \"/System/GetDmDvcsByUser\");\r\n var json = JSON.parse(result.response);\r\n\r\n // $$(\"dclhe\").setValue(json[0].address);\r\n $$(\"tnnt\").setValue(json[0].name);\r\n $$(\"mst\").setValue(json[0].tax_code);\r\n $$(\"tcqt\").setValue(json[0].cqt);\r\n // $$(\"dctdtu\").setValue(json[0].email);\r\n // $$(\"nlhe\").setValue(json[0].manage);\r\n } else {\r\n if (editmode == 2) icon = \"\";\r\n else icon = \"\";\r\n }\r\n\r\n webix.$$(\"head-icondksd\").setHTML(icon);\r\n webix.$$(\"head-icondksd\").refresh();\r\n },\r\n setValues: function (item, winconfig, params) {\r\n $$(\"danhsach_hoadonhuy\").parse(item);\r\n },\r\n setValuesTongQuat: function (item, winconfig, params) {\r\n var data = $$(\"huyhoadon\").getValues();\r\n data.so = item.so;\r\n data.ntbccqt = item.ntbccqt;\r\n data.loai = item.loai;\r\n $$(\"huyhoadon\").parse(data);\r\n },\r\n setValuesEdit: function (item, winconfig, params) {\r\n $$(\"huyhoadon\").parse(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_mau0405_bienlai',[\"app\", \"locale\", \"models/user\", \"views/forms/68_huyhoadon_bienlai\"], function (app, _, user, form_0405) {\r\n \r\n var param;\r\n webix.$$(\"title\").parse({\r\n title: \"Thông báo hủy và rà soát biên lai\",\r\n details: \"Bảng tổng hợp biên lai\",\r\n });\r\n\r\n var initUI = function () {\r\n //var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"mau04_68\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/getDatamau04\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array)) ;\r\n }\r\n }\r\n webix.ajax(url+\"&loaihd=2\", callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mau04_68\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + \"Thêm mới \" + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(form_0405.$ui);\r\n form_0405.setEditMode(1);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mau04_68\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n var detailForm = this.$scope.ui(form_0405.$ui);\r\n\r\n form_0405.setEditMode(2);\r\n form_0405.setValuesEdit(selectedItem);\r\n if (selectedItem.trang_thai == 1) {\r\n var form = $$(\"huyhoadon\").elements;\r\n for (var key in form) {\r\n var $el = form[key];\r\n $el.define(\"readonly\", \"true\");\r\n $el.define(\"css\", \"mcls_readonly_text\");\r\n $el.refresh();\r\n }\r\n\r\n $$(\"danhsach_hoadonhuy\").define(\"editable\",\"false\");\r\n $$(\"danhsach_hoadonhuy\").refresh();\r\n $$(\"btnLuuTamHDDT\").destructor();\r\n $$(\"btnGhiSignHuyHDDT\").destructor();\r\n }\r\n var tableDetail = webix.$$(\"danhsach_hoadonhuy\");\r\n var url = app.config.host + \"/Invoice68/GetDataMau0405Detail?id=\" + selectedItem.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mau04_68\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Mẫu đã ký và gửi CQT bạn không thể xóa! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.loai_tbao == \"5\") {\r\n webix.message(\"Mẫu 05 nhận từ CQT bạn không thể xóa! \", \"error\");\r\n return;\r\n }\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa biên lai\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/deleteMau04\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n table.remove(selectedItem.id);\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Ký\") + \"\",\r\n id: \"btnSign\",\r\n on: {\r\n onClick: function () {\r\n var tableDK = webix.$$(\"mau04_68\");\r\n var selectedItem = tableDK.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Mẫu đã ký, bạn không thể ký lại! \", \"error\");\r\n return;\r\n }\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n id: selectedItem.id,\r\n };\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSign\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Ký thành công !\", \"success\");\r\n // $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedMau0405\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n\r\n // return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"mau04_68\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n id: selectedItem.id,\r\n check_HSM: \"1\",\r\n };\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSign\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Ký thành công !\", \"success\");\r\n // $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedMau0405\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlMau0405?id=\" + selectedItem.id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, selectedItem]).then(function (results) {\r\n // webix.extend(tblInvoice, webix.ProgressBar);\r\n // tblInvoice.disable();\r\n // tblInvoice.showProgress();\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký biên lai hoặc Plugin ký biên lai chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: selectedItem.id,\r\n tthdon: 3,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMau0405\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n webix.message(\"Ký thành công !\", \"success\");\r\n // $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedMau0405\", [1, null]);\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n // app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n\r\n // webix.message(\"Thành công !\", \"success\");\r\n // webix.$$(\"huyhoadonForms\").close();\r\n }\r\n });\r\n }\r\n });\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"mau04_68\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n subview: {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n scrollX: true,\r\n cells: [\r\n {\r\n header: \"Chi tiết biên lai\",\r\n body: {\r\n view: \"datatable\",\r\n height: 200,\r\n resizeColumn: true,\r\n // scroll: true,\r\n id: \"mau04_68_chitiet\",\r\n headerRowHeight: 50,\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n view: \"text\",\r\n id: \"mau04_id\",\r\n name: \"mau04_id\",\r\n hidden: true,\r\n },\r\n {\r\n view: \"text\",\r\n id: \"mau04_chitiet_id\",\r\n name: \"mau04_chitiet_id\",\r\n hidden: true,\r\n },\r\n {\r\n view: \"text\",\r\n header: \"STT\",\r\n id: \"index\",\r\n name: \"index\",\r\n width: 80,\r\n },\r\n {\r\n header: \"Mẫu số\",\r\n id: \"mau_so\",\r\n width: 120,\r\n // template: function (obj) {\r\n // return obj.khieu.toString().substring(0, 1);\r\n // },\r\n },\r\n\r\n {\r\n id: \"khieu\",\r\n name: \"khieu\",\r\n header: \"Ký hiệu\",\r\n width: 150,\r\n },\r\n {\r\n id: \"shdon\",\r\n name: \"shdon\",\r\n header: \"Số biên lai\",\r\n width: 120,\r\n },\r\n {\r\n id: \"ngay\",\r\n name: \"ngay\",\r\n header: \"Ngày lập\",\r\n width: 120,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"tctbao\",\r\n name: \"tctbao\",\r\n header: \"Hủy/Điều chỉnh/Thay thế/Giải trình\",\r\n editable: true,\r\n width: 200,\r\n template: function (obj) {\r\n switch (obj.tctbao) {\r\n case 1:\r\n return \"Hủy\";\r\n case 3:\r\n return \"Thay thế\";\r\n case 4:\r\n return \"Giải trình\";\r\n case 5:\r\n return \"Điều chỉnh tăng\";\r\n case 6:\r\n return \"Điều chỉnh giảm\";\r\n case 7:\r\n return \"Điều chỉnh khác\";\r\n default:\r\n break;\r\n }\r\n },\r\n },\r\n {\r\n id: \"ldo\",\r\n name: \"ldo\",\r\n header: \"Lý do\",\r\n width: 250,\r\n },\r\n ],\r\n data: [\r\n {\r\n index: 1,\r\n khieu: \"1KT20YY\",\r\n shdon: \"0000001\",\r\n ngay: new Date(),\r\n ladhddt: \"1\",\r\n ldo: \"Sai thông tin\",\r\n },\r\n {\r\n index: 2,\r\n khieu: \"1KT20YY\",\r\n shdon: \"0000002\",\r\n ngay: new Date(),\r\n ladhddt: \"1\",\r\n ldo: \"Sai tiền\",\r\n },\r\n ],\r\n // scrollX: false,\r\n // autoheight: true,\r\n },\r\n },\r\n ],\r\n },\r\n scheme: {\r\n $init: function () {\r\n // this.data.each(function (obj, i) {\r\n // obj.index = i + 1;\r\n // });\r\n },\r\n },\r\n onClick: {\r\n // ShowHistory: function (event, cell, target){\r\n // debugger\r\n // var table = webix.$$(\"mau04_68\");\r\n // var win = table.$scope.ui(hoadonHistory.$ui);\r\n // var hdon_id = cell.row;\r\n // hoadonHistory.setEditMode(hdon_id);\r\n // win.show();\r\n // },\r\n Dowload0405: function (event, cell, target) {\r\n var win = webix.$$(\"mau04_68\");\r\n var record = win.getItem(cell.row);\r\n\r\n if (record.loai_tbao != \"5\") {\r\n if (record.trang_thai != 1) {\r\n webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n return;\r\n }\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n var filename = record.loai_tbao == \"5\" ? \"Mau05.xml\" : \"Mau04.xml\";\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau04?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, filename);\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n return false; // here it blocks the default behavior\r\n },\r\n Dowload0405Rep: function (event, cell, target) {\r\n var win = webix.$$(\"mau04_68\");\r\n var record = win.getItem(cell.row);\r\n\r\n if (record.loai_tbao != \"5\") {\r\n if (record.trang_thai != 1) {\r\n webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n return;\r\n }\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n var filename = record.loai_tbao == \"5\" ? \"Mau05Rep.xml\" : \"Mau04Rep.xml\";\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau04Rep?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, filename);\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n return false; // here it blocks the default behavior\r\n },\r\n InMau0405: function (event, cell, target) {\r\n var table = webix.$$(\"mau04_68\");\r\n var item = table.getItem(cell.row);\r\n\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMau04?id=\" + item.id + \"&type=PDF&loai=\" + item.loai_tbao, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n InMau0405Rep: function (event, cell, target) {\r\n var table = webix.$$(\"mau04_68\");\r\n var item = table.getItem(cell.row);\r\n\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n // var box = webix.modalbox({\r\n // title: \"Đang in biên lai ....\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200,\r\n // });\r\n\r\n // var newWin = window.open();\r\n // var html =\r\n // \"biên lai điện tử MobiFone Invoice\" +\r\n // '' +\r\n // '' +\r\n // '
Đang tải dữ liệu ...

';\r\n // newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .sync()\r\n .get(app.config.host + \"/Invoice68/inMau04SS?id=\" + item.id, function (text) {\r\n var result = text.replace(new RegExp(\"\\\\\" + \"\\\\\", \"gi\"), \"\");\r\n var newWin = window.open();\r\n var html =\r\n \"biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n \"\" +\r\n '
' +\r\n result +\r\n \"
\" +\r\n \"\";\r\n newWin.document.write(html);\r\n });\r\n },\r\n },\r\n on: {\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"mau04_68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataMau0405Detail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {},\r\n },\r\n columns: [\r\n {\r\n id: \"mau04_id\",\r\n header: \"mau04_id\",\r\n hidden: true,\r\n },\r\n {\r\n template: \"{common.subrow()}\",\r\n width: 50,\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"shdon\",\r\n header: [\r\n \"Số biên lai\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 200,\r\n },\r\n {\r\n id: \"khieu\",\r\n header: [\r\n \"Ký hiệu\",\r\n {\r\n content: \"selectFilter\",\r\n },\r\n ],\r\n\r\n width: 200,\r\n },\r\n {\r\n id: \"loai_tbao\",\r\n header: [\r\n \"Loại thông báo\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 200,\r\n template: function (obj) {\r\n return obj.loai_tbao == \"5\" ? \"biên lai cần rà soát\" : \"Thông báo biên lai sai sót\";\r\n },\r\n },\r\n {\r\n id: \"trang_thai\",\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"serverSelectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"0\", value: \"Chưa ký\" },\r\n { id: \"1\", value: \"Đã ký\" },\r\n ],\r\n },\r\n ],\r\n width: 150,\r\n template: function (obj) {\r\n\r\n return obj.trang_thai == 1\r\n ? \" Đã ký\"\r\n : \" Chưa ký\";\r\n },\r\n },\r\n {\r\n id: \"ntbao\",\r\n header: [\r\n \"Ngày tạo\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 120,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"Dowload0405\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n width: 120,\r\n template: function (obj) {\r\n if (obj.trang_thai == 1) {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n },\r\n {\r\n id: \"btnInMau0405\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.trang_thai == 1) {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 120,\r\n },\r\n ],\r\n // data: [\r\n // {\r\n // stt: 1,\r\n // loai_tb: \"4\",\r\n // trang_thai: \"Chờ duyệt\",\r\n // mso: \"001\",\r\n // ntbao: new Date(),\r\n // nguoi_gui: \"ADMINNISTRATOR\"\r\n // },\r\n // {\r\n // stt: 2,\r\n // loai_tb: \"5\",\r\n // trang_thai: \"Chờ duyệt\",\r\n // mso: \"002\",\r\n // ntbao: new Date(),\r\n // nguoi_gui: \"ADMINNISTRATOR\"\r\n // }\r\n // ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n // height: 40,\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"mau04_68\");\r\n\r\n $scope.on(app, \"dataChangedMau0405\", function (mode, item) {\r\n // if (mode == 1) {\r\n // table.add(item);\r\n // }\r\n // if (mode == 5) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // }\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_huyhoadon_32-78',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\", \"views/68_mau0405\"], function (app, _, user, invoiceForms, mau0405) {\r\n \r\n\r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-icondksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formdksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Thông báo sai sót hóa đơn điện tử
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_dksdForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n },\r\n },\r\n ],\r\n },\r\n id: \"huyhoadonForms\",\r\n resize: true,\r\n width: 1100,\r\n height: 600,\r\n move: true,\r\n body: {\r\n view: \"form\",\r\n id: \"huyhoadon\",\r\n position: \"center\",\r\n paddingY: 10,\r\n paddingX: 15,\r\n complexData: true,\r\n scroll: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n template: \"
THÔNG BÁO SAI SÓT HÓA ĐƠN ĐIỆN TỬ
\",\r\n borderless: true,\r\n height: 40,\r\n },\r\n {\r\n paddingX: 30,\r\n rows: [\r\n {\r\n cols: [\r\n {},\r\n {\r\n label: \"Kính gửi: \",\r\n id: \"tcqt\",\r\n name: \"tcqt\",\r\n view: \"combo\",\r\n labelWidth: 100,\r\n width: 300,\r\n options: {\r\n view: \"gridsuggest\",\r\n columnName: \"name\",\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00251\";\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n body: {\r\n columns: [{ id: \"name\", width: 500, header: \"Tên cơ quan thuế quản lý\" }],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n $$(\"mcqt\").setValue(obj[\"code\"]);\r\n $$(\"mcqt\").refresh();\r\n },\r\n },\r\n },\r\n required: true,\r\n invalidMessage: \"Kính gửi không được để trống !\",\r\n },\r\n {},\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Mã số thuế\",\r\n id: \"mst\",\r\n name: \"mst\",\r\n required: true,\r\n invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Mã đơn vị quan hệ ngân sách\",\r\n id: \"mdvqhnsach\",\r\n name: \"mdvqhnsach\",\r\n labelWidth: 200,\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Tên người nộp thuế\",\r\n labelWidth: 150,\r\n required: true,\r\n invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n id: \"tnnt\",\r\n name: \"tnnt\",\r\n },\r\n {\r\n id: \"mcqt\",\r\n name: \"mcqt\",\r\n label: \"Mã cơ quan thuế\",\r\n labelWidth: 150,\r\n required: true,\r\n invalidMessage: \"Mã cơ quan thuế quản lý không được để trống !\",\r\n view: \"text\",\r\n attributes: { maxlength: 5 },\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Địa danh\",\r\n labelWidth: 150,\r\n id: \"ddanh\",\r\n name: \"ddanh\",\r\n required: true,\r\n invalidMessage: \"Địa danh không được để trống !\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"radio\",\r\n label: \"Loại hóa đơn\",\r\n labelWidth: 150,\r\n id: \"lhdon\",\r\n name: \"lhdon\",\r\n value: \"1\",\r\n options: [\r\n { id: \"1\", value: \"Hóa đơn TT32\" }, // the initially selected item\r\n { id: \"2\", value: \"Hóa đơn TT78 nhà cung cấp khác\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv !== undefined && newv !== null) {\r\n if (newv === \"2\") {\r\n $$(\"danhsach_hoadonhuy\").editStop();\r\n $$(\"danhsach_hoadonhuy\").clearAll();\r\n $$(\"danhsach_hoadonhuy\").hideColumn(\"mau_so\");\r\n $$(\"danhsach_hoadonhuy\").showColumn(\"mcqtcap\");\r\n } else {\r\n $$(\"danhsach_hoadonhuy\").editStop();\r\n $$(\"danhsach_hoadonhuy\").clearAll();\r\n $$(\"danhsach_hoadonhuy\").showColumn(\"mau_so\");\r\n $$(\"danhsach_hoadonhuy\").hideColumn(\"mcqtcap\");\r\n }\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"combo\",\r\n label: \"Loại TBSS\",\r\n labelWidth: 150,\r\n id: \"tctbao_all\",\r\n name: \"tctbao_all\",\r\n options: [\r\n { id: \"1\", value: \"Hủy\" },\r\n { id: \"3\", value: \"Thay thế\" },\r\n { id: \"4\", value: \"Giải trình\" },\r\n { id: \"5\", value: \"Điều chỉnh tăng\" },\r\n { id: \"6\", value: \"Điều chỉnh giảm\" },\r\n { id: \"7\", value: \"Điều chỉnh khác\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var datatable = $$(\"danhsach_hoadonhuy\");\r\n var items = datatable.serialize(); \r\n if(items.length < 1){\r\n return;\r\n }\r\n for (var i = 0; i < items.length; i++) {\r\n datatable.updateItem(items[i].id, { tctbao: newv }); \r\n }\r\n \r\n }\r\n }\r\n },\r\n {\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Lý do\",\r\n labelWidth: 150,\r\n id: \"ldo_all\",\r\n name: \"ldo_all\",\r\n on: {\r\n onblur: function () {\r\n var datatable = $$(\"danhsach_hoadonhuy\");\r\n var items = datatable.serialize(); \r\n if(items.length < 1){\r\n return;\r\n }\r\n for (var i = 0; i < items.length; i++) {\r\n datatable.updateItem(items[i].id, { ldo: this.getValue()}); \r\n }\r\n \r\n }\r\n }\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n { height: 3 },\r\n {\r\n template: \"Người nộp thuế thông báo về việc hủy/điều chỉnh/thay thế/giải trình hóa đơn điện tử do sai sót như sau:\",\r\n borderless: true,\r\n height: 40,\r\n },\r\n { height: 3 },\r\n {\r\n rows: [\r\n {\r\n id: \"btnHuyhoadon\",\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n label: \" (F9)\",\r\n autowidth: true,\r\n icon: \"fas fa-plus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_hoadonhuy\");\r\n var checkHD78 = $$(\"lhdon\").getValue();\r\n var ladhddt = checkHD78 === \"1\" ? 3 : 1;\r\n var item = { id: webix.uid(), ngay: new Date(), ladhddt: ladhddt, tctbao: \"1\" };\r\n table.add(item);\r\n table.select(item.id, \"khieu\", false);\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n autowidth: true,\r\n label: \" (F8)\",\r\n icon: \"fas fa-minus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_hoadonhuy\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n var editor = table.getEditState();\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_hoadonhuy\",\r\n name: \"danhsach_hoadonhuy\",\r\n resizeColumn: true,\r\n footer: false,\r\n tooltip: true,\r\n editable: true,\r\n select: \"cell\",\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onBeforeEditStart: function (id) {\r\n },\r\n },\r\n columns: [\r\n { editor: \"text\", id: \"hdon_id\", name: \"hdon_id\", hidden: true },\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n view: \"text\",\r\n id: \"mcqtcap\",\r\n name: \"mcatcap\",\r\n header: \"Mã cơ quan thuế cấp\",\r\n width: 100,\r\n editor: \"text\",\r\n hidden: true,\r\n },\r\n {\r\n view: \"text\",\r\n id: \"mau_so\",\r\n name: \"mau_so\",\r\n header: _(\"Mẫu số HĐ\"),\r\n editor: \"text\",\r\n width: 120,\r\n require: true,\r\n },\r\n {\r\n view: \"text\",\r\n id: \"khieu\",\r\n header: _(\"Ký hiệu HĐ\"),\r\n editor: \"text\",\r\n width: 120,\r\n require: true,\r\n },\r\n {\r\n view: \"text\",\r\n id: \"shdon\",\r\n name: \"shdon\",\r\n header: \"Số hóa đơn\",\r\n width: 120,\r\n editor: \"text\",\r\n require: true,\r\n },\r\n {\r\n id: \"ngay\",\r\n name: \"ngay\",\r\n header: \"Ngày lập hóa đơn\",\r\n width: 150,\r\n editor: \"date\",\r\n require: true,\r\n format: webix.Date.dateToStr(\"%d/%m/%Y\"),\r\n },\r\n {\r\n id: \"ladhddt\",\r\n name: \"ladhddt\",\r\n header: \"Loại áp dụng hóa đơn điện tử\",\r\n editable: false,\r\n width: 400,\r\n editor: \"combo\",\r\n require: true,\r\n options: [\r\n { id: 1, value: \"Hóa đơn điện tử theo Nghị định 123/2020/NĐ-CP\" },\r\n { id: 2, value: \"Hóa đơn điện tử có mã xác thực của cơ quan thuế theo Quyết định số 1209/QĐ-BTC\" },\r\n { id: 3, value: \"Các loại hóa đơn theo Nghị định số 51/2010/NĐ-CP và Nghị định số 04/2014/NĐ-CP\" },\r\n { id: 4, value: \"Hóa đơn đặt in theo Nghị định 123/2020/NĐ-CP\" },\r\n ],\r\n },\r\n {\r\n id: \"tctbao\",\r\n name: \"tctbao\",\r\n header: \"Hủy/Điều chỉnh/Thay thế/Giải trình\",\r\n editable: true,\r\n width: 200,\r\n editor: \"combo\",\r\n require: true,\r\n options: [\r\n { id: \"1\", value: \"Hủy\" },\r\n { id: \"3\", value: \"Thay thế\" },\r\n { id: \"4\", value: \"Giải trình\" },\r\n { id: \"5\", value: \"Điều chỉnh tăng\" },\r\n { id: \"6\", value: \"Điều chỉnh giảm\" },\r\n { id: \"7\", value: \"Điều chỉnh khác\" },\r\n ],\r\n },\r\n {\r\n id: \"ldo\",\r\n name: \"ldo\",\r\n header: \"Lý do\",\r\n editable: true,\r\n editor: \"text\",\r\n width: 300,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n id: \"btnHuyHDDT\",\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n id: \"btnStep299\",\r\n label: \"Lưu, chuyển sang bước tiếp theo\",\r\n type: \"form\",\r\n hidden: true,\r\n align: \"center\",\r\n click: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"huyhoadon\").getValues();\r\n var details = [];\r\n details.push({ data: $$(\"danhsach_hoadonhuy\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var detailForm = self.$scope.ui(invoiceForms.$ui);\r\n\r\n var cctbao_id = webix.$$(\"kyhieu_id\").getValue();\r\n invoiceForms.initUINew(cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(null, data_post, null);\r\n detailForm.show();\r\n }, 100);\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnGhiHuyhoadon\",\r\n label: \"Ghi (F10)\",\r\n width: 150,\r\n align: \"center\",\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"huyhoadon\").getValues();\r\n var table = $$(\"huyhoadon\");\r\n\r\n if (table.validate()) {\r\n var cks = $$(\"danhsach_hoadonhuy\").serialize();\r\n if (cks.length == 0) {\r\n webix.message(\"Bạn chưa nhập thông tin hóa đơn cần hủy !\", \"error\");\r\n return;\r\n }\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: cks });\r\n item.details = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSave\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n\r\n table.enable();\r\n table.hideProgress();\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangedMau0405\", [null, null]);\r\n webix.message(\"Thành công !\", \"success\");\r\n webix.$$(\"huyhoadonForms\").close();\r\n var table1 = webix.$$(\"mau04_68\");\r\n table1.clearAll();\r\n table1.load(table1.config.url);\r\n table1.show();\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F4\",\r\n view: \"button\",\r\n id: \"btnGhiSignHuyHDDT\",\r\n label: \"Ký và gửi CQT (F14)\",\r\n width: 150,\r\n align: \"center\",\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n \r\n setTimeout(function () {\r\n var item = $$(\"huyhoadon\").getValues();\r\n var table = $$(\"huyhoadon\");\r\n\r\n if (table.validate()) {\r\n self.disable();\r\n var cks = $$(\"danhsach_hoadonhuy\").serialize();\r\n if (cks.length == 0) {\r\n webix.message(\"Bạn chưa nhập thông tin hóa đơn cần hủy !\", \"error\");\r\n self.enable();\r\n return;\r\n }\r\n var details = [];\r\n details.push({ data: $$(\"danhsach_hoadonhuy\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var tableDK = $$(\"huyhoadon\");\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n };\r\n data_post.sign = postData;\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSaveSign\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedMau0405\", [null, null]);\r\n } else {\r\n if (json.hasOwnProperty(\"id\")) { \r\n $$(\"huyhoadonForms\").close(); \r\n webix.message(\"Tạo thông báo sai sót thành công !\", \"success\");\r\n }\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"huyhoadon\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n check_HSM: \"1\",\r\n };\r\n data_post.sign = postData;\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSaveSign\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedMau0405\", [null, null]);\r\n } else {\r\n if (json.hasOwnProperty(\"id\")) { \r\n $$(\"huyhoadonForms\").close(); \r\n webix.message(\"Tạo thông báo sai sót thành công !\", \"success\");\r\n }\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSave\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n } else {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlMau0405?id=\" + json.id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, json]).then(function (results) {\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n $$(\"huyhoadonForms\").close(); \r\n webix.message(\"Tạo thông báo sai sót thành công !\", \"success\");\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n $$(\"huyhoadonForms\").close(); \r\n webix.message(\"Tạo thông báo sai sót thành công !\", \"success\");\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n $$(\"huyhoadonForms\").close(); \r\n webix.message(\"Tạo thông báo sai sót thành công !\", \"success\");\r\n webix.message(\r\n \"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\",\r\n \"error\"\r\n );\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n $$(\"huyhoadonForms\").close(); \r\n webix.message(\"Tạo thông báo sai sót thành công !\", \"success\");\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item.id,\r\n tthdon: 3,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMau0405\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(\"Tạo thông báo sai sót thành công !\", \"success\");\r\n webix.message({ type: \"error\", text: json.error });\r\n webix.message(result.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangedMau0405\", [null, null]);\r\n webix.message(\"Thành công !\", \"success\");\r\n webix.$$(\"huyhoadonForms\").close();\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n }\r\n },\r\n });\r\n }\r\n });\r\n }\r\n });\r\n self.enable();\r\n });\r\n }\r\n }, 100);\r\n self.enable();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F4\",\r\n view: \"button\",\r\n id: \"btnSaveSignGiaiTrinh\",\r\n label: \"Ký và gửi CQT\",\r\n width: 150,\r\n hidden: true,\r\n align: \"center\",\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"huyhoadon\").getValues();\r\n var table = $$(\"huyhoadon\");\r\n\r\n if (table.validate()) {\r\n var cks = $$(\"danhsach_hoadonhuy\").serialize();\r\n if (cks.length == 0) {\r\n webix.message(\"Bạn chưa nhập thông tin hóa đơn cần hủy !\", \"error\");\r\n return;\r\n }\r\n var details = [];\r\n details.push({ data: $$(\"danhsach_hoadonhuy\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var tableDK = $$(\"huyhoadon\");\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n };\r\n data_post.sign = postData;\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/giaitrinhSaveSign\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedMau0405\", [null, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"huyhoadon\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSave\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n } else {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlMau0405?id=\" + json.id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, json]).then(function (results) {\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item.id,\r\n tthdon: 1,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMau0405\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangedMau0405\", [null, null]);\r\n webix.message(\"Thành công !\", \"success\");\r\n webix.$$(\"huyhoadonForms\").close();\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n }\r\n },\r\n });\r\n }\r\n });\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 120,\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n webix.$$(\"huyhoadonForms\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n var form = $$(this.$ui.id);\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1) {\r\n icon = \"\";\r\n var result = webix\r\n .ajax()\r\n .sync()\r\n .get(app.config.host + \"/System/GetDmDvcsByUser\");\r\n var json = JSON.parse(result.response);\r\n\r\n $$(\"tnnt\").setValue(json[0].name);\r\n $$(\"mst\").setValue(json[0].tax_code);\r\n $$(\"tcqt\").setValue(json[0].cqt_ql);\r\n $$(\"ddanh\").setValue(json[0].city);\r\n $$(\"mcqt\").setValue(json[0].manage_tax_authorities);\r\n } else {\r\n if (editmode == 2) icon = \"\";\r\n else icon = \"\";\r\n }\r\n webix.$$(\"head-icondksd\").setHTML(icon);\r\n webix.$$(\"head-icondksd\").refresh();\r\n },\r\n setValues: function (item, winconfig, params) {\r\n $$(\"danhsach_hoadonhuy\").parse(item.detail);\r\n $$(\"huyhoadon\").parse(item);\r\n var ladhddt = item.detail[0].ladhddt;\r\n if (ladhddt === 3) {\r\n $$(\"lhdon\").define(\"value\", \"1\");\r\n $$(\"lhdon\").disable();\r\n } else {\r\n $$(\"lhdon\").define(\"value\", \"2\");\r\n $$(\"lhdon\").disable();\r\n $$(\"danhsach_hoadonhuy\").hideColumn(\"mau_so\");\r\n $$(\"danhsach_hoadonhuy\").showColumn(\"mcqtcap\");\r\n }\r\n },\r\n setValuesTongQuat: function (item, winconfig, params) {\r\n var data = $$(\"huyhoadon\").getValues();\r\n data.so = item.so;\r\n data.ntbccqt = item.ntbccqt;\r\n data.loai = item.loai;\r\n $$(\"huyhoadon\").parse(data);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_mau0405',[\"app\", \"locale\", \"models/user\", \"views/commonHD\", \"views/forms/68_huyhoadon_32-78\"], function (app, _, user, commonHD, form_0405) {\r\n \r\n var param;\r\n webix.$$(\"title\").parse({\r\n title: \"Thông báo hủy và rà soát hóa đơn\",\r\n details: \"Bảng tổng hợp hóa đơn\",\r\n });\r\n\r\n var initUI = function () {\r\n var table = webix.$$(\"mau04_68\");\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/getDatamau04\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n }\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mau04_68\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 200,\r\n label: ' ' + '' + \"Sai sót TT32/NCC khác \" + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(form_0405.$ui);\r\n form_0405.setEditMode(1);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mau04_68\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Mẫu đã ký và gửi CQT bạn không thể sửa! \", \"error\");\r\n return;\r\n }\r\n\r\n if (selectedItem.loai_tbao == \"5\") {\r\n webix.message(\"Mẫu 05 nhận từ CQT bạn không thể sửa! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.is_hdon78 == 1) {\r\n webix.message(\"Mẫu được này không được chỉnh sửa\");\r\n return;\r\n }\r\n\r\n var detailForm = this.$scope.ui(form_0405.$ui);\r\n form_0405.setEditMode(2);\r\n var item = table.getSelectedItem();\r\n var url = app.config.host + \"/Invoice68/GetDataMau0405Detail?id=\" + item.id;\r\n var result = webix.ajax().sync().get(url);\r\n var json = JSON.parse(result.response);\r\n item.detail = json;\r\n form_0405.setValues(item);\r\n var tableDetail = webix.$$(\"danhsach_hoadonhuy\");\r\n var url = app.config.host + \"/Invoice68/GetDataMau0405Detail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mau04_68\");\r\n var lstDataChoose = commonHD.GetHoaDonChonOfTableId({ id: \"mau04_68\" });\r\n\r\n if (lstDataChoose == null) {\r\n webix.message(\"Bạn chưa chọn thông báo ! \", \"error\");\r\n return;\r\n }\r\n\r\n for (var index = 0; index < lstDataChoose.length; index++) {\r\n var selectedItem = lstDataChoose[index];\r\n\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"TBSS số \" + selectedItem.shdon + \", kí hiệu \" + selectedItem.khieu + \": Mẫu đã ký và gửi CQT bạn không thể xóa! \", \"error\");\r\n lstDataChoose.splice(index, 1);\r\n index--;\r\n } else if (selectedItem.loai_tbao == \"5\") {\r\n webix.message(\"TBSS số \" + selectedItem.shdon + \", kí hiệu \" + selectedItem.khieu + \": Mẫu 05 nhận từ CQT bạn không thể xóa! \", \"error\");\r\n lstDataChoose.splice(index, 1);\r\n index--;\r\n }\r\n }\r\n\r\n if (lstDataChoose.length > 0) {\r\n var text = \"Bạn có muốn xóa:\";\r\n lstDataChoose.forEach(function (selectedItem) {\r\n text += '' + \" TBSS số \" + selectedItem.shdon + \" kí hiệu \" + selectedItem.khieu + '' + \", \"\r\n })\r\n text += \"?\";\r\n webix.confirm({\r\n text: text,\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n var arrid = [];\r\n lstDataChoose.forEach(function (item) {\r\n arrid.push(item.id);\r\n })\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/deleteMau04\", { arrid: arrid }, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (json.ok) {\r\n webix.message('Xóa thành công', \"success\");\r\n }\r\n else {\r\n var errarr = json.error;\r\n for (var erri = 0; erri < errarr.length; erri++) {\r\n webix.message(errarr[erri].error, \"error\");\r\n }\r\n }\r\n table.clearAll();\r\n table.load(table.config.url);\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n }\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Ký gửi CQT\") + \"\",\r\n id: \"btnSign\",\r\n on: {\r\n onClick: function () {\r\n var tableDK = webix.$$(\"mau04_68\");\r\n var lstDataChoose = commonHD.GetHoaDonChonOfTableId({ id: \"mau04_68\" });\r\n\r\n if (lstDataChoose == null) {\r\n webix.message(\"Bạn chưa chọn thông báo ! \", \"error\");\r\n return;\r\n }\r\n\r\n for (var index = 0; index < lstDataChoose.length; index++) {\r\n var selectedItem = lstDataChoose[index];\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"TBSS số \" + selectedItem.shdon + \", kí hiệu \" + selectedItem.khieu + \": Mẫu đã ký và gửi CQT bạn không thể ký lại! \", \"error\");\r\n lstDataChoose.splice(index, 1);\r\n return;\r\n }\r\n }\r\n var arrid = [];\r\n lstDataChoose.forEach(function (item) {\r\n arrid.push(item.id);\r\n })\r\n if (lstDataChoose.length > 0) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n ids: arrid,\r\n };\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSign\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text).res;\r\n var hasError = false;\r\n for (var i = 0; i < json.length; i++) {\r\n var item = json[i];\r\n if (item.hasOwnProperty(\"error\")) {\r\n webix.message(item.error, \"error\");\r\n hasError = true;\r\n }\r\n }\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!hasError) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n // $$(\"huyhoadonForms\").close();\r\n }\r\n app.callEvent(\"dataChangedMau0405\", [1, null]);\r\n },\r\n });\r\n\r\n // return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"mau04_68\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n ids: arrid,\r\n check_HSM: \"1\",\r\n };\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSign\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n app.callEvent(\"dataChangedMau0405\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlMau0405?id=\" + selectedItem.id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, selectedItem]).then(function (results) {\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: selectedItem.id,\r\n tthdon: 3,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMau0405\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n app.callEvent(\"dataChangedMau0405\", [1, null]);\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"mau04_68\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n subview: {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n scrollX: true,\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n body: {\r\n view: \"datatable\",\r\n height: 200,\r\n resizeColumn: true,\r\n id: \"mau04_68_chitiet\",\r\n headerRowHeight: 50,\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n view: \"text\",\r\n id: \"mau04_id\",\r\n name: \"mau04_id\",\r\n hidden: true,\r\n },\r\n {\r\n view: \"text\",\r\n id: \"mau04_chitiet_id\",\r\n name: \"mau04_chitiet_id\",\r\n hidden: true,\r\n },\r\n {\r\n view: \"text\",\r\n header: \"STT\",\r\n id: \"index\",\r\n name: \"index\",\r\n width: 80,\r\n },\r\n {\r\n header: \"Mẫu số\",\r\n id: \"mau_so\",\r\n width: 120,\r\n },\r\n\r\n {\r\n id: \"khieu\",\r\n name: \"khieu\",\r\n header: \"Ký hiệu hóa đơn điện tử\",\r\n width: 150,\r\n },\r\n {\r\n id: \"shdon\",\r\n name: \"shdon\",\r\n header: \"Số hóa đơn điện tử\",\r\n width: 120,\r\n },\r\n {\r\n id: \"ngay\",\r\n name: \"ngay\",\r\n header: \"Ngày lập hóa đơn\",\r\n width: 120,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n\r\n {\r\n id: \"ladhddt\",\r\n name: \"ladhddt\",\r\n header: \"Loại áp dụng hóa đơn điện tử\",\r\n template: function (obj) {\r\n switch (obj.ladhddt) {\r\n case 1:\r\n return \"HĐĐT Nghị đinh số 123/2020/NĐ-CP \";\r\n case 2:\r\n return \"HĐĐT có mã của cơ quan thu \";\r\n case 3:\r\n return \"Các loại hóa đơn theo Nghị đinh 51/2010 \";\r\n case 4:\r\n return \"Hóa đơn đặt in theo Nghị định số 123/2020/NĐ-C \";\r\n default:\r\n break;\r\n }\r\n },\r\n width: 150,\r\n },\r\n {\r\n id: \"tctbao\",\r\n name: \"tctbao\",\r\n header: \"Hủy/Điều chỉnh/Thay thế/Giải trình\",\r\n editable: true,\r\n width: 200,\r\n template: function (obj) {\r\n switch (obj.tctbao) {\r\n case 1:\r\n return \"Hủy\";\r\n case 3:\r\n return \"Thay thế\";\r\n case 4:\r\n return \"Giải trình\";\r\n case 5:\r\n return \"Điều chỉnh tăng\";\r\n case 6:\r\n return \"Điều chỉnh giảm\";\r\n case 7:\r\n return \"Điều chỉnh khác\";\r\n default:\r\n break;\r\n }\r\n },\r\n },\r\n {\r\n id: \"ldo\",\r\n name: \"ldo\",\r\n header: \"Lý do\",\r\n width: 250,\r\n },\r\n {\r\n id: \"tttnhan\",\r\n name: \"tttnhan\",\r\n header: \"Trạng thái tiếp nhận\",\r\n template: function (obj) {\r\n if (obj.tttnhan == 1) {\r\n return \"Chấp thuận \";\r\n } else {\r\n if (obj.tttnhan == 2) {\r\n return \"Không chấp thuận \";\r\n } else {\r\n return \"Chờ phản hồi\";\r\n }\r\n }\r\n },\r\n width: 200,\r\n },\r\n {\r\n id: \"ly_do\",\r\n name: \"ldly_doo\",\r\n header: \"Lý do không tiếp nhận\",\r\n width: 250,\r\n },\r\n ],\r\n data: [\r\n {\r\n index: 1,\r\n khieu: \"1KT20YY\",\r\n shdon: \"0000001\",\r\n ngay: new Date(),\r\n ladhddt: \"1\",\r\n ldo: \"Sai thông tin\",\r\n },\r\n {\r\n index: 2,\r\n khieu: \"1KT20YY\",\r\n shdon: \"0000002\",\r\n ngay: new Date(),\r\n ladhddt: \"1\",\r\n ldo: \"Sai tiền\",\r\n },\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n scheme: {\r\n $init: function () {\r\n },\r\n },\r\n onClick: {\r\n Dowload0405: function (event, cell, target) {\r\n var win = webix.$$(\"mau04_68\");\r\n var record = win.getItem(cell.row);\r\n\r\n if (record.loai_tbao != \"5\") {\r\n if (record.trang_thai != 1) {\r\n webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n return;\r\n }\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n var filename = record.loai_tbao == \"5\" ? \"Mau05.xml\" : \"Mau04.xml\";\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau04?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, filename);\r\n });\r\n return false; // here it blocks the default behavior\r\n },\r\n Dowload0405Rep: function (event, cell, target) {\r\n var win = webix.$$(\"mau04_68\");\r\n var record = win.getItem(cell.row);\r\n\r\n if (record.loai_tbao != \"5\") {\r\n if (record.trang_thai != 1) {\r\n webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n return;\r\n }\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n var filename = record.loai_tbao == \"5\" ? \"Mau05Rep.xml\" : \"Mau04Rep.xml\";\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau04Rep?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, filename);\r\n });\r\n return false; // here it blocks the default behavior\r\n },\r\n InMau0405: function (event, cell, target) {\r\n var table = webix.$$(\"mau04_68\");\r\n var item = table.getItem(cell.row);\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMau04?id=\" + item.id + \"&type=PDF&loai=\" + item.loai_tbao, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n InMau0405Rep: function (event, cell, target) {\r\n var table = webix.$$(\"mau04_68\");\r\n var item = table.getItem(cell.row);\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMau04Rep?id=\" + item.id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n on: {\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"mau04_68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataMau0405Detail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () { },\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n resize: false,\r\n },\r\n {\r\n id: \"mau04_id\",\r\n header: \"mau04_id\",\r\n hidden: true,\r\n },\r\n {\r\n template: \"{common.subrow()}\",\r\n width: 50,\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"shdon\",\r\n header: [\r\n \"Số hóa đơn\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 200,\r\n },\r\n {\r\n id: \"khieu\",\r\n header: [\r\n \"Ký hiệu\",\r\n {\r\n content: \"selectFilter\",\r\n },\r\n ],\r\n\r\n width: 200,\r\n },\r\n {\r\n id: \"loai_tbao\",\r\n header: [\r\n \"Loại thông báo\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 200,\r\n template: function (obj) {\r\n return obj.loai_tbao == \"5\" ? \"Hóa đơn cần rà soát\" : \"Thông báo hóa đơn sai sót\";\r\n },\r\n },\r\n {\r\n id: \"trang_thai\",\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"serverSelectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"0\", value: \"Chưa gửi CQT\" },\r\n { id: \"1\", value: \"Đã gửi CQT\" },\r\n ],\r\n },\r\n ],\r\n width: 150,\r\n template: function (obj) {\r\n if (obj.loai_tbao == \"5\") {\r\n return \"\";\r\n } else {\r\n return obj.trang_thai == 1\r\n ? \" Đã gửi CQT\"\r\n : \" Chưa gửi CQT\";\r\n }\r\n },\r\n },\r\n {\r\n id: \"cqtphoi\",\r\n header: [\r\n \"
Trạng thái tiếp nhận CQT
\",\r\n {\r\n content: \"serverSelectFilter\",\r\n value: \"\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"1\", value: \"Đã nhận phản hồi\" },\r\n { id: \"0\", value: \"Chưa nhận phản hồi\" },\r\n ],\r\n },\r\n ],\r\n // sort: \"int\",\r\n width: 150,\r\n\r\n template: function (obj) {\r\n return obj.cqtphoi == \"1\" ? \"Đã nhận phản hồi\" : \"Chưa nhận phản hồi\";\r\n },\r\n },\r\n\r\n {\r\n id: \"mtdiep_gui\",\r\n header: [\"Mã thông điệp gửi\"],\r\n\r\n width: 350,\r\n },\r\n {\r\n id: \"ntbao\",\r\n header: [\r\n \"Ngày tạo\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 120,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"ngay_gui\",\r\n header: [\r\n \"Ngày gửi\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 120,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"Dowload0405\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n width: 120,\r\n template: function (obj) {\r\n if (obj.loai_tbao == \"5\") {\r\n return \" \";\r\n } else {\r\n if (obj.trang_thai == 1) {\r\n return \" \";\r\n } else return \" \";\r\n }\r\n },\r\n },\r\n {\r\n id: \"btnInMau0405\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.loai_tbao == \"5\") {\r\n return \" \";\r\n } else {\r\n if (obj.trang_thai == 1) {\r\n return \" \";\r\n } else return \" \";\r\n }\r\n },\r\n width: 120,\r\n },\r\n {\r\n id: \"nguoi_gui\",\r\n header: [\r\n \"Người gửi\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 150,\r\n },\r\n {\r\n id: \"Dowload0405Rep\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.xml_nhan != null && obj.xml_nhan != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 120,\r\n },\r\n {\r\n id: \"btnInMau0405Rep\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.xml_nhan != null && obj.xml_nhan != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 120,\r\n },\r\n {\r\n id: \"mtdiepcqt\",\r\n header: [\"\", \"Mã thông điệp CQT\"],\r\n width: 250,\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"mau04_68\");\r\n\r\n $scope.on(app, \"dataChangedMau0405\", function (mode, item) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_mauthietkeform',[\"app\", \"models/user\"], function (app, user) {\r\n var editmode = 0;\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var table = $$(\"mauthietke-form\");\r\n var item = table.getValues();\r\n if (table.validate()) {\r\n item.editmode = editmode;\r\n $$(\"uploader68\").define(\"upload\", app.config.host + \"/Invoice68/quanlymau68\");\r\n $$(\"uploader68\").define(\"formData\", item);\r\n $$(\"uploader68\").send(function (res) {\r\n if (res != undefined) {\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n webix.message(\"Tạo mẫu thành công\", \"success\");\r\n\r\n var win = $$(\"uploader68\").getTopParentView();\r\n win.close();\r\n\r\n var table = $$(\"mauthietke\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n } else {\r\n webix.message(\"Bạn chưa chọn mẫu \", \"error\");\r\n }\r\n });\r\n }\r\n }, 100);\r\n\r\n // $$(\"uploader68\").refresh();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n webix.$$(\"mauthietke-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"mauthietke-win\",\r\n position: \"center\",\r\n head: \"Mẫu hóa đơn\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"mauthietke-form\",\r\n complexData: true,\r\n margin: 0,\r\n elementsConfig: {\r\n labelPosition: \"top\",\r\n },\r\n elements: [\r\n // {\r\n // view: \"text\",\r\n // label: \"mauthietke_id\",\r\n // id: \"mauthietke_id\",\r\n // name: \"mauthietke_id\",\r\n // hidden: true\r\n // },\r\n {\r\n view: \"text\",\r\n label: \"Mã mẫu\",\r\n name: \"mmau\",\r\n id: \"mmau\",\r\n readonly: true,\r\n css: \"mcls_readonly_text\",\r\n labelWidth: 120,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Tên mẫu\",\r\n name: \"tmau\",\r\n id: \"tmau\",\r\n labelWidth: 120,\r\n required: true,\r\n invalidMessage: \"Tên mẫu không được bỏ trống hoặc không đúng định dạng\",\r\n },\r\n {\r\n view: \"select\",\r\n label: \"Phân cách hàng nghìn\",\r\n name: \"thousand_point\",\r\n id: \"thousand_point\",\r\n labelWidth: 200,\r\n options: [\r\n { id: \".\", value: \"Dấu chấm\" },\r\n { id: \",\", value: \"Dấu phẩy\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == \",\") {\r\n $$(\"decimal_point\").setValue(\".\");\r\n } else {\r\n $$(\"decimal_point\").setValue(\",\");\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"select\",\r\n label: \"Phân cách hàng thập phân\",\r\n name: \"decimal_point\",\r\n id: \"decimal_point\",\r\n options: [\r\n { id: \",\", value: \"Dấu phẩy\" },\r\n { id: \".\", value: \"Dấu chấm\" },\r\n ],\r\n labelWidth: 120,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == \",\") {\r\n $$(\"thousand_point\").setValue(\".\");\r\n } else {\r\n $$(\"thousand_point\").setValue(\",\");\r\n }\r\n },\r\n },\r\n },\r\n\r\n {\r\n view: \"uploader\",\r\n value: \"Upload file\",\r\n label: \"Mẫu thiết kế\",\r\n id: \"uploader68\",\r\n name: \"uploader68\",\r\n link: \"mylist\",\r\n accept: \"repx\",\r\n autosend: false,\r\n multiple: false,\r\n // upload: app.config.host + \"\",\r\n on: {\r\n onUploadComplete: function (response) {},\r\n onFileUploadError: function (file, response) {},\r\n onAfterDelete: function (id) {},\r\n },\r\n },\r\n {\r\n view: \"list\",\r\n id: \"mylist\",\r\n type: \"uploader\",\r\n autoheight: true,\r\n borderless: true,\r\n },\r\n {\r\n height: 20,\r\n },\r\n {\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setValues: function (item) {\r\n var form = $$(\"mauthietke-form\");\r\n form.setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_mauthietke_bienlai',[\"app\", \"locale\", \"models/user\", \"views/forms/68_mauthietkeform\"], function (app, _, user, mauthietkeform) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Quản lý mẫu thiết kế biên lai\",\r\n details: \"Quản lý mẫu thiết kế biên lai\",\r\n });\r\n\r\n var loaimau =2;\r\n var subBangKe = webix.ui({\r\n view: \"submenu\",\r\n width: 150,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"addMauBangKe\",\r\n value: \"Thêm mẫu bảng kê\",\r\n },\r\n {\r\n id: \"taiMauBangKe\",\r\n value: \"Tải mẫu bảng kê\",\r\n },\r\n {\r\n id: \"inMauBangKe\",\r\n value: \"In mẫu bảng kê\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n var table = webix.$$(\"mauthietke\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (record.id == \"addMauBangKe\") {\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu biên lai cần thêm mẫu bảng kê ! \", \"error\");\r\n return;\r\n }\r\n require([\"views/forms/uploadfile\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n\r\n win.getHead().setHTML(\"Tải file mẫu bảng kê\");\r\n win.show();\r\n\r\n webix.$$(\"uploader\").define(\"upload\", app.config.host + \"/Invoice68/UploadBangKeTemplate\");\r\n webix.$$(\"uploader\").define(\"formData\", { dmmauhoadon_id: selectedItem.id });\r\n webix.$$(\"uploader\").refresh();\r\n });\r\n }\r\n\r\n if (record.id == \"taiMauBangKe\") {\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu biên lai cần tải bảng kê! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.checkmaubangke == 0) {\r\n webix.message(\"Chưa có mẫu bảng kê để tải ! \", \"error\");\r\n return;\r\n }\r\n var url = app.config.host + \"/Invoice68/DowloadRepxBangKe?id=\" + selectedItem.id;\r\n var box = webix.modalbox({\r\n title: \"Đang tải mẫu bảng kê (repx) ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n var file = new Blob([data], { type: \"application/octet-stream\" });\r\n webix.html.download(file, \"BangKeTemplate.repx\");\r\n webix.modalbox.hide(box);\r\n });\r\n }\r\n\r\n if (record.id == \"inMauBangKe\") {\r\n if (selectedItem == null || selectedItem == undefined) {\r\n webix.message(\"Bạn chưa chọn mẫu biên lai cần in bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n if (selectedItem.checkmaubangke == 0) {\r\n webix.message(\"Mẫu bảng kê của hoá đơn chưa có để in ! \", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in mẫu bảng kê của biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMauHoadon_QuanLyMau?id=\" + selectedItem.id + \"&checkLoaiMau=1\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n },\r\n },\r\n });\r\n\r\n var initUI = function () {\r\n //var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"mauthietke\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetDataQlymau\";\r\n var donVi = user.getDvcsID();\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n var tlbParam = [\r\n {\r\n columnName: \"code\",\r\n value: donVi,\r\n },\r\n ];\r\n // tlbParam = [];\r\n url = url + \"&tlbParam=\" + JSON.stringify(tlbParam) +\"&loaimau=\"+loaimau;\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(mauthietkeform.$ui);\r\n var selectedItem ={loaimau:2}\r\n mauthietkeform.setEditMode(1);\r\n mauthietkeform.setValues(selectedItem);\r\n $$(\"mauthietke-win\").getHead().setHTML(\"Mẫu biên lai\");\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu biên lai cần sửa ! \", \"error\");\r\n return;\r\n }\r\n\r\n // if (selectedItem.tt_sd > 0) {\r\n // webix.message(\"Mẫu thiết kế đã sử dụng không thể sửa ! \", \"error\");\r\n // return;\r\n // }\r\n var detailForm = this.$scope.ui(mauthietkeform.$ui);\r\n\r\n mauthietkeform.setEditMode(2);\r\n mauthietkeform.setValues(selectedItem);\r\n $$(\"mauthietke-win\").getHead().setHTML(\"Mẫu biên lai\");\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu thiết kế ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.tt_sd > 0) {\r\n webix.message(\"Mẫu thiết kế đã sử dụng không thể xóa ! \", \"error\");\r\n return;\r\n }\r\n selectedItem.editmode = 3;\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/deleteMau68\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (json.error !== undefined) webix.message(json.error, \"error\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Tải\") + \"\",\r\n id: \"btnDownload\",\r\n // view: \"button\",\r\n // id: \"btnDownload\",\r\n // type: \"icon\",\r\n // icon: \"download\",\r\n // label: \"Tải (F8)\",\r\n // width: 100,\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu biên lai cần tải ! \", \"error\");\r\n return;\r\n }\r\n var url = app.config.host + \"/Invoice68/DowloadRepx?id=\" + selectedItem.id;\r\n var box = webix.modalbox({\r\n title: \"Đang tải mẫu biên lai (repx) ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n var file = new Blob([data], { type: \"application/octet-stream\" });\r\n webix.html.download(file, \"InvoiceTemplate.repx\");\r\n // var fileURL = URL.createObjectURL(file);\r\n //console.log(fileURL);\r\n webix.modalbox.hide(box);\r\n //window.open(fileURL, '_blank');\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnIn\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn mẫu biên lai cần in !\", \"error\");\r\n return;\r\n }\r\n var box = webix.modalbox({\r\n title: \"Đang in mẫu biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMauHoadon_QuanLyMau?id=\" + item.id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"mauthietke\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.date_new) {\r\n // obj.date_new = new Date(obj.date_new);\r\n // }\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"qlkhsdung_id\",\r\n header: \"qlkhsdung_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"ntao\",\r\n header: [\r\n \"Ngày tạo\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n columnType: \"datetime\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"mmau\",\r\n header: [\r\n \"Mã mẫu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"tmau\",\r\n header: [\r\n \"Tên mẫu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n\r\n {\r\n id: \"ngtao\",\r\n header: [\r\n \"Người tạo\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"tt_sdung\",\r\n header: [\"Sử dụng\"],\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n editor: \"checkbox\",\r\n width: 90,\r\n template: function (obj) {\r\n var checked = obj.tt_sd > 0 ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var table = webix.$$(\"mauthietke\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"mauthietke\");\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n webix.$$(\"title\").parse({\r\n title: \"Quản lý mẫu thiết kế biên lai\",\r\n details: \"Quản lý mẫu thiết kế biên lai\",\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/68_mauthietke_tncn',[\"app\", \"locale\", \"models/user\", \"views/forms/68_mauthietkeform\"], function (app, _, user, mauthietkeform) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Quản lý mẫu thiết kế Chứng từ thuế thu nhập cá nhân\",\r\n details: \"Quản lý mẫu thiết kế Chứng từ thuế thu nhập cá nhân\",\r\n });\r\n\r\n var loaimau =3;\r\n var subBangKe = webix.ui({\r\n view: \"submenu\",\r\n width: 150,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"addMauBangKe\",\r\n value: \"Thêm mẫu bảng kê\",\r\n },\r\n {\r\n id: \"taiMauBangKe\",\r\n value: \"Tải mẫu bảng kê\",\r\n },\r\n {\r\n id: \"inMauBangKe\",\r\n value: \"In mẫu bảng kê\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n var table = webix.$$(\"mauthietke\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (record.id == \"addMauBangKe\") {\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu Chứng từ cần thêm mẫu bảng kê ! \", \"error\");\r\n return;\r\n }\r\n require([\"views/forms/uploadfile\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n\r\n win.getHead().setHTML(\"Tải file mẫu bảng kê\");\r\n win.show();\r\n\r\n webix.$$(\"uploader\").define(\"upload\", app.config.host + \"/Invoice68/UploadBangKeTemplate\");\r\n webix.$$(\"uploader\").define(\"formData\", { dmmauhoadon_id: selectedItem.id });\r\n webix.$$(\"uploader\").refresh();\r\n });\r\n }\r\n\r\n if (record.id == \"taiMauBangKe\") {\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu Chứng từ cần tải bảng kê! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.checkmaubangke == 0) {\r\n webix.message(\"Chưa có mẫu bảng kê để tải ! \", \"error\");\r\n return;\r\n }\r\n var url = app.config.host + \"/Invoice68/DowloadRepxBangKe?id=\" + selectedItem.id;\r\n var box = webix.modalbox({\r\n title: \"Đang tải mẫu bảng kê (repx) ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n var file = new Blob([data], { type: \"application/octet-stream\" });\r\n webix.html.download(file, \"BangKeTemplate.repx\");\r\n webix.modalbox.hide(box);\r\n });\r\n }\r\n\r\n if (record.id == \"inMauBangKe\") {\r\n if (selectedItem == null || selectedItem == undefined) {\r\n webix.message(\"Bạn chưa chọn mẫu chứng từ cần in bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n if (selectedItem.checkmaubangke == 0) {\r\n webix.message(\"Mẫu bảng kê của hoá đơn chưa có để in ! \", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in mẫu bảng kê của chứng từ ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"chứng từ điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMauHoadon_QuanLyMau?id=\" + selectedItem.id + \"&checkLoaiMau=1\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n },\r\n },\r\n });\r\n\r\n var initUI = function () {\r\n //var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"mauthietke\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetDataQlymau\";\r\n var donVi = user.getDvcsID();\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n var tlbParam = [\r\n {\r\n columnName: \"code\",\r\n value: donVi,\r\n },\r\n ];\r\n // tlbParam = [];\r\n url = url + \"&tlbParam=\" + JSON.stringify(tlbParam) +\"&loaimau=\"+loaimau;\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(mauthietkeform.$ui);\r\n var selectedItem ={loaimau:3}\r\n mauthietkeform.setEditMode(1);\r\n mauthietkeform.setValues(selectedItem);\r\n $$(\"mauthietke-win\").getHead().setHTML(\"Mẫu chứng từ\");\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu chứng từ cần sửa ! \", \"error\");\r\n return;\r\n }\r\n\r\n // if (selectedItem.tt_sd > 0) {\r\n // webix.message(\"Mẫu thiết kế đã sử dụng không thể sửa ! \", \"error\");\r\n // return;\r\n // }\r\n var detailForm = this.$scope.ui(mauthietkeform.$ui);\r\n\r\n mauthietkeform.setEditMode(2);\r\n mauthietkeform.setValues(selectedItem);\r\n $$(\"mauthietke-win\").getHead().setHTML(\"Mẫu chứng từ\");\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu thiết kế ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.tt_sd > 0) {\r\n webix.message(\"Mẫu thiết kế đã sử dụng không thể xóa ! \", \"error\");\r\n return;\r\n }\r\n selectedItem.editmode = 3;\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/deleteMau68\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (json.error !== undefined) webix.message(json.error, \"error\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Tải\") + \"\",\r\n id: \"btnDownload\",\r\n // view: \"button\",\r\n // id: \"btnDownload\",\r\n // type: \"icon\",\r\n // icon: \"download\",\r\n // label: \"Tải (F8)\",\r\n // width: 100,\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu chứng từ cần tải ! \", \"error\");\r\n return;\r\n }\r\n var url = app.config.host + \"/Invoice68/DowloadRepx?id=\" + selectedItem.id;\r\n var box = webix.modalbox({\r\n title: \"Đang tải mẫu chứng từ (repx) ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n var file = new Blob([data], { type: \"application/octet-stream\" });\r\n webix.html.download(file, \"InvoiceTemplate.repx\");\r\n // var fileURL = URL.createObjectURL(file);\r\n //console.log(fileURL);\r\n webix.modalbox.hide(box);\r\n //window.open(fileURL, '_blank');\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnIn\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn mẫu chứng từ cần in !\", \"error\");\r\n return;\r\n }\r\n var box = webix.modalbox({\r\n title: \"Đang in mẫu chứng từ ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"chứng từ điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMauHoadon_QuanLyMau?id=\" + item.id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"mauthietke\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.date_new) {\r\n // obj.date_new = new Date(obj.date_new);\r\n // }\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"qlkhsdung_id\",\r\n header: \"qlkhsdung_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"ntao\",\r\n header: [\r\n \"Ngày tạo\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n columnType: \"datetime\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"mmau\",\r\n header: [\r\n \"Mã mẫu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"tmau\",\r\n header: [\r\n \"Tên mẫu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n\r\n {\r\n id: \"ngtao\",\r\n header: [\r\n \"Người tạo\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"tt_sdung\",\r\n header: [\"Sử dụng\"],\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n editor: \"checkbox\",\r\n width: 90,\r\n template: function (obj) {\r\n var checked = obj.tt_sd > 0 ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var table = webix.$$(\"mauthietke\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"mauthietke\");\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/68_mauthietke',[\"views/commonHD\", \"app\", \"locale\", \"models/user\", \"views/forms/68_mauthietkeform\"], function (commonHD, app, _, user, mauthietkeform) {\r\n \r\n var subBangKe = webix.ui({\r\n view: \"submenu\",\r\n width: 150,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"addMauBangKe\",\r\n value: \"Thêm mẫu bảng kê\",\r\n },\r\n {\r\n id: \"taiMauBangKe\",\r\n value: \"Tải mẫu bảng kê\",\r\n },\r\n {\r\n id: \"inMauBangKe\",\r\n value: \"In mẫu bảng kê\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n var table = webix.$$(\"mauthietke\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (record.id == \"addMauBangKe\") {\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn cần thêm mẫu bảng kê ! \", \"error\");\r\n return;\r\n }\r\n require([\"views/forms/uploadfile\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n\r\n win.getHead().setHTML(\"Tải file mẫu bảng kê\");\r\n win.show();\r\n\r\n webix.$$(\"uploader\").define(\"upload\", app.config.host + \"/Invoice68/UploadBangKeTemplate\");\r\n webix.$$(\"uploader\").define(\"formData\", { dmmauhoadon_id: selectedItem.id });\r\n webix.$$(\"uploader\").refresh();\r\n });\r\n }\r\n\r\n if (record.id == \"taiMauBangKe\") {\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn cần tải bảng kê! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.checkmaubangke == 0) {\r\n webix.message(\"Chưa có mẫu bảng kê để tải ! \", \"error\");\r\n return;\r\n }\r\n var url = app.config.host + \"/Invoice68/DowloadRepxBangKe?id=\" + selectedItem.id;\r\n var box = webix.modalbox({\r\n title: \"Đang tải mẫu bảng kê (repx) ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n var file = new Blob([data], { type: \"application/octet-stream\" });\r\n webix.html.download(file, \"BangKeTemplate.repx\");\r\n webix.modalbox.hide(box);\r\n });\r\n }\r\n\r\n if (record.id == \"inMauBangKe\") {\r\n if (selectedItem == null || selectedItem == undefined) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn cần in bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n if (selectedItem.checkmaubangke == 0) {\r\n webix.message(\"Mẫu bảng kê của hoá đơn chưa có để in ! \", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in mẫu bảng kê của hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMauHoadon_QuanLyMau?id=\" + selectedItem.id + \"&checkLoaiMau=1\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n },\r\n },\r\n });\r\n\r\n var subPhieuThu = webix.ui({\r\n view: \"submenu\",\r\n width: 150,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"addMauPhieuThu\",\r\n value: \"Thêm mẫu phiếu thu\",\r\n },\r\n {\r\n id: \"taiMauPhieuThu\",\r\n value: \"Tải mẫu phiếu thu\",\r\n },\r\n {\r\n id: \"inMauPhieuThu\",\r\n value: \"In mẫu phiếu thu\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n var table = webix.$$(\"mauthietke\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (record.id == \"addMauPhieuThu\") {\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn cần thêm mẫu phiếu thu ! \", \"error\");\r\n return;\r\n }\r\n require([\"views/forms/uploadfile\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n\r\n win.getHead().setHTML(\"Tải file mẫu phiếu thu\");\r\n win.show();\r\n\r\n webix.$$(\"uploader\").define(\"upload\", app.config.host + \"/Invoice68/UploadPhieuThuTemplate\");\r\n webix.$$(\"uploader\").define(\"formData\", { dmmauhoadon_id: selectedItem.id });\r\n webix.$$(\"uploader\").refresh();\r\n });\r\n }\r\n\r\n if (record.id == \"taiMauPhieuThu\") {\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn cần tải phiếu thu! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.checkmauphieuthu == 0) {\r\n webix.message(\"Chưa tồn tại mẫu phiếu thu! \", \"error\");\r\n return;\r\n }\r\n var url = app.config.host + \"/Invoice68/DowloadRepxPhieuThu?id=\" + selectedItem.id;\r\n var box = webix.modalbox({\r\n title: \"Đang tải mẫu phiếu thu (repx) ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n var file = new Blob([data], { type: \"application/octet-stream\" });\r\n webix.html.download(file, \"PhieuThuTemplate.repx\");\r\n webix.modalbox.hide(box);\r\n });\r\n }\r\n\r\n if (record.id == \"inMauPhieuThu\") {\r\n if (selectedItem == null || selectedItem == undefined) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn cần in phiếu thu!\", \"error\");\r\n return;\r\n }\r\n\r\n if (selectedItem.checkmauphieuthu == 0) {\r\n webix.message(\"Chưa tồn tại mẫu phiếu thu ! \", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in mẫu phiếu thu của hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMauHoadon_QuanLyMau?id=\" + selectedItem.id + \"&checkLoaiMau=2\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n },\r\n },\r\n });\r\n\r\n var initUI = function () {\r\n //var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"mauthietke\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetDataQlymau\";\r\n var donVi = user.getDvcsID();\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n var tlbParam = [\r\n {\r\n columnName: \"code\",\r\n value: donVi,\r\n },\r\n ];\r\n // tlbParam = [];\r\n url = url + \"&tlbParam=\" + JSON.stringify(tlbParam);\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n commonHD.clear_filter(table);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(mauthietkeform.$ui);\r\n mauthietkeform.setEditMode(1);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn cần sửa ! \", \"error\");\r\n return;\r\n }\r\n\r\n // if (selectedItem.tt_sd > 0) {\r\n // webix.message(\"Mẫu thiết kế đã sử dụng không thể sửa ! \", \"error\");\r\n // return;\r\n // }\r\n var detailForm = this.$scope.ui(mauthietkeform.$ui);\r\n\r\n mauthietkeform.setEditMode(2);\r\n mauthietkeform.setValues(selectedItem);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu thiết kế ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.tt_sd > 0) {\r\n webix.message(\"Mẫu thiết kế đã sử dụng không thể xóa ! \", \"error\");\r\n return;\r\n }\r\n selectedItem.editmode = 3;\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/deleteMau68\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (json.error !== undefined) webix.message(json.error, \"error\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Tải\") + \"\",\r\n id: \"btnDownload\",\r\n // view: \"button\",\r\n // id: \"btnDownload\",\r\n // type: \"icon\",\r\n // icon: \"download\",\r\n // label: \"Tải (F8)\",\r\n // width: 100,\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn cần tải ! \", \"error\");\r\n return;\r\n }\r\n var url = app.config.host + \"/Invoice68/DowloadRepx?id=\" + selectedItem.id;\r\n var box = webix.modalbox({\r\n title: \"Đang tải mẫu hóa đơn (repx) ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n var file = new Blob([data], { type: \"application/octet-stream\" });\r\n webix.html.download(file, \"InvoiceTemplate.repx\");\r\n // var fileURL = URL.createObjectURL(file);\r\n //console.log(fileURL);\r\n webix.modalbox.hide(box);\r\n //window.open(fileURL, '_blank');\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnIn\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n var box = webix.modalbox({\r\n title: \"Đang in mẫu hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMauHoadon_QuanLyMau?id=\" + item.id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Bảng kê\") + \"\",\r\n id: \"btnBangKeMauIn\",\r\n click: function () {\r\n subBangKe.show(webix.$$(\"btnBangKeMauIn\").$view);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Phiếu thu\") + \"\",\r\n id: \"btnPhieuThuMauIn\",\r\n click: function () {\r\n subPhieuThu.show(webix.$$(\"btnPhieuThuMauIn\").$view);\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"mauthietke\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.date_new) {\r\n // obj.date_new = new Date(obj.date_new);\r\n // }\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"qlkhsdung_id\",\r\n header: \"qlkhsdung_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"ntao\",\r\n header: [\r\n \"Ngày tạo\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n columnType: \"datetime\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"mmau\",\r\n header: [\r\n \"Mã mẫu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"tmau\",\r\n header: [\r\n \"Tên mẫu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n\r\n {\r\n id: \"ngtao\",\r\n header: [\r\n \"Người tạo\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"decimal_point\",\r\n header: [\"Phân cách hàng thập phân\"],\r\n width: 200,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n template: function (obj) {\r\n console.log(\"thập phân \" + obj.decimal_point);\r\n var check = obj.decimal_point == \",\" ? \"Dấu phẩy\" : \"Dấu chấm\";\r\n return check;\r\n },\r\n },\r\n {\r\n id: \"thousand_point\",\r\n header: [\"Phân cách hàng nghìn\"],\r\n width: 200,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n template: function (obj) {\r\n console.log(\"hàng nghìn \" + obj.thousand_point);\r\n var check = obj.thousand_point == \".\" ? \"Dấu chấm\" : \"Dấu phẩy\";\r\n return check;\r\n },\r\n },\r\n {\r\n id: \"tt_sdung\",\r\n header: [\"Sử dụng\"],\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n editor: \"checkbox\",\r\n width: 90,\r\n template: function (obj) {\r\n var checked = obj.tt_sd > 0 ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n {\r\n id: \"tt_sdung\",\r\n header: [\"Mẫu phiếu thu\"],\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n editor: \"checkbox\",\r\n width: 110,\r\n template: function (obj) {\r\n var checked = obj.checkmauphieuthu == 1 ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var table = webix.$$(\"mauthietke\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"mauthietke\");\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n if (webix.$$(\"head-title\") != null) {\r\n webix.$$(\"head-title\").show()\r\n }\r\n \r\n webix.$$(\"title\").parse({\r\n title: \"Quản lý mẫu thiết kế hóa đơn\",\r\n details: \"Quản lý mẫu thiết kế hóa đơn\",\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_kyhieu_hoadon_bienlai',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n var editmode = 0;\r\n var param;\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"kyhieu-form\").getValues();\r\n var table = $$(\"kyhieu-form\");\r\n item.editmode = editmode;\r\n if (table.validate()) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n item.id = item.phanhoadon_78_id\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonkihieu68\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"kyhieu-win\").close();\r\n var table = $$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"kyhieu-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"kyhieu-win\",\r\n position: \"center\",\r\n head: \"Đăng ký ký hiệu \",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"kyhieu-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n // {\r\n // view: \"text\",\r\n // label: \"Tên mẫu\",\r\n // name: \"ten_mau\",\r\n // required: true,\r\n // invalidMessage: \"Tên mẫu không được bỏ trống\",\r\n // labelWidth: 120\r\n // },\r\n {\r\n view: \"combo\",\r\n name: \"kyhieu_id\",\r\n label: \"Ký hiệu \",\r\n //labelPosition: \"top\",\r\n id: \"kyhieu_id\",\r\n required: true,\r\n labelWidth: 120,\r\n invalidMessage: \"Ký hiệu không được bỏ trống\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF02003\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var test = newv;\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n name: \"tongso\",\r\n label: _(\"Số lượng\"),\r\n editor: \"autonumeric\",\r\n labelWidth: 120,\r\n required: true,\r\n css: { \"text-align\": \"right\" },\r\n validate: function (val) {\r\n if (val === undefined || val === null || val === \"\") return false;\r\n return !isNaN(val) && val >= 0 && val < 100000000;\r\n },\r\n attributes: { type: \"number\" },\r\n invalidMessage: \"Phải nhập số dương và nhỏ hơn 100000000\",\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n initUI: function (item) {\r\n param = item;\r\n },\r\n setValues: function (item) {\r\n $$(\"kyhieu-form\").setValues(item);\r\n if (editmode == 2) {\r\n $$(\"kyhieu_id\").define(\"readonly\", true);\r\n }\r\n },\r\n };\r\n});\r\n\ndefine('views/68_quanlihoadon_kihieu_bienlai',[\"app\", \"locale\", \"models/user\", \"views/forms/68_kyhieu_hoadon_bienlai\"], function (app, _, user, kyhieuForm) {\r\n \r\n var isActiveDbClick = true;\r\n var initUI = function () {\r\n // var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetHoaDonkyhieu68\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n var array =[];\r\n if (params.filter != null) {\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n var arrayParam = [];\r\n var branchcode = {\r\n columnName: \"branch_code\",\r\n value: user.getDvcsID(),\r\n };\r\n arrayParam.push(branchcode);\r\n url = url + \"&tlbparam=\" + JSON.stringify(arrayParam) +\"&loaikh=2\";\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n kyhieuForm.setEditMode(1);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn! \", \"error\");\r\n return;\r\n }\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n\r\n kyhieuForm.setEditMode(2);\r\n kyhieuForm.setValues(selectedItem);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn ký hiệu hóa đơn cần xóa ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.sosudung > 0) {\r\n webix.message(\"Ký hiệu đã sử dụng không thể xóa ! \", \"error\");\r\n return;\r\n }\r\n selectedItem.editmode = 3;\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonkihieu68\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message(res.error, \"error\");\r\n } else {\r\n table.remove(selectedItem.id);\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"kyhieu_hoadon\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.ngayLap) {\r\n // obj.ngayLap = new Date(obj.ngayLap);\r\n // }\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n if(isActiveDbClick) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n }\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"id\",\r\n header: \"kyhieu_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"kyhieu_id\",\r\n header: \"kyhieu_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"khhdon\",\r\n header: [\r\n \"Kí hiệu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 240,\r\n },\r\n {\r\n id: \"tongso\",\r\n header: [\r\n \"Tổng số\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"sosudung\",\r\n header: [\r\n \"Số sử dụng\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"soconlai\",\r\n header: [\r\n \"Số còn lại\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"ngaybatdau\",\r\n format: function (text) {\r\n var test = new Date(text);\r\n if (test !== null && test !== \"null\") {\r\n var format = webix.Date.dateToStr(\"%d-%m-%Y %H:%i:%s\");\r\n text = removeTimeZoneT(test);\r\n return format(text);\r\n }\r\n return \"\";\r\n },\r\n width: 240,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"branch_code\",\r\n header: [\r\n \"Đơn vị tạo\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n // height: 40,\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"kyhieu\");\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChangedKyhieu68\", function (mode, item) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n if (webix.$$(\"head-title\") != null) {\r\n webix.$$(\"head-title\").show();\r\n\r\n // Vẽ thêm thoong tin\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetConfigInvSymbol\", function (text) {\r\n var json = JSON.parse(text);\r\n var config = json['data']\r\n if(config == \"K\") {\r\n isActiveDbClick = false;\r\n webix.$$(\"btnPlus\").hide();\r\n webix.$$(\"btnEdit\").hide();\r\n webix.$$(\"btnDelete\").hide();\r\n } else {\r\n isActiveDbClick = true;\r\n }\r\n });\r\n \r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/DashboardTiles_License\", function (res) {\r\n var data = JSON.parse(res);\r\n console.log(data);\r\n\r\n if(data && data[\"items\"]) {\r\n var items = data[\"items\"];\r\n var total = items.find(function(e) {\r\n return e.css == \"orders\";\r\n })\r\n var used = items.find(function(e) {\r\n return e.css == \"number-orders\";\r\n })\r\n var available = items.find(function(e) {\r\n return e.css == \"users\";\r\n })\r\n\r\n $$(\"head-title\").removeView(\"head-title-subui\");\r\n $$(\"head-title\").addView(\r\n {\r\n id: \"head-title-subui\",\r\n rows: [\r\n {\r\n cols: [\r\n { view: \"label\", label: \"Tổng số hóa đơn đã đăng ký:\", align: \"right\", width: 200 },\r\n { view: \"label\", label: total.tien.toLocaleString('vi-VN'), align: \"left\", width: 100 },\r\n { view: \"label\", label: \"Số sử dụng:\", align: \"right\", width: 200 },\r\n { view: \"label\", label: used.tien.toLocaleString('vi-VN'), align: \"left\", width: 100 },\r\n { view: \"label\", label: \"Số hết hạn sử dụng:\", align: \"right\", width: 200 },\r\n { view: \"label\", label: \"0\", align: \"left\", width: 100 },\r\n { view: \"label\", label: \"Số còn lại:\", align: \"right\", width: 200 },\r\n { view: \"label\", label: available.tien.toLocaleString('vi-VN'), align: \"left\", width: 100 },\r\n ]\r\n }\r\n ]\r\n }\r\n );\r\n }\r\n });\r\n }\r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Quản lý số lượng HĐ cho từng ký hiệu biên lai\",\r\n details: \"Quản lý số lượng HĐ cho từng ký hiệu biên lai\",\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_kyhieu_hoadon_tncn',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n var editmode = 0;\r\n var param;\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"kyhieu-form\").getValues();\r\n var table = $$(\"kyhieu-form\");\r\n item.editmode = editmode;\r\n if (table.validate()) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonkihieu68\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"kyhieu-win\").close();\r\n var table = $$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"kyhieu-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"kyhieu-win\",\r\n position: \"center\",\r\n head: \"Đăng ký ký hiệu \",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"kyhieu-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n // {\r\n // view: \"text\",\r\n // label: \"Tên mẫu\",\r\n // name: \"ten_mau\",\r\n // required: true,\r\n // invalidMessage: \"Tên mẫu không được bỏ trống\",\r\n // labelWidth: 120\r\n // },\r\n {\r\n view: \"combo\",\r\n name: \"kyhieu_id\",\r\n label: \"Ký hiệu \",\r\n //labelPosition: \"top\",\r\n id: \"kyhieu_id\",\r\n required: true,\r\n labelWidth: 120,\r\n invalidMessage: \"Ký hiệu không được bỏ trống\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF02000\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var test = newv;\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n name: \"tongso\",\r\n label: _(\"Số lượng\"),\r\n editor: \"autonumeric\",\r\n labelWidth: 120,\r\n required: true,\r\n css: { \"text-align\": \"right\" },\r\n validate: function (val) {\r\n if (val === undefined || val === null || val === \"\") return false;\r\n return !isNaN(val) && val >= 0 && val < 100000000;\r\n },\r\n attributes: { type: \"number\" },\r\n invalidMessage: \"Phải nhập số dương và nhỏ hơn 100000000\",\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n initUI: function (item) {\r\n param = item;\r\n },\r\n setValues: function (item) {\r\n $$(\"kyhieu-form\").setValues(item);\r\n if (editmode == 2) {\r\n $$(\"kyhieu_id\").define(\"readonly\", true);\r\n }\r\n },\r\n };\r\n});\r\n\ndefine('views/68_quanlihoadon_kihieu_tncn',[\"app\", \"locale\", \"models/user\", \"views/forms/68_kyhieu_hoadon_tncn\"], function (app, _, user, kyhieuForm) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Quản lý số lượng chứng từ cho từng ký hiệu chứng từ\",\r\n details: \"Quản lý số lượng chứng từ cho từng ký hiệu chứng từ\",\r\n });\r\n\r\n var initUI = function () {\r\n // var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetHoaDonkyhieu68\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n var array =[];\r\n if (params.filter != null) {\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n var arrayParam = [];\r\n var branchcode = {\r\n columnName: \"branch_code\",\r\n value: user.getDvcsID(),\r\n };\r\n arrayParam.push(branchcode);\r\n url = url + \"&tlbparam=\" + JSON.stringify(arrayParam) +\"&loaikh=3\";\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n kyhieuForm.setEditMode(1);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn! \", \"error\");\r\n return;\r\n }\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n\r\n kyhieuForm.setEditMode(2);\r\n kyhieuForm.setValues(selectedItem);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn ký hiệu chứng từ cần xóa ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.sosudung > 0) {\r\n webix.message(\"Ký hiệu đã sử dụng không thể xóa ! \", \"error\");\r\n return;\r\n }\r\n selectedItem.editmode = 3;\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonkihieu68\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message(res.error, \"error\");\r\n } else {\r\n table.remove(selectedItem.id);\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"kyhieu_hoadon\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.ngayLap) {\r\n // obj.ngayLap = new Date(obj.ngayLap);\r\n // }\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"id\",\r\n header: \"kyhieu_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"kyhieu_id\",\r\n header: \"kyhieu_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"khhdon\",\r\n header: [\r\n \"Ký hiệu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 240,\r\n },\r\n {\r\n id: \"tongso\",\r\n header: [\r\n \"Tổng số\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"sosudung\",\r\n header: [\r\n \"Số sử dụng\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"soconlai\",\r\n header: [\r\n \"Số còn lại\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"ngaybatdau\",\r\n header: \"Ngày bắt đầu\",\r\n format: function (text) {\r\n var test = new Date(text);\r\n if (test !== null && test !== \"null\") {\r\n var format = webix.Date.dateToStr(\"%d-%m-%Y %H:%i:%s\");\r\n text = removeTimeZoneT(test);\r\n return format(text);\r\n }\r\n return \"\";\r\n },\r\n width: 240,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"branch_code\",\r\n header: [\r\n \"Đơn vị tạo\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n // height: 40,\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"kyhieu\");\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChangedKyhieu68\", function (mode, item) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_kyhieu_hoadon',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n var editmode = 0;\r\n var param;\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"kyhieu-form\").getValues();\r\n var table = $$(\"kyhieu-form\");\r\n item.editmode = editmode;\r\n item.id = item.phanhoadon_78_id;\r\n if (table.validate()) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonkihieu68\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"kyhieu-win\").close();\r\n var table = $$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"kyhieu-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"kyhieu-win\",\r\n position: \"center\",\r\n head: \"Đăng ký ký hiệu \",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"kyhieu-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"combo\",\r\n name: \"kyhieu_id\",\r\n label: \"Ký hiệu \",\r\n id: \"kyhieu_id\",\r\n required: true,\r\n labelWidth: 120,\r\n invalidMessage: \"Ký hiệu không được bỏ trống\",\r\n css: \"mcls_uppercase\",\r\n options: {\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00120\",\r\n },\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var test = newv;\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n name: \"tongso\",\r\n label: _(\"Số lượng\"),\r\n editor: \"autonumeric\",\r\n labelWidth: 120,\r\n required: true,\r\n css: { \"text-align\": \"right\" },\r\n validate: function (val) {\r\n if (val === undefined || val === null || val === \"\") return false;\r\n return !isNaN(val) && val >= 0 && val < 100000000;\r\n },\r\n attributes: { type: \"number\" },\r\n invalidMessage: \"Phải nhập số dương và nhỏ hơn 100000000\",\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n initUI: function (item) {\r\n param = item;\r\n },\r\n setValues: function (item) {\r\n $$(\"kyhieu-form\").setValues(item);\r\n if (editmode == 2) {\r\n $$(\"kyhieu_id\").define(\"readonly\", true);\r\n }\r\n },\r\n };\r\n});\r\n\ndefine('views/68_quanlihoadon_kihieu',[\"views/commonHD\", \"app\", \"locale\", \"models/user\", \"views/forms/68_kyhieu_hoadon\"], function (commonHD, app, _, user, kyhieuForm) {\r\n \r\n var isActiveDbClick = true;\r\n var initUI = function () {\r\n // var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetHoaDonkyhieu68\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n var array = [];\r\n if (params.filter != null) {\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n var arrayParam = [];\r\n var branchcode = {\r\n columnName: \"branch_code\",\r\n value: user.getDvcsID(),\r\n };\r\n arrayParam.push(branchcode);\r\n url = url + \"&tlbparam=\" + JSON.stringify(arrayParam);\r\n view.config.params = params\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n commonHD.clear_filter(table);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n kyhieuForm.setEditMode(1);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn! \", \"error\");\r\n return;\r\n }\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n\r\n kyhieuForm.setEditMode(2);\r\n kyhieuForm.setValues(selectedItem);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn ký hiệu hóa đơn cần xóa ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.sosudung > 0) {\r\n webix.message(\"Ký hiệu đã sử dụng không thể xóa ! \", \"error\");\r\n return;\r\n }\r\n selectedItem.editmode = 3;\r\n var dataPost = {\r\n editmode: 3,\r\n id: selectedItem.phanhoadon_78_id,\r\n kyhieu_id: selectedItem.kyhieu_id\r\n }\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonkihieu68\", dataPost, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message(res.error, \"error\");\r\n } else {\r\n table.remove(selectedItem.id);\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Kết xuất màn hình\") + \"\",\r\n id: \"btnXuatExel\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Kết xuất màn hình toàn bộ hóa đơn theo filter?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n width: 300,\r\n callback: function (res) {\r\n if (res) {\r\n //check validate và return ra list hoadon_id\r\n var table = $$(\"kyhieu_hoadon\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var datafetch = table.config.datafetch;\r\n table.config.datafetch = table.data.count();\r\n var params = table.config.params;\r\n if (params != null && params != undefined) {\r\n params.count = table.data.count();\r\n }\r\n var columnlst = table.config.columns;\r\n var arrcolumn = [];\r\n\r\n for (var i = 0; i < columnlst.length; i++) {\r\n var exporttype = \"\";\r\n if (columnlst[i].columnType == \"character varying\" || columnlst[i].columnType == \"nvarchar\") {\r\n exporttype = \"string\";\r\n } else {\r\n exporttype = columnlst[i].columnType;\r\n }\r\n \r\n if (columnlst[i].id == \"chinhphu\") {\r\n exporttype = \"string\";\r\n }\r\n \r\n var item = {\r\n id: columnlst[i].id,\r\n header: columnlst[i].header[0][\"text\"],\r\n exportType: exporttype\r\n };\r\n \r\n arrcolumn.push(item);\r\n } \r\n\r\n table.load(\r\n table.config.url,\r\n function () {\r\n debugger\r\n\r\n webix.toExcel($$(\"kyhieu_hoadon\"), {\r\n columns: arrcolumn,\r\n rawValues: false,\r\n filename: \"SoLuongHoaDonChoTungKyHieu\",\r\n });\r\n debugger;\r\n table.config.datafetch = datafetch;\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n params\r\n );\r\n }\r\n },\r\n });\r\n },\r\n },\r\n {},\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"kyhieu_hoadon\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.ngayLap) {\r\n // obj.ngayLap = new Date(obj.ngayLap);\r\n // }\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n if(isActiveDbClick) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n }\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"id\",\r\n header: \"kyhieu_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"kyhieu_id\",\r\n header: \"kyhieu_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"khhdon\",\r\n header: [\r\n \"Ký hiệu\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 240,\r\n },\r\n {\r\n id: \"tongso\",\r\n header: [\r\n \"Tổng số\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"sosudung\",\r\n header: [\r\n \"Số sử dụng\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n }, {\r\n id: \"soconlai\",\r\n header: [\r\n \"Số còn lại\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"ngaybatdau\",\r\n format: function (text) {\r\n var test = new Date(text);\r\n if (test !== null && test !== \"null\") {\r\n var format = webix.Date.dateToStr(\"%d-%m-%Y %H:%i:%s\");\r\n text = removeTimeZoneT(test);\r\n return format(text);\r\n }\r\n return \"\";\r\n },\r\n width: 240,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"branch_code\",\r\n header: [\r\n \"Đơn vị tạo\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n // height: 40,\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"kyhieu\");\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChangedKyhieu68\", function (mode, item) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n if (webix.$$(\"head-title\") != null) {\r\n webix.$$(\"head-title\").show();\r\n\r\n // Vẽ thêm thoong tin\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetConfigInvSymbol\", function (text) {\r\n var json = JSON.parse(text);\r\n var config = json['data']\r\n if(config == \"K\") {\r\n isActiveDbClick = false;\r\n webix.$$(\"btnPlus\").hide();\r\n webix.$$(\"btnEdit\").hide();\r\n webix.$$(\"btnDelete\").hide();\r\n } else {\r\n isActiveDbClick = true;\r\n }\r\n });\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/DashboardTiles_License\", function (res) {\r\n var data = JSON.parse(res);\r\n\r\n if(data && data[\"items\"]) {\r\n var items = data[\"items\"];\r\n var total = items.find(function(e) {\r\n return e.css == \"orders\";\r\n })\r\n var used = items.find(function(e) {\r\n return e.css == \"number-orders\";\r\n })\r\n var available = items.find(function(e) {\r\n return e.css == \"users\";\r\n })\r\n\r\n $$(\"head-title\").removeView(\"head-title-subui\");\r\n $$(\"head-title\").addView(\r\n {\r\n id: \"head-title-subui\",\r\n rows: [\r\n {\r\n cols: [\r\n { view: \"label\", label: \"Tổng số hóa đơn đã đăng ký:\", align: \"right\", width: 200 },\r\n { view: \"label\", label: total.tien.toLocaleString('vi-VN'), align: \"left\", width: 100 },\r\n { view: \"label\", label: \"Số sử dụng:\", align: \"right\", width: 200 },\r\n { view: \"label\", label: used.tien.toLocaleString('vi-VN'), align: \"left\", width: 100 },\r\n { view: \"label\", label: \"Số hết hạn sử dụng:\", align: \"right\", width: 200 },\r\n { view: \"label\", label: \"0\", align: \"left\", width: 100 },\r\n { view: \"label\", label: \"Số còn lại:\", align: \"right\", width: 200 },\r\n { view: \"label\", label: available.tien.toLocaleString('vi-VN'), align: \"left\", width: 100 },\r\n ]\r\n }\r\n ]\r\n }\r\n );\r\n }\r\n });\r\n }\r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Quản lý số lượng HĐ cho từng ký hiệu HĐ\",\r\n details: \"Quản lý số lượng HĐ cho từng ký hiệu HĐ\",\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/68_thongdiepthuetrave',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Quản lý mã thông điệp CQT\",\r\n // details: \"Bảng tổng hợp hóa đơn\",\r\n });\r\n\r\n var initUI = function () {\r\n var table = webix.$$(\"mau04_68\");\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetThongDiepThueTraVe\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n // id: \"btnRefresh\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"mau04_68\");\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n },\r\n {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n // id: \"btnPlus\",\r\n // shortcut: \"F4\",\r\n // on: {\r\n // onClick: function () {\r\n // // var detailForm = this.$scope.ui(form_0405.$ui);\r\n // // form_0405.setEditMode(0);\r\n // // detailForm.show();\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n },\r\n {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n // id: \"btnEdit\",\r\n // shortcut: \"F3\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"mau04_68\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn hóa đơn ! \", \"error\");\r\n // return;\r\n // }\r\n // if (selectedItem.trang_thai == 1) {\r\n // webix.message(\"Mẫu đã ký và gửi CQT bạn không thể sửa! \", \"error\");\r\n // return;\r\n // }\r\n // if (selectedItem.loai_tbao == \"5\") {\r\n // webix.message(\"Mẫu 05 nhận từ CQT bạn không thể sửa! \", \"error\");\r\n // return;\r\n // }\r\n // // var detailForm = this.$scope.ui(form_0405.$ui);\r\n // // form_0405.setEditMode(0);\r\n // // detailForm.show();\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n },\r\n {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n // id: \"btnDelete\",\r\n // shortcut: \"F8\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"mau04_68\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // if (selectedItem.trang_thai == 1) {\r\n // webix.message(\"Mẫu đã ký và gửi CQT bạn không thể xóa! \", \"error\");\r\n // return;\r\n // }\r\n // if (selectedItem.loai_tbao == \"5\") {\r\n // webix.message(\"Mẫu 05 nhận từ CQT bạn không thể xóa! \", \"error\");\r\n // return;\r\n // }\r\n // webix.confirm({\r\n // text: \"Bạn có muốn xóa hóa đơn\",\r\n // ok: \"Có\",\r\n // cancel: \"Không\",\r\n // callback: function (choose) {\r\n // if (choose) {\r\n // webix.extend(table, webix.ProgressBar);\r\n // table.disable();\r\n // table.showProgress();\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-type\": \"application/json\" })\r\n // .post(app.config.host + \"/Invoice68/deleteMau04\", selectedItem, {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // table.enable();\r\n // table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.error, \"error\");\r\n // //webix.message(XmlHttpRequest.statusText, \"error\");\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // table.remove(selectedItem.id);\r\n // table.enable();\r\n // table.hideProgress();\r\n // },\r\n // });\r\n // }\r\n // },\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n },\r\n // {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"Xem in\") + \" (F7)\" + \"\",\r\n // id: \"btnPreview\",\r\n // shortcut: \"F7\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"mau04_68\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn dòng in ! \", \"error\");\r\n // return;\r\n // }\r\n // var box = webix.modalbox({\r\n // title: \"Đang in hóa đơn ....\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200,\r\n // });\r\n\r\n // var newWin = window.open();\r\n // var html =\r\n // \"Hóa đơn điện tử MobiFone Invoice\" +\r\n // '' +\r\n // '' +\r\n // '
Đang tải dữ liệu ...

';\r\n // newWin.document.write(html);\r\n\r\n // webix\r\n // .ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ \"Content-type\": \"application/json\" })\r\n // .get(app.config.host + \"/Invoice68/inMau04?id=\" + selectedItem.id + \"&type=PDF&loai=\" + selectedItem.loai_tbao, {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // webix.message(XmlHttpRequest.statusText, \"error\");\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: \"application/pdf\" });\r\n // var fileURL = URL.createObjectURL(file);\r\n // //window.open(fileURL, '_blank');\r\n // webix.modalbox.hide(box);\r\n // newWin.location = fileURL;\r\n // },\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n {},\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"mau04_68\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function () {\r\n // this.data.each(function (obj, i) {\r\n // obj.index = i + 1;\r\n // });\r\n },\r\n },\r\n onClick: {\r\n Dowload0405: function (event, cell, target) {\r\n var win = webix.$$(\"mau04_68\");\r\n var record = win.getItem(cell.row);\r\n\r\n // if (record.loai_tbao != \"5\") {\r\n // if (record.trang_thai != 1) {\r\n // webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n // return;\r\n // }\r\n // }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n var filename =\r\n record.mltdiep == \"202\"\r\n ? \"202.xml\"\r\n : record.mltdiep == \"204\"\r\n ? \"204.xml\"\r\n : record.mltdiep == \"301\"\r\n ? \"301.xml\"\r\n : record.mltdiep == \"302\"\r\n ? \"302.xml\"\r\n : record.mltdiep == \"102\"\r\n ? \"102.xml\"\r\n : record.mltdiep == \"103\"\r\n ? \"103.xml\"\r\n : \"104.xml\";\r\n var url = app.config.host + \"/Invoice68/ExportXMLThongDiepCQT?id=\" + record.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, filename);\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n return false; // here it blocks the default behavior\r\n },\r\n\r\n InMau0405: function (event, cell, target) {\r\n var table = webix.$$(\"mau04_68\");\r\n var item = table.getItem(cell.row);\r\n\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMaThongDiepCQT?id=\" + item.id + \"&mltdiep=\" + item.mltdiep, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n on: {\r\n // onSubViewCreate: function (view, item) {\r\n // var subView = view;\r\n\r\n // if (subView != null) {\r\n // var tableDetail = webix.$$(\"mau04_68_chitiet\");\r\n // var url = app.config.host + \"/Invoice68/GetDataMau0405Detail?id=\" + item.id;\r\n // tableDetail.clearAll();\r\n // tableDetail.load(url);\r\n // }\r\n // },\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {},\r\n },\r\n columns: [\r\n // {\r\n // id: \"id\",\r\n // header: \"id\",\r\n // hidden: true,\r\n // },\r\n // {\r\n // template: \"{common.subrow()}\",\r\n // width: 50,\r\n // },\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"mltdiep\",\r\n header: [\r\n \"Mã loại thông điệp\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 200,\r\n },\r\n {\r\n id: \"mltdiep\",\r\n header: [\r\n \"Tên loại thông điệp\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 200,\r\n template: function (obj) {\r\n return obj.mltdiep == \"202\"\r\n ? \"Cấp mã hóa đơn\"\r\n : obj.mltdiep == \"204\"\r\n ? \"Kiểm tra dữ liệu hóa đơn\"\r\n : obj.mltdiep == \"301\"\r\n ? \"Xử lý hóa đơn sai sót\"\r\n : obj.mltdiep == \"302\"\r\n ? \"Rà soát hóa đơn\"\r\n : obj.mltdiep == \"102\"\r\n ? \"Tiếp nhận tờ khai ĐK/SD HDDT\"\r\n : obj.mltdiep == \"103\"\r\n ? \"Chấp nhận tờ khai ĐK/SD HDDT\"\r\n : \"Chấp nhận tờ khai ĐK/SD HDDT khi ủy nhiệm/nhận ủy nhiệm\";\r\n },\r\n },\r\n {\r\n id: \"mtdiep_cqt\",\r\n //header: [\"\", \"Mã thông điệp CQT\"],\r\n header: [\r\n \"Mã thông điệp CQT\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 450,\r\n },\r\n {\r\n id: \"Dowload0405\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n width: 120,\r\n template: function (obj) {\r\n return \" \";\r\n // if (obj.loai_tbao == \"5\") {\r\n // return \" \";\r\n // } else {\r\n // if (obj.trang_thai == 1) {\r\n // return \" \";\r\n // } else return \" \";\r\n // }\r\n },\r\n },\r\n {\r\n id: \"InMau0405\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.mltdiep != \"204\" && obj.mltdiep != \"202\") {\r\n return \" \";\r\n } else {\r\n return \" \";\r\n }\r\n },\r\n width: 120,\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n // height: 40,\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"mau04_68\");\r\n\r\n // $scope.on(app, \"dataChangedMau0405\", function (mode, item) {\r\n // // if (mode == 1) {\r\n // // table.add(item);\r\n // // }\r\n // // if (mode == 5) {\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n // // }\r\n // });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/78_duyethoadon_bienlai',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\", \"views/forms/68_huyhoadon\", \"views/forms/68_huyhoadon_1\", \"views/forms/68_hoadon_history\", \"views/commonHD\"], function (\r\n app,\r\n _,\r\n user,\r\n invoiceForms,\r\n huyhoadon,\r\n huyhoadon_1,\r\n hoadonHistory,\r\n commonHD\r\n) {\r\n \r\n var fm = function (number) {\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 0,\r\n });\r\n return k(number);\r\n };\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var op = [];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n data: [\r\n // {\r\n // id: \"huyhoadon\",\r\n // value: \"Hủy biên lai\",\r\n // },\r\n // {\r\n // id: \"huyhoadon2\",\r\n // value: \"Hủy biên lai có tạo mới\",\r\n // },\r\n // {\r\n // id: \"giaitrinh\",\r\n // value: \"Giải trình\",\r\n // },\r\n {\r\n id: \"notifyErrorInvoice\",\r\n value: \"Thông báo HĐĐT có sai sót\",\r\n },\r\n {\r\n id: \"replace_invoice\",\r\n value: \"Thay thế\",\r\n },\r\n {\r\n id: \"increase_change_invoice\",\r\n value: \"Điều chỉnh tăng\",\r\n },\r\n {\r\n id: \"reduce_change_invoice\",\r\n value: \"Điều chỉnh giảm\",\r\n },\r\n {\r\n id: \"info_change\",\r\n value: \"Điều chỉnh thông tin\",\r\n },\r\n {\r\n id: \"dowloadXml\",\r\n value: \"Tải XML\",\r\n },\r\n {\r\n id: \"dowloadXmlMessageHD\",\r\n value: \"Tải XML thông điệp gửi HĐ\",\r\n },\r\n // {\r\n // id: \"nhanExcel\",\r\n // value: \"Nhận Excel hàng loạt\",\r\n // },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n this.hide();\r\n if (record.id == \"nhanExcel\") {\r\n var table = $$(\"invoiceViews\");\r\n\r\n require([\"views/forms/uploadexcel\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id: \"EX00011\", filename: \"Nhan hang loat hoa don 68 (GTGT).xlsx\" });\r\n webix.$$(\"uploader\").hide();\r\n });\r\n }\r\n // console.log(record);\r\n if (record.id == \"huyhoadon\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"biên lai đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"huyhoadon2\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"biên lai đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnStep299\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // webix.$$(\"btnStep299\").define(\"hidden\", false);\r\n // webix.$$(\"btnStep2\").show();\r\n // webix.$$(\"btnStep299\").hide();\r\n // $$(\"btnHuyHDDT\").addView({ view:\"button\",label: \"Bước 2\" }, 1);\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"dowloadXml\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"biên lai đang ở trạng thái chờ ký/chờ gửi không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlInvoice.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"dowloadXmlMessageHD\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"biên lai chưa được gửi tới CQT, không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLThongDiepHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlThongDiepHoaDon.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"giaitrinh\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon != \"4\" && item.tthdon != \"0\") {\r\n webix.message(\"biên lai không ở trạng thái rà soát không thể lập giải trình !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n // webix.$$(\"tctbao\").setValue(2);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n this.hide();\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 2,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n\r\n // var fn = Function(\"_\", \"user\", item.on_click);\r\n // fn(_, user);\r\n }\r\n if (record.id == \"notifyErrorInvoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var cungshd = true;\r\n for (var k = 1; k <= data.length - 1; k++) {\r\n if (data[k][\"stbao\"] !== data[0][\"stbao\"]) {\r\n cungshd = false;\r\n break;\r\n }\r\n }\r\n if (cungshd === true) {\r\n var loai = 1;\r\n if (data[0][\"stbao\"] !== null) loai = 2;\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai == \"Chờ gửi\" || data[i].tthai == \"Chờ ký\" || data[i].tthai == \"Đã ký\") {\r\n webix.message(\"biên lai chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n if (data[i].ladhddt == undefined) {\r\n data[i].ladhddt = \"1\";\r\n }\r\n if (data[i].tctbao == undefined) {\r\n data[i].tctbao = \"1\";\r\n }\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n var tongquat = {\r\n so: data[0].stbao,\r\n ntbccqt: data[0].ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n data.forEach(function (item) {\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n //this.hide();\r\n win.show();\r\n });\r\n } else {\r\n webix.message(\"Các biên lai chọn phải có số thông báo giống nhau\", \"error\");\r\n }\r\n } else {\r\n var item = table.getSelectedItem();\r\n\r\n var loai = 1;\r\n if (item[\"stbao\"] !== null) loai = 2;\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\" || item.tthai == \"Đã ký\") {\r\n webix.message(\"biên lai chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.ladhddt == undefined) {\r\n item[\"ladhddt\"] = \"1\";\r\n }\r\n if (item.tctbao == undefined) {\r\n item[\"tctbao\"] = \"1\";\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n var tongquat = {\r\n so: item.stbao,\r\n ntbccqt: item.ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n\r\n //this.hide();\r\n win.show();\r\n }\r\n\r\n // var win = table.$scope.ui(huyhoadon.$ui);\r\n // huyhoadon.setEditMode(1);\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n // webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // this.hide();\r\n // win.show();\r\n }\r\n if (record.id == \"replace_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 2;\r\n item.tthdon_original = 2;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"increase_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 19;\r\n item.tthdon_original = 19;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n // var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n // tableDetail.clearAll();\r\n // tableDetail.refresh();\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"biên lai điều chỉnh cho biên lai số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n /*tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tthue\").editor = null;*/\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n\r\n //detailForm.show();\r\n }\r\n if (record.id == \"reduce_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 21;\r\n item.tthdon_original = 21;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.note = \"reduce_change_invoice\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"biên lai điều chỉnh cho biên lai số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"info_change\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 23;\r\n item.tthdon_original = 23;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"biên lai điều chỉnh cho biên lai số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n // tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n // tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n // tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tthue\").editor = null;\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n },\r\n },\r\n });\r\n\r\n webix.$$(\"title\").parse({ title: \"Danh sách biên lai chờ ký\", details: \"Danh sách biên lai chờ ký\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n { value: \"Thêm (F4)\", icon: \"far fa-plus\" },\r\n { value: \"Sửa (F3)\", icon: \"far fa-edit\" },\r\n { value: \"Xóa (F8)\", icon: \"far fa-trash\" },\r\n { $template: \"Separator\" },\r\n { value: \"Tải File đính kèm\", icon: \"fas fa-file-text-o\" },\r\n { value: \"Xem in\", icon: \"fas fa-print\" },\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm (F4)\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa (F3)\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa (F8)\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Tải File đính kèm\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n webix.message(\"Continue !\", \"debug\");\r\n //console.log(item);\r\n // if (item.inv_originalId != null && item.inv_originalId != undefined) {\r\n // var box = webix.modalbox({\r\n // title: \"Đang in biên lai\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // //var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n // //newWin.location = fileURL;\r\n // window.open(fileURL, '_blank');\r\n\r\n // }\r\n // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // // var file = new Blob([data], { type: 'application/pdf' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, '_blank');\r\n // // // webix.html.download(file, $$('tenfile').getValue());\r\n // // });\r\n // }\r\n // else {\r\n // webix.message(\"Không tồn tại biên lai gốc !\", \"error\");\r\n // return;\r\n // }\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function (e) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n e.preventDefault();\r\n e.stopPropagation();\r\n },\r\n },\r\n click: function () {\r\n console.log(\"click\");\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"In chuyển đổi\") + \"\",\r\n id: \"btnPrintConvert\",\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Ký biên lai\") + \"\",\r\n id: \"btnKyCXL\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Bạn chắc chắn muốn ký biên lai ?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n //check validate và return ra list hoadon_id\r\n var dsHoaDon = commonHD.validate_BL_ReturnListHdonKhongMaVaCoMaId();\r\n var lsCoMa = dsHoaDon[0];\r\n var lsKhongMa = dsHoaDon[1];\r\n\r\n // console.log(lsCoMa);\r\n // console.log(lsKhongMa);\r\n if (lsCoMa.length > 0 || lsKhongMa.length > 0) {\r\n var lsHodonId = [];\r\n lsHodonId.push(lsCoMa);\r\n lsHodonId.push(lsKhongMa);\r\n commonHD.ExcuteHoaDonForHasCodeAndNotHaveAnyCode(lsHodonId, false, true, \"TCTPhi\");\r\n }\r\n }\r\n },\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Kết xuất màn hình\") + \"\",\r\n id: \"btnXuatExel\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Kết xuất màn hình toàn bộ biên lai theo filter?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n width: 300,\r\n callback: function (res) {\r\n if (res) {\r\n var table = $$(\"invoiceViews\");\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var datafetch = table.config.datafetch;\r\n table.config.datafetch = table.data.count();\r\n var params = table.config.params;\r\n if (params != null && params != undefined) {\r\n params.count = table.data.count();\r\n }\r\n var columnlst = table.config.columns;\r\n var arrcolumn = [];\r\n\r\n for (var i = 2; i < columnlst.length; i++) {\r\n var exporttype = \"\";\r\n if (columnlst[i].columnType == \"character varying\" || columnlst[i].columnType == \"nvarchar\") {\r\n exporttype = \"string\";\r\n } else {\r\n exporttype = columnlst[i].columnType;\r\n }\r\n var item = {\r\n id: columnlst[i].id,\r\n header: columnlst[i].header[0][\"text\"],\r\n\r\n exportType: exporttype,\r\n };\r\n arrcolumn.push(item);\r\n }\r\n\r\n table.load(\r\n table.config.url,\r\n function () {\r\n webix.toExcel($$(\"invoiceViews\"), {\r\n columns: arrcolumn,\r\n rawValues: true,\r\n filename: \"DanhSachHoaDonFull\",\r\n });\r\n table.config.datafetch = datafetch;\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n params\r\n );\r\n }\r\n },\r\n });\r\n },\r\n },\r\n // Khong duoc xoa cai ngoac nhon nay\r\n {},\r\n ];\r\n var fm = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n });\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n //autowidth: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var daiKyHieu = \"\";\r\n //get count list combo ký hiệu\r\n //var countkyHieu = $$(\"kyhieu_id\") != undefined ? $$(\"kyhieu_id\").getPopup().getList().serialize().length : 0;\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDanhSachChoKy\";\r\n\r\n var table = $$(\"invoiceViews\");\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n table.define(\"params\", params);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n url = url + \"&tlbparam=null&tthai=Chờ ký&loaihd=2\";\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n if (id.column == \"ten_loai\") {\r\n //webix.confirm()\r\n //webix.message(\"Continue Dowloading ... !\", \"debug\");\r\n }\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n // onItemDblClick: function (id, e, node) {\r\n // var btnEdit = $$(\"btnEdit\");\r\n // btnEdit.callEvent(\"onClick\");\r\n // },\r\n onAfterLoad: function () {\r\n // webix.delay(function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n // }, this);\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n },\r\n {\r\n id: \"stt\",\r\n header: [\"STT\"],\r\n //header: \"\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"nvarchar\",\r\n //css: { \"line-height\": \"20px !important\", \"height\": \"63px !important\"}\r\n },\r\n {\r\n id: \"ttthdon\",\r\n width: 200,\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"serverMultiSelectFilter\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00502\",\r\n },\r\n ],\r\n template: function (obj, common) {\r\n console.log(obj.tthdon);\r\n return \"\" + obj.ttthdon + \"\";\r\n },\r\n },\r\n {\r\n id: \"tthai\",\r\n header: [\"Trạng thái biên lai\", { content: \"serverMultiSelectFilter\", options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00504\" }],\r\n width: 200,\r\n },\r\n //\r\n // {\r\n // id: \"btnMessagetn\",\r\n // header: [\"
Lịch sử xử lý
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // template: function (obj) {\r\n // return \" \";\r\n // },\r\n // width: 180,\r\n // },\r\n // {\r\n // id: \"issendmail\",\r\n // header: [\"
Gửi Email
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // checkValue: true, uncheckValue: false,\r\n // template: \"{common.rcheckbox()}\"\r\n // },\r\n // {\r\n // id: \"error_status\",\r\n // header: [\"
Có lỗi/Không có lỗi
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // template: function (obj) {\r\n // if (obj.error_status == \"1\") {\r\n // return \"Có lỗi \";\r\n // } else {\r\n // return \"\";\r\n // }\r\n // }\r\n // },\r\n {\r\n id: \"nlap\",\r\n header: [\"Ngày biên lai\", { content: \"serverDateRangeFilter\" }],\r\n width: 120,\r\n css: { \"text-align\": \"center\" },\r\n //format:webix.i18n.dateFormatStr\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n // template: function (obj, common) {\r\n // if(obj.tthai!=\"Chờ ký\"){\r\n // return obj.nlap=\"\";\r\n // }\r\n // else{\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // var text = removeTimeZoneT(obj.nlap);\r\n // return format(text);\r\n // }\r\n // },\r\n columnType: \"datetime\",\r\n },\r\n // {\r\n // id: \"nky\",\r\n // header: [\"
Ngày ký
\", { content: \"serverDateRangeFilter\" }],\r\n // width: 150,\r\n // css: { \"text-align\": \"center\" },\r\n // //format:webix.i18n.dateFormatStr\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // columnType: \"datetime\",\r\n // },\r\n {\r\n id: \"khieu\",\r\n header: [\"Ký hiệu\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"nvarchar\",\r\n },\r\n { id: \"shdon\", header: [\"Số biên lai\", { content: \"textFilter\" }], width: 100, columnType: \"numeric\", css: { \"text-align\": \"center\" } },\r\n\r\n { id: \"mst\", header: [\"Mã số thuế\", { content: \"textFilter\" }], width: 120, columnType: \"nvarchar\" },\r\n { id: \"mdvi\", header: [\"Đơn vị quản lý\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n { id: \"ten_str\", header: [\"Tên đơn vị/ Tên người mua\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n {\r\n id: \"tgtttbso_last\",\r\n header: [\"Số thuế thu nhập\", { content: \"textFilter\" }],\r\n width: 150,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \".\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \",\",\r\n // decimalSize: 0\r\n // }),\r\n css: { \"text-align\": \"right\" },\r\n template: function (obj, common) {\r\n return obj.tgtttbso_last == null ? 0 : fm(obj.tgtttbso_last);\r\n },\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"nglap\",\r\n header: [\"Người lập\", { content: \"textFilter\" }],\r\n width: 200,\r\n columnType: \"nvarchar\",\r\n },\r\n // { id: \"ten_loai\", header: [\"
Tên loại HĐ
\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\" }\r\n ],\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ ký\", details: \"Danh sách chờ ký\" });\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n if (editmode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (editmode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n // var table = $$(\"invoiceViews\");\r\n // var url = {\r\n // $proxy: true,\r\n // load: function (view, callback, params) {\r\n // console.log(view.config);\r\n // console.log(callback);\r\n // console.log(params);\r\n // /*var windowno = app.path[1].params[0];\r\n // var url = app.config.host + \"/System/GetDataByWindowNo?window_id=\" + windowno;\r\n\r\n // if (params == null) {\r\n // url = url + \"&start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n // }\r\n // else {\r\n // url = url + \"&start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n // if (params.filter != null) {\r\n // var array = [];\r\n\r\n // for (var property in params.filter) {\r\n\r\n // var column = view.getColumnConfig(property);\r\n\r\n // if (column !== undefined) {\r\n // var item = {\r\n // columnName: property,\r\n // columnType: column.columnType,\r\n // value: params.filter[property]\r\n // };\r\n\r\n // array.push(item);\r\n // }\r\n // }\r\n\r\n // //console.log(JSON.stringify(array));\r\n // if (array.length > 0) {\r\n // url = url + \"&filter=\" + JSON.stringify(array);\r\n // }\r\n // else {\r\n // url = url + \"&filter=null\";\r\n // }\r\n\r\n // }\r\n // else {\r\n // url = url + \"&filter=null\";\r\n // }\r\n // }\r\n\r\n // if (view.config.infoparam != null) {\r\n // url = url + \"&infoparam=\" + JSON.stringify(view.config.infoparam);\r\n // }\r\n // else {\r\n // url = url + \"&infoparam=null\";\r\n // }\r\n\r\n // var tlbParams = $$(\"tlbParams\");\r\n\r\n // if (tlbParams !== undefined) {\r\n // var childViews = tlbParams.getChildViews();\r\n\r\n // var parameters = [];\r\n\r\n // for (var i = 0; i < childViews.length; i++) {\r\n // var child = childViews[i];\r\n\r\n // var id = child.config.id;\r\n // var value_field = child.config.value_field;\r\n\r\n // var item = {\r\n // columnName: value_field,\r\n // value: $$(id).getValue()\r\n // };\r\n\r\n // parameters.push(item);\r\n // }\r\n\r\n // url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n\r\n // }\r\n // else {\r\n // url = url + \"&tlbparam=null\";\r\n // }*/\r\n\r\n // //console.log(url);\r\n\r\n // /* webix.ajax().bind(view)\r\n // .get(url,function(text){\r\n // var json =JSON.parse(text);\r\n\r\n // this.clearAll();\r\n\r\n // if (!json.hasOwnProperty(\"error\")){\r\n // this.parse(json.data,\"json\");\r\n // }\r\n // }); */\r\n\r\n // //webix.ajax(url, callback, view);\r\n\r\n // }\r\n // };\r\n\r\n // table.define(\"url\", url);\r\n },\r\n };\r\n});\r\n\ndefine('views/78_duyethoadon_choduyet_bienlai',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\", \"views/forms/68_huyhoadon\", \"views/forms/68_huyhoadon_1\", \"views/forms/68_hoadon_history\", \"views/commonHD\"], function (\r\n app,\r\n _,\r\n user,\r\n invoiceForms,\r\n huyhoadon,\r\n huyhoadon_1,\r\n hoadonHistory,\r\n commonHD\r\n) {\r\n \r\n var fm = function (number) {\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 0,\r\n });\r\n return k(number);\r\n };\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var op = [];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n data: [\r\n // {\r\n // id: \"huyhoadon\",\r\n // value: \"Hủy biên lai\",\r\n // },\r\n // {\r\n // id: \"huyhoadon2\",\r\n // value: \"Hủy biên lai có tạo mới\",\r\n // },\r\n // {\r\n // id: \"giaitrinh\",\r\n // value: \"Giải trình\",\r\n // },\r\n {\r\n id: \"notifyErrorInvoice\",\r\n value: \"Thông báo HĐĐT có sai sót\",\r\n },\r\n {\r\n id: \"replace_invoice\",\r\n value: \"Thay thế\",\r\n },\r\n {\r\n id: \"increase_change_invoice\",\r\n value: \"Điều chỉnh tăng\",\r\n },\r\n {\r\n id: \"reduce_change_invoice\",\r\n value: \"Điều chỉnh giảm\",\r\n },\r\n {\r\n id: \"info_change\",\r\n value: \"Điều chỉnh thông tin\",\r\n },\r\n {\r\n id: \"dowloadXml\",\r\n value: \"Tải XML\",\r\n },\r\n {\r\n id: \"dowloadXmlMessageHD\",\r\n value: \"Tải XML thông điệp gửi HĐ\",\r\n },\r\n // {\r\n // id: \"nhanExcel\",\r\n // value: \"Nhận Excel hàng loạt\",\r\n // },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n this.hide();\r\n if (record.id == \"nhanExcel\") {\r\n var table = $$(\"invoiceViews\");\r\n\r\n require([\"views/forms/uploadexcel\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id: \"EX00011\", filename: \"Nhan hang loat hoa don 68 (GTGT).xlsx\" });\r\n webix.$$(\"uploader\").hide();\r\n });\r\n }\r\n // console.log(record);\r\n if (record.id == \"huyhoadon\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"biên lai đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"huyhoadon2\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"biên lai đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnStep299\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // webix.$$(\"btnStep299\").define(\"hidden\", false);\r\n // webix.$$(\"btnStep2\").show();\r\n // webix.$$(\"btnStep299\").hide();\r\n // $$(\"btnHuyHDDT\").addView({ view:\"button\",label: \"Bước 2\" }, 1);\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"dowloadXml\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"biên lai đang ở trạng thái chờ ký/chờ gửi không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlInvoice.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"dowloadXmlMessageHD\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"biên lai chưa được gửi tới CQT, không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLThongDiepHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlThongDiepHoaDon.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"giaitrinh\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon != \"4\" && item.tthdon != \"0\") {\r\n webix.message(\"biên lai không ở trạng thái rà soát không thể lập giải trình !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n // webix.$$(\"tctbao\").setValue(2);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n this.hide();\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 2,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n\r\n // var fn = Function(\"_\", \"user\", item.on_click);\r\n // fn(_, user);\r\n }\r\n if (record.id == \"notifyErrorInvoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var cungshd = true;\r\n for (var k = 1; k <= data.length - 1; k++) {\r\n if (data[k][\"stbao\"] !== data[0][\"stbao\"]) {\r\n cungshd = false;\r\n break;\r\n }\r\n }\r\n if (cungshd === true) {\r\n var loai = 1;\r\n if (data[0][\"stbao\"] !== null) loai = 2;\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai == \"Chờ gửi\" || data[i].tthai == \"Chờ ký\" || data[i].tthai == \"Đã ký\") {\r\n webix.message(\"biên lai chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n if (data[i].ladhddt == undefined) {\r\n data[i].ladhddt = \"1\";\r\n }\r\n if (data[i].tctbao == undefined) {\r\n data[i].tctbao = \"1\";\r\n }\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n var tongquat = {\r\n so: data[0].stbao,\r\n ntbccqt: data[0].ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n data.forEach(function (item) {\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n //this.hide();\r\n win.show();\r\n });\r\n } else {\r\n webix.message(\"Các biên lai chọn phải có số thông báo giống nhau\", \"error\");\r\n }\r\n } else {\r\n var item = table.getSelectedItem();\r\n\r\n var loai = 1;\r\n if (item[\"stbao\"] !== null) loai = 2;\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\" || item.tthai == \"Đã ký\") {\r\n webix.message(\"biên lai chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.ladhddt == undefined) {\r\n item[\"ladhddt\"] = \"1\";\r\n }\r\n if (item.tctbao == undefined) {\r\n item[\"tctbao\"] = \"1\";\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n var tongquat = {\r\n so: item.stbao,\r\n ntbccqt: item.ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n\r\n //this.hide();\r\n win.show();\r\n }\r\n\r\n // var win = table.$scope.ui(huyhoadon.$ui);\r\n // huyhoadon.setEditMode(1);\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n // webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // this.hide();\r\n // win.show();\r\n }\r\n if (record.id == \"replace_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 2;\r\n item.tthdon_original = 2;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"increase_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 19;\r\n item.tthdon_original = 19;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n // var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n // tableDetail.clearAll();\r\n // tableDetail.refresh();\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"biên lai điều chỉnh cho biên lai số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n /*tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tthue\").editor = null;*/\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n\r\n //detailForm.show();\r\n }\r\n if (record.id == \"reduce_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 21;\r\n item.tthdon_original = 21;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.note = \"reduce_change_invoice\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"biên lai điều chỉnh cho biên lai số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"info_change\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 23;\r\n item.tthdon_original = 23;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"biên lai điều chỉnh cho biên lai số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n // tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n // tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n // tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tthue\").editor = null;\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n },\r\n },\r\n });\r\n\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ ký\", details: \"Danh sách biên lai chờ ký\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n { value: \"Thêm (F4)\", icon: \"far fa-plus\" },\r\n { value: \"Sửa (F3)\", icon: \"far fa-edit\" },\r\n { value: \"Xóa (F8)\", icon: \"far fa-trash\" },\r\n { $template: \"Separator\" },\r\n { value: \"Tải File đính kèm\", icon: \"fas fa-file-text-o\" },\r\n { value: \"Xem in\", icon: \"fas fa-print\" },\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm (F4)\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa (F3)\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa (F8)\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Tải File đính kèm\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n webix.message(\"Continue !\", \"debug\");\r\n //console.log(item);\r\n // if (item.inv_originalId != null && item.inv_originalId != undefined) {\r\n // var box = webix.modalbox({\r\n // title: \"Đang in biên lai\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // //var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n // //newWin.location = fileURL;\r\n // window.open(fileURL, '_blank');\r\n\r\n // }\r\n // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // // var file = new Blob([data], { type: 'application/pdf' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, '_blank');\r\n // // // webix.html.download(file, $$('tenfile').getValue());\r\n // // });\r\n // }\r\n // else {\r\n // webix.message(\"Không tồn tại biên lai gốc !\", \"error\");\r\n // return;\r\n // }\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Duyệt\") + \"\",\r\n id: \"btnKyCXL\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Bạn chắc chắn muốn duyệt biên lai ?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n //check validate và return ra list hoadon_id\r\n var dsHoaDon = commonHD.GetBienLaiChon();\r\n var lsHodonId = [];\r\n\r\n dsHoaDon.forEach(function (p) {\r\n lsHodonId.push(p.hdon_id);\r\n });\r\n\r\n commonHD.DuyetHoaDon(lsHodonId, \"Chờ duyệt\");\r\n }\r\n },\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Kết xuất màn hình\") + \"\",\r\n id: \"btnXuatExel\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Kết xuất màn hình toàn bộ biên lai theo filter?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n width: 300,\r\n callback: function (res) {\r\n if (res) {\r\n var table = $$(\"invoiceViews\");\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var datafetch = table.config.datafetch;\r\n table.config.datafetch = table.data.count();\r\n var params = table.config.params;\r\n if (params != null && params != undefined) {\r\n params.count = table.data.count();\r\n }\r\n var columnlst = table.config.columns;\r\n var arrcolumn = [];\r\n\r\n for (var i = 2; i < columnlst.length; i++) {\r\n var exporttype = \"\";\r\n if (columnlst[i].columnType == \"character varying\" || columnlst[i].columnType == \"nvarchar\") {\r\n exporttype = \"string\";\r\n } else {\r\n exporttype = columnlst[i].columnType;\r\n }\r\n var item = {\r\n id: columnlst[i].id,\r\n header: columnlst[i].header[0][\"text\"],\r\n\r\n exportType: exporttype,\r\n };\r\n arrcolumn.push(item);\r\n }\r\n\r\n table.load(\r\n table.config.url,\r\n function () {\r\n webix.toExcel($$(\"invoiceViews\"), {\r\n columns: arrcolumn,\r\n rawValues: true,\r\n filename: \"DanhSachHoaDonFull\",\r\n });\r\n table.config.datafetch = datafetch;\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n params\r\n );\r\n }\r\n },\r\n });\r\n },\r\n },\r\n // Khong duoc xoa cai ngoac nhon nay\r\n {},\r\n {},\r\n {},\r\n {},\r\n ];\r\n var fm = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n });\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n //autowidth: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var daiKyHieu = \"\";\r\n //get count list combo ký hiệu\r\n //var countkyHieu = $$(\"kyhieu_id\") != undefined ? $$(\"kyhieu_id\").getPopup().getList().serialize().length : 0;\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDanhSachChoKy\";\r\n var table = $$(\"invoiceViews\");\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n table.define(\"params\", params);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n url = url + \"&tlbparam=null&tthai=Chờ duyệt&loaihd=2\";\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n if (id.column == \"ten_loai\") {\r\n //webix.confirm()\r\n //webix.message(\"Continue Dowloading ... !\", \"debug\");\r\n }\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n // onItemDblClick: function (id, e, node) {\r\n // var btnEdit = $$(\"btnEdit\");\r\n // btnEdit.callEvent(\"onClick\");\r\n // },\r\n onAfterLoad: function () {\r\n // webix.delay(function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n // }, this);\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n },\r\n {\r\n id: \"stt\",\r\n header: [\"STT\"],\r\n //header: \"\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"nvarchar\",\r\n //css: { \"line-height\": \"20px !important\", \"height\": \"63px !important\"}\r\n },\r\n {\r\n id: \"ttthdon\",\r\n width: 200,\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"serverMultiSelectFilter\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00502\",\r\n },\r\n ],\r\n template: function (obj, common) {\r\n console.log(obj.tthdon);\r\n return \"\" + obj.ttthdon + \"\";\r\n },\r\n },\r\n {\r\n id: \"tthai\",\r\n header: [\"Trạng thái biên lai\", { content: \"serverMultiSelectFilter\", options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00504\" }],\r\n width: 200,\r\n },\r\n //\r\n // {\r\n // id: \"btnMessagetn\",\r\n // header: [\"
Lịch sử xử lý
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // template: function (obj) {\r\n // return \" \";\r\n // },\r\n // width: 180,\r\n // },\r\n // {\r\n // id: \"issendmail\",\r\n // header: [\"
Gửi Email
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // checkValue: true, uncheckValue: false,\r\n // template: \"{common.rcheckbox()}\"\r\n // },\r\n // {\r\n // id: \"error_status\",\r\n // header: [\"
Có lỗi/Không có lỗi
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // template: function (obj) {\r\n // if (obj.error_status == \"1\") {\r\n // return \"Có lỗi \";\r\n // } else {\r\n // return \"\";\r\n // }\r\n // }\r\n // },\r\n {\r\n id: \"nlap\",\r\n header: [\"Ngày biên lai\", { content: \"serverDateRangeFilter\" }],\r\n width: 120,\r\n css: { \"text-align\": \"center\" },\r\n //format:webix.i18n.dateFormatStr\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n // template: function (obj, common) {\r\n // if(obj.tthai!=\"Chờ ký\"){\r\n // return obj.nlap=\"\";\r\n // }\r\n // else{\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // var text = removeTimeZoneT(obj.nlap);\r\n // return format(text);\r\n // }\r\n // },\r\n columnType: \"datetime\",\r\n },\r\n // {\r\n // id: \"nky\",\r\n // header: [\"
Ngày ký
\", { content: \"serverDateRangeFilter\" }],\r\n // width: 150,\r\n // css: { \"text-align\": \"center\" },\r\n // //format:webix.i18n.dateFormatStr\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // columnType: \"datetime\",\r\n // },\r\n {\r\n id: \"khieu\",\r\n header: [\"Ký hiệu\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"nvarchar\",\r\n },\r\n { id: \"shdon\", header: [\"Số biên lai\", { content: \"textFilter\" }], width: 100, columnType: \"numeric\", css: { \"text-align\": \"center\" } },\r\n\r\n { id: \"mst\", header: [\"Mã số thuế\", { content: \"textFilter\" }], width: 120, columnType: \"nvarchar\" },\r\n { id: \"mdvi\", header: [\"Đơn vị quản lý\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n { id: \"ten_str\", header: [\"Tên đơn vị/ Tên người mua\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n {\r\n id: \"tgtttbso_last\",\r\n header: [\"Số thuế thu nhập\", { content: \"textFilter\" }],\r\n width: 150,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \".\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \",\",\r\n // decimalSize: 0\r\n // }),\r\n css: { \"text-align\": \"right\" },\r\n template: function (obj, common) {\r\n return obj.tgtttbso_last == null ? 0 : fm(obj.tgtttbso_last);\r\n },\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"nglap\",\r\n header: [\"Người lập\", { content: \"textFilter\" }],\r\n width: 200,\r\n columnType: \"nvarchar\",\r\n },\r\n // { id: \"ten_loai\", header: [\"
Tên loại HĐ
\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\" }\r\n ],\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv * 1 != $$(\"pagerA\").config.size) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ duyệt\", details: \"Danh sách chờ duyệt\" });\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n if (editmode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (editmode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/78_duyethoadon_choduyet_tncn',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\", \"views/forms/68_huyhoadon\", \"views/forms/68_huyhoadon_1\", \"views/forms/68_hoadon_history\", \"views/commonHD\"], function (\r\n app,\r\n _,\r\n user,\r\n invoiceForms,\r\n huyhoadon,\r\n huyhoadon_1,\r\n hoadonHistory,\r\n commonHD\r\n) {\r\n \r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var op = [];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n data: [\r\n // {\r\n // id: \"huyhoadon\",\r\n // value: \"Hủy chứng từ\",\r\n // },\r\n // {\r\n // id: \"huyhoadon2\",\r\n // value: \"Hủy chứng từ có tạo mới\",\r\n // },\r\n // {\r\n // id: \"giaitrinh\",\r\n // value: \"Giải trình\",\r\n // },\r\n {\r\n id: \"notifyErrorInvoice\",\r\n value: \"Thông báo HĐĐT có sai sót\",\r\n },\r\n {\r\n id: \"replace_invoice\",\r\n value: \"Thay thế\",\r\n },\r\n {\r\n id: \"increase_change_invoice\",\r\n value: \"Điều chỉnh tăng\",\r\n },\r\n {\r\n id: \"reduce_change_invoice\",\r\n value: \"Điều chỉnh giảm\",\r\n },\r\n {\r\n id: \"info_change\",\r\n value: \"Điều chỉnh thông tin\",\r\n },\r\n {\r\n id: \"dowloadXml\",\r\n value: \"Tải XML\",\r\n },\r\n {\r\n id: \"dowloadXmlMessageHD\",\r\n value: \"Tải XML thông điệp gửi HĐ\",\r\n },\r\n // {\r\n // id: \"nhanExcel\",\r\n // value: \"Nhận Excel hàng loạt\",\r\n // },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n this.hide();\r\n if (record.id == \"nhanExcel\") {\r\n var table = $$(\"invoiceViews\");\r\n\r\n require([\"views/forms/uploadexcel\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id: \"EX00011\", filename: \"Nhan hang loat hoa don 68 (GTGT).xlsx\" });\r\n webix.$$(\"uploader\").hide();\r\n });\r\n }\r\n // console.log(record);\r\n if (record.id == \"huyhoadon\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"chứng từ đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"chứng từ đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"huyhoadon2\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"chứng từ đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"chứng từ đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnStep299\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // webix.$$(\"btnStep299\").define(\"hidden\", false);\r\n // webix.$$(\"btnStep2\").show();\r\n // webix.$$(\"btnStep299\").hide();\r\n // $$(\"btnHuyHDDT\").addView({ view:\"button\",label: \"Bước 2\" }, 1);\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"dowloadXml\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"chứng từ đang ở trạng thái chờ ký/chờ gửi không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlInvoice.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"dowloadXmlMessageHD\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"chứng từ chưa được gửi tới CQT, không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLThongDiepHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlThongDiepHoaDon.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"giaitrinh\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon != \"4\" && item.tthdon != \"0\") {\r\n webix.message(\"chứng từ không ở trạng thái rà soát không thể lập giải trình !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n // webix.$$(\"tctbao\").setValue(2);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n this.hide();\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 2,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n\r\n // var fn = Function(\"_\", \"user\", item.on_click);\r\n // fn(_, user);\r\n }\r\n if (record.id == \"notifyErrorInvoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var cungshd = true;\r\n for (var k = 1; k <= data.length - 1; k++) {\r\n if (data[k][\"stbao\"] !== data[0][\"stbao\"]) {\r\n cungshd = false;\r\n break;\r\n }\r\n }\r\n if (cungshd === true) {\r\n var loai = 1;\r\n if (data[0][\"stbao\"] !== null) loai = 2;\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai == \"Chờ gửi\" || data[i].tthai == \"Chờ ký\" || data[i].tthai == \"Đã ký\") {\r\n webix.message(\"chứng từ chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n if (data[i].ladhddt == undefined) {\r\n data[i].ladhddt = \"1\";\r\n }\r\n if (data[i].tctbao == undefined) {\r\n data[i].tctbao = \"1\";\r\n }\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n var tongquat = {\r\n so: data[0].stbao,\r\n ntbccqt: data[0].ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n data.forEach(function (item) {\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n //this.hide();\r\n win.show();\r\n });\r\n } else {\r\n webix.message(\"Các chứng từ chọn phải có số thông báo giống nhau\", \"error\");\r\n }\r\n } else {\r\n var item = table.getSelectedItem();\r\n\r\n var loai = 1;\r\n if (item[\"stbao\"] !== null) loai = 2;\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\" || item.tthai == \"Đã ký\") {\r\n webix.message(\"chứng từ chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.ladhddt == undefined) {\r\n item[\"ladhddt\"] = \"1\";\r\n }\r\n if (item.tctbao == undefined) {\r\n item[\"tctbao\"] = \"1\";\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n var tongquat = {\r\n so: item.stbao,\r\n ntbccqt: item.ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n\r\n //this.hide();\r\n win.show();\r\n }\r\n\r\n // var win = table.$scope.ui(huyhoadon.$ui);\r\n // huyhoadon.setEditMode(1);\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n // webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // this.hide();\r\n // win.show();\r\n }\r\n if (record.id == \"replace_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn chứng từ !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"chứng từ chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 2;\r\n item.tthdon_original = 2;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"increase_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn chứng từ !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"chứng từ chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 19;\r\n item.tthdon_original = 19;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n // var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n // tableDetail.clearAll();\r\n // tableDetail.refresh();\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"chứng từ điều chỉnh cho chứng từ số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n /*tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tthue\").editor = null;*/\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n\r\n //detailForm.show();\r\n }\r\n if (record.id == \"reduce_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn chứng từ !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"chứng từ chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 21;\r\n item.tthdon_original = 21;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.note = \"reduce_change_invoice\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"chứng từ điều chỉnh cho chứng từ số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"info_change\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn chứng từ !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"chứng từ chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 23;\r\n item.tthdon_original = 23;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"chứng từ điều chỉnh cho chứng từ số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n // tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n // tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n // tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tthue\").editor = null;\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n },\r\n },\r\n });\r\n\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ ký\", details: \"Danh sách chứng từ chờ ký\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n { value: \"Thêm (F4)\", icon: \"far fa-plus\" },\r\n { value: \"Sửa (F3)\", icon: \"far fa-edit\" },\r\n { value: \"Xóa (F8)\", icon: \"far fa-trash\" },\r\n { $template: \"Separator\" },\r\n { value: \"Tải File đính kèm\", icon: \"fas fa-file-text-o\" },\r\n { value: \"Xem in\", icon: \"fas fa-print\" },\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm (F4)\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa (F3)\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa (F8)\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Tải File đính kèm\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ !\", \"error\");\r\n return;\r\n }\r\n webix.message(\"Continue !\", \"debug\");\r\n //console.log(item);\r\n // if (item.inv_originalId != null && item.inv_originalId != undefined) {\r\n // var box = webix.modalbox({\r\n // title: \"Đang in chứng từ\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // //var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n // //newWin.location = fileURL;\r\n // window.open(fileURL, '_blank');\r\n\r\n // }\r\n // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // // var file = new Blob([data], { type: 'application/pdf' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, '_blank');\r\n // // // webix.html.download(file, $$('tenfile').getValue());\r\n // // });\r\n // }\r\n // else {\r\n // webix.message(\"Không tồn tại chứng từ gốc !\", \"error\");\r\n // return;\r\n // }\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn chứng từ cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in chứng từ ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"chứng từ điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Duyệt\") + \"\",\r\n id: \"btnKyCXL\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Bạn chắc chắn muốn duyệt chứng từ ?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n //check validate và return ra list hoadon_id\r\n var dsHoaDon = commonHD.GetHoaDonChon();\r\n var lsHodonId = [];\r\n\r\n dsHoaDon.forEach(function (p) {\r\n lsHodonId.push(p.hdon_id);\r\n });\r\n\r\n commonHD.DuyetHoaDon(lsHodonId, \"Chờ duyệt\");\r\n }\r\n },\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Kết xuất màn hình\") + \"\",\r\n id: \"btnXuatExel\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Kết xuất màn hình toàn bộ chứng từ theo filter?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n width: 300,\r\n callback: function (res) {\r\n if (res) {\r\n var table = $$(\"invoiceViews\");\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var datafetch = table.config.datafetch;\r\n table.config.datafetch = table.data.count();\r\n var params = table.config.params;\r\n if (params != null && params != undefined) {\r\n params.count = table.data.count();\r\n }\r\n var columnlst = table.config.columns;\r\n var arrcolumn = [];\r\n\r\n for (var i = 2; i < columnlst.length; i++) {\r\n var exporttype = \"\";\r\n if (columnlst[i].columnType == \"character varying\" || columnlst[i].columnType == \"nvarchar\") {\r\n exporttype = \"string\";\r\n } else {\r\n exporttype = columnlst[i].columnType;\r\n }\r\n var item = {\r\n id: columnlst[i].id,\r\n header: columnlst[i].header[0][\"text\"],\r\n\r\n exportType: exporttype,\r\n };\r\n arrcolumn.push(item);\r\n }\r\n\r\n table.load(\r\n table.config.url,\r\n function () {\r\n webix.toExcel($$(\"invoiceViews\"), {\r\n columns: arrcolumn,\r\n rawValues: true,\r\n filename: \"DanhSachHoaDonFull\",\r\n });\r\n table.config.datafetch = datafetch;\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n params\r\n );\r\n }\r\n },\r\n });\r\n },\r\n },\r\n // Khong duoc xoa cai ngoac nhon nay\r\n {},\r\n {},\r\n {},\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n //autowidth: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var daiKyHieu = \"\";\r\n //get count list combo ký hiệu\r\n //var countkyHieu = $$(\"kyhieu_id\") != undefined ? $$(\"kyhieu_id\").getPopup().getList().serialize().length : 0;\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDanhSachChoKy\";\r\n var table = $$(\"invoiceViews\");\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n table.define(\"params\", params);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n url = url + \"&tlbparam=null&tthai=Chờ duyệt&loaihd=3\";\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n if (id.column == \"ten_loai\") {\r\n //webix.confirm()\r\n //webix.message(\"Continue Dowloading ... !\", \"debug\");\r\n }\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n // onItemDblClick: function (id, e, node) {\r\n // var btnEdit = $$(\"btnEdit\");\r\n // btnEdit.callEvent(\"onClick\");\r\n // },\r\n onAfterLoad: function () {\r\n // webix.delay(function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n // }, this);\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n },\r\n {\r\n id: \"stt\",\r\n header: [\"STT\"],\r\n //header: \"\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"nvarchar\",\r\n //css: { \"line-height\": \"20px !important\", \"height\": \"63px !important\"}\r\n },\r\n {\r\n id: \"ttthdon\",\r\n width: 200,\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"serverMultiSelectFilter\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00502\",\r\n },\r\n ],\r\n template: function (obj, common) {\r\n console.log(obj.tthdon);\r\n return \"\" + obj.ttthdon + \"\";\r\n },\r\n },\r\n {\r\n id: \"tthai\",\r\n header: [\"Trạng thái chứng từ\", { content: \"serverMultiSelectFilter\", options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00504\" }],\r\n width: 200,\r\n },\r\n //\r\n // {\r\n // id: \"btnMessagetn\",\r\n // header: [\"
Lịch sử xử lý
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // template: function (obj) {\r\n // return \" \";\r\n // },\r\n // width: 180,\r\n // },\r\n // {\r\n // id: \"issendmail\",\r\n // header: [\"
Gửi Email
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // checkValue: true, uncheckValue: false,\r\n // template: \"{common.rcheckbox()}\"\r\n // },\r\n // {\r\n // id: \"error_status\",\r\n // header: [\"
Có lỗi/Không có lỗi
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // template: function (obj) {\r\n // if (obj.error_status == \"1\") {\r\n // return \"Có lỗi \";\r\n // } else {\r\n // return \"\";\r\n // }\r\n // }\r\n // },\r\n {\r\n id: \"nlap\",\r\n header: [\"Ngày chứng từ\", { content: \"serverDateRangeFilter\" }],\r\n width: 120,\r\n css: { \"text-align\": \"center\" },\r\n //format:webix.i18n.dateFormatStr\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n // template: function (obj, common) {\r\n // if(obj.tthai!=\"Chờ ký\"){\r\n // return obj.nlap=\"\";\r\n // }\r\n // else{\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // var text = removeTimeZoneT(obj.nlap);\r\n // return format(text);\r\n // }\r\n // },\r\n columnType: \"datetime\",\r\n },\r\n // {\r\n // id: \"nky\",\r\n // header: [\"
Ngày ký
\", { content: \"serverDateRangeFilter\" }],\r\n // width: 150,\r\n // css: { \"text-align\": \"center\" },\r\n // //format:webix.i18n.dateFormatStr\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // columnType: \"datetime\",\r\n // },\r\n {\r\n id: \"khieu\",\r\n header: [\"Ký hiệu\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"nvarchar\",\r\n },\r\n { id: \"shdon\", header: [\"Số chứng từ\", { content: \"textFilter\" }], width: 100, columnType: \"numeric\", css: { \"text-align\": \"center\" } },\r\n\r\n { id: \"mst\", header: [\"Mã số thuế\", { content: \"textFilter\" }], width: 120, columnType: \"nvarchar\" },\r\n { id: \"mdvi\", header: [\"Đơn vị quản lý\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n { id: \"ten_str\", header: [\"Tên đơn vị/ Tên người mua\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n {\r\n id: \"tgtttbso_last\",\r\n header: [\"Số thuế thu nhập\", { content: \"textFilter\" }],\r\n width: 150,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \".\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \",\",\r\n // decimalSize: 0\r\n // }),\r\n css: { \"text-align\": \"right\" },\r\n template: function (obj, common) {\r\n return obj.tgtttbso_last == null ? 0 : fm(obj.tgtttbso_last);\r\n },\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"nglap\",\r\n header: [\"Người lập\", { content: \"textFilter\" }],\r\n width: 200,\r\n columnType: \"nvarchar\",\r\n },\r\n // { id: \"ten_loai\", header: [\"
Tên loại HĐ
\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\" }\r\n ],\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv * 1 != $$(\"pagerA\").config.size) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ duyệt\", details: \"Danh sách chờ duyệt\" });\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n if (editmode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (editmode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/78_duyethoadon_choduyet',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\", \"views/forms/68_huyhoadon\", \"views/forms/68_huyhoadon_1\", \"views/forms/68_hoadon_history\", \"views/commonHD\"], function (\r\n app,\r\n _,\r\n user,\r\n invoiceForms,\r\n huyhoadon,\r\n huyhoadon_1,\r\n hoadonHistory,\r\n commonHD\r\n) {\r\n \r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var op = [];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n data: [\r\n // {\r\n // id: \"huyhoadon\",\r\n // value: \"Hủy hóa đơn\",\r\n // },\r\n // {\r\n // id: \"huyhoadon2\",\r\n // value: \"Hủy hóa đơn có tạo mới\",\r\n // },\r\n // {\r\n // id: \"giaitrinh\",\r\n // value: \"Giải trình\",\r\n // },\r\n {\r\n id: \"notifyErrorInvoice\",\r\n value: \"Thông báo HĐĐT có sai sót\",\r\n },\r\n {\r\n id: \"replace_invoice\",\r\n value: \"Thay thế\",\r\n },\r\n {\r\n id: \"increase_change_invoice\",\r\n value: \"Điều chỉnh tăng\",\r\n },\r\n {\r\n id: \"reduce_change_invoice\",\r\n value: \"Điều chỉnh giảm\",\r\n },\r\n {\r\n id: \"info_change\",\r\n value: \"Điều chỉnh thông tin\",\r\n },\r\n {\r\n id: \"dowloadXml\",\r\n value: \"Tải XML\",\r\n },\r\n {\r\n id: \"dowloadXmlMessageHD\",\r\n value: \"Tải XML thông điệp gửi HĐ\",\r\n },\r\n // {\r\n // id: \"nhanExcel\",\r\n // value: \"Nhận Excel hàng loạt\",\r\n // },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n this.hide();\r\n if (record.id == \"nhanExcel\") {\r\n var table = $$(\"invoiceViews\");\r\n\r\n require([\"views/forms/uploadexcel\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n webix.$$(\"uploader\").define(\"formData\", {\r\n excel_id: \"EX00011\",\r\n filename: \"Nhan hang loat hoa don 68 (GTGT).xlsx\",\r\n });\r\n webix.$$(\"uploader\").hide();\r\n });\r\n }\r\n // console.log(record);\r\n if (record.id == \"huyhoadon\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"Hóa đơn đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"huyhoadon2\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"Hóa đơn đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnStep299\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // webix.$$(\"btnStep299\").define(\"hidden\", false);\r\n // webix.$$(\"btnStep2\").show();\r\n // webix.$$(\"btnStep299\").hide();\r\n // $$(\"btnHuyHDDT\").addView({ view:\"button\",label: \"Bước 2\" }, 1);\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"dowloadXml\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký/chờ gửi không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlInvoice.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"dowloadXmlMessageHD\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"Hóa đơn chưa được gửi tới CQT, không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLThongDiepHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlThongDiepHoaDon.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"giaitrinh\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon != \"4\" && item.tthdon != \"0\") {\r\n webix.message(\"Hóa đơn không ở trạng thái rà soát không thể lập giải trình !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n // webix.$$(\"tctbao\").setValue(2);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n this.hide();\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 2,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n\r\n // var fn = Function(\"_\", \"user\", item.on_click);\r\n // fn(_, user);\r\n }\r\n if (record.id == \"notifyErrorInvoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var cungshd = true;\r\n for (var k = 1; k <= data.length - 1; k++) {\r\n if (data[k][\"stbao\"] !== data[0][\"stbao\"]) {\r\n cungshd = false;\r\n break;\r\n }\r\n }\r\n if (cungshd === true) {\r\n var loai = 1;\r\n if (data[0][\"stbao\"] !== null) loai = 2;\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai == \"Chờ gửi\" || data[i].tthai == \"Chờ ký\" || data[i].tthai == \"Đã ký\") {\r\n webix.message(\"Hóa đơn chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n if (data[i].ladhddt == undefined) {\r\n data[i].ladhddt = \"1\";\r\n }\r\n if (data[i].tctbao == undefined) {\r\n data[i].tctbao = \"1\";\r\n }\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n var tongquat = {\r\n so: data[0].stbao,\r\n ntbccqt: data[0].ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n data.forEach(function (item) {\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n //this.hide();\r\n win.show();\r\n });\r\n } else {\r\n webix.message(\"Các hóa đơn chọn phải có số thông báo giống nhau\", \"error\");\r\n }\r\n } else {\r\n var item = table.getSelectedItem();\r\n\r\n var loai = 1;\r\n if (item[\"stbao\"] !== null) loai = 2;\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\" || item.tthai == \"Đã ký\") {\r\n webix.message(\"Hóa đơn chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.ladhddt == undefined) {\r\n item[\"ladhddt\"] = \"1\";\r\n }\r\n if (item.tctbao == undefined) {\r\n item[\"tctbao\"] = \"1\";\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n var tongquat = {\r\n so: item.stbao,\r\n ntbccqt: item.ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n\r\n //this.hide();\r\n win.show();\r\n }\r\n\r\n // var win = table.$scope.ui(huyhoadon.$ui);\r\n // huyhoadon.setEditMode(1);\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n // webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // this.hide();\r\n // win.show();\r\n }\r\n if (record.id == \"replace_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 2;\r\n item.tthdon_original = 2;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"increase_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 19;\r\n item.tthdon_original = 19;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n // var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n // tableDetail.clearAll();\r\n // tableDetail.refresh();\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n /*tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tthue\").editor = null;*/\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n\r\n //detailForm.show();\r\n }\r\n if (record.id == \"reduce_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 21;\r\n item.tthdon_original = 21;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.note = \"reduce_change_invoice\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"info_change\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 23;\r\n item.tthdon_original = 23;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n // tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n // tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n // tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tthue\").editor = null;\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n },\r\n },\r\n });\r\n\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ ký\", details: \"Danh sách hóa đơn chờ ký\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n { value: \"Thêm (F4)\", icon: \"far fa-plus\" },\r\n { value: \"Sửa (F3)\", icon: \"far fa-edit\" },\r\n { value: \"Xóa (F8)\", icon: \"far fa-trash\" },\r\n { $template: \"Separator\" },\r\n { value: \"Tải File đính kèm\", icon: \"fas fa-file-text-o\" },\r\n { value: \"Xem in\", icon: \"fas fa-print\" },\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm (F4)\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa (F3)\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa (F8)\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Tải File đính kèm\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n webix.message(\"Continue !\", \"debug\");\r\n //console.log(item);\r\n // if (item.inv_originalId != null && item.inv_originalId != undefined) {\r\n // var box = webix.modalbox({\r\n // title: \"Đang in chứng từ\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // //var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n // //newWin.location = fileURL;\r\n // window.open(fileURL, '_blank');\r\n\r\n // }\r\n // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // // var file = new Blob([data], { type: 'application/pdf' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, '_blank');\r\n // // // webix.html.download(file, $$('tenfile').getValue());\r\n // // });\r\n // }\r\n // else {\r\n // webix.message(\"Không tồn tại hóa đơn gốc !\", \"error\");\r\n // return;\r\n // }\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Duyệt\") + \"\",\r\n id: \"btnKyCXL\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Bạn chắc chắn muốn duyệt hóa đơn ?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n //check validate và return ra list hoadon_id\r\n var dsHoaDon = commonHD.GetHoaDonChon();\r\n var lsHodonId = [];\r\n\r\n dsHoaDon.forEach(function (p) {\r\n lsHodonId.push(p.hdon_id);\r\n });\r\n\r\n commonHD.DuyetHoaDon(lsHodonId, \"Chờ duyệt\");\r\n }\r\n },\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Kết xuất màn hình\") + \"\",\r\n id: \"btnXuatExel\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Kết xuất màn hình toàn bộ hóa đơn theo filter?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n width: 300,\r\n callback: function (res) {\r\n if (res) {\r\n //check validate và return ra list hoadon_id\r\n var table = $$(\"invoiceViews\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var datafetch = table.config.datafetch;\r\n table.config.datafetch = table.data.count();\r\n var params = table.config.params;\r\n if (params != null && params != undefined) {\r\n params.count = table.data.count();\r\n }\r\n var columnlst = table.config.columns;\r\n var arrcolumn = [];\r\n\r\n for (var i = 2; i < columnlst.length; i++) {\r\n var exporttype = \"\";\r\n if (columnlst[i].columnType == \"character varying\" || columnlst[i].columnType == \"nvarchar\") {\r\n exporttype = \"string\";\r\n } else {\r\n exporttype = columnlst[i].columnType;\r\n }\r\n var item = {\r\n id: columnlst[i].id,\r\n header: columnlst[i].header[0][\"text\"],\r\n\r\n exportType: exporttype,\r\n };\r\n arrcolumn.push(item);\r\n }\r\n table.load(\r\n table.config.url,\r\n function () {\r\n webix.toExcel($$(\"invoiceViews\"), {\r\n columns: arrcolumn,\r\n rawValues: true,\r\n filename: \"DanhSachHoaDonFull\",\r\n });\r\n table.config.datafetch = datafetch;\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n params\r\n );\r\n }\r\n },\r\n });\r\n },\r\n },\r\n // Khong duoc xoa cai ngoac nhon nay\r\n {},\r\n {},\r\n {},\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n //autowidth: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var daiKyHieu = \"\";\r\n //get count list combo ký hiệu\r\n //var countkyHieu = $$(\"kyhieu_id\") != undefined ? $$(\"kyhieu_id\").getPopup().getList().serialize().length : 0;\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDanhSachChoKy\";\r\n var table = $$(\"invoiceViews\");\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n table.define(\"params\", params);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n if (item.filterType == \"serverDateRangeFilter\") {\r\n var startDate = item.value.start;\r\n if (startDate !== null && startDate !== undefined) {\r\n var hoursDiff = startDate.getHours() - startDate.getTimezoneOffset() / 60;\r\n var minutesDiff = (startDate.getHours() - startDate.getTimezoneOffset()) % 60;\r\n startDate.setHours(hoursDiff);\r\n startDate.setMinutes(minutesDiff);\r\n item.value.start = startDate;\r\n }\r\n\r\n var endDate = item.value.end;\r\n if (endDate !== null && endDate !== undefined) {\r\n var hoursDiff = endDate.getHours() - endDate.getTimezoneOffset() / 60;\r\n var minutesDiff = (endDate.getHours() - endDate.getTimezoneOffset()) % 60;\r\n endDate.setHours(hoursDiff);\r\n endDate.setMinutes(minutesDiff);\r\n item.value.end = endDate;\r\n }\r\n }\r\n\r\n if (item.value != \"\" && item.value != null) {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n url = url + \"&tlbparam=null&tthai=Chờ duyệt\";\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n if (id.column == \"ten_loai\") {\r\n //webix.confirm()\r\n //webix.message(\"Continue Dowloading ... !\", \"debug\");\r\n }\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n // onItemDblClick: function (id, e, node) {\r\n // var btnEdit = $$(\"btnEdit\");\r\n // btnEdit.callEvent(\"onClick\");\r\n // },\r\n onAfterLoad: function () {\r\n // webix.delay(function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n // }, this);\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n },\r\n subview: {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n css: \"subInvoice\",\r\n scrollX: true,\r\n // tabbar: {\r\n // width: 200\r\n // },\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n margin: 10,\r\n id: \"hoadon68_chitiet_view\",\r\n height: 200,\r\n columns: [\r\n { id: \"stt\", header: \"\", width: 30 },\r\n {\r\n id: \"ma\",\r\n header: _(\"Mã hàng hóa\"),\r\n editor: \"text\",\r\n width: 100,\r\n editable: true,\r\n },\r\n {\r\n id: \"ten\",\r\n header: _(\"Tên hàng hóa\"),\r\n editor: \"text\",\r\n width: 350,\r\n editable: true,\r\n },\r\n {\r\n id: \"mdvtinh\",\r\n header: _(\"ĐVT\"),\r\n editor: \"text\",\r\n width: 80,\r\n editable: true,\r\n },\r\n {\r\n id: \"sluong\",\r\n header: _(\"Số lương\"),\r\n editor: \"autonumeric\",\r\n width: 100,\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"dgia\",\r\n header: _(\"Đơn giá\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"thtien\",\r\n header: _(\"Tiền trước thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"tlckhau\",\r\n header: _(\"% CK\"),\r\n width: 80,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"stckhau\",\r\n header: _(\"Tiền CK\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tsuat\",\r\n header: _(\"Thuế suất\"),\r\n width: 100,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tthue\",\r\n header: _(\"Tiền thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tgtien\",\r\n header: _(\"Tiền sau thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"khuyen_mai\",\r\n header: _(\"Khuyến mại\"),\r\n width: 100,\r\n editor: \"checkbox\",\r\n editable: true,\r\n template: \"{common.checkbox()}\",\r\n checkValue: true,\r\n uncheckValue: false,\r\n },\r\n ],\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n },\r\n {\r\n id: \"stt\",\r\n header: [\"STT\"],\r\n //header: \"\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"nvarchar\",\r\n //css: { \"line-height\": \"20px !important\", \"height\": \"63px !important\"}\r\n },\r\n {\r\n id: \"ttthdon\",\r\n width: 200,\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"serverMultiSelectFilter\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00502\",\r\n },\r\n ],\r\n template: function (obj, common) {\r\n console.log(obj.tthdon);\r\n return \"\" + obj.ttthdon + \"\";\r\n },\r\n },\r\n {\r\n id: \"tthai\",\r\n header: [\"Trạng thái gửi CQT\", { content: \"serverMultiSelectFilter\", options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00504\" }],\r\n width: 200,\r\n },\r\n {\r\n id: \"nlap\",\r\n header: [\"Ngày hóa đơn\", { content: \"serverDateRangeFilter\" }],\r\n width: 120,\r\n css: { \"text-align\": \"center\" },\r\n //format:webix.i18n.dateFormatStr\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n // template: function (obj, common) {\r\n // if(obj.tthai!=\"Chờ ký\"){\r\n // return obj.nlap=\"\";\r\n // }\r\n // else{\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // var text = removeTimeZoneT(obj.nlap);\r\n // return format(text);\r\n // }\r\n // },\r\n columnType: \"datetime\",\r\n },\r\n // {\r\n // id: \"nky\",\r\n // header: [\"Ngày ký\", { content: \"serverDateRangeFilter\" }],\r\n // width: 150,\r\n // css: { \"text-align\": \"center\" },\r\n // //format:webix.i18n.dateFormatStr\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // columnType: \"datetime\",\r\n // },\r\n {\r\n id: \"khieu\",\r\n header: [\"Ký hiệu\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"is_hdcma_str\",\r\n header: [\"Tình trạng mã\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n /*columnType: \"integer\",\r\n template: function (obj) {\r\n return obj.is_hdcma === 0 ? \"Không mã\" : obj.is_hdcma === 1 ? \"Có mã\" : \"Không rõ tình trạng mã\";\r\n },*/\r\n },\r\n // {\r\n // id: \"khieu\", header: [\"Ký hiệu\", { content: \"textFilter\" }],\r\n // template: function (obj, common) {\r\n // return \"\" + obj.ten_trang_thai + \"\";\r\n // }, width: 100, columnType: \"nvarchar\"\r\n // },\r\n { id: \"shdon\", header: [\"Số hóa đơn\", { content: \"textFilter\" }], width: 100, columnType: \"numeric\", css: { \"text-align\": \"center\" } },\r\n\r\n { id: \"mst\", header: [\"Mã số thuế\", { content: \"textFilter\" }], width: 120, columnType: \"nvarchar\" },\r\n // { id: \"mtdiep_gui\", header: [\"
Mã thông điệp gửi đi
\", { content: \"textFilter\" }], width: 350, columnType: \"nvarchar\" },\r\n // { id: \"mtdiep_cqt\", header: [\"
Mã thông điệp cơ quan thuế
\", { content: \"textFilter\" }], width: 300, columnType: \"nvarchar\" },\r\n { id: \"mdvi\", header: [\"Đơn vị quản lý\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n { id: \"ten_str\", header: [\"Tên đơn vị/ Tên người mua\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n {\r\n id: \"tgtttbso_last\",\r\n header: [\"Thành tiền sau thuế\", { content: \"textFilter\" }],\r\n width: 150,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \".\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \",\",\r\n // decimalSize: 0\r\n // }),\r\n css: { \"text-align\": \"right\" },\r\n template: function (obj, common) {\r\n return obj.tgtttbso_last == null ? 0 : fm(obj.tgtttbso_last);\r\n },\r\n columnType: \"numeric\",\r\n },\r\n { id: \"htttoan\", header: [\"Hình thức TT\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\", css: { \"text-align\": \"center\" } },\r\n // {\r\n // id: \"tdlap\",\r\n // header: [\"Thời điểm lập\", { content: \"textFilter\" }],\r\n // width: 200,\r\n // columnType: \"nvarchar\",\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // },\r\n {\r\n id: \"nglap\",\r\n header: [\"Người lập\", { content: \"textFilter\" }],\r\n width: 200,\r\n columnType: \"nvarchar\",\r\n },\r\n // { id: \"ten_loai\", header: [\"Tên loại HĐ\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\" }\r\n ],\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv * 1 != $$(\"pagerA\").config.size) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.$$(\"title\").parse({\r\n title: \"Danh sách chờ duyệt\",\r\n details: \"Danh sách chờ duyệt\",\r\n });\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n if (editmode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (editmode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/78_duyethoadon_chosinhso_bienlai',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\", \"views/forms/68_huyhoadon\", \"views/forms/68_huyhoadon_1\", \"views/forms/68_hoadon_history\", \"views/commonHD\"], function (\r\n app,\r\n _,\r\n user,\r\n invoiceForms,\r\n huyhoadon,\r\n huyhoadon_1,\r\n hoadonHistory,\r\n commonHD\r\n) {\r\n \r\n var fm = function (number) {\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 0,\r\n });\r\n return k(number);\r\n };\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var op = [];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n data: [\r\n // {\r\n // id: \"huyhoadon\",\r\n // value: \"Hủy biên lai\",\r\n // },\r\n // {\r\n // id: \"huyhoadon2\",\r\n // value: \"Hủy biên lai có tạo mới\",\r\n // },\r\n // {\r\n // id: \"giaitrinh\",\r\n // value: \"Giải trình\",\r\n // },\r\n {\r\n id: \"notifyErrorInvoice\",\r\n value: \"Thông báo HĐĐT có sai sót\",\r\n },\r\n {\r\n id: \"replace_invoice\",\r\n value: \"Thay thế\",\r\n },\r\n {\r\n id: \"increase_change_invoice\",\r\n value: \"Điều chỉnh tăng\",\r\n },\r\n {\r\n id: \"reduce_change_invoice\",\r\n value: \"Điều chỉnh giảm\",\r\n },\r\n {\r\n id: \"info_change\",\r\n value: \"Điều chỉnh thông tin\",\r\n },\r\n {\r\n id: \"dowloadXml\",\r\n value: \"Tải XML\",\r\n },\r\n {\r\n id: \"dowloadXmlMessageHD\",\r\n value: \"Tải XML thông điệp gửi HĐ\",\r\n },\r\n // {\r\n // id: \"nhanExcel\",\r\n // value: \"Nhận Excel hàng loạt\",\r\n // },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n this.hide();\r\n if (record.id == \"nhanExcel\") {\r\n var table = $$(\"invoiceViews\");\r\n\r\n require([\"views/forms/uploadexcel\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id: \"EX00011\", filename: \"Nhan hang loat hoa don 68 (GTGT).xlsx\" });\r\n webix.$$(\"uploader\").hide();\r\n });\r\n }\r\n // console.log(record);\r\n if (record.id == \"huyhoadon\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"biên lai đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"huyhoadon2\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"biên lai đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnStep299\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // webix.$$(\"btnStep299\").define(\"hidden\", false);\r\n // webix.$$(\"btnStep2\").show();\r\n // webix.$$(\"btnStep299\").hide();\r\n // $$(\"btnHuyHDDT\").addView({ view:\"button\",label: \"Bước 2\" }, 1);\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"dowloadXml\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"biên lai đang ở trạng thái chờ ký/chờ gửi không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlInvoice.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"dowloadXmlMessageHD\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"biên lai chưa được gửi tới CQT, không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLThongDiepHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlThongDiepHoaDon.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"giaitrinh\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon != \"4\" && item.tthdon != \"0\") {\r\n webix.message(\"biên lai không ở trạng thái rà soát không thể lập giải trình !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n // webix.$$(\"tctbao\").setValue(2);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n this.hide();\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 2,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n\r\n // var fn = Function(\"_\", \"user\", item.on_click);\r\n // fn(_, user);\r\n }\r\n if (record.id == \"notifyErrorInvoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var cungshd = true;\r\n for (var k = 1; k <= data.length - 1; k++) {\r\n if (data[k][\"stbao\"] !== data[0][\"stbao\"]) {\r\n cungshd = false;\r\n break;\r\n }\r\n }\r\n if (cungshd === true) {\r\n var loai = 1;\r\n if (data[0][\"stbao\"] !== null) loai = 2;\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai == \"Chờ gửi\" || data[i].tthai == \"Chờ ký\" || data[i].tthai == \"Đã ký\") {\r\n webix.message(\"biên lai chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n if (data[i].ladhddt == undefined) {\r\n data[i].ladhddt = \"1\";\r\n }\r\n if (data[i].tctbao == undefined) {\r\n data[i].tctbao = \"1\";\r\n }\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n var tongquat = {\r\n so: data[0].stbao,\r\n ntbccqt: data[0].ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n data.forEach(function (item) {\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n //this.hide();\r\n win.show();\r\n });\r\n } else {\r\n webix.message(\"Các biên lai chọn phải có số thông báo giống nhau\", \"error\");\r\n }\r\n } else {\r\n var item = table.getSelectedItem();\r\n\r\n var loai = 1;\r\n if (item[\"stbao\"] !== null) loai = 2;\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\" || item.tthai == \"Đã ký\") {\r\n webix.message(\"biên lai chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.ladhddt == undefined) {\r\n item[\"ladhddt\"] = \"1\";\r\n }\r\n if (item.tctbao == undefined) {\r\n item[\"tctbao\"] = \"1\";\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n var tongquat = {\r\n so: item.stbao,\r\n ntbccqt: item.ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n\r\n //this.hide();\r\n win.show();\r\n }\r\n\r\n // var win = table.$scope.ui(huyhoadon.$ui);\r\n // huyhoadon.setEditMode(1);\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n // webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // this.hide();\r\n // win.show();\r\n }\r\n if (record.id == \"replace_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 2;\r\n item.tthdon_original = 2;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"increase_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 19;\r\n item.tthdon_original = 19;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n // var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n // tableDetail.clearAll();\r\n // tableDetail.refresh();\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"biên lai điều chỉnh cho biên lai số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n /*tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tthue\").editor = null;*/\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n\r\n //detailForm.show();\r\n }\r\n if (record.id == \"reduce_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 21;\r\n item.tthdon_original = 21;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.note = \"reduce_change_invoice\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"biên lai điều chỉnh cho biên lai số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"info_change\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 23;\r\n item.tthdon_original = 23;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"biên lai điều chỉnh cho biên lai số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n // tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n // tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n // tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tthue\").editor = null;\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n },\r\n },\r\n });\r\n\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ ký\", details: \"Danh sách biên lai chờ ký\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n { value: \"Thêm (F4)\", icon: \"far fa-plus\" },\r\n { value: \"Sửa (F3)\", icon: \"far fa-edit\" },\r\n { value: \"Xóa (F8)\", icon: \"far fa-trash\" },\r\n { $template: \"Separator\" },\r\n { value: \"Tải File đính kèm\", icon: \"fas fa-file-text-o\" },\r\n { value: \"Xem in\", icon: \"fas fa-print\" },\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm (F4)\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa (F3)\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa (F8)\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Tải File đính kèm\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n webix.message(\"Continue !\", \"debug\");\r\n //console.log(item);\r\n // if (item.inv_originalId != null && item.inv_originalId != undefined) {\r\n // var box = webix.modalbox({\r\n // title: \"Đang in biên lai\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // //var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n // //newWin.location = fileURL;\r\n // window.open(fileURL, '_blank');\r\n\r\n // }\r\n // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // // var file = new Blob([data], { type: 'application/pdf' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, '_blank');\r\n // // // webix.html.download(file, $$('tenfile').getValue());\r\n // // });\r\n // }\r\n // else {\r\n // webix.message(\"Không tồn tại biên lai gốc !\", \"error\");\r\n // return;\r\n // }\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Sinh số\") + \"\",\r\n id: \"btnKyCXL\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Bạn chắc chắn muốn duyệt biên lai ?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n //check validate và return ra list hoadon_id\r\n var dsHoaDon = commonHD.GetHoaDonChon();\r\n var lsHodonId = [];\r\n\r\n dsHoaDon.forEach(function (p) {\r\n lsHodonId.push(p.hdon_id);\r\n });\r\n\r\n commonHD.DuyetHoaDon(lsHodonId, \"Chờ sinh số\");\r\n }\r\n },\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Kết xuất màn hình\") + \"\",\r\n id: \"btnXuatExel\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Kết xuất màn hình toàn bộ biên lai theo filter?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n width: 300,\r\n callback: function (res) {\r\n if (res) {\r\n var table = $$(\"invoiceViews\");\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var datafetch = table.config.datafetch;\r\n table.config.datafetch = table.data.count();\r\n var params = table.config.params;\r\n if (params != null && params != undefined) {\r\n params.count = table.data.count();\r\n }\r\n var columnlst = table.config.columns;\r\n var arrcolumn = [];\r\n\r\n for (var i = 2; i < columnlst.length; i++) {\r\n var exporttype = \"\";\r\n if (columnlst[i].columnType == \"character varying\" || columnlst[i].columnType == \"nvarchar\") {\r\n exporttype = \"string\";\r\n } else {\r\n exporttype = columnlst[i].columnType;\r\n }\r\n var item = {\r\n id: columnlst[i].id,\r\n header: columnlst[i].header[0][\"text\"],\r\n\r\n exportType: exporttype,\r\n };\r\n arrcolumn.push(item);\r\n }\r\n\r\n table.load(\r\n table.config.url,\r\n function () {\r\n webix.toExcel($$(\"invoiceViews\"), {\r\n columns: arrcolumn,\r\n rawValues: true,\r\n filename: \"DanhSachHoaDonFull\",\r\n });\r\n table.config.datafetch = datafetch;\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n params\r\n );\r\n }\r\n },\r\n });\r\n },\r\n },\r\n // Khong duoc xoa cai ngoac nhon nay\r\n {},\r\n {},\r\n {},\r\n {},\r\n ];\r\n var fm = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n });\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n //autowidth: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var daiKyHieu = \"\";\r\n //get count list combo ký hiệu\r\n //var countkyHieu = $$(\"kyhieu_id\") != undefined ? $$(\"kyhieu_id\").getPopup().getList().serialize().length : 0;\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDanhSachChoKy\";\r\n var table = $$(\"invoiceViews\");\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n table.define(\"params\", params);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n url = url + \"&tlbparam=null&tthai=Chờ sinh số&loaihd=2\";\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n if (id.column == \"ten_loai\") {\r\n //webix.confirm()\r\n //webix.message(\"Continue Dowloading ... !\", \"debug\");\r\n }\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n // onItemDblClick: function (id, e, node) {\r\n // var btnEdit = $$(\"btnEdit\");\r\n // btnEdit.callEvent(\"onClick\");\r\n // },\r\n onAfterLoad: function () {\r\n // webix.delay(function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n // }, this);\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n },\r\n {\r\n id: \"stt\",\r\n header: [\"STT\"],\r\n //header: \"\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"nvarchar\",\r\n //css: { \"line-height\": \"20px !important\", \"height\": \"63px !important\"}\r\n },\r\n {\r\n id: \"ttthdon\",\r\n width: 200,\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"serverMultiSelectFilter\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00502\",\r\n },\r\n ],\r\n template: function (obj, common) {\r\n console.log(obj.tthdon);\r\n return \"\" + obj.ttthdon + \"\";\r\n },\r\n },\r\n {\r\n id: \"tthai\",\r\n header: [\"Trạng thái biên lai\", { content: \"serverMultiSelectFilter\", options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00504\" }],\r\n width: 200,\r\n },\r\n //\r\n // {\r\n // id: \"btnMessagetn\",\r\n // header: [\"
Lịch sử xử lý
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // template: function (obj) {\r\n // return \" \";\r\n // },\r\n // width: 180,\r\n // },\r\n // {\r\n // id: \"issendmail\",\r\n // header: [\"
Gửi Email
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // checkValue: true, uncheckValue: false,\r\n // template: \"{common.rcheckbox()}\"\r\n // },\r\n // {\r\n // id: \"error_status\",\r\n // header: [\"
Có lỗi/Không có lỗi
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // template: function (obj) {\r\n // if (obj.error_status == \"1\") {\r\n // return \"Có lỗi \";\r\n // } else {\r\n // return \"\";\r\n // }\r\n // }\r\n // },\r\n {\r\n id: \"nlap\",\r\n header: [\"Ngày biên lai\", { content: \"serverDateRangeFilter\" }],\r\n width: 120,\r\n css: { \"text-align\": \"center\" },\r\n //format:webix.i18n.dateFormatStr\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n // template: function (obj, common) {\r\n // if(obj.tthai!=\"Chờ ký\"){\r\n // return obj.nlap=\"\";\r\n // }\r\n // else{\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // var text = removeTimeZoneT(obj.nlap);\r\n // return format(text);\r\n // }\r\n // },\r\n columnType: \"datetime\",\r\n },\r\n // {\r\n // id: \"nky\",\r\n // header: [\"
Ngày ký
\", { content: \"serverDateRangeFilter\" }],\r\n // width: 150,\r\n // css: { \"text-align\": \"center\" },\r\n // //format:webix.i18n.dateFormatStr\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // columnType: \"datetime\",\r\n // },\r\n {\r\n id: \"khieu\",\r\n header: [\"Ký hiệu\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"nvarchar\",\r\n },\r\n { id: \"shdon\", header: [\"Số biên lai\", { content: \"textFilter\" }], width: 100, columnType: \"numeric\", css: { \"text-align\": \"center\" } },\r\n\r\n { id: \"mst\", header: [\"Mã số thuế\", { content: \"textFilter\" }], width: 120, columnType: \"nvarchar\" },\r\n { id: \"mdvi\", header: [\"Đơn vị quản lý\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n { id: \"ten_str\", header: [\"Tên đơn vị/ Tên người mua\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n {\r\n id: \"tgtttbso_last\",\r\n header: [\"Số thuế thu nhập\", { content: \"textFilter\" }],\r\n width: 150,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \".\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \",\",\r\n // decimalSize: 0\r\n // }),\r\n css: { \"text-align\": \"right\" },\r\n template: function (obj, common) {\r\n return obj.tgtttbso_last == null ? 0 : fm(obj.tgtttbso_last);\r\n },\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"nglap\",\r\n header: [\"Người lập\", { content: \"textFilter\" }],\r\n width: 200,\r\n columnType: \"nvarchar\",\r\n },\r\n // { id: \"ten_loai\", header: [\"
Tên loại HĐ
\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\" }\r\n ],\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv * 1 != $$(\"pagerA\").config.size) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ sinh số\", details: \"Danh sách chờ sinh số\" });\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n if (editmode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (editmode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/78_duyethoadon_chosinhso_tncn',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\", \"views/forms/68_huyhoadon\", \"views/forms/68_huyhoadon_1\", \"views/forms/68_hoadon_history\", \"views/commonHD\"], function (\r\n app,\r\n _,\r\n user,\r\n invoiceForms,\r\n huyhoadon,\r\n huyhoadon_1,\r\n hoadonHistory,\r\n commonHD\r\n) {\r\n \r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var op = [];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n data: [\r\n // {\r\n // id: \"huyhoadon\",\r\n // value: \"Hủy hóa đơn\",\r\n // },\r\n // {\r\n // id: \"huyhoadon2\",\r\n // value: \"Hủy Chứng từ có tạo mới\",\r\n // },\r\n // {\r\n // id: \"giaitrinh\",\r\n // value: \"Giải trình\",\r\n // },\r\n {\r\n id: \"notifyErrorInvoice\",\r\n value: \"Thông báo HĐĐT có sai sót\",\r\n },\r\n {\r\n id: \"replace_invoice\",\r\n value: \"Thay thế\",\r\n },\r\n {\r\n id: \"increase_change_invoice\",\r\n value: \"Điều chỉnh tăng\",\r\n },\r\n {\r\n id: \"reduce_change_invoice\",\r\n value: \"Điều chỉnh giảm\",\r\n },\r\n {\r\n id: \"info_change\",\r\n value: \"Điều chỉnh thông tin\",\r\n },\r\n {\r\n id: \"dowloadXml\",\r\n value: \"Tải XML\",\r\n },\r\n {\r\n id: \"dowloadXmlMessageHD\",\r\n value: \"Tải XML thông điệp gửi HĐ\",\r\n },\r\n // {\r\n // id: \"nhanExcel\",\r\n // value: \"Nhận Excel hàng loạt\",\r\n // },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n this.hide();\r\n if (record.id == \"nhanExcel\") {\r\n var table = $$(\"invoiceViews\");\r\n\r\n require([\"views/forms/uploadexcel\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id: \"EX00011\", filename: \"Nhan hang loat hoa don 68 (GTGT).xlsx\" });\r\n webix.$$(\"uploader\").hide();\r\n });\r\n }\r\n // console.log(record);\r\n if (record.id == \"huyhoadon\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"Chứng từ đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Chứng từ đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"huyhoadon2\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"Chứng từ đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Chứng từ đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnStep299\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // webix.$$(\"btnStep299\").define(\"hidden\", false);\r\n // webix.$$(\"btnStep2\").show();\r\n // webix.$$(\"btnStep299\").hide();\r\n // $$(\"btnHuyHDDT\").addView({ view:\"button\",label: \"Bước 2\" }, 1);\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"dowloadXml\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"Chứng từ đang ở trạng thái chờ ký/chờ gửi không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlInvoice.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"dowloadXmlMessageHD\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"Chứng từ chưa được gửi tới CQT, không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLThongDiepHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlThongDiepHoaDon.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"giaitrinh\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon != \"4\" && item.tthdon != \"0\") {\r\n webix.message(\"Chứng từ không ở trạng thái rà soát không thể lập giải trình !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n // webix.$$(\"tctbao\").setValue(2);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n this.hide();\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 2,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n\r\n // var fn = Function(\"_\", \"user\", item.on_click);\r\n // fn(_, user);\r\n }\r\n if (record.id == \"notifyErrorInvoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var cungshd = true;\r\n for (var k = 1; k <= data.length - 1; k++) {\r\n if (data[k][\"stbao\"] !== data[0][\"stbao\"]) {\r\n cungshd = false;\r\n break;\r\n }\r\n }\r\n if (cungshd === true) {\r\n var loai = 1;\r\n if (data[0][\"stbao\"] !== null) loai = 2;\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai == \"Chờ gửi\" || data[i].tthai == \"Chờ ký\" || data[i].tthai == \"Đã ký\") {\r\n webix.message(\"Chứng từ chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n if (data[i].ladhddt == undefined) {\r\n data[i].ladhddt = \"1\";\r\n }\r\n if (data[i].tctbao == undefined) {\r\n data[i].tctbao = \"1\";\r\n }\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n var tongquat = {\r\n so: data[0].stbao,\r\n ntbccqt: data[0].ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n data.forEach(function (item) {\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n //this.hide();\r\n win.show();\r\n });\r\n } else {\r\n webix.message(\"Các Chứng từ chọn phải có số thông báo giống nhau\", \"error\");\r\n }\r\n } else {\r\n var item = table.getSelectedItem();\r\n\r\n var loai = 1;\r\n if (item[\"stbao\"] !== null) loai = 2;\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\" || item.tthai == \"Đã ký\") {\r\n webix.message(\"Chứng từ chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.ladhddt == undefined) {\r\n item[\"ladhddt\"] = \"1\";\r\n }\r\n if (item.tctbao == undefined) {\r\n item[\"tctbao\"] = \"1\";\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n var tongquat = {\r\n so: item.stbao,\r\n ntbccqt: item.ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n\r\n //this.hide();\r\n win.show();\r\n }\r\n\r\n // var win = table.$scope.ui(huyhoadon.$ui);\r\n // huyhoadon.setEditMode(1);\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n // webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // this.hide();\r\n // win.show();\r\n }\r\n if (record.id == \"replace_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn Chứng từ !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Chứng từ chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 2;\r\n item.tthdon_original = 2;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"increase_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn Chứng từ !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Chứng từ chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 19;\r\n item.tthdon_original = 19;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n // var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n // tableDetail.clearAll();\r\n // tableDetail.refresh();\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Chứng từ điều chỉnh cho Chứng từ số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n /*tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tthue\").editor = null;*/\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n\r\n //detailForm.show();\r\n }\r\n if (record.id == \"reduce_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn Chứng từ !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Chứng từ chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 21;\r\n item.tthdon_original = 21;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.note = \"reduce_change_invoice\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Chứng từ điều chỉnh cho Chứng từ số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"info_change\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn Chứng từ !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Chứng từ chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 23;\r\n item.tthdon_original = 23;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Chứng từ điều chỉnh cho Chứng từ số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n // tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n // tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n // tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tthue\").editor = null;\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n },\r\n },\r\n });\r\n\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ ký\", details: \"Danh sách Chứng từ chờ ký\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n { value: \"Thêm (F4)\", icon: \"far fa-plus\" },\r\n { value: \"Sửa (F3)\", icon: \"far fa-edit\" },\r\n { value: \"Xóa (F8)\", icon: \"far fa-trash\" },\r\n { $template: \"Separator\" },\r\n { value: \"Tải File đính kèm\", icon: \"fas fa-file-text-o\" },\r\n { value: \"Xem in\", icon: \"fas fa-print\" },\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm (F4)\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa (F3)\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa (F8)\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Tải File đính kèm\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn Chứng từ !\", \"error\");\r\n return;\r\n }\r\n webix.message(\"Continue !\", \"debug\");\r\n //console.log(item);\r\n // if (item.inv_originalId != null && item.inv_originalId != undefined) {\r\n // var box = webix.modalbox({\r\n // title: \"Đang in Chứng từ \",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // //var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n // //newWin.location = fileURL;\r\n // window.open(fileURL, '_blank');\r\n\r\n // }\r\n // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // // var file = new Blob([data], { type: 'application/pdf' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, '_blank');\r\n // // // webix.html.download(file, $$('tenfile').getValue());\r\n // // });\r\n // }\r\n // else {\r\n // webix.message(\"Không tồn tại Chứng từ gốc !\", \"error\");\r\n // return;\r\n // }\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn Chứng từ cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in Chứng từ ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Chứng từ điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Sinh số\") + \"\",\r\n id: \"btnKyCXL\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Bạn chắc chắn muốn sinh số Chứng từ ?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n //check validate và return ra list hoadon_id\r\n var dsHoaDon = commonHD.GetHoaDonChon();\r\n var lsHodonId = [];\r\n\r\n dsHoaDon.forEach(function (p) {\r\n lsHodonId.push(p.hdon_id);\r\n });\r\n\r\n commonHD.DuyetHoaDon(lsHodonId, \"Chờ sinh số\");\r\n }\r\n },\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Kết xuất màn hình\") + \"\",\r\n id: \"btnXuatExel\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Kết xuất màn hình toàn bộ Chứng từ theo filter?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n width: 300,\r\n callback: function (res) {\r\n if (res) {\r\n var table = $$(\"invoiceViews\");\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var datafetch = table.config.datafetch;\r\n table.config.datafetch = table.data.count();\r\n var params = table.config.params;\r\n if (params != null && params != undefined) {\r\n params.count = table.data.count();\r\n }\r\n var columnlst = table.config.columns;\r\n var arrcolumn = [];\r\n\r\n for (var i = 2; i < columnlst.length; i++) {\r\n var exporttype = \"\";\r\n if (columnlst[i].columnType == \"character varying\" || columnlst[i].columnType == \"nvarchar\") {\r\n exporttype = \"string\";\r\n } else {\r\n exporttype = columnlst[i].columnType;\r\n }\r\n var item = {\r\n id: columnlst[i].id,\r\n header: columnlst[i].header[0][\"text\"],\r\n\r\n exportType: exporttype,\r\n };\r\n arrcolumn.push(item);\r\n }\r\n\r\n table.load(\r\n table.config.url,\r\n function () {\r\n webix.toExcel($$(\"invoiceViews\"), {\r\n columns: arrcolumn,\r\n rawValues: true,\r\n filename: \"DanhSachHoaDonFull\",\r\n });\r\n table.config.datafetch = datafetch;\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n params\r\n );\r\n }\r\n },\r\n });\r\n },\r\n },\r\n // Khong duoc xoa cai ngoac nhon nay\r\n {},\r\n {},\r\n {},\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n //autowidth: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var daiKyHieu = \"\";\r\n //get count list combo ký hiệu\r\n //var countkyHieu = $$(\"kyhieu_id\") != undefined ? $$(\"kyhieu_id\").getPopup().getList().serialize().length : 0;\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDanhSachChoKy\";\r\n var table = $$(\"invoiceViews\");\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n table.define(\"params\", params);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n url = url + \"&tlbparam=null&tthai=Chờ sinh số&loaihd=3\";\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n if (id.column == \"ten_loai\") {\r\n //webix.confirm()\r\n //webix.message(\"Continue Dowloading ... !\", \"debug\");\r\n }\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n // onItemDblClick: function (id, e, node) {\r\n // var btnEdit = $$(\"btnEdit\");\r\n // btnEdit.callEvent(\"onClick\");\r\n // },\r\n onAfterLoad: function () {\r\n // webix.delay(function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n // }, this);\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n },\r\n {\r\n id: \"stt\",\r\n header: [\"STT\"],\r\n //header: \"\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"nvarchar\",\r\n //css: { \"line-height\": \"20px !important\", \"height\": \"63px !important\"}\r\n },\r\n {\r\n id: \"ttthdon\",\r\n width: 200,\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"serverMultiSelectFilter\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00502\",\r\n },\r\n ],\r\n template: function (obj, common) {\r\n console.log(obj.tthdon);\r\n return \"\" + obj.ttthdon + \"\";\r\n },\r\n },\r\n {\r\n id: \"tthai\",\r\n header: [\"Trạng thái chứng từ\", { content: \"serverMultiSelectFilter\", options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00504\" }],\r\n width: 200,\r\n },\r\n //\r\n // {\r\n // id: \"btnMessagetn\",\r\n // header: [\"
Lịch sử xử lý
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // template: function (obj) {\r\n // return \" \";\r\n // },\r\n // width: 180,\r\n // },\r\n // {\r\n // id: \"issendmail\",\r\n // header: [\"
Gửi Email
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // checkValue: true, uncheckValue: false,\r\n // template: \"{common.rcheckbox()}\"\r\n // },\r\n // {\r\n // id: \"error_status\",\r\n // header: [\"
Có lỗi/Không có lỗi
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // template: function (obj) {\r\n // if (obj.error_status == \"1\") {\r\n // return \"Có lỗi \";\r\n // } else {\r\n // return \"\";\r\n // }\r\n // }\r\n // },\r\n {\r\n id: \"nlap\",\r\n header: [\"Ngày Chứng từ \", { content: \"serverDateRangeFilter\" }],\r\n width: 120,\r\n css: { \"text-align\": \"center\" },\r\n //format:webix.i18n.dateFormatStr\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n // template: function (obj, common) {\r\n // if(obj.tthai!=\"Chờ ký\"){\r\n // return obj.nlap=\"\";\r\n // }\r\n // else{\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // var text = removeTimeZoneT(obj.nlap);\r\n // return format(text);\r\n // }\r\n // },\r\n columnType: \"datetime\",\r\n },\r\n // {\r\n // id: \"nky\",\r\n // header: [\"
Ngày ký
\", { content: \"serverDateRangeFilter\" }],\r\n // width: 150,\r\n // css: { \"text-align\": \"center\" },\r\n // //format:webix.i18n.dateFormatStr\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // columnType: \"datetime\",\r\n // },\r\n {\r\n id: \"khieu\",\r\n header: [\"Ký hiệu\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"nvarchar\",\r\n },\r\n { id: \"shdon\", header: [\"Số Chứng từ \", { content: \"textFilter\" }], width: 100, columnType: \"numeric\", css: { \"text-align\": \"center\" } },\r\n\r\n { id: \"mst\", header: [\"Mã số thuế\", { content: \"textFilter\" }], width: 120, columnType: \"nvarchar\" },\r\n { id: \"mdvi\", header: [\"Đơn vị quản lý\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n { id: \"ten_str\", header: [\"Tên đơn vị/ Tên người mua\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n {\r\n id: \"tgtttbso_last\",\r\n header: [\"Số thuế thu nhập\", { content: \"textFilter\" }],\r\n width: 150,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \".\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \",\",\r\n // decimalSize: 0\r\n // }),\r\n css: { \"text-align\": \"right\" },\r\n template: function (obj, common) {\r\n return obj.tgtttbso_last == null ? 0 : fm(obj.tgtttbso_last);\r\n },\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"nglap\",\r\n header: [\"Người lập\", { content: \"textFilter\" }],\r\n width: 200,\r\n columnType: \"nvarchar\",\r\n },\r\n // { id: \"ten_loai\", header: [\"
Tên loại HĐ
\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\" }\r\n ],\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv * 1 != $$(\"pagerA\").config.size) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ sinh số\", details: \"Danh sách chờ sinh số\" });\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n if (editmode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (editmode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/78_duyethoadon_chosinhso',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\", \"views/forms/68_huyhoadon\", \"views/forms/68_huyhoadon_1\", \"views/forms/68_hoadon_history\", \"views/commonHD\"], function (\r\n app,\r\n _,\r\n user,\r\n invoiceForms,\r\n huyhoadon,\r\n huyhoadon_1,\r\n hoadonHistory,\r\n commonHD\r\n) {\r\n \r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var op = [];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n data: [\r\n // {\r\n // id: \"huyhoadon\",\r\n // value: \"Hủy hóa đơn\",\r\n // },\r\n // {\r\n // id: \"huyhoadon2\",\r\n // value: \"Hủy hóa đơn có tạo mới\",\r\n // },\r\n // {\r\n // id: \"giaitrinh\",\r\n // value: \"Giải trình\",\r\n // },\r\n {\r\n id: \"notifyErrorInvoice\",\r\n value: \"Thông báo HĐĐT có sai sót\",\r\n },\r\n {\r\n id: \"replace_invoice\",\r\n value: \"Thay thế\",\r\n },\r\n {\r\n id: \"increase_change_invoice\",\r\n value: \"Điều chỉnh tăng\",\r\n },\r\n {\r\n id: \"reduce_change_invoice\",\r\n value: \"Điều chỉnh giảm\",\r\n },\r\n {\r\n id: \"info_change\",\r\n value: \"Điều chỉnh thông tin\",\r\n },\r\n {\r\n id: \"dowloadXml\",\r\n value: \"Tải XML\",\r\n },\r\n {\r\n id: \"dowloadXmlMessageHD\",\r\n value: \"Tải XML thông điệp gửi HĐ\",\r\n },\r\n // {\r\n // id: \"nhanExcel\",\r\n // value: \"Nhận Excel hàng loạt\",\r\n // },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n this.hide();\r\n if (record.id == \"nhanExcel\") {\r\n var table = $$(\"invoiceViews\");\r\n\r\n require([\"views/forms/uploadexcel\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n webix.$$(\"uploader\").define(\"formData\", {\r\n excel_id: \"EX00011\",\r\n filename: \"Nhan hang loat hoa don 68 (GTGT).xlsx\",\r\n });\r\n webix.$$(\"uploader\").hide();\r\n });\r\n }\r\n // console.log(record);\r\n if (record.id == \"huyhoadon\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"Hóa đơn đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"huyhoadon2\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"Hóa đơn đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnStep299\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // webix.$$(\"btnStep299\").define(\"hidden\", false);\r\n // webix.$$(\"btnStep2\").show();\r\n // webix.$$(\"btnStep299\").hide();\r\n // $$(\"btnHuyHDDT\").addView({ view:\"button\",label: \"Bước 2\" }, 1);\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"dowloadXml\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký/chờ gửi không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlInvoice.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"dowloadXmlMessageHD\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"Hóa đơn chưa được gửi tới CQT, không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLThongDiepHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlThongDiepHoaDon.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"giaitrinh\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon != \"4\" && item.tthdon != \"0\") {\r\n webix.message(\"Hóa đơn không ở trạng thái rà soát không thể lập giải trình !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n // webix.$$(\"tctbao\").setValue(2);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n this.hide();\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 2,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n\r\n // var fn = Function(\"_\", \"user\", item.on_click);\r\n // fn(_, user);\r\n }\r\n if (record.id == \"notifyErrorInvoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var cungshd = true;\r\n for (var k = 1; k <= data.length - 1; k++) {\r\n if (data[k][\"stbao\"] !== data[0][\"stbao\"]) {\r\n cungshd = false;\r\n break;\r\n }\r\n }\r\n if (cungshd === true) {\r\n var loai = 1;\r\n if (data[0][\"stbao\"] !== null) loai = 2;\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai == \"Chờ gửi\" || data[i].tthai == \"Chờ ký\" || data[i].tthai == \"Đã ký\") {\r\n webix.message(\"Hóa đơn chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n if (data[i].ladhddt == undefined) {\r\n data[i].ladhddt = \"1\";\r\n }\r\n if (data[i].tctbao == undefined) {\r\n data[i].tctbao = \"1\";\r\n }\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n var tongquat = {\r\n so: data[0].stbao,\r\n ntbccqt: data[0].ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n data.forEach(function (item) {\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n //this.hide();\r\n win.show();\r\n });\r\n } else {\r\n webix.message(\"Các hóa đơn chọn phải có số thông báo giống nhau\", \"error\");\r\n }\r\n } else {\r\n var item = table.getSelectedItem();\r\n\r\n var loai = 1;\r\n if (item[\"stbao\"] !== null) loai = 2;\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\" || item.tthai == \"Đã ký\") {\r\n webix.message(\"Hóa đơn chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.ladhddt == undefined) {\r\n item[\"ladhddt\"] = \"1\";\r\n }\r\n if (item.tctbao == undefined) {\r\n item[\"tctbao\"] = \"1\";\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n var tongquat = {\r\n so: item.stbao,\r\n ntbccqt: item.ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n\r\n //this.hide();\r\n win.show();\r\n }\r\n\r\n // var win = table.$scope.ui(huyhoadon.$ui);\r\n // huyhoadon.setEditMode(1);\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n // webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // this.hide();\r\n // win.show();\r\n }\r\n if (record.id == \"replace_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 2;\r\n item.tthdon_original = 2;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"increase_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 19;\r\n item.tthdon_original = 19;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n // var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n // tableDetail.clearAll();\r\n // tableDetail.refresh();\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n /*tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tthue\").editor = null;*/\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n\r\n //detailForm.show();\r\n }\r\n if (record.id == \"reduce_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 21;\r\n item.tthdon_original = 21;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.note = \"reduce_change_invoice\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"info_change\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 23;\r\n item.tthdon_original = 23;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n // tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n // tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n // tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tthue\").editor = null;\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n },\r\n },\r\n });\r\n\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ ký\", details: \"Danh sách hóa đơn chờ ký\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n { value: \"Thêm (F4)\", icon: \"far fa-plus\" },\r\n { value: \"Sửa (F3)\", icon: \"far fa-edit\" },\r\n { value: \"Xóa (F8)\", icon: \"far fa-trash\" },\r\n { $template: \"Separator\" },\r\n { value: \"Tải File đính kèm\", icon: \"fas fa-file-text-o\" },\r\n { value: \"Xem in\", icon: \"fas fa-print\" },\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm (F4)\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa (F3)\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa (F8)\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Tải File đính kèm\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n webix.message(\"Continue !\", \"debug\");\r\n //console.log(item);\r\n // if (item.inv_originalId != null && item.inv_originalId != undefined) {\r\n // var box = webix.modalbox({\r\n // title: \"Đang in chứng từ\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // //var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n // //newWin.location = fileURL;\r\n // window.open(fileURL, '_blank');\r\n\r\n // }\r\n // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // // var file = new Blob([data], { type: 'application/pdf' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, '_blank');\r\n // // // webix.html.download(file, $$('tenfile').getValue());\r\n // // });\r\n // }\r\n // else {\r\n // webix.message(\"Không tồn tại hóa đơn gốc !\", \"error\");\r\n // return;\r\n // }\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Sinh số\") + \"\",\r\n id: \"btnKyCXL\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Bạn chắc chắn muốn sinh số hóa đơn ?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n //check validate và return ra list hoadon_id\r\n var dsHoaDon = commonHD.GetHoaDonChon();\r\n var lsHodonId = [];\r\n\r\n dsHoaDon.forEach(function (p) {\r\n lsHodonId.push(p.hdon_id);\r\n });\r\n\r\n commonHD.DuyetHoaDon(lsHodonId, \"Chờ sinh số\");\r\n }\r\n },\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Kết xuất màn hình\") + \"\",\r\n id: \"btnXuatExel\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Kết xuất màn hình toàn bộ hóa đơn theo filter?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n width: 300,\r\n callback: function (res) {\r\n if (res) {\r\n //check validate và return ra list hoadon_id\r\n var table = $$(\"invoiceViews\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var datafetch = table.config.datafetch;\r\n table.config.datafetch = table.data.count();\r\n var params = table.config.params;\r\n if (params != null && params != undefined) {\r\n params.count = table.data.count();\r\n }\r\n var columnlst = table.config.columns;\r\n var arrcolumn = [];\r\n\r\n for (var i = 2; i < columnlst.length; i++) {\r\n var exporttype = \"\";\r\n if (columnlst[i].columnType == \"character varying\" || columnlst[i].columnType == \"nvarchar\") {\r\n exporttype = \"string\";\r\n } else {\r\n exporttype = columnlst[i].columnType;\r\n }\r\n var item = {\r\n id: columnlst[i].id,\r\n header: columnlst[i].header[0][\"text\"],\r\n\r\n exportType: exporttype,\r\n };\r\n arrcolumn.push(item);\r\n }\r\n table.load(\r\n table.config.url,\r\n function () {\r\n webix.toExcel($$(\"invoiceViews\"), {\r\n columns: arrcolumn,\r\n rawValues: true,\r\n filename: \"DanhSachHoaDonFull\",\r\n });\r\n table.config.datafetch = datafetch;\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n params\r\n );\r\n }\r\n },\r\n });\r\n },\r\n },\r\n // Khong duoc xoa cai ngoac nhon nay\r\n {},\r\n {},\r\n {},\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n //autowidth: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var daiKyHieu = \"\";\r\n //get count list combo ký hiệu\r\n //var countkyHieu = $$(\"kyhieu_id\") != undefined ? $$(\"kyhieu_id\").getPopup().getList().serialize().length : 0;\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDanhSachChoKy\";\r\n var table = $$(\"invoiceViews\");\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n table.define(\"params\", params);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n if (item.filterType == \"serverDateRangeFilter\") {\r\n var startDate = item.value.start;\r\n if (startDate !== null && startDate !== undefined) {\r\n var hoursDiff = startDate.getHours() - startDate.getTimezoneOffset() / 60;\r\n var minutesDiff = (startDate.getHours() - startDate.getTimezoneOffset()) % 60;\r\n startDate.setHours(hoursDiff);\r\n startDate.setMinutes(minutesDiff);\r\n item.value.start = startDate;\r\n }\r\n\r\n var endDate = item.value.end;\r\n if (endDate !== null && endDate !== undefined) {\r\n var hoursDiff = endDate.getHours() - endDate.getTimezoneOffset() / 60;\r\n var minutesDiff = (endDate.getHours() - endDate.getTimezoneOffset()) % 60;\r\n endDate.setHours(hoursDiff);\r\n endDate.setMinutes(minutesDiff);\r\n item.value.end = endDate;\r\n }\r\n }\r\n\r\n if (item.value != \"\" && item.value != null) {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n url = url + \"&tlbparam=null&tthai=Chờ sinh số\";\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n if (id.column == \"ten_loai\") {\r\n //webix.confirm()\r\n //webix.message(\"Continue Dowloading ... !\", \"debug\");\r\n }\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n // onItemDblClick: function (id, e, node) {\r\n // var btnEdit = $$(\"btnEdit\");\r\n // btnEdit.callEvent(\"onClick\");\r\n // },\r\n onAfterLoad: function () {\r\n // webix.delay(function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n // }, this);\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n },\r\n subview: {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n css: \"subInvoice\",\r\n scrollX: true,\r\n // tabbar: {\r\n // width: 200\r\n // },\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n margin: 10,\r\n id: \"hoadon68_chitiet_view\",\r\n height: 200,\r\n columns: [\r\n { id: \"stt\", header: \"\", width: 30 },\r\n {\r\n id: \"ma\",\r\n header: _(\"Mã hàng hóa\"),\r\n editor: \"text\",\r\n width: 100,\r\n editable: true,\r\n },\r\n {\r\n id: \"ten\",\r\n header: _(\"Tên hàng hóa\"),\r\n editor: \"text\",\r\n width: 350,\r\n editable: true,\r\n },\r\n {\r\n id: \"mdvtinh\",\r\n header: _(\"ĐVT\"),\r\n editor: \"text\",\r\n width: 80,\r\n editable: true,\r\n },\r\n {\r\n id: \"sluong\",\r\n header: _(\"Số lương\"),\r\n editor: \"autonumeric\",\r\n width: 100,\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"dgia\",\r\n header: _(\"Đơn giá\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"thtien\",\r\n header: _(\"Tiền trước thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"tlckhau\",\r\n header: _(\"% CK\"),\r\n width: 80,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"stckhau\",\r\n header: _(\"Tiền CK\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tsuat\",\r\n header: _(\"Thuế suất\"),\r\n width: 100,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tthue\",\r\n header: _(\"Tiền thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tgtien\",\r\n header: _(\"Tiền sau thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"khuyen_mai\",\r\n header: _(\"Khuyến mại\"),\r\n width: 100,\r\n editor: \"checkbox\",\r\n editable: true,\r\n template: \"{common.checkbox()}\",\r\n checkValue: true,\r\n uncheckValue: false,\r\n },\r\n ],\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n },\r\n {\r\n id: \"stt\",\r\n header: [\"STT\"],\r\n //header: \"\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"nvarchar\",\r\n //css: { \"line-height\": \"20px !important\", \"height\": \"63px !important\"}\r\n },\r\n {\r\n id: \"ttthdon\",\r\n\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"serverMultiSelectFilter\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00502\",\r\n },\r\n ],\r\n // template: function (obj, common) {\r\n // console.log(obj);\r\n // },\r\n\r\n template: function (obj, common) {\r\n console.log(obj.tthdon);\r\n return \"\" + obj.ttthdon + \"\";\r\n },\r\n width: 200,\r\n },\r\n {\r\n id: \"tthai\",\r\n header: [\"Trạng thái gửi CQT\", { content: \"serverMultiSelectFilter\", options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00504\" }],\r\n width: 200,\r\n },\r\n //\r\n // {\r\n // id: \"btnMessagetn\",\r\n // header: [\"Lịch sử xử lý\"],\r\n // css: { \"text-align\": \"center\" },\r\n // template: function (obj) {\r\n // return \" \";\r\n // },\r\n // width: 180,\r\n // },\r\n // {\r\n // id: \"issendmail\",\r\n // header: [\"Gửi Email\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // checkValue: true, uncheckValue: false,\r\n // template: \"{common.rcheckbox()}\"\r\n // },\r\n // {\r\n // id: \"error_status\",\r\n // header: [\"Có lỗi/Không có lỗi\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // template: function (obj) {\r\n // if (obj.error_status == \"1\") {\r\n // return \"Có lỗi \";\r\n // } else {\r\n // return \"\";\r\n // }\r\n // }\r\n // },\r\n {\r\n id: \"nlap\",\r\n header: [\"Ngày hóa đơn\", { content: \"serverDateRangeFilter\" }],\r\n width: 120,\r\n css: { \"text-align\": \"center\" },\r\n //format:webix.i18n.dateFormatStr\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n // template: function (obj, common) {\r\n // if(obj.tthai!=\"Chờ ký\"){\r\n // return obj.nlap=\"\";\r\n // }\r\n // else{\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // var text = removeTimeZoneT(obj.nlap);\r\n // return format(text);\r\n // }\r\n // },\r\n columnType: \"datetime\",\r\n },\r\n // {\r\n // id: \"nky\",\r\n // header: [\"Ngày ký\", { content: \"serverDateRangeFilter\" }],\r\n // width: 150,\r\n // css: { \"text-align\": \"center\" },\r\n // //format:webix.i18n.dateFormatStr\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // columnType: \"datetime\",\r\n // },\r\n {\r\n id: \"khieu\",\r\n header: [\"Ký hiệu\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"is_hdcma_str\",\r\n header: [\"Tình trạng mã\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n /*columnType: \"integer\",\r\n template: function (obj) {\r\n return obj.is_hdcma === 0 ? \"Không mã\" : obj.is_hdcma === 1 ? \"Có mã\" : \"Không rõ tình trạng mã\";\r\n },*/\r\n },\r\n // {\r\n // id: \"khieu\", header: [\"Ký hiệu\", { content: \"textFilter\" }],\r\n // template: function (obj, common) {\r\n // return \"\" + obj.ten_trang_thai + \"\";\r\n // }, width: 100, columnType: \"nvarchar\"\r\n // },\r\n { id: \"shdon\", header: [\"Số hóa đơn\", { content: \"textFilter\" }], width: 100, columnType: \"numeric\", css: { \"text-align\": \"center\" } },\r\n\r\n { id: \"mst\", header: [\"Mã số thuế\", { content: \"textFilter\" }], width: 120, columnType: \"nvarchar\" },\r\n // { id: \"mtdiep_gui\", header: [\"
Mã thông điệp gửi đi
\", { content: \"textFilter\" }], width: 350, columnType: \"nvarchar\" },\r\n // { id: \"mtdiep_cqt\", header: [\"
Mã thông điệp cơ quan thuế
\", { content: \"textFilter\" }], width: 300, columnType: \"nvarchar\" },\r\n { id: \"mdvi\", header: [\"Đơn vị quản lý\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n { id: \"ten_str\", header: [\"Tên đơn vị/ Tên người mua\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n {\r\n id: \"tgtttbso_last\",\r\n header: [\"Thành tiền sau thuế\", { content: \"textFilter\" }],\r\n width: 150,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \".\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \",\",\r\n // decimalSize: 0\r\n // }),\r\n css: { \"text-align\": \"right\" },\r\n template: function (obj, common) {\r\n return obj.tgtttbso_last == null ? 0 : fm(obj.tgtttbso_last);\r\n },\r\n columnType: \"numeric\",\r\n },\r\n { id: \"htttoan\", header: [\"Hình thức TT\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\", css: { \"text-align\": \"center\" } },\r\n // {\r\n // id: \"tdlap\",\r\n // header: [\"Thời điểm lập\", { content: \"textFilter\" }],\r\n // width: 200,\r\n // columnType: \"nvarchar\",\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // },\r\n {\r\n id: \"nglap\",\r\n header: [\"Người lập\", { content: \"textFilter\" }],\r\n width: 200,\r\n columnType: \"nvarchar\",\r\n },\r\n // { id: \"ten_loai\", header: [\"Tên loại HĐ\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\" }\r\n ],\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv * 1 != $$(\"pagerA\").config.size) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.$$(\"title\").parse({\r\n title: \"Danh sách chờ sinh số\",\r\n details: \"Danh sách chờ sinh số\",\r\n });\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n if (editmode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (editmode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/78_duyethoadon_tncn',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\", \"views/forms/68_huyhoadon\", \"views/forms/68_huyhoadon_1\", \"views/forms/68_hoadon_history\", \"views/commonHD\"], function (\r\n app,\r\n _,\r\n user,\r\n invoiceForms,\r\n huyhoadon,\r\n huyhoadon_1,\r\n hoadonHistory,\r\n commonHD\r\n) {\r\n \r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var op = [];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n data: [\r\n // {\r\n // id: \"huyhoadon\",\r\n // value: \"Hủy chứng từ\",\r\n // },\r\n // {\r\n // id: \"huyhoadon2\",\r\n // value: \"Hủy chứng từ có tạo mới\",\r\n // },\r\n // {\r\n // id: \"giaitrinh\",\r\n // value: \"Giải trình\",\r\n // },\r\n {\r\n id: \"notifyErrorInvoice\",\r\n value: \"Thông báo HĐĐT có sai sót\",\r\n },\r\n {\r\n id: \"replace_invoice\",\r\n value: \"Thay thế\",\r\n },\r\n {\r\n id: \"increase_change_invoice\",\r\n value: \"Điều chỉnh tăng\",\r\n },\r\n {\r\n id: \"reduce_change_invoice\",\r\n value: \"Điều chỉnh giảm\",\r\n },\r\n {\r\n id: \"info_change\",\r\n value: \"Điều chỉnh thông tin\",\r\n },\r\n {\r\n id: \"dowloadXml\",\r\n value: \"Tải XML\",\r\n },\r\n {\r\n id: \"dowloadXmlMessageHD\",\r\n value: \"Tải XML thông điệp gửi HĐ\",\r\n },\r\n // {\r\n // id: \"nhanExcel\",\r\n // value: \"Nhận Excel hàng loạt\",\r\n // },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n this.hide();\r\n if (record.id == \"nhanExcel\") {\r\n var table = $$(\"invoiceViews\");\r\n\r\n require([\"views/forms/uploadexcel\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id: \"EX00011\", filename: \"Nhan hang loat hoa don 68 (GTGT).xlsx\" });\r\n webix.$$(\"uploader\").hide();\r\n });\r\n }\r\n // console.log(record);\r\n if (record.id == \"huyhoadon\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"chứng từ đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"chứng từ đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"huyhoadon2\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"chứng từ đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"chứng từ đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnStep299\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // webix.$$(\"btnStep299\").define(\"hidden\", false);\r\n // webix.$$(\"btnStep2\").show();\r\n // webix.$$(\"btnStep299\").hide();\r\n // $$(\"btnHuyHDDT\").addView({ view:\"button\",label: \"Bước 2\" }, 1);\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"dowloadXml\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"chứng từ đang ở trạng thái chờ ký/chờ gửi không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlInvoice.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"dowloadXmlMessageHD\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"chứng từ chưa được gửi tới CQT, không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLThongDiepHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlThongDiepHoaDon.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"giaitrinh\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon != \"4\" && item.tthdon != \"0\") {\r\n webix.message(\"chứng từ không ở trạng thái rà soát không thể lập giải trình !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n // webix.$$(\"tctbao\").setValue(2);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n this.hide();\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 2,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n\r\n // var fn = Function(\"_\", \"user\", item.on_click);\r\n // fn(_, user);\r\n }\r\n if (record.id == \"notifyErrorInvoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var cungshd = true;\r\n for (var k = 1; k <= data.length - 1; k++) {\r\n if (data[k][\"stbao\"] !== data[0][\"stbao\"]) {\r\n cungshd = false;\r\n break;\r\n }\r\n }\r\n if (cungshd === true) {\r\n var loai = 1;\r\n if (data[0][\"stbao\"] !== null) loai = 2;\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai == \"Chờ gửi\" || data[i].tthai == \"Chờ ký\" || data[i].tthai == \"Đã ký\") {\r\n webix.message(\"chứng từ chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n if (data[i].ladhddt == undefined) {\r\n data[i].ladhddt = \"1\";\r\n }\r\n if (data[i].tctbao == undefined) {\r\n data[i].tctbao = \"1\";\r\n }\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n var tongquat = {\r\n so: data[0].stbao,\r\n ntbccqt: data[0].ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n data.forEach(function (item) {\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n //this.hide();\r\n win.show();\r\n });\r\n } else {\r\n webix.message(\"Các chứng từ chọn phải có số thông báo giống nhau\", \"error\");\r\n }\r\n } else {\r\n var item = table.getSelectedItem();\r\n\r\n var loai = 1;\r\n if (item[\"stbao\"] !== null) loai = 2;\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\" || item.tthai == \"Đã ký\") {\r\n webix.message(\"chứng từ chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.ladhddt == undefined) {\r\n item[\"ladhddt\"] = \"1\";\r\n }\r\n if (item.tctbao == undefined) {\r\n item[\"tctbao\"] = \"1\";\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n var tongquat = {\r\n so: item.stbao,\r\n ntbccqt: item.ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n\r\n //this.hide();\r\n win.show();\r\n }\r\n\r\n // var win = table.$scope.ui(huyhoadon.$ui);\r\n // huyhoadon.setEditMode(1);\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n // webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // this.hide();\r\n // win.show();\r\n }\r\n if (record.id == \"replace_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn chứng từ !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"chứng từ chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 2;\r\n item.tthdon_original = 2;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"increase_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn chứng từ !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"chứng từ chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 19;\r\n item.tthdon_original = 19;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n // var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n // tableDetail.clearAll();\r\n // tableDetail.refresh();\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"chứng từ điều chỉnh cho chứng từ số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n /*tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tthue\").editor = null;*/\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n\r\n //detailForm.show();\r\n }\r\n if (record.id == \"reduce_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn chứng từ !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"chứng từ chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 21;\r\n item.tthdon_original = 21;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.note = \"reduce_change_invoice\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"chứng từ điều chỉnh cho chứng từ số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"info_change\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn chứng từ !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"chứng từ chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 23;\r\n item.tthdon_original = 23;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"chứng từ điều chỉnh cho chứng từ số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n // tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n // tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n // tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tthue\").editor = null;\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n },\r\n },\r\n });\r\n\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ ký\", details: \"Danh sách chứng từ chờ ký\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n { value: \"Thêm (F4)\", icon: \"far fa-plus\" },\r\n { value: \"Sửa (F3)\", icon: \"far fa-edit\" },\r\n { value: \"Xóa (F8)\", icon: \"far fa-trash\" },\r\n { $template: \"Separator\" },\r\n { value: \"Tải File đính kèm\", icon: \"fas fa-file-text-o\" },\r\n { value: \"Xem in\", icon: \"fas fa-print\" },\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm (F4)\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa (F3)\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa (F8)\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Tải File đính kèm\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ !\", \"error\");\r\n return;\r\n }\r\n webix.message(\"Continue !\", \"debug\");\r\n //console.log(item);\r\n // if (item.inv_originalId != null && item.inv_originalId != undefined) {\r\n // var box = webix.modalbox({\r\n // title: \"Đang in chứng từ\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // //var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n // //newWin.location = fileURL;\r\n // window.open(fileURL, '_blank');\r\n\r\n // }\r\n // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // // var file = new Blob([data], { type: 'application/pdf' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, '_blank');\r\n // // // webix.html.download(file, $$('tenfile').getValue());\r\n // // });\r\n // }\r\n // else {\r\n // webix.message(\"Không tồn tại chứng từ gốc !\", \"error\");\r\n // return;\r\n // }\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn chứng từ cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in chứng từ ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"chứng từ điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"In chuyển đổi\") + \"\",\r\n id: \"btnPrintConvert\",\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn chứng từ cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in chứng từ ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"chứng từ điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Ký chờ xử lý\") + \"\",\r\n id: \"btnKyCXL\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Bạn chắc chắn muốn ký chứng từ ?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n //check validate và return ra list hoadon_id\r\n var dsHoaDon = commonHD.validate_HD_ReturnListHdonKhongMaVaCoMaId();\r\n var lsCoMa = dsHoaDon[0];\r\n var lsKhongMa = dsHoaDon[1];\r\n\r\n // console.log(lsCoMa);\r\n // console.log(lsKhongMa);\r\n if (lsCoMa.length > 0 || lsKhongMa.length > 0) {\r\n var lsHodonId = [];\r\n lsHodonId.push(lsCoMa);\r\n lsHodonId.push(lsKhongMa);\r\n commonHD.ExcuteHoaDonForHasCodeAndNotHaveAnyCode(lsHodonId, false, true, \"TCTTNhap\");\r\n }\r\n }\r\n },\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Kết xuất màn hình\") + \"\",\r\n id: \"btnXuatExel\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Kết xuất màn hình toàn bộ chứng từ theo filter?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n width: 300,\r\n callback: function (res) {\r\n if (res) {\r\n var table = $$(\"invoiceViews\");\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var datafetch = table.config.datafetch;\r\n table.config.datafetch = table.data.count();\r\n var params = table.config.params;\r\n if (params != null && params != undefined) {\r\n params.count = table.data.count();\r\n }\r\n var columnlst = table.config.columns;\r\n var arrcolumn = [];\r\n\r\n for (var i = 2; i < columnlst.length; i++) {\r\n var exporttype = \"\";\r\n if (columnlst[i].columnType == \"character varying\" || columnlst[i].columnType == \"nvarchar\") {\r\n exporttype = \"string\";\r\n } else {\r\n exporttype = columnlst[i].columnType;\r\n }\r\n var item = {\r\n id: columnlst[i].id,\r\n header: columnlst[i].header[0][\"text\"],\r\n\r\n exportType: exporttype,\r\n };\r\n arrcolumn.push(item);\r\n }\r\n\r\n table.load(\r\n table.config.url,\r\n function () {\r\n webix.toExcel($$(\"invoiceViews\"), {\r\n columns: arrcolumn,\r\n rawValues: true,\r\n filename: \"DanhSachHoaDonFull\",\r\n });\r\n table.config.datafetch = datafetch;\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n params\r\n );\r\n }\r\n },\r\n });\r\n },\r\n },\r\n // Khong duoc xoa cai ngoac nhon nay\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n //autowidth: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var daiKyHieu = \"\";\r\n //get count list combo ký hiệu\r\n //var countkyHieu = $$(\"kyhieu_id\") != undefined ? $$(\"kyhieu_id\").getPopup().getList().serialize().length : 0;\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDanhSachChoKy\";\r\n\r\n var table = $$(\"invoiceViews\");\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n table.define(\"params\", params);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n url = url + \"&tlbparam=null&tthai=Chờ ký&loaihd=3\";\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n if (id.column == \"ten_loai\") {\r\n //webix.confirm()\r\n //webix.message(\"Continue Dowloading ... !\", \"debug\");\r\n }\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n // onItemDblClick: function (id, e, node) {\r\n // var btnEdit = $$(\"btnEdit\");\r\n // btnEdit.callEvent(\"onClick\");\r\n // },\r\n onAfterLoad: function () {\r\n // webix.delay(function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n // }, this);\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n },\r\n {\r\n id: \"stt\",\r\n header: [\"STT\"],\r\n //header: \"\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"nvarchar\",\r\n //css: { \"line-height\": \"20px !important\", \"height\": \"63px !important\"}\r\n },\r\n {\r\n id: \"ttthdon\",\r\n width: 200,\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"serverMultiSelectFilter\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00502\",\r\n },\r\n ],\r\n template: function (obj, common) {\r\n console.log(obj.tthdon);\r\n return \"\" + obj.ttthdon + \"\";\r\n },\r\n },\r\n {\r\n id: \"tthai\",\r\n header: [\"Trạng thái chứng từ\", { content: \"serverMultiSelectFilter\", options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00504\" }],\r\n width: 200,\r\n },\r\n //\r\n // {\r\n // id: \"btnMessagetn\",\r\n // header: [\"
Lịch sử xử lý
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // template: function (obj) {\r\n // return \" \";\r\n // },\r\n // width: 180,\r\n // },\r\n // {\r\n // id: \"issendmail\",\r\n // header: [\"
Gửi Email
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // checkValue: true, uncheckValue: false,\r\n // template: \"{common.rcheckbox()}\"\r\n // },\r\n // {\r\n // id: \"error_status\",\r\n // header: [\"
Có lỗi/Không có lỗi
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // template: function (obj) {\r\n // if (obj.error_status == \"1\") {\r\n // return \"Có lỗi \";\r\n // } else {\r\n // return \"\";\r\n // }\r\n // }\r\n // },\r\n {\r\n id: \"nlap\",\r\n header: [\"Ngày chứng từ\", { content: \"serverDateRangeFilter\" }],\r\n width: 120,\r\n css: { \"text-align\": \"center\" },\r\n //format:webix.i18n.dateFormatStr\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n // template: function (obj, common) {\r\n // if(obj.tthai!=\"Chờ ký\"){\r\n // return obj.nlap=\"\";\r\n // }\r\n // else{\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // var text = removeTimeZoneT(obj.nlap);\r\n // return format(text);\r\n // }\r\n // },\r\n columnType: \"datetime\",\r\n },\r\n // {\r\n // id: \"nky\",\r\n // header: [\"
Ngày ký
\", { content: \"serverDateRangeFilter\" }],\r\n // width: 150,\r\n // css: { \"text-align\": \"center\" },\r\n // //format:webix.i18n.dateFormatStr\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // columnType: \"datetime\",\r\n // },\r\n {\r\n id: \"khieu\",\r\n header: [\"Ký hiệu\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"nvarchar\",\r\n },\r\n { id: \"shdon\", header: [\"Số chứng từ\", { content: \"textFilter\" }], width: 100, columnType: \"numeric\", css: { \"text-align\": \"center\" } },\r\n\r\n { id: \"mst\", header: [\"Mã số thuế\", { content: \"textFilter\" }], width: 120, columnType: \"nvarchar\" },\r\n { id: \"mdvi\", header: [\"Đơn vị quản lý\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n { id: \"ten_str\", header: [\"Tên đơn vị/ Tên người mua\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n {\r\n id: \"tgtttbso_last\",\r\n header: [\"Số thuế thu nhập\", { content: \"textFilter\" }],\r\n width: 150,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \".\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \",\",\r\n // decimalSize: 0\r\n // }),\r\n css: { \"text-align\": \"right\" },\r\n template: function (obj, common) {\r\n return obj.tgtttbso_last == null ? 0 : fm(obj.tgtttbso_last);\r\n },\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"nglap\",\r\n header: [\"Người lập\", { content: \"textFilter\" }],\r\n width: 200,\r\n columnType: \"nvarchar\",\r\n },\r\n // { id: \"ten_loai\", header: [\"
Tên loại HĐ
\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\" }\r\n ],\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ ký\", details: \"Danh sách chờ ký\" });\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n if (editmode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (editmode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n // var table = $$(\"invoiceViews\");\r\n // var url = {\r\n // $proxy: true,\r\n // load: function (view, callback, params) {\r\n // console.log(view.config);\r\n // console.log(callback);\r\n // console.log(params);\r\n // /*var windowno = app.path[1].params[0];\r\n // var url = app.config.host + \"/System/GetDataByWindowNo?window_id=\" + windowno;\r\n\r\n // if (params == null) {\r\n // url = url + \"&start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n // }\r\n // else {\r\n // url = url + \"&start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n // if (params.filter != null) {\r\n // var array = [];\r\n\r\n // for (var property in params.filter) {\r\n\r\n // var column = view.getColumnConfig(property);\r\n\r\n // if (column !== undefined) {\r\n // var item = {\r\n // columnName: property,\r\n // columnType: column.columnType,\r\n // value: params.filter[property]\r\n // };\r\n\r\n // array.push(item);\r\n // }\r\n // }\r\n\r\n // //console.log(JSON.stringify(array));\r\n // if (array.length > 0) {\r\n // url = url + \"&filter=\" + JSON.stringify(array);\r\n // }\r\n // else {\r\n // url = url + \"&filter=null\";\r\n // }\r\n\r\n // }\r\n // else {\r\n // url = url + \"&filter=null\";\r\n // }\r\n // }\r\n\r\n // if (view.config.infoparam != null) {\r\n // url = url + \"&infoparam=\" + JSON.stringify(view.config.infoparam);\r\n // }\r\n // else {\r\n // url = url + \"&infoparam=null\";\r\n // }\r\n\r\n // var tlbParams = $$(\"tlbParams\");\r\n\r\n // if (tlbParams !== undefined) {\r\n // var childViews = tlbParams.getChildViews();\r\n\r\n // var parameters = [];\r\n\r\n // for (var i = 0; i < childViews.length; i++) {\r\n // var child = childViews[i];\r\n\r\n // var id = child.config.id;\r\n // var value_field = child.config.value_field;\r\n\r\n // var item = {\r\n // columnName: value_field,\r\n // value: $$(id).getValue()\r\n // };\r\n\r\n // parameters.push(item);\r\n // }\r\n\r\n // url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n\r\n // }\r\n // else {\r\n // url = url + \"&tlbparam=null\";\r\n // }*/\r\n\r\n // //console.log(url);\r\n\r\n // /* webix.ajax().bind(view)\r\n // .get(url,function(text){\r\n // var json =JSON.parse(text);\r\n\r\n // this.clearAll();\r\n\r\n // if (!json.hasOwnProperty(\"error\")){\r\n // this.parse(json.data,\"json\");\r\n // }\r\n // }); */\r\n\r\n // //webix.ajax(url, callback, view);\r\n\r\n // }\r\n // };\r\n\r\n // table.define(\"url\", url);\r\n },\r\n };\r\n});\r\n\ndefine('views/78_duyethoadon',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\", \"views/forms/68_huyhoadon\", \"views/forms/68_huyhoadon_1\", \"views/forms/68_hoadon_history\", \"views/commonHD\"], function (\r\n app,\r\n _,\r\n user,\r\n invoiceForms,\r\n huyhoadon,\r\n huyhoadon_1,\r\n hoadonHistory,\r\n commonHD\r\n) {\r\n \r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var dataCount;\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var op = [];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n data: [\r\n // {\r\n // id: \"huyhoadon\",\r\n // value: \"Hủy hóa đơn\",\r\n // },\r\n // {\r\n // id: \"huyhoadon2\",\r\n // value: \"Hủy hóa đơn có tạo mới\",\r\n // },\r\n // {\r\n // id: \"giaitrinh\",\r\n // value: \"Giải trình\",\r\n // },\r\n {\r\n id: \"notifyErrorInvoice\",\r\n value: \"Thông báo HĐĐT có sai sót\",\r\n },\r\n {\r\n id: \"replace_invoice\",\r\n value: \"Thay thế\",\r\n },\r\n {\r\n id: \"increase_change_invoice\",\r\n value: \"Điều chỉnh tăng\",\r\n },\r\n {\r\n id: \"reduce_change_invoice\",\r\n value: \"Điều chỉnh giảm\",\r\n },\r\n {\r\n id: \"info_change\",\r\n value: \"Điều chỉnh thông tin\",\r\n },\r\n {\r\n id: \"dowloadXml\",\r\n value: \"Tải XML\",\r\n },\r\n {\r\n id: \"dowloadXmlMessageHD\",\r\n value: \"Tải XML thông điệp gửi HĐ\",\r\n },\r\n // {\r\n // id: \"nhanExcel\",\r\n // value: \"Nhận Excel hàng loạt\",\r\n // },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n this.hide();\r\n if (record.id == \"nhanExcel\") {\r\n var table = $$(\"invoiceViews\");\r\n\r\n require([\"views/forms/uploadexcel\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id: \"EX00011\", filename: \"Nhan hang loat hoa don 68 (GTGT).xlsx\" });\r\n webix.$$(\"uploader\").hide();\r\n });\r\n }\r\n // console.log(record);\r\n if (record.id == \"huyhoadon\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"Hóa đơn đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"huyhoadon2\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"Hóa đơn đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnStep299\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // webix.$$(\"btnStep299\").define(\"hidden\", false);\r\n // webix.$$(\"btnStep2\").show();\r\n // webix.$$(\"btnStep299\").hide();\r\n // $$(\"btnHuyHDDT\").addView({ view:\"button\",label: \"Bước 2\" }, 1);\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"dowloadXml\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký/chờ gửi không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlInvoice.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"dowloadXmlMessageHD\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"Hóa đơn chưa được gửi tới CQT, không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLThongDiepHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlThongDiepHoaDon.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"giaitrinh\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon != \"4\" && item.tthdon != \"0\") {\r\n webix.message(\"Hóa đơn không ở trạng thái rà soát không thể lập giải trình !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n // webix.$$(\"tctbao\").setValue(2);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n this.hide();\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 2,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n\r\n // var fn = Function(\"_\", \"user\", item.on_click);\r\n // fn(_, user);\r\n }\r\n if (record.id == \"notifyErrorInvoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var cungshd = true;\r\n for (var k = 1; k <= data.length - 1; k++) {\r\n if (data[k][\"stbao\"] !== data[0][\"stbao\"]) {\r\n cungshd = false;\r\n break;\r\n }\r\n }\r\n if (cungshd === true) {\r\n var loai = 1;\r\n if (data[0][\"stbao\"] !== null) loai = 2;\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai == \"Chờ gửi\" || data[i].tthai == \"Chờ ký\" || data[i].tthai == \"Đã ký\") {\r\n webix.message(\"Hóa đơn chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n if (data[i].ladhddt == undefined) {\r\n data[i].ladhddt = \"1\";\r\n }\r\n if (data[i].tctbao == undefined) {\r\n data[i].tctbao = \"1\";\r\n }\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n var tongquat = {\r\n so: data[0].stbao,\r\n ntbccqt: data[0].ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n data.forEach(function (item) {\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n //this.hide();\r\n win.show();\r\n });\r\n } else {\r\n webix.message(\"Các hóa đơn chọn phải có số thông báo giống nhau\", \"error\");\r\n }\r\n } else {\r\n var item = table.getSelectedItem();\r\n\r\n var loai = 1;\r\n if (item[\"stbao\"] !== null) loai = 2;\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\" || item.tthai == \"Đã ký\") {\r\n webix.message(\"Hóa đơn chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.ladhddt == undefined) {\r\n item[\"ladhddt\"] = \"1\";\r\n }\r\n if (item.tctbao == undefined) {\r\n item[\"tctbao\"] = \"1\";\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n var tongquat = {\r\n so: item.stbao,\r\n ntbccqt: item.ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n\r\n //this.hide();\r\n win.show();\r\n }\r\n\r\n // var win = table.$scope.ui(huyhoadon.$ui);\r\n // huyhoadon.setEditMode(1);\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n // webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // this.hide();\r\n // win.show();\r\n }\r\n if (record.id == \"replace_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 2;\r\n item.tthdon_original = 2;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"increase_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 19;\r\n item.tthdon_original = 19;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n // var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n // tableDetail.clearAll();\r\n // tableDetail.refresh();\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n /*tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tthue\").editor = null;*/\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n\r\n //detailForm.show();\r\n }\r\n if (record.id == \"reduce_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 21;\r\n item.tthdon_original = 21;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.note = \"reduce_change_invoice\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"info_change\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 23;\r\n item.tthdon_original = 23;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n // tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n // tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n // tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tthue\").editor = null;\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n },\r\n },\r\n });\r\n\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ ký\", details: \"Danh sách hóa đơn chờ ký\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n { value: \"Thêm (F4)\", icon: \"far fa-plus\" },\r\n { value: \"Sửa (F3)\", icon: \"far fa-edit\" },\r\n { value: \"Xóa (F8)\", icon: \"far fa-trash\" },\r\n { $template: \"Separator\" },\r\n { value: \"Tải File đính kèm\", icon: \"fas fa-file-text-o\" },\r\n { value: \"Xem in\", icon: \"fas fa-print\" },\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm (F4)\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa (F3)\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa (F8)\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Tải File đính kèm\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n webix.message(\"Continue !\", \"debug\");\r\n //console.log(item);\r\n // if (item.inv_originalId != null && item.inv_originalId != undefined) {\r\n // var box = webix.modalbox({\r\n // title: \"Đang in chứng từ\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // //var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n // //newWin.location = fileURL;\r\n // window.open(fileURL, '_blank');\r\n\r\n // }\r\n // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // // var file = new Blob([data], { type: 'application/pdf' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, '_blank');\r\n // // // webix.html.download(file, $$('tenfile').getValue());\r\n // // });\r\n // }\r\n // else {\r\n // webix.message(\"Không tồn tại hóa đơn gốc !\", \"error\");\r\n // return;\r\n // }\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"In chuyển đổi\") + \"\",\r\n id: \"btnPrintConvert\",\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Ký chờ xử lý\") + \"\",\r\n id: \"btnKyCXL\",\r\n click: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n if ($$(\"chonAll\").getValue() == 0) {\r\n webix.confirm({\r\n text: \"Bạn chắc chắn muốn ký hóa đơn ?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n //check validate và return ra list hoadon_id\r\n var dsHoaDon = commonHD.validate_HD_ReturnListHdonKhongMaVaCoMaId();\r\n var lsCoMa = dsHoaDon[0];\r\n var lsKhongMa = dsHoaDon[1];\r\n \r\n // console.log(lsCoMa);\r\n // console.log(lsKhongMa);\r\n \r\n if (lsCoMa.length > 0 || lsKhongMa.length > 0) {\r\n var lsHodonId = [];\r\n lsHodonId.push(lsCoMa);\r\n lsHodonId.push(lsKhongMa);\r\n commonHD.ExcuteHoaDonForHasCodeAndNotHaveAnyCode(lsHodonId, false, true);\r\n }\r\n }\r\n },\r\n });\r\n } else {\r\n webix.confirm({\r\n text: \"Bạn chắc chắn muốn ký toàn bộ hóa đơn ?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.message(\"Hệ thống đang xử lý, vui lòng chờ trong giây lát!\");\r\n var table = $$(\"invoiceViews\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n //Lấy tất cả và validate hóa đơn\r\n var dsHoaDon = commonHD.getAllHD_ValidateHD();\r\n var lsCoMa = dsHoaDon[0];\r\n var lsKhongMa = dsHoaDon[1];\r\n \r\n // console.log(lsCoMa);\r\n // console.log(lsKhongMa);\r\n\r\n if (lsCoMa.length > 0 || lsKhongMa.length > 0) {\r\n var lsHodonId = [];\r\n lsHodonId.push(lsCoMa);\r\n lsHodonId.push(lsKhongMa);\r\n commonHD.ExcuteHoaDonForHasCodeAndNotHaveAnyCode(lsHodonId, false, true, 2);\r\n }\r\n\r\n var params = table.config.params;\r\n var datafetch = table.config.datafetch;\r\n table.load(\r\n table.config.url,\r\n function () {\r\n table.config.datafetch = datafetch;\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n params\r\n );\r\n }\r\n },\r\n });\r\n }\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Ký và gửi CQT\") + \"\",\r\n id: \"btnKyGuiCQT\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Bạn chắc chắn muốn ký và gửi hóa đơn ?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n //check validate và return ra list hoadon_id\r\n var dsHoaDon = commonHD.validate_HD_ReturnListHdonKhongMaVaCoMaVaMTTId();\r\n var lsCoMa = dsHoaDon[0];\r\n var lsKhongMa = dsHoaDon[1];\r\n var lstDataChooseMTT = dsHoaDon[2];\r\n\r\n // console.log(lsCoMa);\r\n // console.log(lsKhongMa);\r\n\r\n if (lsCoMa.length > 0 || lsKhongMa.length > 0) {\r\n var lsHodonId = [];\r\n lsHodonId.push(lsCoMa);\r\n lsHodonId.push(lsKhongMa);\r\n commonHD.ExcuteHoaDonForHasCodeAndNotHaveAnyCode(lsHodonId, true, true);\r\n }\r\n if (lstDataChooseMTT.length > 0) {\r\n var lsHodonId = $.map(lstDataChooseMTT, function (item) {\r\n return item.hdon_id;\r\n });;\r\n commonHD.ExcuteHoaDonMTT(lsHodonId);\r\n }\r\n }\r\n },\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Kết xuất màn hình\") + \"\",\r\n id: \"btnXuatExel\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Kết xuất màn hình toàn bộ hóa đơn theo filter?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n width: 300,\r\n callback: function (res) {\r\n if (res) {\r\n var table = $$(\"invoiceViews\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var datafetch = table.config.datafetch;\r\n table.config.datafetch = table.data.count();\r\n var params = table.config.params;\r\n if (params != null && params != undefined) {\r\n params.count = table.data.count();\r\n }\r\n var columnlst = table.config.columns;\r\n var arrcolumn = [];\r\n\r\n for (var i = 2; i < columnlst.length; i++) {\r\n var exporttype = \"\";\r\n if (columnlst[i].columnType == \"character varying\" || columnlst[i].columnType == \"nvarchar\") {\r\n exporttype = \"string\";\r\n } else {\r\n exporttype = columnlst[i].columnType;\r\n }\r\n var item = {\r\n id: columnlst[i].id,\r\n header: columnlst[i].header[0][\"text\"],\r\n\r\n exportType: exporttype,\r\n };\r\n arrcolumn.push(item);\r\n }\r\n table.load(\r\n table.config.url,\r\n function () {\r\n webix.toExcel($$(\"invoiceViews\"), {\r\n columns: arrcolumn,\r\n rawValues: true,\r\n filename: \"DanhSachHoaDonFull\",\r\n });\r\n table.config.datafetch = datafetch;\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n params\r\n );\r\n }\r\n },\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Chọn toàn bộ\") + \"\",\r\n id: \"btnChonToanBo\",\r\n click: function (callback, params) {\r\n $$(\"chonAll\").getValue() ? $$(\"chonAll\").setValue(0) : $$(\"chonAll\").setValue(1);\r\n }\r\n },\r\n {\r\n view:\"checkbox\", \r\n id:\"chonAll\", \r\n label:\"Chọn toàn bộ\", \r\n labelWidth: 90,\r\n value:false,\r\n readonly: true\r\n },\r\n // Khong duoc xoa cai ngoac nhon nay\r\n // ok a\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n //autowidth: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var daiKyHieu = \"\";\r\n //get count list combo ký hiệu\r\n //var countkyHieu = $$(\"kyhieu_id\") != undefined ? $$(\"kyhieu_id\").getPopup().getList().serialize().length : 0;\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDanhSachChoKy\";\r\n var table = $$(\"invoiceViews\");\r\n\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n table.define(\"params\", params);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n if (item.filterType == \"serverDateRangeFilter\") {\r\n var startDate = item.value.start;\r\n if (startDate !== null && startDate !== undefined) {\r\n var hoursDiff = startDate.getHours() - startDate.getTimezoneOffset() / 60;\r\n var minutesDiff = (startDate.getHours() - startDate.getTimezoneOffset()) % 60;\r\n startDate.setHours(hoursDiff);\r\n startDate.setMinutes(minutesDiff);\r\n item.value.start = startDate;\r\n }\r\n\r\n var endDate = item.value.end;\r\n if (endDate !== null && endDate !== undefined) {\r\n var hoursDiff = endDate.getHours() - endDate.getTimezoneOffset() / 60;\r\n var minutesDiff = (endDate.getHours() - endDate.getTimezoneOffset()) % 60;\r\n endDate.setHours(hoursDiff);\r\n endDate.setMinutes(minutesDiff);\r\n item.value.end = endDate;\r\n }\r\n }\r\n\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n url = url + \"&tlbparam=null&tthai=Chờ ký\";\r\n \r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n if (id.column == \"ten_loai\") {\r\n //webix.confirm()\r\n //webix.message(\"Continue Dowloading ... !\", \"debug\");\r\n }\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n // onItemDblClick: function (id, e, node) {\r\n // var btnEdit = $$(\"btnEdit\");\r\n // btnEdit.callEvent(\"onClick\");\r\n // },\r\n onAfterLoad: function () {\r\n // webix.delay(function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n // }, this);\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n },\r\n subview: {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n css: \"subInvoice\",\r\n scrollX: true,\r\n // tabbar: {\r\n // width: 200\r\n // },\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n margin: 10,\r\n id: \"hoadon68_chitiet_view\",\r\n height: 200,\r\n columns: [\r\n { id: \"stt\", header: \"\", width: 30 },\r\n {\r\n id: \"ma\",\r\n header: _(\"Mã hàng hóa\"),\r\n editor: \"text\",\r\n width: 100,\r\n editable: true,\r\n },\r\n {\r\n id: \"ten\",\r\n header: _(\"Tên hàng hóa\"),\r\n editor: \"text\",\r\n width: 350,\r\n editable: true,\r\n },\r\n {\r\n id: \"mdvtinh\",\r\n header: _(\"ĐVT\"),\r\n editor: \"text\",\r\n width: 80,\r\n editable: true,\r\n },\r\n {\r\n id: \"sluong\",\r\n header: _(\"Số lương\"),\r\n editor: \"autonumeric\",\r\n width: 100,\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"dgia\",\r\n header: _(\"Đơn giá\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"thtien\",\r\n header: _(\"Tiền trước thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"tlckhau\",\r\n header: _(\"% CK\"),\r\n width: 80,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"stckhau\",\r\n header: _(\"Tiền CK\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tsuat\",\r\n header: _(\"Thuế suất\"),\r\n width: 100,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tthue\",\r\n header: _(\"Tiền thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tgtien\",\r\n header: _(\"Tiền sau thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"khuyen_mai\",\r\n header: _(\"Khuyến mại\"),\r\n width: 100,\r\n editor: \"checkbox\",\r\n editable: true,\r\n template: \"{common.checkbox()}\",\r\n checkValue: true,\r\n uncheckValue: false,\r\n },\r\n ],\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n },\r\n {\r\n id: \"stt\",\r\n header: [\"STT\"],\r\n //header: \"\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"nvarchar\",\r\n //css: { \"line-height\": \"20px !important\", \"height\": \"63px !important\"}\r\n },\r\n {\r\n id: \"ttthdon\",\r\n\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"serverMultiSelectFilter\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00502\",\r\n },\r\n ],\r\n // template: function (obj, common) {\r\n // console.log(obj);\r\n // },\r\n\r\n // template: \"#ttthdon#\",\r\n\r\n template: function (obj, common) {\r\n console.log(obj.tthdon);\r\n return \"\" + obj.ttthdon + \"\";\r\n },\r\n width: 200,\r\n },\r\n {\r\n id: \"tthai\",\r\n header: [\"Trạng thái gửi CQT\", { content: \"serverMultiSelectFilter\", options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00504\" }],\r\n width: 200,\r\n },\r\n //\r\n // {\r\n // id: \"btnMessagetn\",\r\n // header: [\"
Lịch sử xử lý
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // template: function (obj) {\r\n // return \" \";\r\n // },\r\n // width: 180,\r\n // },\r\n // {\r\n // id: \"issendmail\",\r\n // header: [\"
Gửi Email
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // checkValue: true, uncheckValue: false,\r\n // template: \"{common.rcheckbox()}\"\r\n // },\r\n // {\r\n // id: \"error_status\",\r\n // header: [\"
Có lỗi/Không có lỗi
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // template: function (obj) {\r\n // if (obj.error_status == \"1\") {\r\n // return \"Có lỗi \";\r\n // } else {\r\n // return \"\";\r\n // }\r\n // }\r\n // },\r\n {\r\n id: \"nlap\",\r\n header: [\"Ngày hóa đơn\", { content: \"serverDateRangeFilter\" }],\r\n width: 120,\r\n css: { \"text-align\": \"center\" },\r\n //format:webix.i18n.dateFormatStr\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n // template: function (obj, common) {\r\n // if(obj.tthai!=\"Chờ ký\"){\r\n // return obj.nlap=\"\";\r\n // }\r\n // else{\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // var text = removeTimeZoneT(obj.nlap);\r\n // return format(text);\r\n // }\r\n // },\r\n columnType: \"datetime\",\r\n },\r\n // {\r\n // id: \"nky\",\r\n // header: [\"
Ngày ký
\", { content: \"serverDateRangeFilter\" }],\r\n // width: 150,\r\n // css: { \"text-align\": \"center\" },\r\n // //format:webix.i18n.dateFormatStr\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // columnType: \"datetime\",\r\n // },\r\n {\r\n id: \"khieu\",\r\n header: [\"Ký hiệu\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"is_hdcma_str\",\r\n header: [\"Tình trạng mã\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n /*columnType: \"integer\",\r\n template: function (obj) {\r\n return obj.is_hdcma === 0 ? \"Không mã\" : obj.is_hdcma === 1 ? \"Có mã\" : \"Không rõ tình trạng mã\";\r\n },*/\r\n },\r\n // {\r\n // id: \"khieu\", header: [\"
Ký hiệu
\", { content: \"textFilter\" }],\r\n // template: function (obj, common) {\r\n // return \"\" + obj.ten_trang_thai + \"\";\r\n // }, width: 100, columnType: \"nvarchar\"\r\n // },\r\n { id: \"shdon\", header: [\"Số hóa đơn\", { content: \"textFilter\" }], width: 100, columnType: \"numeric\", css: { \"text-align\": \"center\" } },\r\n\r\n { id: \"mst\", header: [\"Mã số thuế\", { content: \"textFilter\" }], width: 120, columnType: \"nvarchar\" },\r\n // { id: \"mtdiep_gui\", header: [\"
Mã thông điệp gửi đi
\", { content: \"textFilter\" }], width: 350, columnType: \"nvarchar\" },\r\n // { id: \"mtdiep_cqt\", header: [\"
Mã thông điệp cơ quan thuế
\", { content: \"textFilter\" }], width: 300, columnType: \"nvarchar\" },\r\n { id: \"mdvi\", header: [\"Đơn vị quản lý\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n { id: \"ten_str\", header: [\"Tên đơn vị/ Tên người mua\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n {\r\n id: \"tgtttbso_last\",\r\n header: [\"Thành tiền sau thuế\", { content: \"textFilter\" }],\r\n width: 150,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \".\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \",\",\r\n // decimalSize: 0\r\n // }),\r\n css: { \"text-align\": \"right\" },\r\n template: function (obj, common) {\r\n return obj.tgtttbso_last == null ? 0 : fm(obj.tgtttbso_last);\r\n },\r\n columnType: \"numeric\",\r\n },\r\n { id: \"htttoan\", header: [\"Hình thức TT\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\", css: { \"text-align\": \"center\" } },\r\n // {\r\n // id: \"tdlap\",\r\n // header: [\"
Thời điểm lập
\", { content: \"textFilter\" }],\r\n // width: 200,\r\n // columnType: \"nvarchar\",\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // },\r\n {\r\n id: \"nglap\",\r\n header: [\"Người lập\", { content: \"textFilter\" }],\r\n width: 200,\r\n columnType: \"nvarchar\",\r\n },\r\n // { id: \"ten_loai\", header: [\"
Tên loại HĐ
\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\" }\r\n ],\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n dataCount = data.count;\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ ký\", details: \"Danh sách chờ ký\" });\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n if (editmode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (editmode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n // var table = $$(\"invoiceViews\");\r\n // var url = {\r\n // $proxy: true,\r\n // load: function (view, callback, params) {\r\n // console.log(view.config);\r\n // console.log(callback);\r\n // console.log(params);\r\n // /*var windowno = app.path[1].params[0];\r\n // var url = app.config.host + \"/System/GetDataByWindowNo?window_id=\" + windowno;\r\n\r\n // if (params == null) {\r\n // url = url + \"&start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n // }\r\n // else {\r\n // url = url + \"&start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n // if (params.filter != null) {\r\n // var array = [];\r\n\r\n // for (var property in params.filter) {\r\n\r\n // var column = view.getColumnConfig(property);\r\n\r\n // if (column !== undefined) {\r\n // var item = {\r\n // columnName: property,\r\n // columnType: column.columnType,\r\n // value: params.filter[property]\r\n // };\r\n\r\n // array.push(item);\r\n // }\r\n // }\r\n\r\n // //console.log(JSON.stringify(array));\r\n // if (array.length > 0) {\r\n // url = url + \"&filter=\" + JSON.stringify(array);\r\n // }\r\n // else {\r\n // url = url + \"&filter=null\";\r\n // }\r\n\r\n // }\r\n // else {\r\n // url = url + \"&filter=null\";\r\n // }\r\n // }\r\n\r\n // if (view.config.infoparam != null) {\r\n // url = url + \"&infoparam=\" + JSON.stringify(view.config.infoparam);\r\n // }\r\n // else {\r\n // url = url + \"&infoparam=null\";\r\n // }\r\n\r\n // var tlbParams = $$(\"tlbParams\");\r\n\r\n // if (tlbParams !== undefined) {\r\n // var childViews = tlbParams.getChildViews();\r\n\r\n // var parameters = [];\r\n\r\n // for (var i = 0; i < childViews.length; i++) {\r\n // var child = childViews[i];\r\n\r\n // var id = child.config.id;\r\n // var value_field = child.config.value_field;\r\n\r\n // var item = {\r\n // columnName: value_field,\r\n // value: $$(id).getValue()\r\n // };\r\n\r\n // parameters.push(item);\r\n // }\r\n\r\n // url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n\r\n // }\r\n // else {\r\n // url = url + \"&tlbparam=null\";\r\n // }*/\r\n\r\n // //console.log(url);\r\n\r\n // /* webix.ajax().bind(view)\r\n // .get(url,function(text){\r\n // var json =JSON.parse(text);\r\n\r\n // this.clearAll();\r\n\r\n // if (!json.hasOwnProperty(\"error\")){\r\n // this.parse(json.data,\"json\");\r\n // }\r\n // }); */\r\n\r\n // //webix.ajax(url, callback, view);\r\n\r\n // }\r\n // };\r\n\r\n // table.define(\"url\", url);\r\n },\r\n };\r\n});\r\n\n// var form = $$(\"window-form\");\r\n// var values = form.getValues();\r\n// var currency = values[\"inv_currencyCode\"];\r\n// var table = $$(tableId);\r\n// var selectedItem = table.getItem(rowId)\r\n// //var selectedItem = table.getSelectedItem();\r\n// var loai_dc = selectedItem.ma1 == null ? 0 : selectedItem.ma1;\r\n\r\n// // Lấy phần thập phân ở danh mục ngoại tệ\r\n// var table_decimalPlaces = {\r\n// inv_quantity: 0,\r\n// inv_TotalAmountWithoutVat: 0,\r\n// inv_vatAmount: 0,\r\n// inv_TotalAmount: 0\r\n// }\r\n\r\n// table.eachColumn(function (columnId) {\r\n// var a = columnId.toString();\r\n// if (a == \"inv_quantity\" || a == \"inv_TotalAmountWithoutVat\" || a == \"inv_vatAmount\" || a == \"inv_TotalAmount\") {\r\n// var b = table.getColumnConfig(a).numericConfig.decimalPlaces;\r\n// if (b != null) {\r\n// table_decimalPlaces[a] = b;\r\n// }\r\n\r\n// }\r\n// });\r\n// //End call dmnt\r\n\r\n// if (loai_dc == 0) {\r\n\r\n// var inv_quantity = webix.rules.isNumber(selectedItem.inv_quantity) ? selectedItem.inv_quantity : 0;\r\n// var inv_unitPrice = webix.rules.isNumber(selectedItem.inv_unitPrice) ? selectedItem.inv_unitPrice : 0;\r\n// var inv_TotalAmountWithoutVat = webix.rules.isNumber(selectedItem.inv_TotalAmountWithoutVat) ? selectedItem.inv_TotalAmountWithoutVat : 0;\r\n// var inv_discountPercentage = webix.rules.isNumber(selectedItem.inv_discountPercentage) ? selectedItem.inv_discountPercentage : 0;\r\n// var inv_discountAmount = webix.rules.isNumber(selectedItem.inv_discountAmount) ? selectedItem.inv_discountAmount : 0;\r\n// var ma_thue = webix.rules.isNumber(selectedItem.ma_thue) ? selectedItem.ma_thue : 0;\r\n// if (ma_thue == -1) { ma_thue = 0; }\r\n// var inv_vatAmount = webix.rules.isNumber(selectedItem.inv_vatAmount) ? selectedItem.inv_vatAmount : 0;\r\n// var inv_TotalAmount = webix.rules.isNumber(selectedItem.inv_TotalAmount) ? selectedItem.inv_TotalAmount : 0;\r\n// var inv_exchangeRate = webix.rules.isNumber($$(\"inv_exchangeRate_inv_InvoiceAuth\").getValue()) ? $$(\"inv_exchangeRate_inv_InvoiceAuth\").getValue() : 0;\r\n\r\n// if (inv_quantity < 0) { inv_quantity = 0; }\r\n// if (inv_unitPrice < 0) { inv_unitPrice = 0; }\r\n// if (inv_TotalAmountWithoutVat < 0) { inv_TotalAmountWithoutVat = 0; }\r\n\r\n// if (columnId == \"inv_quantity\" || columnId == \"inv_unitPrice\" || columnId == \"inv_TotalAmountWithoutVat\" || columnId == \"inv_TotalAmount\" || columnId == \"inv_discountPercentage\" || columnId == \"inv_discountAmount\") {\r\n\r\n// if (inv_unitPrice > 0) {\r\n// inv_TotalAmountWithoutVat = (inv_quantity * inv_unitPrice).toFixed(table_decimalPlaces.inv_TotalAmountWithoutVat);//Update dòng 1\r\n// } else {\r\n// if (inv_TotalAmountWithoutVat > 0) {\r\n// if (inv_quantity > 0) {\r\n// inv_unitPrice = inv_TotalAmountWithoutVat / inv_quantity;\r\n// }\r\n// } else {\r\n// if (inv_TotalAmount > 0) {\r\n// if (inv_TotalAmountWithoutVat <= 0) {\r\n// inv_TotalAmountWithoutVat = (inv_TotalAmount / (1 + ma_thue / 100)).toFixed(table_decimalPlaces.inv_TotalAmountWithoutVat);// Update dòng 2\r\n// }\r\n\r\n// if (inv_quantity > 0) {\r\n// inv_unitPrice = inv_TotalAmountWithoutVat / inv_quantity;\r\n// }\r\n// }\r\n// }\r\n// }\r\n\r\n// if (inv_discountPercentage < 0) { inv_discountPercentage = 0; }\r\n// if (inv_discountPercentage > 100) { inv_discountPercentage = 0; }\r\n\r\n// inv_discountAmount = inv_TotalAmountWithoutVat * inv_discountPercentage / 100;\r\n// if ((inv_discountAmount - inv_TotalAmountWithoutVat) > 0) {\r\n// inv_discountAmount = 0;\r\n// }\r\n// inv_vatAmount = ((inv_TotalAmountWithoutVat - inv_discountAmount) * ma_thue / 100).toFixed(table_decimalPlaces.inv_vatAmount); // Update dòng 3\r\n// //if(inv_TotalAmount <= 0){\r\n// inv_TotalAmount = currency == \"VND\" ? Math.round(inv_TotalAmountWithoutVat - inv_discountAmount + parseFloat(inv_vatAmount)) : (inv_TotalAmountWithoutVat - inv_discountAmount + parseFloat(inv_vatAmount));\r\n// //}\r\n\r\n// selectedItem.inv_quantity = inv_quantity;\r\n// selectedItem.inv_unitPrice = inv_unitPrice;\r\n// selectedItem.inv_TotalAmountWithoutVat = inv_TotalAmountWithoutVat;\r\n// selectedItem.inv_discountPercentage = inv_discountPercentage;\r\n// selectedItem.inv_discountAmount = inv_discountAmount;\r\n// selectedItem.inv_vatAmount = inv_vatAmount;\r\n// selectedItem.inv_TotalAmount = inv_TotalAmount;\r\n// table.updateItem(selectedItem.id, selectedItem);\r\n// }\r\n\r\n\r\n// if (columnId == \"inv_quantity\" || columnId == \"inv_unitPrice\" || columnId == \"inv_TotalAmountWithoutVat\"\r\n// || columnId == \"inv_discountPercentage\" || columnId == \"inv_discountAmount\"\r\n// || columnId == \"ma_thue\" || columnId == \"inv_vatAmount\" || columnId == \"inv_promotion\"\r\n// || columnId == \"inv_TotalAmount\" || columnId == \"check_giam_tru\") {\r\n\r\n// var inv_TotalAmountWithoutVat = 0;\r\n// var inv_discountAmount = 0;\r\n// var inv_vatAmount = 0;\r\n// var inv_TotalAmount = 0;\r\n// var count = table.count();\r\n\r\n// for (var i = 0; i < count; i++) {\r\n// var rowIndex = table.getIdByIndex(i);\r\n// var record = table.getItem(rowIndex);\r\n\r\n// var check_giam_tru = record.hasOwnProperty(\"check_giam_tru\") ? record.check_giam_tru : false;\r\n\r\n// if (record.hasOwnProperty(\"inv_TotalAmountWithoutVat\")) {\r\n// var value = record.inv_TotalAmountWithoutVat == null ? 0 : Number(record.inv_TotalAmountWithoutVat);\r\n// value = check_giam_tru === true ? -1 * value : value;\r\n// inv_TotalAmountWithoutVat = currency == \"VND\" ? Math.round(inv_TotalAmountWithoutVat + value) : inv_TotalAmountWithoutVat + value;\r\n// }\r\n\r\n// if (record.hasOwnProperty(\"inv_discountAmount\")) {\r\n// var value = record.inv_discountAmount == null ? 0 : Number(record.inv_discountAmount);\r\n// inv_discountAmount = currency == \"VND\" ? Math.round(inv_discountAmount + value) : inv_discountAmount + value;\r\n// }\r\n\r\n// if (record.hasOwnProperty(\"inv_vatAmount\")) {\r\n// var value = record.inv_vatAmount == null ? 0 : Number(record.inv_vatAmount);\r\n// value = check_giam_tru === true ? -1 * value : value;\r\n// inv_vatAmount = currency == \"VND\" ? Math.round(inv_vatAmount + value) : inv_vatAmount + value;\r\n// }\r\n// if (record.hasOwnProperty(\"inv_TotalAmount\")) {\r\n// var value = record.inv_TotalAmount == null ? 0 : Number(record.inv_TotalAmount);\r\n// value = check_giam_tru === true ? -1 * value : value;\r\n// inv_TotalAmount = currency == \"VND\" ? Math.round(inv_TotalAmount + value) : inv_TotalAmount + value;\r\n// }\r\n// }\r\n\r\n\r\n// $$(\"inv_TotalAmountWithoutVat_inv_InvoiceAuth\").setValue(inv_TotalAmountWithoutVat);\r\n// $$(\"inv_discountAmount_inv_InvoiceAuth\").setValue(inv_discountAmount);\r\n// $$(\"inv_vatAmount_inv_InvoiceAuth\").setValue(inv_vatAmount);\r\n// //$$(\"inv_TotalAmount_inv_InvoiceAuth\").setValue(inv_TotalAmountWithoutVat - inv_discountAmount + inv_vatAmount);\r\n// $$(\"inv_TotalAmount_inv_InvoiceAuth\").setValue(inv_TotalAmount);\r\n\r\n\r\n// }\r\n// }\r\n// else {\r\n// if (columnId == \"inv_quantity\" || columnId == \"inv_unitPrice\" || columnId == \"inv_TotalAmountWithoutVat\" || columnId == \"inv_TotalAmount\" || columnId == \"inv_vatAmount\" || columnId == \"ma1\" || columnId == \"tieu_thuc\") {\r\n\r\n// var inv_quantity = webix.rules.isNumber(selectedItem.inv_quantity) ? selectedItem.inv_quantity : 0;\r\n// var inv_unitPrice = webix.rules.isNumber(selectedItem.inv_unitPrice) ? selectedItem.inv_unitPrice : 0;\r\n// var inv_TotalAmountWithoutVat = webix.rules.isNumber(selectedItem.inv_TotalAmountWithoutVat) ? selectedItem.inv_TotalAmountWithoutVat : 0;\r\n// var inv_discountPercentage = webix.rules.isNumber(selectedItem.inv_discountPercentage) ? selectedItem.inv_discountPercentage : 0;\r\n// var inv_discountAmount = webix.rules.isNumber(selectedItem.inv_discountAmount) ? selectedItem.inv_discountAmount : 0;\r\n// var ma_thue = webix.rules.isNumber(selectedItem.ma_thue) ? selectedItem.ma_thue : 0;\r\n// if (ma_thue == -1) { ma_thue = 0; }\r\n// var inv_vatAmount = webix.rules.isNumber(selectedItem.inv_vatAmount) ? selectedItem.inv_vatAmount : 0;\r\n// var inv_TotalAmount = webix.rules.isNumber(selectedItem.inv_TotalAmount) ? selectedItem.inv_TotalAmount : 0;\r\n// var inv_itemName = selectedItem.inv_itemName;\r\n// var tieu_thuc = selectedItem.tieu_thuc == null ? \"\" : selectedItem.tieu_thuc;\r\n// if (inv_unitPrice > 0) {\r\n// inv_TotalAmountWithoutVat = inv_quantity * inv_unitPrice;\r\n// } else {\r\n// if (inv_TotalAmountWithoutVat > 0) {\r\n// if (inv_quantity > 0) {\r\n// inv_unitPrice = inv_TotalAmountWithoutVat / inv_quantity;\r\n// }\r\n// } else {\r\n// if (inv_TotalAmount > 0) {\r\n// inv_TotalAmountWithoutVat = inv_TotalAmount / (1 + ma_thue / 100);\r\n// if (inv_quantity > 0) {\r\n// inv_unitPrice = inv_TotalAmountWithoutVat / inv_quantity;\r\n// }\r\n// }\r\n// }\r\n// }\r\n\r\n// inv_discountAmount = inv_TotalAmountWithoutVat * inv_discountPercentage / 100;\r\n// inv_vatAmount = (inv_TotalAmountWithoutVat - inv_discountAmount) * ma_thue / 100;\r\n// inv_TotalAmount = inv_TotalAmountWithoutVat - inv_discountAmount + inv_vatAmount;\r\n// if (loai_dc == -1) {\r\n// //selectedItem.inv_itemName = \"Điều chỉnh giảm \" + tieu_thuc + \" \" + selectedItem.inv_itemName;\r\n// selectedItem.inv_TotalAmountWithoutVat = inv_TotalAmountWithoutVat * loai_dc;\r\n// selectedItem.inv_discountAmount = inv_discountAmount * loai_dc;\r\n// selectedItem.inv_vatAmount = inv_vatAmount * loai_dc;\r\n// selectedItem.inv_TotalAmount = inv_TotalAmount * loai_dc;\r\n// selectedItem.inv_unitPrice = inv_unitPrice;\r\n// selectedItem.inv_quantity = inv_quantity;\r\n// }\r\n// if (loai_dc == 1) {\r\n// //selectedItem.inv_itemName = \"Điều chỉnh tăng \" + tieu_thuc + \" \" + selectedItem.inv_itemName;\r\n// selectedItem.inv_TotalAmountWithoutVat = inv_TotalAmountWithoutVat < 0 ? inv_TotalAmountWithoutVat * -1 : inv_TotalAmountWithoutVat;\r\n// selectedItem.inv_discountAmount = inv_discountAmount < 0 ? inv_discountAmount * -1 : inv_discountAmount;\r\n// selectedItem.inv_vatAmount = inv_vatAmount < 0 ? inv_vatAmount * -1 : inv_vatAmount;\r\n// selectedItem.inv_TotalAmount = inv_TotalAmount < 0 ? inv_TotalAmount * -1 : inv_TotalAmount;\r\n// selectedItem.inv_unitPrice = inv_unitPrice < 0 ? inv_unitPrice * -1 : inv_unitPrice;\r\n// selectedItem.inv_quantity = inv_quantity < 0 ? inv_quantity * -1 : inv_quantity;\r\n// }\r\n// table.updateItem(selectedItem.id, selectedItem);\r\n// }\r\n\r\n\r\n// if (columnId == \"inv_quantity\" || columnId == \"inv_unitPrice\" || columnId == \"inv_TotalAmountWithoutVat\"\r\n// || columnId == \"inv_discountPercentage\" || columnId == \"inv_discountAmount\"\r\n// || columnId == \"ma_thue\" || columnId == \"inv_vatAmount\" || columnId == \"inv_promotion\" || columnId == \"ma1\" || columnId == \"inv_TotalAmount\") {\r\n\r\n// var inv_TotalAmountWithoutVat = 0;\r\n// var inv_discountAmount = 0;\r\n// var inv_vatAmount = 0;\r\n\r\n// var count = table.count();\r\n// for (var i = 0; i < count; i++) {\r\n// var rowIndex = table.getIdByIndex(i);\r\n// var record = table.getItem(rowIndex);\r\n\r\n// if (record.hasOwnProperty(\"inv_TotalAmountWithoutVat\")) {\r\n// var value = record.inv_TotalAmountWithoutVat == null ? 0 : Number(record.inv_TotalAmountWithoutVat);\r\n// inv_TotalAmountWithoutVat = inv_TotalAmountWithoutVat + value;\r\n// }\r\n\r\n// if (record.hasOwnProperty(\"inv_discountAmount\")) {\r\n// var value = record.inv_discountAmount == null ? 0 : Number(record.inv_discountAmount);\r\n// inv_discountAmount = inv_discountAmount + value;\r\n// }\r\n\r\n// if (record.hasOwnProperty(\"inv_vatAmount\")) {\r\n// var value = record.inv_vatAmount == null ? 0 : Number(record.inv_vatAmount);\r\n// inv_vatAmount = inv_vatAmount + value;\r\n// }\r\n// }\r\n\r\n// if (loai_dc == -1) {\r\n// $$(\"inv_TotalAmountWithoutVat_inv_InvoiceAuth\").setValue(inv_TotalAmountWithoutVat * loai_dc);\r\n// $$(\"inv_discountAmount_inv_InvoiceAuth\").setValue(inv_discountAmount * loai_dc);\r\n// $$(\"inv_vatAmount_inv_InvoiceAuth\").setValue(inv_vatAmount * loai_dc);\r\n// $$(\"inv_TotalAmount_inv_InvoiceAuth\").setValue((inv_TotalAmountWithoutVat - inv_discountAmount + inv_vatAmount) * loai_dc);\r\n// }\r\n// if (loai_dc == 1) {\r\n// $$(\"inv_TotalAmountWithoutVat_inv_InvoiceAuth\").setValue(inv_TotalAmountWithoutVat < 0 ? inv_TotalAmountWithoutVat * -1 : inv_TotalAmountWithoutVat);\r\n// $$(\"inv_discountAmount_inv_InvoiceAuth\").setValue(inv_discountAmount < 0 ? inv_discountAmount * -1 : inv_discountAmount);\r\n// $$(\"inv_vatAmount_inv_InvoiceAuth\").setValue(inv_vatAmount < 0 ? inv_vatAmount * -1 : inv_vatAmount);\r\n// var tongtien = inv_TotalAmountWithoutVat - inv_discountAmount + inv_vatAmount;\r\n// $$(\"inv_TotalAmount_inv_InvoiceAuth\").setValue(tongtien < 0 ? tongtien * -1 : tongtien);\r\n// }\r\n// }\r\n\r\n// }\r\n\r\n// var data = table.serialize();\r\n// var tien_tt_all = 0;\r\n// var tien_thue_all = 0\r\n// var tien_ck_all = 0;\r\n// var tong_tien_all = 0\r\n\r\n// var tien_tt_10 = 0;\r\n// var tien_thue_10 = 0;\r\n// var tien_ck_10 = 0;\r\n// var tong_tien_10 = 0;\r\n\r\n// var tien_tt_5 = 0;\r\n// var tien_thue_5 = 0;\r\n// var tien_ck_5 = 0;\r\n// var tong_tien_5 = 0;\r\n\r\n// var tien_tt_0 = 0;\r\n// var tien_thue_0 = 0;\r\n// var tien_ck_0 = 0;\r\n// var tong_tien_0 = 0;\r\n\r\n// var tien_tt_kct = 0;\r\n// var tien_thue_kct = 0;\r\n// var tien_ck_kct = 0;\r\n// var tong_tien_kct = 0;\r\n\r\n// var tien_tt_kkk = 0;\r\n// var tien_thue_kkk = 0;\r\n// var tien_ck_kkk = 0;\r\n// var tong_tien_kkk = 0;\r\n\r\n// data.forEach(function (entry) {\r\n// tien_tt_all += entry[\"inv_TotalAmountWithoutVat\"] == null ? 0 : entry[\"inv_TotalAmountWithoutVat\"];\r\n// tien_thue_all += entry[\"inv_vatAmount\"] == null ? 0 : entry[\"inv_vatAmount\"];\r\n// tien_ck_all += entry[\"inv_discountAmount\"] == null ? 0 : entry[\"inv_discountAmount\"];\r\n// tong_tien_all += entry[\"inv_TotalAmount\"] == null ? 0 : entry[\"inv_TotalAmount\"];\r\n\r\n// if (entry[\"ma_thue\"] == 10) {\r\n// tien_tt_10 += entry[\"inv_TotalAmountWithoutVat\"] == null ? 0 : entry[\"inv_TotalAmountWithoutVat\"];\r\n// tien_thue_10 += entry[\"inv_vatAmount\"] == null ? 0 : entry[\"inv_vatAmount\"];\r\n// tien_ck_10 += entry[\"inv_discountAmount\"] == null ? 0 : entry[\"inv_discountAmount\"];\r\n// tong_tien_10 += entry[\"inv_TotalAmount\"] == null ? 0 : entry[\"inv_TotalAmount\"];\r\n// }\r\n// if (entry[\"ma_thue\"] == 5) {\r\n// tien_tt_5 += entry[\"inv_TotalAmountWithoutVat\"] == null ? 0 : entry[\"inv_TotalAmountWithoutVat\"];\r\n// tien_thue_5 += entry[\"inv_vatAmount\"] == null ? 0 : entry[\"inv_vatAmount\"];\r\n// tien_ck_5 += entry[\"inv_discountAmount\"] == null ? 0 : entry[\"inv_discountAmount\"];\r\n// tong_tien_5 += entry[\"inv_TotalAmount\"] == null ? 0 : entry[\"inv_TotalAmount\"];\r\n// }\r\n// if (entry[\"ma_thue\"] == 0) {\r\n// tien_tt_0 += entry[\"inv_TotalAmountWithoutVat\"] == null ? 0 : entry[\"inv_TotalAmountWithoutVat\"];\r\n// tien_thue_0 += entry[\"inv_vatAmount\"] == null ? 0 : entry[\"inv_vatAmount\"];\r\n// tien_ck_0 += entry[\"inv_discountAmount\"] == null ? 0 : entry[\"inv_discountAmount\"];\r\n// tong_tien_0 += entry[\"inv_TotalAmount\"] == null ? 0 : entry[\"inv_TotalAmount\"];\r\n// }\r\n// if (entry[\"ma_thue\"] == -1) {\r\n// tien_tt_kct += entry[\"inv_TotalAmountWithoutVat\"] == null ? 0 : entry[\"inv_TotalAmountWithoutVat\"];\r\n// tien_thue_kct += entry[\"inv_vatAmount\"] == null ? 0 : entry[\"inv_vatAmount\"];\r\n// tien_ck_kct += entry[\"inv_discountAmount\"] == null ? 0 : entry[\"inv_discountAmount\"];\r\n// tong_tien_kct += entry[\"inv_TotalAmount\"] == null ? 0 : entry[\"inv_TotalAmount\"];\r\n// }\r\n// if (entry[\"ma_thue\"] == -2) {\r\n// tien_tt_kkk += entry[\"inv_TotalAmountWithoutVat\"] == null ? 0 : entry[\"inv_TotalAmountWithoutVat\"];\r\n// tien_thue_kkk += entry[\"inv_vatAmount\"] == null ? 0 : entry[\"inv_vatAmount\"];\r\n// tien_ck_kkk += entry[\"inv_discountAmount\"] == null ? 0 : entry[\"inv_discountAmount\"];\r\n// tong_tien_kkk += entry[\"inv_TotalAmount\"] == null ? 0 : entry[\"inv_TotalAmount\"];\r\n// }\r\n\r\n// });\r\n\r\n// // $$(\"tgtcthue\").setValue(tien_tt_all);\r\n// $$(\"tgtcthue10_inv_InvoiceAuth\").setValue(tien_tt_10);\r\n// $$(\"tgtcthue5_inv_InvoiceAuth\").setValue(tien_tt_5);\r\n// $$(\"tgtcthue0_inv_InvoiceAuth\").setValue(tien_tt_0);\r\n// $$(\"tgtcthuekct_inv_InvoiceAuth\").setValue(tien_tt_kct);\r\n// $$(\"tgtcthuekkk_inv_InvoiceAuth\").setValue(tien_tt_kkk);\r\n\r\n// // $$(\"ttcktmai\").setValue(tien_ck_all);\r\n// $$(\"ttcktmai10_inv_InvoiceAuth\").setValue(tien_ck_10);\r\n// $$(\"ttcktmai5_inv_InvoiceAuth\").setValue(tien_ck_5);\r\n// $$(\"ttcktmai0_inv_InvoiceAuth\").setValue(tien_ck_0);\r\n// $$(\"ttcktmaikct_inv_InvoiceAuth\").setValue(tien_ck_kct);\r\n// $$(\"ttcktmaikkk_inv_InvoiceAuth\").setValue(tien_ck_kkk);\r\n\r\n// // $$(\"tgtthue\").setValue(tien_thue_all);\r\n// $$(\"tgtthue10_inv_InvoiceAuth\").setValue(tien_thue_10);\r\n// $$(\"tgtthue5_inv_InvoiceAuth\").setValue(tien_thue_5);\r\n// $$(\"tgtthue0_inv_InvoiceAuth\").setValue(tien_thue_0);\r\n// $$(\"tgtthuekct_inv_InvoiceAuth\").setValue(tien_thue_kct);\r\n// $$(\"tgtthuekkk_inv_InvoiceAuth\").setValue(tien_thue_kkk);\r\n\r\n// // $$(\"tgtttbso\").setValue(tong_tien_all);\r\n// $$(\"tgtttbso10_inv_InvoiceAuth\").setValue(tong_tien_10);\r\n// $$(\"tgtttbso5_inv_InvoiceAuth\").setValue(tong_tien_5);\r\n// $$(\"tgtttbso0_inv_InvoiceAuth\").setValue(tong_tien_0);\r\n// $$(\"tgtttbsokct_inv_InvoiceAuth\").setValue(tong_tien_kct);\r\n// $$(\"tgtttbsokkk_inv_InvoiceAuth\").setValue(tong_tien_kkk);\ndefine(\"views/aa1\", function(){});\n\ndefine('views/forms/account',[\"app\", \"locale\"], function (app, _) {\r\n\tvar editmode = 0;\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"dmtab-win\", position: \"center\",\r\n\t\t\thead: \"Người sử dụng\",\r\n\t\t\twidth: 500,\r\n\t\t\theight: 480,\r\n\t\t\tbody: {\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\telementsConfig: { labelWidth: 60 },\r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"dmtab-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\tmargin: 0,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"username\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tdisabled: true,\r\n\t\t\t\t\t\trequired: false,\r\n\t\t\t\t\t\tlabel: \"Tên truy cập\",\r\n\t\t\t\t\t\tid: \"dmtab-username\",\r\n\t\t\t\t\t\tinvalidMessage: \"Tên truy cập không để trống hoặc nhập không đúng (a-z,A-Z,0-9)\",\r\n\t\t\t\t\t\tvalidate: webix.rules.isSpecialCharacter,\r\n\t\t\t\t\t\tcss: \"mcls_uppercase\",\r\n\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\tonChange: function (newv, oldv) {\r\n\t\t\t\t\t\t\t\tif (newv != undefined) {\r\n\t\t\t\t\t\t\t\t\tif (oldv != undefined) {\r\n\t\t\t\t\t\t\t\t\t\tif (newv.toUpperCase() != oldv.toUpperCase()) {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.$$(this.config.id).setValue(newv.toUpperCase());\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\twebix.$$(this.config.id).setValue(newv.toUpperCase());\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\tname: \"wb_role_id\",\r\n\t\t\t\t\t\tlabel: \"Nhóm quyền\",\r\n\t\t\t\t\t\toptions: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00007\",\r\n\t\t\t\t\t\tid: \"dmtab-nhomquyen\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tinvalidMessage: \"Bạn chưa chọn nhóm quyền\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t/*{\r\n\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\tname: \"store_code\",\r\n\t\t\t\t\t\tlabel: \"Cửa hàng\",\t\t\t\t\t\t\r\n\t\t\t\t\t\toptions: {\r\n\t\t\t\t\t\t\tview: \"gridsuggest\",\r\n\t\t\t\t\t\t\ttextValue: \"value\",\r\n\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\turl: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00052\",\r\n\t\t\t\t\t\t\t\ttextValue: \"value\",\r\n\t\t\t\t\t\t\t\tcolumns: [\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tid: \"id\",\r\n\t\t\t\t\t\t\t\t\t\twidth: 120,\r\n\t\t\t\t\t\t\t\t\t\theader: _(\"MA\")\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tid: \"value\",\r\n\t\t\t\t\t\t\t\t\t\twidth: 350,\r\n\t\t\t\t\t\t\t\t\t\theader: _(\"TEN\")\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t]\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tid: \"dmtab-store\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\t\t\t\t\t\t\r\n\t\t\t\t\t\tinvalidMessage: \"Bạn chưa chọn cửa hàng\"\r\n\t\t\t\t\t},*/\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tid: \"cbBranchCode\",\r\n\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\tname: \"branch_code\",\r\n\t\t\t\t\t\tlabel: \"Đơn vị\",\r\n\t\t\t\t\t\toptions: {\r\n\t\t\t\t\t\t\tview: \"treesuggest\",\r\n\t\t\t\t\t\t\ttextValue: \"value\",\r\n\t\t\t\t\t\t\turl: {\r\n\t\t\t\t\t\t\t\t$proxy: true,\r\n\t\t\t\t\t\t\t\tload: function (view, callback, params) {\r\n\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00195\";\r\n\r\n\t\t\t\t\t\t\t\t\twebix.ajax(url, function (text) {\r\n\t\t\t\t\t\t\t\t\t\tvar json = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\tvar data = listToTree(json);\r\n\t\t\t\t\t\t\t\t\t\tview.parse(data, \"json\");\r\n\t\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\ttextValue: \"value\",\r\n\t\t\t\t\t\t\t\tcolumns: [\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tid: \"wb_branch_id\",\r\n\t\t\t\t\t\t\t\t\t\twidth: 120,\r\n\t\t\t\t\t\t\t\t\t\theader: _(\"MA\"),\r\n\t\t\t\t\t\t\t\t\t\thidden: true\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tid: \"name\",\r\n\t\t\t\t\t\t\t\t\t\twidth: 650,\r\n\t\t\t\t\t\t\t\t\t\theader: _(\"TEN\"),\r\n\t\t\t\t\t\t\t\t\t\ttemplate: \"{common.space()}{common.icon()}#name#\"\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t\tfilterMode: {\r\n\t\t\t\t\t\t\t\t\tlevel: false,\r\n\t\t\t\t\t\t\t\t\tshowSubItems: false\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t//id: \"dmtab-store\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tinvalidMessage: \"Bạn chưa chọn đơn vị\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"email\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tlabel: \"Email\",\r\n\t\t\t\t\t\tid: \"dmtab-email\",\r\n\t\t\t\t\t\tvalidate: webix.rules.isEmail,\r\n\t\t\t\t\t\tinvalidMessage: \"Email không được để trống hoặc không đúng định dạng\",\r\n\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\tonChange: function (newv, oldv) {\r\n\t\t\t\t\t\t\t\tif (editmode != \"2\") {\r\n\t\t\t\t\t\t\t\t\tif (newv != undefined) {\r\n\t\t\t\t\t\t\t\t\t\tif (oldv != undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\tif (newv.toUpperCase() != oldv.toUpperCase()) {\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"dmtab-username\").setValue(newv.toUpperCase());\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"dmtab-username\").setValue(newv.toUpperCase());\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"fullname\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tlabel: \"Tên người sử dụng\",\r\n\t\t\t\t\t\tid: \"dmtab-fullname\",\r\n\t\t\t\t\t\t//validate: webix.rules.isEmail,\r\n\t\t\t\t\t\tinvalidMessage: \"Tên người sử dụng không được để trống\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t/* {\r\n\t\t\t\t\t\t\t\tview:\"checkbox\",\r\n\t\t\t\t\t\t\t\tid:\"dmtab-issigninvoice\",\r\n\t\t\t\t\t\t\t\tname:\"issigninvoice\",\r\n\t\t\t\t\t\t\t\tlabel:\"Ký hóa đơn\",\r\n\t\t\t\t\t\t\t\tcheckValue:\"C\",\r\n\t\t\t\t\t\t\t\tuncheckValue:\"K\" ,\r\n\t\t\t\t\t\t\t\tlabelWidth:85\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview:\"fieldset\",\r\n\t\t\t\t\t\tlabel:\"Quyền truy cập\",\r\n\t\t\t\t\t\tbody:{\r\n\t\t\t\t\t\t\tcols:[\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview:\"checkbox\",\r\n\t\t\t\t\t\t\t\t\tid:\"dmtab-isviewuser\",\r\n\t\t\t\t\t\t\t\t\tname:\"isviewuser\",\r\n\t\t\t\t\t\t\t\t\tlabel:\"Xem\",\r\n\t\t\t\t\t\t\t\t\tcheckValue:\"C\",\r\n\t\t\t\t\t\t\t\t\tuncheckValue:\"K\" \r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview:\"checkbox\",\r\n\t\t\t\t\t\t\t\tid:\"dmtab-isedituser\",\r\n\t\t\t\t\t\t\t\tname:\"isedituser\",\r\n\t\t\t\t\t\t\t\tlabel:\"Sửa\",\r\n\t\t\t\t\t\t\t\tcheckValue:\"C\",\r\n\t\t\t\t\t\t\t\tuncheckValue:\"K\" \r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview:\"checkbox\",\r\n\t\t\t\t\t\t\t\t\tid:\"dmtab-isdeluser\",\r\n\t\t\t\t\t\t\t\t\tname:\"isdeluser\",\r\n\t\t\t\t\t\t\t\t\tlabel:\"Xóa\",\r\n\t\t\t\t\t\t\t\t\tcheckValue:\"C\",\r\n\t\t\t\t\t\t\t\t\tuncheckValue:\"K\" \r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, */\r\n\t\t\t\t\t{ view: \"textarea\", name: \"dien_giai\", labelPosition: \"top\", label: \"Diễn giải\", id: \"dmtab-diengiai\" },\r\n\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tshortcut: \"F10\", view: \"button\", label: \"Lưu (F10)\", type: \"form\", align: \"center\",\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"dmtab-form\");\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (form.validate() == false) {\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\t\t\titem.window_type = \"account\";\r\n\t\t\t\t\t\t\t\t\t\titem.email_sso = item.email;\r\n\t\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/Account/Update\";\r\n\t\t\t\t\t\t\t\t\t\twebix.extend(form, webix.ProgressBar);\r\n\t\t\t\t\t\t\t\t\t\tform.disable();\r\n\t\t\t\t\t\t\t\t\t\tform.showProgress();\r\n\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t.post(url, item, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tform.enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\tform.hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.id = data.id;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"dmtab-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tapp.callEvent(\"dataChanged\", [editmode, data.item]);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: data.error });\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", type: \"danger\", align: \"center\",\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\twebix.$$(\"dmtab-win\").close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t]\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tsetEditMode: function (mode) {\r\n\t\t\teditmode = mode;\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/forms/account_hsm',[\"app\", \"locale\"], function (app, _) {\r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n id: \"accountHSM-win\",\r\n position: \"center\",\r\n head: \"Người sử dụng\",\r\n width: 500,\r\n height: 480,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 60 },\r\n view: \"form\",\r\n id: \"accountHSM-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n id: \"user_hsm_id\",\r\n view: \"text\",\r\n label: \"Mã UUID\",\r\n labelPosition: \"top\",\r\n required: true,\r\n name: \"user_hsm_id\",\r\n css:\"mcls_uppercase\",\r\n invalidMessage: \"Mã UUID không được để trống\",\r\n },\r\n {\r\n view: \"text\",\r\n type: \"password\",\r\n name: \"password_level2\",\r\n required: true,\r\n labelPosition: \"top\",\r\n label: \"Mật khẩu\",\r\n id: \"accountHSM-password_level2\",\r\n //validate: webix.rules.isEmail,\r\n invalidMessage: \"Mật khẩu không được để trống\",\r\n },\r\n\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Lưu (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"accountHSM-form\");\r\n var table = webix.$$(\"dmwindowData\");\r\n var itemData = table.getSelectedItem();\r\n if (form.validate() == false) {\r\n return;\r\n }\r\n\r\n var item = form.getValues();\r\n item.wb_user_id = itemData.wb_user_id;\r\n item.window_type = \"account\";\r\n\r\n var url = app.config.host + \"/Account/Update_HSM\";\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, item, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n form.enable();\r\n form.hideProgress();\r\n if (!data.hasOwnProperty(\"error\")) {\r\n item.id = data.id;\r\n webix.$$(\"accountHSM-win\").close();\r\n webix.message(\"Lưu thành công\", \"success\");\r\n // app.callEvent(\"dataChanged\", [editmode, data.item]);\r\n } else {\r\n webix.message({ type: \"error\", text: data.error });\r\n }\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n webix.$$(\"accountHSM-win\").close();\r\n },\r\n },\r\n {\r\n id: \"huyUserHSM\",\r\n shortcut: \"F8\",\r\n view: \"button\",\r\n label: \"Xóa (F8)\",\r\n type: \"delete\",\r\n align: \"center\",\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n webix.confirm({\r\n text: \"Bạn chắc chắn muốn xóa tài khoản HSM?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n var form = webix.$$(\"accountHSM-form\");\r\n var table = webix.$$(\"dmwindowData\");\r\n var itemData = table.getSelectedItem();\r\n\r\n var item = { wb_user_id: itemData.wb_user_id };\r\n\r\n var url = app.config.host + \"/Account/Delete_HSM\";\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, item, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n form.enable();\r\n form.hideProgress();\r\n if (!data.hasOwnProperty(\"error\")) {\r\n item.id = data.id;\r\n webix.$$(\"accountHSM-win\").close();\r\n webix.message(\"Xóa thành công\", \"success\");\r\n // app.callEvent(\"dataChanged\", [editmode, data.item]);\r\n } else {\r\n webix.message({ type: \"error\", text: data.error });\r\n }\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n // setEditMode: function (mode) {\r\n // \teditmode = mode;\r\n // }\r\n };\r\n});\r\n\ndefine('views/forms/accountpermission',[\"app\", \"locale\"], function (app, _) {\r\n function initUI(item) {\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n url,\r\n {\r\n command: \"CM00005\",\r\n parameter: {\r\n wb_user_id: item.id,\r\n },\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n\r\n var dtChuKySo = $$(\"dtChuKySo\");\r\n\r\n dtChuKySo.parse(json, \"json\");\r\n }\r\n );\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n url,\r\n {\r\n command: \"CM00006\",\r\n parameter: {\r\n wb_user_id: item.id,\r\n },\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n var dtMauHoaDon = $$(\"dtMauHoaDon\");\r\n\r\n dtMauHoaDon.parse(json, \"json\");\r\n\r\n /* for(var i=0;i 0) {\r\n var form = webix.$$(\"accountHSM-form\");\r\n form.setValues(json[0]);\r\n $$(\"huyUserHSM\").show();\r\n } else {\r\n var form = webix.$$(\"accountHSM-form\");\r\n }\r\n });\r\n\r\n // var form = webix.$$(\"accountHSM-form\");\r\n // form.setValues(item);\r\n\r\n // dmwindowform.setEditMode(1);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"dmwindowData\",\r\n view: \"datatable\",\r\n select: true,\r\n url: app.config.host + \"/Account/AllUsersByBranch\",\r\n on: {\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"username\",\r\n header: [\"Tên truy cập\", { content: \"textFilter\" }],\r\n width: 150,\r\n },\r\n {\r\n id: \"wb_role_id\",\r\n view: \"combo\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00007\",\r\n header: [\"Nhóm quyền\", { content: \"selectFilter\" }],\r\n width: 250,\r\n },\r\n {\r\n id: \"email\",\r\n header: [\"Email\", { content: \"textFilter\" }],\r\n width: 200,\r\n },\r\n {\r\n id: \"fullname\",\r\n header: [\"Tên người sử dụng\", { content: \"textFilter\" }],\r\n width: 200,\r\n },\r\n {\r\n id: \"is_sign_invoice\",\r\n header: [\r\n \"Ký hóa đơn\",\r\n {\r\n content: \"selectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"C\", value: \"C\" },\r\n { id: \"K\", value: \"K\" },\r\n ],\r\n },\r\n ],\r\n width: 100,\r\n },\r\n {\r\n id: \"is_sign_invoice_hsm\",\r\n header: [\r\n \"Ký hóa đơn HSM\",\r\n {\r\n content: \"selectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"C\", value: \"C\" },\r\n { id: \"K\", value: \"K\" },\r\n ],\r\n },\r\n ],\r\n width: 140,\r\n },\r\n {\r\n id: \"is_view_user\",\r\n header: [\r\n \"Xem\",\r\n {\r\n content: \"selectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"C\", value: \"C\" },\r\n { id: \"K\", value: \"K\" },\r\n ],\r\n },\r\n ],\r\n width: 60,\r\n },\r\n {\r\n id: \"is_new_user\",\r\n header: [\r\n \"Mới\",\r\n {\r\n content: \"selectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"C\", value: \"C\" },\r\n { id: \"K\", value: \"K\" },\r\n ],\r\n },\r\n ],\r\n width: 60,\r\n },\r\n {\r\n id: \"is_edit_user\",\r\n header: [\r\n \"Sửa\",\r\n {\r\n content: \"selectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"C\", value: \"C\" },\r\n { id: \"K\", value: \"K\" },\r\n ],\r\n },\r\n ],\r\n width: 60,\r\n },\r\n {\r\n id: \"is_del_user\",\r\n header: [\r\n \"Xóa\",\r\n {\r\n content: \"selectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"C\", value: \"C\" },\r\n { id: \"K\", value: \"K\" },\r\n ],\r\n },\r\n ],\r\n width: 60,\r\n },\r\n {\r\n id: \"explanation\",\r\n header: [\"Diễn giải\", { content: \"textFilter\" }],\r\n width: 350,\r\n hidden: true,\r\n },\r\n {\r\n id: \"store_code\",\r\n header: [\"Mã cửa hàng\", { content: \"textFilter\" }],\r\n width: 150,\r\n hidden: true,\r\n },\r\n {\r\n id: \"branch_code\",\r\n header: [\"Chi nhánh\", { content: \"textFilter\" }],\r\n width: 150,\r\n },\r\n {\r\n id: \"is_sso\",\r\n header: [\"Đang liên kết SSO\", {\r\n content: \"selectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: 1, value: \"Có\" },\r\n { id: 0, value: \"Không\" },\r\n ],\r\n },],\r\n width: 150,\r\n template: function (obj) {\r\n return obj.is_sso == 1 ? \"Có\" : \"Không\"\r\n }\r\n },\r\n {\r\n id: \"email_sso\",\r\n header: [\"Email liên kết SSO\", { content: \"textFilter\" }],\r\n width: 200,\r\n }\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 35,\r\n view: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmwindowData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmwindow,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n table.refresh();\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/accountbranch',[\"app\",\"locale\"], function (app,_) {\r\n\tvar editmode = 0;\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"dmtab-win\", position: \"center\",\r\n\t\t\thead: \"Người sử dụng\",\r\n\t\t\twidth: 500,\r\n\t\t\theight: 480,\r\n\t\t\tbody: {\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\telementsConfig: { labelWidth: 60 },\r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"dmtab-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\tmargin: 0,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"username\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tlabel: \"Tên truy cập\",\r\n\t\t\t\t\t\tid: \"dmtab-username\",\r\n\t\t\t\t\t\tinvalidMessage: \"Tên truy cập không để trống hoặc nhập không đúng (a-z,A-Z,0-9)\",\r\n\t\t\t\t\t\tvalidate: webix.rules.isSpecialCharacter,\r\n\t\t\t\t\t\tcss: \"mcls_uppercase\",\r\n\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\tonChange: function (newv, oldv) {\r\n\t\t\t\t\t\t\t\tif (newv != undefined) {\r\n\t\t\t\t\t\t\t\t\tif (oldv != undefined) {\r\n\t\t\t\t\t\t\t\t\t\tif (newv.toUpperCase() != oldv.toUpperCase()) {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.$$(this.config.id).setValue(newv.toUpperCase());\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\twebix.$$(this.config.id).setValue(newv.toUpperCase());\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\tname: \"wb_role_id\",\r\n\t\t\t\t\t\tlabel: \"Nhóm quyền\",\r\n\t\t\t\t\t\toptions: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00190\",\r\n\t\t\t\t\t\tid: \"dmtab-nhomquyen\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tinvalidMessage: \"Bạn chưa chọn nhóm quyền\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\tname: \"store_code\",\r\n\t\t\t\t\t\tlabel: \"Cửa hàng\",\t\t\t\t\t\t\r\n\t\t\t\t\t\toptions: {\r\n\t\t\t\t\t\t\tview: \"gridsuggest\",\r\n\t\t\t\t\t\t\ttextValue: \"value\",\r\n\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\turl: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00052\",\r\n\t\t\t\t\t\t\t\ttextValue: \"value\",\r\n\t\t\t\t\t\t\t\tcolumns: [\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tid: \"id\",\r\n\t\t\t\t\t\t\t\t\t\twidth: 120,\r\n\t\t\t\t\t\t\t\t\t\theader: _(\"MA\")\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tid: \"value\",\r\n\t\t\t\t\t\t\t\t\t\twidth: 350,\r\n\t\t\t\t\t\t\t\t\t\theader: _(\"TEN\")\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t]\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\t\t\t\t\t\t\t\r\n\t\t\t\t\t\tid: \"dmtab-store\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\t\t\t\t\t\t\r\n\t\t\t\t\t\tinvalidMessage: \"Bạn chưa chọn cửa hàng\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"email\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tlabel: \"Email\",\r\n\t\t\t\t\t\tid: \"dmtab-email\",\r\n\t\t\t\t\t\tvalidate: webix.rules.isEmail,\r\n\t\t\t\t\t\tinvalidMessage: \"Email không được để trống hoặc không đúng định dạng\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"fullname\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tlabel: \"Tên người sử dụng\",\r\n\t\t\t\t\t\tid: \"dmtab-fullname\",\r\n\t\t\t\t\t\t//validate: webix.rules.isEmail,\r\n\t\t\t\t\t\tinvalidMessage: \"Tên người sử dụng không được để trống\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t/* {\r\n\t\t\t\t\t\t\t\tview:\"checkbox\",\r\n\t\t\t\t\t\t\t\tid:\"dmtab-issigninvoice\",\r\n\t\t\t\t\t\t\t\tname:\"issigninvoice\",\r\n\t\t\t\t\t\t\t\tlabel:\"Ký hóa đơn\",\r\n\t\t\t\t\t\t\t\tcheckValue:\"C\",\r\n\t\t\t\t\t\t\t\tuncheckValue:\"K\" ,\r\n\t\t\t\t\t\t\t\tlabelWidth:85\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview:\"fieldset\",\r\n\t\t\t\t\t\tlabel:\"Quyền truy cập\",\r\n\t\t\t\t\t\tbody:{\r\n\t\t\t\t\t\t\tcols:[\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview:\"checkbox\",\r\n\t\t\t\t\t\t\t\t\tid:\"dmtab-isviewuser\",\r\n\t\t\t\t\t\t\t\t\tname:\"isviewuser\",\r\n\t\t\t\t\t\t\t\t\tlabel:\"Xem\",\r\n\t\t\t\t\t\t\t\t\tcheckValue:\"C\",\r\n\t\t\t\t\t\t\t\t\tuncheckValue:\"K\" \r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview:\"checkbox\",\r\n\t\t\t\t\t\t\t\tid:\"dmtab-isedituser\",\r\n\t\t\t\t\t\t\t\tname:\"isedituser\",\r\n\t\t\t\t\t\t\t\tlabel:\"Sửa\",\r\n\t\t\t\t\t\t\t\tcheckValue:\"C\",\r\n\t\t\t\t\t\t\t\tuncheckValue:\"K\" \r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview:\"checkbox\",\r\n\t\t\t\t\t\t\t\t\tid:\"dmtab-isdeluser\",\r\n\t\t\t\t\t\t\t\t\tname:\"isdeluser\",\r\n\t\t\t\t\t\t\t\t\tlabel:\"Xóa\",\r\n\t\t\t\t\t\t\t\t\tcheckValue:\"C\",\r\n\t\t\t\t\t\t\t\t\tuncheckValue:\"K\" \r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, */\r\n\t\t\t\t\t{ view: \"textarea\", name: \"dien_giai\", labelPosition: \"top\", label: \"Diễn giải\", id: \"dmtab-diengiai\" },\r\n\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tshortcut: \"F10\", view: \"button\", label: \"Lưu (F10)\", type: \"form\", align: \"center\",\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"dmtab-form\");\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (form.validate() == false) {\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\t\t\titem.window_type = \"accountbranch\";\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/Account/Update\";\r\n\t\t\t\t\t\t\t\t\t\twebix.extend(form, webix.ProgressBar);\r\n\t\t\t\t\t\t\t\t\t\tform.disable();\r\n\t\t\t\t\t\t\t\t\t\tform.showProgress();\r\n\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t.post(url, item, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\t\tform.enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\tform.hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.id = data.id;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"dmtab-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tapp.callEvent(\"dataChanged\", [editmode, item]);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: data.error });\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", type: \"danger\", align: \"center\",\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\twebix.$$(\"dmtab-win\").close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t]\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tsetEditMode: function (mode) {\r\n\t\t\teditmode = mode;\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/forms/branchpermission',[\"app\", \"locale\"], function (app, _) {\r\n\r\n\tfunction initUI(item) {\r\n\r\n\t\tvar url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n\t\twebix.ajax()\r\n\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t.post(url,\r\n\t\t\t{\r\n\t\t\t\tcommand: \"CM00095\",\r\n\t\t\t\tparameter: {\r\n\t\t\t\t\twb_user_id: item.id\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t, function (text) {\r\n\r\n\t\t\t\tvar json = JSON.parse(text);\r\n\r\n\t\t\t\tvar dtChuKySo = $$(\"dtChuKySo\");\r\n\r\n\t\t\t\tdtChuKySo.parse(json, \"json\");\r\n\r\n\r\n\r\n\t\t\t});\r\n\r\n\t\twebix.ajax()\r\n\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t.post(url,\r\n\t\t\t{\r\n\t\t\t\tcommand: \"CM00096\",\r\n\t\t\t\tparameter: {\r\n\t\t\t\t\twb_user_id: item.id\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tfunction (text) {\r\n\r\n\t\t\t\tvar json = JSON.parse(text);\r\n\t\t\t\tvar dtMauHoaDon = $$(\"dtMauHoaDon\");\r\n\r\n\t\t\t\tdtMauHoaDon.parse(json, \"json\");\r\n\t\t\t\t\r\n\r\n\t\t\t});\r\n\r\n\t\t\r\n\r\n\t\t$$(\"chkIssigninvoice\").setValue(item.is_sign_invoice);\r\n\t\t$$(\"chkIsviewuser\").setValue(item.is_view_user);\r\n\t\t$$(\"chkIsedituser\").setValue(item.is_edit_user);\r\n\t\t$$(\"chkIsdeluser\").setValue(item.is_del_user);\r\n\r\n\t}\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"phanquyen-win\", position: \"center\",\r\n\t\t\thead: \"Thông tin Tab\",\r\n\t\t\tfullscreen: true,\r\n\t\t\tbody: {\r\n\t\t\t\trows: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tborderless: true,\r\n\t\t\t\t\t\tview: \"tabview\",\r\n\t\t\t\t\t\tscrollX: true,\r\n\t\t\t\t\t\tmultiview: {\r\n\t\t\t\t\t\t\tfitBiggest: true\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tcells: [\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\theader: _(\"CHU_KY_SO\"),\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\tid: \"dtChuKySo\",\r\n\t\t\t\t\t\t\t\t\tview: \"datatable\",\r\n\t\t\t\t\t\t\t\t\tresizeRow: true,\r\n\t\t\t\t\t\t\t\t\tfixedRowHeight: false,\r\n\t\t\t\t\t\t\t\t\trowLineHeight: 25,\r\n\t\t\t\t\t\t\t\t\trowHeight: 70,\r\n\t\t\t\t\t\t\t\t\t//threeState: true,\r\n\t\t\t\t\t\t\t\t\tcolumns: [\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"chon1\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: [{ text: \"\", content: \"masterCheckbox\" }, _(\"CHON\")],\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 55,\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue: 'C',\r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue: 'K',\r\n\t\t\t\t\t\t\t\t\t\t\ttemplate: \"{common.checkbox()}\"\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"cer_serial\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"SO_SERIAL\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 280\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"subject_name\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: \"Chủ thể\",\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 500\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"begin_date\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: \"Ngày bắt đầu\",\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 150\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"end_date\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: \"Ngày kết thúc\",\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 150\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t]\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\theader: _(\"MAU_HDON\"),\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\tid: \"dtMauHoaDon\",\r\n\t\t\t\t\t\t\t\t\tview: \"datatable\",\r\n\t\t\t\t\t\t\t\t\tcolumns: [\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"chon1\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: [{ text: \"\", content: \"masterCheckbox\" }, _(\"CHON\")],\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 55,\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue: 'C',\r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue: 'K',\r\n\t\t\t\t\t\t\t\t\t\t\ttemplate: \"{common.checkbox()}\"\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"ma_loai\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"MA_LOAI\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 100\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"mau_so\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"MAU_SO\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 100\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"ky_hieu\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"KY_HIEU\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 100\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"tu_so\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"TU_SO\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 100\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"den_so\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"DEN_SO\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 100\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"ngay_bd_sd\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"NGAY_BD_SD\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 150,\r\n\t\t\t\t\t\t\t\t\t\t\tformat: function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n\t\t\t\t\t\t\t\t\t\t\t\ttext = removeTimeZoneT(text);\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn format(text);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\theader: _(\"QUYEN_TRUY_CAP_HD\"),\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\tpaddingY: 10,\r\n\t\t\t\t\t\t\t\t\tpaddingX: 10,\r\n\t\t\t\t\t\t\t\t\trows: [\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"chkIssigninvoice\",\r\n\t\t\t\t\t\t\t\t\t\t\tview: \"checkbox\",\r\n\t\t\t\t\t\t\t\t\t\t\tname: \"issigninvoice\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelRight: _(\"KY_HOA_DON\"),\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue: \"C\",\r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue: \"K\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelWidth: 0\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"chkIsviewuser\",\r\n\t\t\t\t\t\t\t\t\t\t\tview: \"checkbox\",\r\n\t\t\t\t\t\t\t\t\t\t\tname: \"isviewuser\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelRight: _(\"IS_VIEW_USER\"),\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue: \"C\",\r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue: \"K\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelAlign: \"right\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelWidth: 0\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"chkIsedituser\",\r\n\t\t\t\t\t\t\t\t\t\t\tview: \"checkbox\",\r\n\t\t\t\t\t\t\t\t\t\t\tname: \"isedituser\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelRight: _(\"IS_EDIT_USER\"),\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue: \"C\",\r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue: \"K\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelWidth: 0\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"chkIsdeluser\",\r\n\t\t\t\t\t\t\t\t\t\t\tview: \"checkbox\",\r\n\t\t\t\t\t\t\t\t\t\t\tname: \"isdeluser\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelRight: _(\"IS_DEL_USER\"),\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue: \"C\",\r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue: \"K\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelWidth: 0\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tshortcut: \"F10\",\r\n\t\t\t\t\t\t\t\tview: \"button\", label: \"Nhận (F10)\", type: \"form\", align: \"center\",\r\n\t\t\t\t\t\t\t\twidth: 100,\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar dtChuKySo = $$(\"dtChuKySo\");\r\n\t\t\t\t\t\t\t\t\t\tvar dtMauHoaDon = $$(\"dtMauHoaDon\");\t\t\t\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar win = this.getTopParentView();\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar data = {\r\n\t\t\t\t\t\t\t\t\t\t\twb_user_id: win.config.wb_user_id,\r\n\t\t\t\t\t\t\t\t\t\t\tckspermission: dtChuKySo.serialize(),\r\n\t\t\t\t\t\t\t\t\t\t\tinvtemppermission: dtMauHoaDon.serialize(),\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\tinvoicepermission: {\r\n\t\t\t\t\t\t\t\t\t\t\t\tissigninvoice: $$(\"chkIssigninvoice\").getValue(),\r\n\t\t\t\t\t\t\t\t\t\t\t\tisviewuser: $$(\"chkIsviewuser\").getValue(),\r\n\t\t\t\t\t\t\t\t\t\t\t\tisedituser: $$(\"chkIsedituser\").getValue(),\r\n\t\t\t\t\t\t\t\t\t\t\t\tisdeluser: $$(\"chkIsdeluser\").getValue()\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/Account/Phanquyen\";\r\n\r\n\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t.bind(data)\r\n\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t.post(url, data, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar result = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!result.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar table = webix.$$(\"dmwindowData\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar item = table.getSelectedItem();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.is_sign_invoice = this.invoicepermission.issigninvoice;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.is_view_user = this.invoicepermission.isviewuser;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.is_edit_user = this.invoicepermission.isedituser;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.is_del_user = this.invoicepermission.isdeluser;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttable.updateItem(item.id, item);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"phanquyen-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: result.error });\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", shortcut: \"esc\", type: \"danger\", label: \"Hủy bỏ (ESC)\", align: \"center\",\r\n\t\t\t\t\t\t\t\twidth: 100,\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tthis.getTopParentView().close();\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{}\r\n\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\theight: 5\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tinitUI: initUI\r\n\t};\r\n\r\n});\ndefine('views/accountbranch',[\"app\", \"views/forms/accountbranch\", \"locale\", \"views/forms/branchpermission\"], function (app, dmwindowform, _, accountpermission) {\r\n \r\n\r\n var op = [];\r\n\r\n webix.$$(\"title\").parse({ title: \"Người sử dụng\", details: \"Danh mục người sử dụng\" });\r\n\r\n var controls = [\r\n {\r\n id: \"btnPlus\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-plus\",\r\n label: _(\"THEM\") + \" (F4)\",\r\n width: 100,\r\n css: \"webix_secondary\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var win = this.$scope.ui(dmwindowform.$ui);\r\n dmwindowform.setEditMode(1);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-edit\",\r\n label: _(\"SUA\") + \" (F3)\",\r\n width: 90,\r\n css: \"webix_secondary\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmwindowform.$ui);\r\n var form = webix.$$(\"dmtab-form\");\r\n\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n if (item.username == \"ADMINISTRATOR\") {\r\n webix.message(\"Bạn không được phép sửa tài khoản này !\", \"error\");\r\n return;\r\n }\r\n\r\n form.setValues(item);\r\n\r\n dmwindowform.setEditMode(2);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnDelete\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-trash-o\",\r\n label: _(\"XOA\") + \" (F8)\",\r\n width: 90,\r\n css: \"webix_secondary\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n if (item.username == \"ADMINISTRATOR\") {\r\n webix.message(\"Bạn không được phép xóa tài khoản này !\", \"error\");\r\n return;\r\n }\r\n\r\n item.window_type = \"accountbranch\";\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \" + item.username,\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Account/Delete\", item, function (text, xml, xhr) {\r\n if (text.hasOwnProperty(\"error\")) {\r\n webix.message(text.error);\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnPhanQuyen\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-lock\",\r\n label: _(\"PHAN_QUYEN\"),\r\n width: 100,\r\n css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn người sử dụng\", \"error\");\r\n return;\r\n }\r\n\r\n var win = this.$scope.ui(accountpermission.$ui);\r\n win.config.wb_user_id = item.id;\r\n accountpermission.initUI(item);\r\n win.getHead().setHTML(\"Người sử dụng: \" + item.username);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"dmwindowData\",\r\n view: \"datatable\",\r\n select: true,\r\n url: app.config.host + \"/Account/AllUsersByBranch\",\r\n on: {\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"username\",\r\n header: [\"Tên truy cập\", { content: \"textFilter\" }],\r\n width: 150,\r\n },\r\n {\r\n id: \"wb_role_id\",\r\n view: \"combo\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00007\",\r\n header: [\"Nhóm quyền\", { content: \"selectFilter\" }],\r\n width: 250,\r\n },\r\n {\r\n id: \"email\",\r\n header: [\"Email\", { content: \"textFilter\" }],\r\n width: 200,\r\n },\r\n {\r\n id: \"fullname\",\r\n header: [\"Tên người sử dụng\", { content: \"textFilter\" }],\r\n width: 200,\r\n },\r\n {\r\n id: \"is_sign_invoice\",\r\n header: [\r\n \"Ký hóa đơn\",\r\n {\r\n content: \"selectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"C\", value: \"C\" },\r\n { id: \"K\", value: \"K\" },\r\n ],\r\n },\r\n ],\r\n width: 150,\r\n },\r\n {\r\n id: \"is_view_user\",\r\n header: [\r\n \"Xem\",\r\n {\r\n content: \"selectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"C\", value: \"C\" },\r\n { id: \"K\", value: \"K\" },\r\n ],\r\n },\r\n ],\r\n width: 60,\r\n },\r\n {\r\n id: \"is_edit_user\",\r\n header: [\r\n \"Sửa\",\r\n {\r\n content: \"selectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"C\", value: \"C\" },\r\n { id: \"K\", value: \"K\" },\r\n ],\r\n },\r\n ],\r\n width: 60,\r\n },\r\n {\r\n id: \"is_del_user\",\r\n header: [\r\n \"Xóa\",\r\n {\r\n content: \"selectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"C\", value: \"C\" },\r\n { id: \"K\", value: \"K\" },\r\n ],\r\n },\r\n ],\r\n width: 60,\r\n },\r\n {\r\n id: \"explanation\",\r\n header: [\"Diễn giải\", { content: \"textFilter\" }],\r\n width: 350,\r\n },\r\n {\r\n id: \"store_code\",\r\n header: [\"Mã cửa hàng\", { content: \"textFilter\" }],\r\n width: 150,\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 35,\r\n view: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmwindowData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmwindow,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/accountstore',[\"app\",\"locale\"], function (app,_) {\r\n\tvar editmode = 0;\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"dmtab-win\", position: \"center\",\r\n\t\t\thead: \"Người sử dụng\",\r\n\t\t\twidth: 500,\r\n\t\t\theight: 480,\r\n\t\t\tbody: {\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\telementsConfig: { labelWidth: 60 },\r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"dmtab-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\tmargin: 0,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"username\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tlabel: \"Tên truy cập\",\r\n\t\t\t\t\t\tid: \"dmtab-username\",\r\n\t\t\t\t\t\tinvalidMessage: \"Tên truy cập không để trống hoặc nhập không đúng (a-z,A-Z,0-9)\",\r\n\t\t\t\t\t\tvalidate: webix.rules.isSpecialCharacter,\r\n\t\t\t\t\t\tcss: \"mcls_uppercase\",\r\n\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\tonChange: function (newv, oldv) {\r\n\t\t\t\t\t\t\t\tif (newv != undefined) {\r\n\t\t\t\t\t\t\t\t\tif (oldv != undefined) {\r\n\t\t\t\t\t\t\t\t\t\tif (newv.toUpperCase() != oldv.toUpperCase()) {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.$$(this.config.id).setValue(newv.toUpperCase());\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\twebix.$$(this.config.id).setValue(newv.toUpperCase());\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\tname: \"wb_role_id\",\r\n\t\t\t\t\t\tlabel: \"Nhóm quyền\",\r\n\t\t\t\t\t\toptions: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00191\",\r\n\t\t\t\t\t\tid: \"dmtab-nhomquyen\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tinvalidMessage: \"Bạn chưa chọn nhóm quyền\"\r\n\t\t\t\t\t},\t\t\t\t\t\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"email\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tlabel: \"Email\",\r\n\t\t\t\t\t\tid: \"dmtab-email\",\r\n\t\t\t\t\t\tvalidate: webix.rules.isEmail,\r\n\t\t\t\t\t\tinvalidMessage: \"Email không được để trống hoặc không đúng định dạng\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"fullname\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tlabel: \"Tên người sử dụng\",\r\n\t\t\t\t\t\tid: \"dmtab-fullname\",\r\n\t\t\t\t\t\t//validate: webix.rules.isEmail,\r\n\t\t\t\t\t\tinvalidMessage: \"Tên người sử dụng không được để trống\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t/* {\r\n\t\t\t\t\t\t\t\tview:\"checkbox\",\r\n\t\t\t\t\t\t\t\tid:\"dmtab-issigninvoice\",\r\n\t\t\t\t\t\t\t\tname:\"issigninvoice\",\r\n\t\t\t\t\t\t\t\tlabel:\"Ký hóa đơn\",\r\n\t\t\t\t\t\t\t\tcheckValue:\"C\",\r\n\t\t\t\t\t\t\t\tuncheckValue:\"K\" ,\r\n\t\t\t\t\t\t\t\tlabelWidth:85\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview:\"fieldset\",\r\n\t\t\t\t\t\tlabel:\"Quyền truy cập\",\r\n\t\t\t\t\t\tbody:{\r\n\t\t\t\t\t\t\tcols:[\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview:\"checkbox\",\r\n\t\t\t\t\t\t\t\t\tid:\"dmtab-isviewuser\",\r\n\t\t\t\t\t\t\t\t\tname:\"isviewuser\",\r\n\t\t\t\t\t\t\t\t\tlabel:\"Xem\",\r\n\t\t\t\t\t\t\t\t\tcheckValue:\"C\",\r\n\t\t\t\t\t\t\t\t\tuncheckValue:\"K\" \r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview:\"checkbox\",\r\n\t\t\t\t\t\t\t\tid:\"dmtab-isedituser\",\r\n\t\t\t\t\t\t\t\tname:\"isedituser\",\r\n\t\t\t\t\t\t\t\tlabel:\"Sửa\",\r\n\t\t\t\t\t\t\t\tcheckValue:\"C\",\r\n\t\t\t\t\t\t\t\tuncheckValue:\"K\" \r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview:\"checkbox\",\r\n\t\t\t\t\t\t\t\t\tid:\"dmtab-isdeluser\",\r\n\t\t\t\t\t\t\t\t\tname:\"isdeluser\",\r\n\t\t\t\t\t\t\t\t\tlabel:\"Xóa\",\r\n\t\t\t\t\t\t\t\t\tcheckValue:\"C\",\r\n\t\t\t\t\t\t\t\t\tuncheckValue:\"K\" \r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, */\r\n\t\t\t\t\t{ view: \"textarea\", name: \"dien_giai\", labelPosition: \"top\", label: \"Diễn giải\", id: \"dmtab-diengiai\" },\r\n\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tshortcut: \"F10\", view: \"button\", label: \"Lưu (F10)\", type: \"form\", align: \"center\",\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"dmtab-form\");\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (form.validate() == false) {\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\t\t\titem.window_type = \"accountstore\";\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/Account/Update\";\r\n\t\t\t\t\t\t\t\t\t\twebix.extend(form, webix.ProgressBar);\r\n\t\t\t\t\t\t\t\t\t\tform.disable();\r\n\t\t\t\t\t\t\t\t\t\tform.showProgress();\r\n\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t.post(url, item, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\t\tform.enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\tform.hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.id = data.id;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"dmtab-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tapp.callEvent(\"dataChanged\", [editmode, item]);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: data.error });\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", type: \"danger\", align: \"center\",\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\twebix.$$(\"dmtab-win\").close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t]\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tsetEditMode: function (mode) {\r\n\t\t\teditmode = mode;\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/forms/storepermission',[\"app\", \"locale\"], function (app, _) {\r\n\r\n\tfunction initUI(item) {\r\n\r\n\t\tvar url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n\t\twebix.ajax()\r\n\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t.post(url,\r\n\t\t\t{\r\n\t\t\t\tcommand: \"CM00095\",\r\n\t\t\t\tparameter: {\r\n\t\t\t\t\twb_user_id: item.id\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t, function (text) {\r\n\r\n\t\t\t\tvar json = JSON.parse(text);\r\n\r\n\t\t\t\tvar dtChuKySo = $$(\"dtChuKySo\");\r\n\r\n\t\t\t\tdtChuKySo.parse(json, \"json\");\r\n\r\n\r\n\r\n\t\t\t});\r\n\r\n\t\twebix.ajax()\r\n\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t.post(url,\r\n\t\t\t{\r\n\t\t\t\tcommand: \"USER_TEMP\",\r\n\t\t\t\tparameter: {\r\n\t\t\t\t\twb_user_id: item.id,\r\n\t\t\t\t\tstore_code: item.store_code\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tfunction (text) {\r\n\r\n\t\t\t\tvar json = JSON.parse(text);\r\n\t\t\t\tvar dtMauHoaDon = $$(\"dtMauHoaDon\");\r\n\r\n\t\t\t\tdtMauHoaDon.parse(json, \"json\");\t\t\t\t\r\n\r\n\t\t\t});\r\n\t\t\r\n\r\n\t\t$$(\"chkIssigninvoice\").setValue(item.is_sign_invoice);\r\n\t\t$$(\"chkIsviewuser\").setValue(item.is_view_user);\r\n\t\t$$(\"chkIsedituser\").setValue(item.is_edit_user);\r\n\t\t$$(\"chkIsdeluser\").setValue(item.is_del_user);\r\n\r\n\t}\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"phanquyen-win\", position: \"center\",\r\n\t\t\thead: \"Thông tin Tab\",\r\n\t\t\tfullscreen: true,\r\n\t\t\tbody: {\r\n\t\t\t\trows: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tborderless: true,\r\n\t\t\t\t\t\tview: \"tabview\",\r\n\t\t\t\t\t\tscrollX: true,\r\n\t\t\t\t\t\tmultiview: {\r\n\t\t\t\t\t\t\tfitBiggest: true\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tcells: [\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\theader: _(\"CHU_KY_SO\"),\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\tid: \"dtChuKySo\",\r\n\t\t\t\t\t\t\t\t\tview: \"datatable\",\r\n\t\t\t\t\t\t\t\t\tresizeRow: true,\r\n\t\t\t\t\t\t\t\t\tfixedRowHeight: false,\r\n\t\t\t\t\t\t\t\t\trowLineHeight: 25,\r\n\t\t\t\t\t\t\t\t\trowHeight: 70,\r\n\t\t\t\t\t\t\t\t\t//threeState: true,\r\n\t\t\t\t\t\t\t\t\tcolumns: [\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"chon1\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: [{ text: \"\", content: \"masterCheckbox\" }, _(\"CHON\")],\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 55,\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue: 'C',\r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue: 'K',\r\n\t\t\t\t\t\t\t\t\t\t\ttemplate: \"{common.checkbox()}\"\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"cer_serial\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"SO_SERIAL\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 280\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"subject_name\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: \"Chủ thể\",\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 500\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"begin_date\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: \"Ngày bắt đầu\",\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 150\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"end_date\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: \"Ngày kết thúc\",\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 150\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t]\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\theader: _(\"MAU_HDON\"),\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\tid: \"dtMauHoaDon\",\r\n\t\t\t\t\t\t\t\t\tview: \"datatable\",\r\n\t\t\t\t\t\t\t\t\tcolumns: [\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"chon1\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: [{ text: \"\", content: \"masterCheckbox\" }, _(\"CHON\")],\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 55,\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue: 'C',\r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue: 'K',\r\n\t\t\t\t\t\t\t\t\t\t\ttemplate: \"{common.checkbox()}\"\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"ma_loai\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"MA_LOAI\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 100\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"mau_so\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"MAU_SO\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 100\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"ky_hieu\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"KY_HIEU\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 100\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"tu_so\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"TU_SO\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 100\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"den_so\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"DEN_SO\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 100\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"ngay_bd_sd\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"NGAY_BD_SD\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 150,\r\n\t\t\t\t\t\t\t\t\t\t\tformat: function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n\t\t\t\t\t\t\t\t\t\t\t\ttext = removeTimeZoneT(text);\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn format(text);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\theader: _(\"QUYEN_TRUY_CAP_HD\"),\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\tpaddingY: 10,\r\n\t\t\t\t\t\t\t\t\tpaddingX: 10,\r\n\t\t\t\t\t\t\t\t\trows: [\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"chkIssigninvoice\",\r\n\t\t\t\t\t\t\t\t\t\t\tview: \"checkbox\",\r\n\t\t\t\t\t\t\t\t\t\t\tname: \"issigninvoice\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelRight: _(\"KY_HOA_DON\"),\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue: \"C\",\r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue: \"K\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelWidth: 0\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"chkIsviewuser\",\r\n\t\t\t\t\t\t\t\t\t\t\tview: \"checkbox\",\r\n\t\t\t\t\t\t\t\t\t\t\tname: \"isviewuser\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelRight: _(\"IS_VIEW_USER\"),\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue: \"C\",\r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue: \"K\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelAlign: \"right\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelWidth: 0\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"chkIsedituser\",\r\n\t\t\t\t\t\t\t\t\t\t\tview: \"checkbox\",\r\n\t\t\t\t\t\t\t\t\t\t\tname: \"isedituser\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelRight: _(\"IS_EDIT_USER\"),\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue: \"C\",\r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue: \"K\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelWidth: 0\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"chkIsdeluser\",\r\n\t\t\t\t\t\t\t\t\t\t\tview: \"checkbox\",\r\n\t\t\t\t\t\t\t\t\t\t\tname: \"isdeluser\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelRight: _(\"IS_DEL_USER\"),\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue: \"C\",\r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue: \"K\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelWidth: 0\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tshortcut: \"F10\",\r\n\t\t\t\t\t\t\t\tview: \"button\", label: \"Nhận (F10)\", type: \"form\", align: \"center\",\r\n\t\t\t\t\t\t\t\twidth: 100,\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar dtChuKySo = $$(\"dtChuKySo\");\r\n\t\t\t\t\t\t\t\t\t\tvar dtMauHoaDon = $$(\"dtMauHoaDon\");\r\n\t\t\t\t\t\t\t\t\t\t//var dtDonvi = $$(\"dtDonvi\");\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar win = this.getTopParentView();\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar data = {\r\n\t\t\t\t\t\t\t\t\t\t\twb_user_id: win.config.wb_user_id,\r\n\t\t\t\t\t\t\t\t\t\t\tckspermission: dtChuKySo.serialize(),\r\n\t\t\t\t\t\t\t\t\t\t\tinvtemppermission: dtMauHoaDon.serialize(),\r\n\t\t\t\t\t\t\t\t\t\t\t//dvpermission: dtDonvi.serialize(),\r\n\t\t\t\t\t\t\t\t\t\t\tinvoicepermission: {\r\n\t\t\t\t\t\t\t\t\t\t\t\tissigninvoice: $$(\"chkIssigninvoice\").getValue(),\r\n\t\t\t\t\t\t\t\t\t\t\t\tisviewuser: $$(\"chkIsviewuser\").getValue(),\r\n\t\t\t\t\t\t\t\t\t\t\t\tisedituser: $$(\"chkIsedituser\").getValue(),\r\n\t\t\t\t\t\t\t\t\t\t\t\tisdeluser: $$(\"chkIsdeluser\").getValue()\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/Account/Phanquyen\";\r\n\r\n\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t.bind(data)\r\n\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t.post(url, data, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar result = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!result.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar table = webix.$$(\"dmwindowData\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar item = table.getSelectedItem();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.is_sign_invoice = this.invoicepermission.issigninvoice;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.is_view_user = this.invoicepermission.isviewuser;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.is_edit_user = this.invoicepermission.isedituser;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.is_del_user = this.invoicepermission.isdeluser;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttable.updateItem(item.id, item);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"phanquyen-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: result.error });\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", shortcut: \"esc\", type: \"danger\", label: \"Hủy bỏ (ESC)\", align: \"center\",\r\n\t\t\t\t\t\t\t\twidth: 100,\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tthis.getTopParentView().close();\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{}\r\n\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\theight: 5\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tinitUI: initUI\r\n\t};\r\n\r\n});\ndefine('views/accountstore',[\"app\", \"views/forms/accountstore\", \"locale\", \"views/forms/storepermission\"], function (app, dmwindowform, _, accountpermission) {\r\n \r\n\r\n var op = [];\r\n\r\n webix.$$(\"title\").parse({ title: \"Người sử dụng\", details: \"Danh mục người sử dụng\" });\r\n\r\n var controls = [\r\n {\r\n id: \"btnPlus\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-plus\",\r\n label: _(\"THEM\") + \" (F4)\",\r\n width: 100,\r\n css: \"webix_secondary\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var win = this.$scope.ui(dmwindowform.$ui);\r\n dmwindowform.setEditMode(1);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-edit\",\r\n label: _(\"SUA\") + \" (F3)\",\r\n width: 90,\r\n css: \"webix_secondary\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmwindowform.$ui);\r\n var form = webix.$$(\"dmtab-form\");\r\n\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n if (item.username == \"ADMINISTRATOR\") {\r\n webix.message(\"Bạn không được phép sửa tài khoản này !\", \"error\");\r\n return;\r\n }\r\n\r\n form.setValues(item);\r\n\r\n dmwindowform.setEditMode(2);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnDelete\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-trash-o\",\r\n label: _(\"XOA\") + \" (F8)\",\r\n width: 90,\r\n css: \"webix_secondary\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n if (item.username == \"ADMINISTRATOR\") {\r\n webix.message(\"Bạn không được phép xóa tài khoản này !\", \"error\");\r\n return;\r\n }\r\n\r\n item.window_type = \"accountstore\";\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \" + item.username,\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Account/Delete\", item, function (text, xml, xhr) {\r\n if (text.hasOwnProperty(\"error\")) {\r\n webix.message(text.error);\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnPhanQuyen\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-lock\",\r\n label: _(\"PHAN_QUYEN\"),\r\n width: 100,\r\n css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn người sử dụng\", \"error\");\r\n return;\r\n }\r\n\r\n var win = this.$scope.ui(accountpermission.$ui);\r\n win.config.wb_user_id = item.id;\r\n accountpermission.initUI(item);\r\n win.getHead().setHTML(\"Người sử dụng: \" + item.username);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"dmwindowData\",\r\n view: \"datatable\",\r\n select: true,\r\n url: app.config.host + \"/Account/AllUsersByStore\",\r\n on: {\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"username\",\r\n header: [\"Tên truy cập\", { content: \"textFilter\" }],\r\n width: 150,\r\n },\r\n {\r\n id: \"wb_role_id\",\r\n view: \"combo\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00007\",\r\n header: [\"Nhóm quyền\", { content: \"selectFilter\" }],\r\n width: 250,\r\n },\r\n {\r\n id: \"email\",\r\n header: [\"Email\", { content: \"textFilter\" }],\r\n width: 200,\r\n },\r\n {\r\n id: \"fullname\",\r\n header: [\"Tên người sử dụng\", { content: \"textFilter\" }],\r\n width: 200,\r\n },\r\n {\r\n id: \"is_sign_invoice\",\r\n header: \"Ký hóa đơn\",\r\n width: 150,\r\n },\r\n {\r\n id: \"is_view_user\",\r\n header: \"Xem\",\r\n width: 60,\r\n },\r\n {\r\n id: \"is_edit_user\",\r\n header: \"Sửa\",\r\n width: 60,\r\n },\r\n {\r\n id: \"is_del_user\",\r\n header: \"Xóa\",\r\n width: 60,\r\n },\r\n {\r\n id: \"explanation\",\r\n header: \"Diễn giải\",\r\n width: 350,\r\n },\r\n {\r\n id: \"store_code\",\r\n header: [\"Mã cửa hàng\", { content: \"textFilter\" }],\r\n width: 150,\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 35,\r\n view: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmwindowData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmwindow,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/menus/search',[],function(){\r\n\r\nreturn {\r\n\t$ui:{\r\n\t\tview: \"popup\",\r\n\t\tid: \"searchPopup\",\r\n\r\n\t\twidth: 300,\r\n\t\tbody:{\r\n\t\t\trows:[\r\n\t\t\t\t{\r\n\t\t\t\t\tview: \"search\"\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tborderless:true, css: \"extended_search\", template: \"Extended search\", height: 40\r\n\t\t\t\t}\r\n\t\t\t]\r\n\r\n\t\t}\r\n\t}\r\n};\r\n\r\n});\ndefine('views/forms/changepass',[\"app\"], function (app) {\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"listuser-win\", position: \"center\", css: \"custom-window\",\r\n\t\t\thead: \"Đổi mật khẩu\",\r\n\t\t\tbody: {\r\n\t\t\t\tcss: \"custom-body\",\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\t//elementsConfig:{labelWidth: 120}, \r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"listuser-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{ view: \"text\", id:\"oldpass\", name: \"oldpass\", required: true, invalidMessage: \"Mật khẩu cũ không được bỏ trống\", type: \"password\", label: \"Mật khẩu cũ\", labelPosition: \"top\", css:\"custom-input\", icon: \"fa fa-eye\", \r\n\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\tonItemClick: function (id, e) {\r\n\t\t\t\t\t\t\t\t// Kiểm tra xem người dùng có click vào biểu tượng không\r\n\t\t\t\t\t\t\t\tif (e.target && e.target.classList.contains(\"webix_input_icon\")) {\r\n\t\t\t\t\t\t\t\t\tvar inputNode = $$(\"oldpass\").getInputNode(); // Lấy node input\r\n\t\t\t\t\t\t\t\t\tvar inputType = inputNode.type; // Kiểm tra loại của input (password hoặc text)\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t// Thay đổi loại input và biểu tượng tương ứng\r\n\t\t\t\t\t\t\t\t\tif (inputType === \"password\") {\r\n\t\t\t\t\t\t\t\t\t\tinputNode.type = \"text\"; // Hiển thị mật khẩu\r\n\t\t\t\t\t\t\t\t\t\twebix.html.removeCss(e.target, \"fa-eye\");\r\n\t\t\t\t\t\t\t\t\t\twebix.html.addCss(e.target, \"fa-eye-slash\"); // Thêm biểu tượng mắt đóng\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tinputNode.type = \"password\"; // Ẩn mật khẩu\r\n\t\t\t\t\t\t\t\t\t\twebix.html.removeCss(e.target, \"fa-eye-slash\");\r\n\t\t\t\t\t\t\t\t\t\twebix.html.addCss(e.target, \"fa-eye\"); // Thêm biểu tượng mắt mở\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t// onBlur: function() {\r\n\t\t\t\t\t\t\t// \tvar password = this.getValue();\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t// \t// Password regex: at least 8 characters, including uppercase, lowercase, number, and special character\r\n\t\t\t\t\t\t\t// \tvar passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*(),.?\":{}|<>]).{8,}$/;\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\t// \tlet errorLabel = this.$view.querySelector(\".custom-error-label\");\r\n\t\t\t\t\t\t\t// \tif (!errorLabel) {\r\n\t\t\t\t\t\t\t// \t\terrorLabel = document.createElement(\"div\");\r\n\t\t\t\t\t\t\t// \t\terrorLabel.className = \"custom-error-label\";\r\n\t\t\t\t\t\t\t// \t\terrorLabel.style.color = \"red\";\r\n\t\t\t\t\t\t\t// \t\terrorLabel.style.marginTop = \"10px\";\r\n\t\t\t\t\t\t\t// \t\tthis.$view.appendChild(errorLabel);\r\n\t\t\t\t\t\t\t// \t}\r\n\r\n\t\t\t\t\t\t\t// \t// Show or hide the error message based on password validity\r\n\t\t\t\t\t\t\t// \tif (passwordRegex.test(password)) {\r\n\t\t\t\t\t\t\t// \t\terrorLabel.innerText = \"\"; // Clear error if valid\r\n\t\t\t\t\t\t\t// \t} else {\r\n\t\t\t\t\t\t\t// \t\terrorLabel.innerText = \"Mật khẩu phải có ít nhất 8 ký tự, bao gồm chữ hoa, chữ thường, số và ký tự đặc biệt.\";\r\n\t\t\t\t\t\t\t// \t}\r\n\t\t\t\t\t\t\t// }\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t },\r\n\t\t\t\t\t{ view: \"text\", id:\"newpass\", name: \"newpass\", required: true, invalidMessage: \"Mật khẩu mới không được bỏ trống\", type: \"password\", label: \"Mật khẩu mới\", labelPosition: \"top\" , css:\"custom-input\", icon: \"fa fa-eye\", \r\n\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\tonItemClick: function (id, e) {\r\n\t\t\t\t\t\t\t\t// Kiểm tra xem người dùng có click vào biểu tượng không\r\n\t\t\t\t\t\t\t\tif (e.target && e.target.classList.contains(\"webix_input_icon\")) {\r\n\t\t\t\t\t\t\t\t\tvar inputNode = $$(\"newpass\").getInputNode(); // Lấy node input\r\n\t\t\t\t\t\t\t\t\tvar inputType = inputNode.type; // Kiểm tra loại của input (password hoặc text)\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t// Thay đổi loại input và biểu tượng tương ứng\r\n\t\t\t\t\t\t\t\t\tif (inputType === \"password\") {\r\n\t\t\t\t\t\t\t\t\t\tinputNode.type = \"text\"; // Hiển thị mật khẩu\r\n\t\t\t\t\t\t\t\t\t\twebix.html.removeCss(e.target, \"fa-eye\");\r\n\t\t\t\t\t\t\t\t\t\twebix.html.addCss(e.target, \"fa-eye-slash\"); // Thêm biểu tượng mắt đóng\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tinputNode.type = \"password\"; // Ẩn mật khẩu\r\n\t\t\t\t\t\t\t\t\t\twebix.html.removeCss(e.target, \"fa-eye-slash\");\r\n\t\t\t\t\t\t\t\t\t\twebix.html.addCss(e.target, \"fa-eye\"); // Thêm biểu tượng mắt mở\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tonBlur: function() {\r\n\t\t\t\t\t\t\t\tvar password = this.getValue();\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t// Password regex: at least 8 characters, including uppercase, lowercase, number, and special character\r\n\t\t\t\t\t\t\t\tvar passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*\\W)[A-Za-z\\d\\W]{8,}$/;\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tvar errorLabel = this.$view.querySelector(\".custom-error-label\");\r\n\t\t\t\t\t\t\t\tif (!errorLabel) {\r\n\t\t\t\t\t\t\t\t\terrorLabel = document.createElement(\"div\");\r\n\t\t\t\t\t\t\t\t\terrorLabel.className = \"custom-error-label\";\r\n\t\t\t\t\t\t\t\t\terrorLabel.style.color = \"red\";\r\n\t\t\t\t\t\t\t\t\terrorLabel.style.marginTop = \"10px\";\r\n\t\t\t\t\t\t\t\t\tthis.$view.appendChild(errorLabel);\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t// Show or hide the error message based on password validity\r\n\t\t\t\t\t\t\t\tif (passwordRegex.test(password)) {\r\n\t\t\t\t\t\t\t\t\terrorLabel.innerText = \"\"; // Clear error if valid\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\terrorLabel.innerText = \"Mật khẩu phải có ít nhất 8 ký tự, bao gồm chữ hoa, chữ thường, số và ký tự đặc biệt.\";\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{ view: \"text\", id:\"confirmpass\", name: \"confirmpass\", required: true, invalidMessage: \"Xác nhận mật khẩu không được bỏ trống\", type: \"password\", label: \"Xác nhận mật khẩu\", labelPosition: \"top\", css:\"custom-input\", icon: \"fa fa-eye\", \r\n\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\tonItemClick: function (id, e) {\r\n\t\t\t\t\t\t\t\t// Kiểm tra xem người dùng có click vào biểu tượng không\r\n\t\t\t\t\t\t\t\tif (e.target && e.target.classList.contains(\"webix_input_icon\")) {\r\n\t\t\t\t\t\t\t\t\tvar inputNode = $$(\"confirmpass\").getInputNode(); // Lấy node input\r\n\t\t\t\t\t\t\t\t\tvar inputType = inputNode.type; // Kiểm tra loại của input (password hoặc text)\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t// Thay đổi loại input và biểu tượng tương ứng\r\n\t\t\t\t\t\t\t\t\tif (inputType === \"password\") {\r\n\t\t\t\t\t\t\t\t\t\tinputNode.type = \"text\"; // Hiển thị mật khẩu\r\n\t\t\t\t\t\t\t\t\t\twebix.html.removeCss(e.target, \"fa-eye\");\r\n\t\t\t\t\t\t\t\t\t\twebix.html.addCss(e.target, \"fa-eye-slash\"); // Thêm biểu tượng mắt đóng\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tinputNode.type = \"password\"; // Ẩn mật khẩu\r\n\t\t\t\t\t\t\t\t\t\twebix.html.removeCss(e.target, \"fa-eye-slash\");\r\n\t\t\t\t\t\t\t\t\t\twebix.html.addCss(e.target, \"fa-eye\"); // Thêm biểu tượng mắt mở\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tonBlur: function() {\r\n\t\t\t\t\t\t\t\tvar password = this.getValue();\r\n\t\t\t\t\t\t\t\tvar passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*\\W)[A-Za-z\\d\\W]{8,}$/;\r\n\t\t\t\t\t\t\t\tvar errorLabel = this.$view.querySelector(\".custom-error-label\");\r\n\t\t\t\t\t\t\t\tif (!errorLabel) {\r\n\t\t\t\t\t\t\t\t\terrorLabel = document.createElement(\"div\");\r\n\t\t\t\t\t\t\t\t\terrorLabel.className = \"custom-error-label\";\r\n\t\t\t\t\t\t\t\t\terrorLabel.style.color = \"red\";\r\n\t\t\t\t\t\t\t\t\terrorLabel.style.marginTop = \"10px\";\r\n\t\t\t\t\t\t\t\t\tthis.$view.appendChild(errorLabel);\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tif (passwordRegex.test(password)) {\r\n\t\t\t\t\t\t\t\t\terrorLabel.innerText = \"\"; // Clear error if valid\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\terrorLabel.innerText = \"Mật khẩu phải có ít nhất 8 ký tự, bao gồm chữ hoa, chữ thường, số và ký tự đặc biệt.\";\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t },\r\n\t\t\t\t\t{ view: \"template\", template: \"Chú ý: Mật khẩu phải lớn hơn 8 ký tự, có chứa chữ hoa, chữ thường, số và ký tự đặc biệt.\", css: \"warning-text\"},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcss: \"custom-button\",\r\n\t\t\t\t\t\tmargin: 30,\r\n\t\t\t\t\t\tcols: [\t\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", label: \"Lưu (F10)\", hotkey: \"F10\", type: \"form\", align: \"center\", width: 120, click: function () {\r\n\t\t\t\t\t\t\t\t\tdebugger;\r\n\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"listuser-form\");\r\n\t\t\t\t\t\t\t\t\tdebugger;\r\n\t\t\t\t\t\t\t\t\tif (form.validate() == false) {\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\t\tvar passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*\\W)[A-Za-z\\d\\W]{8,}$/;\r\n\r\n\t\t\t\t\t\t\t\t\tif (!passwordRegex.test(item.newpass) || !passwordRegex.test(item.confirmpass)) {\r\n\t\t\t\t\t\t\t\t\t\twebix.message(\"Mật khẩu phải lớn hơn 8 ký tự, có chứa chữ hoa, chữ thường, số và ký tự đặc biệt!\", \"error\");\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tif (item.newpass != item.confirmpass) {\r\n\t\t\t\t\t\t\t\t\t\twebix.message(\"Mật khẩu mới không giống nhau\", \"error\");\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t.post(app.config.host + \"/Account/ChangePass\", item, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"listuser-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.message(\"Đổi mật khẩu thành công !\", \"success\");\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar baseUrl = document.location.href;\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (baseUrl.startsWith(\"file\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.storage.local.remove(\"appCookie\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCookies.remove(\"appCookie\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdocument.location.reload();\r\n\t\t\t\t\t\t\t\t\t\t\t\t}, 500);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.message(data.error, \"error\");\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", label: \"Hủy bỏ (ESC)\", hotkey: \"esc\", type: \"danger\", align: \"center\", width: 120, click: function () {\r\n\t\t\t\t\t\t\t\t\twebix.$$(\"listuser-win\").close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t]\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/modules/chatplugin',[\r\n 'app',\r\n 'models/user'\r\n], function (app, user) {\r\n \r\n var hub = null;\r\n // var ChatUrl = \"http://localhost:52527/signalr\";\r\n // //This will hold the connection to the signalr hub \r\n // var SignalrConnection = $.hubConnection(ChatUrl, {\r\n // useDefaultPath: false\r\n // });\r\n // var hub = SignalrConnection.createHubProxy('chatHub');\r\n // //connecting the client to the signalr hub \r\n // hub.on(\"addNewMessageToPage\", function (name, message) {\r\n // console.log(name + message);\r\n // });\r\n\r\n // SignalrConnection.disconnected(function () {\r\n // console.log('Connection disconnected');\r\n // });\r\n // SignalrConnection.start().done(function () {\r\n // console.log(\"Connected to Signalr Server\");\r\n // })\r\n // .fail(function () {\r\n // console.log(\"failed in connecting to the signalr server\");\r\n // });\r\n\r\n\r\n return {\r\n hub: function () {\r\n return hub;\r\n }\r\n }\r\n});\ndefine('views/forms/chat',[\"app\", \"models/user\", \"views/modules/chatplugin\"], function (app, user, proxy) {\r\n // var hub = proxy.hub();\r\n // hub.on(\"addNewMessageToPage\", function (name, message) {\r\n // addChatMessage(name, message);\r\n // });\r\n\r\n // function change_weather(i) {\r\n // var jj = proxy.hub();\r\n // jj.invoke('change_weather', i);\r\n // }\r\n\r\n function addChatMessage(name, message) {\r\n var chat = $$(\"chat\");\r\n\r\n chat.add({\r\n user: name,\r\n value: message,\r\n });\r\n\r\n var lastId = chat.getLastId();\r\n chat.scrollTo(0, lastId);\r\n\r\n $$(\"message\").setValue(\"\");\r\n $$(\"message\").focus();\r\n }\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n id: \"chat-win\",\r\n position: \"center\",\r\n head: \"MobiFone Invoice Chat\",\r\n // head: {\r\n // view: \"toolbar\",\r\n // height: 25,\r\n // cols: [\r\n // { view: \"label\", label: \"MobiFone Invoice Chat\" },\r\n // {\r\n // view: \"icon\", icon: \"times\", hotkey: \"esc\", click: function () {\r\n // $$(\"chat-win\").close();\r\n // }\r\n // }\r\n // ]\r\n // },\r\n width: 700,\r\n height: 500,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n //elementsConfig:{labelWidth: 120},\r\n view: \"form\",\r\n id: \"chat-form\",\r\n complexData: true,\r\n elements: [\r\n //rows: [\r\n // { template: \"Webix Based Chat\", type: \"header\" },\r\n // {\r\n // view: \"list\", id: \"chat\", gravity: 3,\r\n // // url: \"faye->/data\", save: \"faye->/data\",\r\n // // type: { height: \"auto\" },\r\n // // template: chat_template\r\n // },\r\n {\r\n view: \"list\",\r\n id: \"chat\",\r\n gravity: 3,\r\n type: { height: \"auto\" },\r\n template: function (obj) {\r\n return \"\" + obj.user + \" \" + obj.value;\r\n },\r\n },\r\n {\r\n cols: [\r\n { view: \"textarea\", id: \"message\", placeholder: \"Type message here\", gravity: 3 },\r\n {\r\n rows: [\r\n {\r\n view: \"button\",\r\n value: \"Send\",\r\n type: \"form\",\r\n // width: 100,\r\n click: function () {\r\n //change_weather(124124);\r\n var text = $$(\"message\").getValue();\r\n var ds = user.getCurrentUser();\r\n //webix.message(\"Hệ thống đang bảo trì !\", \"error\");\r\n //send(ds, text);\r\n var hub = proxy.hub();\r\n hub.invoke(\"Send\", user.getCurrentUser(), text)\r\n .done(function () {\r\n console.log(\"send ok !\");\r\n //addChatMessage(ds, text);\r\n })\r\n .fail(function (error) {\r\n console.log(error);\r\n });\r\n },\r\n // click: function () {\r\n // webix.message(\"Hệ thống đang bảo trì !\", \"error\");\r\n // }\r\n },\r\n {\r\n view: \"button\",\r\n value: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n hotkey: \"esc\",\r\n align: \"center\",\r\n // width: 100,\r\n click: function () {\r\n webix.$$(\"chat-win\").close();\r\n },\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n //], type: \"space\", margin: 2\r\n },\r\n };\r\n});\r\n\ndefine('views/hotroform',[\"app\", \"locale\"], function (app, _) {\r\n //var json = version.getInfocompany();\r\n //$$(\"hotro-form\").setValues(json);\r\n\r\n var layout = {\r\n view: \"window\",\r\n modal: true,\r\n id: \"hotro-win\",\r\n position: \"center\",\r\n head: \"Gửi yêu cầu hỗ trợ đến MobiFone Invoice\",\r\n width: 500,\r\n // height: 700,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n //elementsConfig:{labelWidth: 120},\r\n view: \"form\",\r\n id: \"hotro-form\",\r\n complexData: true,\r\n elements: [\r\n {\r\n view: \"text\",\r\n name: \"ms_thue\",\r\n id: \"ms_thue\",\r\n label: _(\"MS_THUE\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\",\r\n },\r\n {\r\n view: \"text\",\r\n name: \"ten_dvcs\",\r\n id: \"ten_dvcs\",\r\n label: _(\"DONVI\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\",\r\n },\r\n {\r\n view: \"text\",\r\n name: \"dia_chi\",\r\n label: _(\"DIA_CHI\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\",\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"nguoi_dai_dien\",\r\n label: _(\"NGUOI_DAI_DIEN_PL\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\",\r\n },\r\n {\r\n view: \"text\",\r\n name: \"email\",\r\n label: \"Email\",\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"nguoi_lien_he\",\r\n id: \"nguoi_lien_he\",\r\n label: _(\"Người liên hệ\"),\r\n labelPosition: \"top\",\r\n required: true,\r\n invalidMessage: \"Bạn phải nhập người liên hệ\",\r\n },\r\n\r\n {\r\n view: \"text\",\r\n name: \"sdt\",\r\n id: \"sdt\",\r\n label: \"Số điện thoại\",\r\n labelPosition: \"top\",\r\n required: true,\r\n //webix.ru\r\n invalidMessage: \"Bạn phải nhập số điện thoại\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"teamview\",\r\n id: \"teamview\",\r\n label: _(\"Teamview (UltraViewer)\"),\r\n labelPosition: \"top\",\r\n },\r\n\r\n {\r\n view: \"text\",\r\n name: \"pass\",\r\n id: \"pass\",\r\n label: \"Password\",\r\n labelPosition: \"top\",\r\n },\r\n ],\r\n },\r\n {\r\n id: \"noi_dung\",\r\n view: \"textarea\",\r\n name: \"noi_dung\",\r\n label: \"Yêu cầu hỗ trợ\",\r\n height: 120,\r\n labelPosition: \"top\",\r\n },\r\n\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Gửi (F10)\",\r\n align: \"center\",\r\n width: 120,\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"hotro-form\");\r\n\r\n var item = form.getValues();\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y - %H:%i\");\r\n var string = format(new Date());\r\n\r\n var descrip =\r\n \"Ngày :\" +\r\n string +\r\n \"
\" +\r\n \"Công ty :\" +\r\n item.ten_dvcs +\r\n \"
\" +\r\n \"Mã số thuế :\" +\r\n item.ms_thue +\r\n \"
\" +\r\n \"Người liên hệ: \" +\r\n item.nguoi_lien_he +\r\n \"
\" +\r\n \"Số điện thoại: \" +\r\n item.sdt +\r\n \"
\" +\r\n \"Teamview (UltraViewer): \" +\r\n item.teamview +\r\n \"
\" +\r\n \"Pass: \" +\r\n item.pass +\r\n \"
\" +\r\n \"Nội dung cần hỗ trợ: \" +\r\n item.noi_dung +\r\n \"
\";\r\n\r\n if ($$(\"hotro-form\").validate()) {\r\n var box = webix.modalbox({\r\n title: \"Đang gửi yêu cầu hỗ trợ đến MobiFone Invoice\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var data = {\r\n mst: item.ms_thue,\r\n noidung: item.noi_dung,\r\n nguoi_lien_he: item.nguoi_lien_he,\r\n sdt_nguoi_lien_he: item.sdt,\r\n ultra_teamview: item.teamview,\r\n pass: item.pass,\r\n };\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/SendSupport\", data, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"nguoi_lien_he\").setValue(null);\r\n $$(\"sdt\").setValue(null);\r\n $$(\"teamview\").setValue(null);\r\n $$(\"pass\").setValue(null);\r\n $$(\"noi_dung\").setValue(null);\r\n webix.message(\"Gửi yêu cầu hỗ trợ thành công !\", \"debug\");\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n webix.modalbox.hide(box);\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhập lại (F9)\",\r\n align: \"center\",\r\n width: 120,\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n $$(\"nguoi_lien_he\").setValue(null);\r\n $$(\"sdt\").setValue(null);\r\n $$(\"teamview\").setValue(null);\r\n $$(\"pass\").setValue(null);\r\n $$(\"noi_dung\").setValue(null);\r\n },\r\n },\r\n\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n align: \"center\",\r\n width: 120,\r\n type: \"danger\",\r\n click: function () {\r\n webix.$$(\"hotro-win\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n };\r\n return {\r\n $ui: layout,\r\n initUI: function (json) {\r\n $$(\"hotro-form\").setValues(json);\r\n },\r\n };\r\n});\r\n\ndefine('views/menus/version',[\"app\"], function (app) {\r\n\r\n // var user = null,\r\n // credentials = {},\r\n // oauthUrl = ''\r\n // ;\r\n\r\n // var host = \"\";\r\n // var start = \"\";\r\n\r\n // require([\"app\"], function (app) {\r\n // host = app.config.host;\r\n // start = app.config.start;\r\n // });\r\n\r\n // credentials = Cookies.getJSON(\"appCookie\") || {};\r\n\r\n // function saveSetting(key, value, reload) {\r\n // if (current_user) {\r\n // var id = current_user.id,\r\n // settings = current_user.settings;\r\n\r\n // if (!settings[key] || value != settings[key]) {\r\n // if (reload)\r\n // document.location.reload();\r\n // }\r\n // }\r\n // }\r\n\r\n return {\r\n //saveSetting: saveSetting,\r\n // getVersion: function () {\r\n // var result = webix.ajax().sync().get(app.config.host + \"/System/GetVersion\");\r\n // var json = JSON.parse(result.response);\r\n // //console.log(json);\r\n // return json;\r\n // },\r\n\r\n getWarning: function () {\r\n // var item = {\r\n // command: \"NOTYFI_INV_TEMP\",\r\n // parameter: {\r\n\r\n // }\r\n // }\r\n // webix.ajax()\r\n // .headers({ \"Content-Type\": \"application/json\" })\r\n // .post(app.config.host + \"/System/ExecuteCommand\", item, function (text) {\r\n // var res = JSON.parse(text);\r\n\r\n // if (res.hasOwnProperty(\"error\")) {\r\n // webix.message({ type: \"error\", text: res.error });\r\n // }\r\n // else {\r\n // webix.message(\"Đã thực hiện xong\");\r\n // }\r\n // });\r\n // webix.ajax().post(app.config.host + \"/System/ExecuteCommand\", item, function () {\r\n\r\n // });\r\n // var json = JSON.parse(result.response);\r\n // //console.log(json);\r\n // return json;\r\n },\r\n getInfocompany: function () {\r\n var result = webix.ajax().sync().get(app.config.host + \"/System/GetInfoCompany\");\r\n var json = JSON.parse(result.response);\r\n //console.log(json);\r\n return json;\r\n },\r\n getMST: function () {\r\n var result = webix.ajax().sync().get(app.config.host + \"/System/GetMST\");\r\n var json = result.response.substring(1, result.response.length - 1);\r\n return json;\r\n },\r\n GetSchema: function () {\r\n var result = webix.ajax().sync().get(app.config.host + \"/Invoice/GetSchema\");\r\n var json = result.response.substring(1, result.response.length - 1);\r\n return json;\r\n }\r\n\r\n };\r\n\r\n});\ndefine('views/forms/link_sso',[\"app\", \"models/user\"], function (app, user) {\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"listuser-win\", position: \"center\",\r\n\t\t\thead: \"Liên kết tài khoản SSO\",\r\n\t\t\tbody: {\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\t//elementsConfig:{labelWidth: 120}, \r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"listuser-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{ view: \"text\", id: \"email_sso\", name: \"email_sso\", placeholder: \"Nhập địa chỉ Email SSO\", label: \"Email\", required: true, invalidMessage: \"Email để trống hoặc nhập không đúng định dạng!\",validate: webix.rules.isEmail, labelPosition: \"top\" },\r\n\t\t\t\t\t{ view: \"text\", id: \"otp\",name: \"otp\", disabled:true, label: \"Mã OTP\", labelPosition: \"top\" },\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", id: \"btn-sendOtp\", label: \"Gửi OTP\", type: \"form\", align: \"center\", width: 120, click: function () {\r\n\r\n\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"listuser-form\");\r\n\r\n\t\t\t\t\t\t\t\t\tif (form.validate() == false) {\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tvar item = form.getValues();\t\r\n\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t.post(app.config.host + \"/Account/GenerateOtpSSO\", item, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t $$(\"confirm-link-btn\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"otp\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"email_sso\").disable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"btn-sendOtp\").setValue(\"Gửi lại OTP\");\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.message(\"Gửi yêu cầu thành công!\", \"success\");\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.message(data.error, \"error\");\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t} \r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", id: \"confirm-link-btn\", label: \"Xác nhận liên kết\", type: \"success\", align: \"center\", disabled: true, width: 120, click: function () {\r\n\r\n\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"listuser-form\");\r\n\r\n\t\t\t\t\t\t\t\t\tif (form.validate() == false) {\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\r\n\t\t\t\t\t\t\t\t\tif (item.otp == null||item.otp == \"\") {\r\n\t\t\t\t\t\t\t\t\t\twebix.message(\"Mã OTP không được để trống!\", \"error\");\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\twebix.extend(form, webix.ProgressBar);\r\n\t\t\t\t\t\t\t\t\tform.disable();\r\n\t\t\t\t\t\t\t\t\tform.showProgress();\r\n\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t.post(app.config.host + \"/Account/VerifyOtpSSO\", item, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"listuser-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t//webix.message(\"Liên kết thành công!\", \"success\");\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar baseUrl = document.location.href;\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (baseUrl.startsWith(\"file\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.storage.local.remove(\"appCookie\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCookies.remove(\"appCookie\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.modalbox({\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: \"LIÊN KẾT THÀNH CÔNG!\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttext: \"Quý khách vui lòng đăng nhập bằng tài khoản SSO để tiếp tục sử dụng dịch vụ.\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbuttons: [\"OK\"],\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcallback: function() {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdocument.location.reload();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.message(data.error, \"error\");\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tform.enable();\r\n\t\t\t\t\t\t\t\t\t\t\tform.hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t} \r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", label: \"Hủy bỏ (ESC)\", hotkey: \"esc\", type: \"danger\", align: \"center\", width: 120, click: function () {\r\n\t\t\t\t\t\t\t\t\twebix.$$(\"listuser-win\").close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t]\r\n\t\t\t}\r\n\t\t},\r\n\t\t$oninit: function () {\r\n // Load data from API and fill the form\r\n\t\t\tvar apiUrl = app.config.sso + \"/partner/getInfo\";\r\n\t\t\twebix.ajax().get(apiUrl, function (text) {\r\n\t\t\t\tvar userData = JSON.parse(text);\r\n\t\t\t\tvar userInfo = userData.result.userInfo;\r\n\t\t\t\tvar form = $$(\"listuser-form\");\r\n\t\t\t\tform.setValues(userInfo);\r\n });\r\n }\r\n\t};\r\n\r\n});\ndefine('views/menus/profile',[\"models/user\", \"views/forms/changepass\", \"locale\", \"views/forms/chat\", \"views/hotroform\", \"views/menus/version\", \"views/forms/link_sso\"], function (user, changepass, _, chat, hotroform, version, link_sso) {\r\n var data = [\r\n { id: \"1\", icon: \"mdi mdi-key\", value: \"USER\" },\r\n { id: \"changepasssso\", icon: \"mdi mdi-key\", value: _(\"CHANGE_PASS_SSO\") },\r\n { id: \"changepass\", icon: \"mdi mdi-key\", value: _(\"CHANGE_PASS\") },\r\n { id: \"link_sso\", icon: \"mdi mdi-link\", value: _(\"LINK_SSO\") },\r\n { id: \"delcache\", icon: \"mdi mdi-settings\", value: _(\"DEL_CACHE\") },\r\n { id: \"signOut\", icon: \"mdi mdi-logout\", value: _(\"LOGOUT\") },\r\n ];\r\n\r\n var cookie = user.getAppCookie();\r\n var id_token = \"\";\r\n // Ktra xem có hiển thị link SSO không\r\n if ((cookie.id_token != null && cookie.id_token != \"\") || (cookie != null && cookie.is_link_sso == true)) {\r\n id_token = cookie.id_token;\r\n data = data.filter(function(item) {\r\n return item.id !== \"link_sso\";\r\n });\r\n }\r\n else{\r\n data = data.filter(function(item) {\r\n return item.id !== \"changepasssso\";\r\n });\r\n }\r\n return {\r\n $ui: {\r\n view: \"popup\",\r\n id: \"profilePopup\",\r\n css: \"profilePopup\",\r\n resize: true,\r\n autofit: true,\r\n minHeight: 300,\r\n minWidth: 300,\r\n body: {\r\n view: \"list\",\r\n select: true,\r\n datatype: \"json\",\r\n css: \"profile\",\r\n data: data,\r\n template: function (obj) {\r\n if (obj.value == \"USER\") {\r\n var k =\r\n \"
\" +\r\n \"

\" +\r\n user.getCurrentUser() +\r\n \"


\" +\r\n // + \"

Tên công ty: 1


\"\r\n // + \"

Mã số thuế: 2


\"\r\n \"

Phiên bản: 1.0.0.0


\" +\r\n \"

Copyrights © 2021 Phần mềm Hóa đơn điện tử MobiFone Invoice


\" +\r\n \"Xem thêm\" +\r\n \"
\" +\r\n \"
\";\r\n return k;\r\n } else {\r\n return \" \" + obj.value + \"\";\r\n }\r\n },\r\n type: {\r\n height: \"auto\",\r\n },\r\n // view: \"submenu\",\r\n // id: \"profilePopup\",\r\n // width: 200,\r\n // padding: 0,\r\n // data: [\r\n // \t/* {id: 1, icon: \"user\", value: \"Thông tin cá nhân\"},\r\n // \t{id: 2, icon: \"cog\", value: \"Thông tin tài khoản\"},\r\n // \t{id: 3, icon: \"calendar\", value: \"Lịch làm việc\"},\r\n // \t{id: 5, icon: \"tasks\", value: \"Nhiệm vụ\"},\r\n // \t{ $template:\"Separator\" }, */\r\n // \t{ id: \"changepass\", icon: \"mdi mdi-key\", value: _(\"CHANGE_PASS\") },\r\n // \t{ id: \"delcache\", icon: \"mdi mdi-settings\", value: _(\"DEL_CACHE\") },\r\n // \t{ $template: \"Separator\" },\r\n // \t// { id: \"hotro\", icon: \"mdi mdi-ambulance\", value: _(\"MobiFone Invoice Hỗ trợ\") },\r\n // \t// { id: \"chat\", icon: \"mdi mdi-comment-account-outline\", value: _(\"MobiFone Invoice Chat\") },\r\n // \t// { $template: \"Separator\" },\r\n // \t{ id: \"signOut\", icon: \"mdi mdi-logout\", value: _(\"LOGOUT\") }\r\n\r\n // ],\r\n // type: {\r\n // \ttemplate: function (obj) {\r\n // \t\tif (obj.type)\r\n // \t\t\treturn \"
\";\r\n // \t\treturn \" \" + obj.value + \"\";\r\n // \t}\r\n // },\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n this.hide();\r\n\r\n if (id == \"signOut\") {\r\n user.logout();\r\n // document.location.reload();\r\n\r\n /* require([\"app\"], function(app){\r\n\t\t\t\t\t\t\t\tapp.router(app.config.start);\r\n\t\t\t\t\t\t\t}); */\r\n }\r\n\r\n if (id == \"changepasssso\") {\r\n window.open(\"https://auth-sso.mobifone.vn/vn/profile-information\", \"_blank\");\r\n }\r\n\r\n if (id == \"changepass\") {\r\n var win = this.$scope.ui(changepass.$ui);\r\n win.show();\r\n }\r\n\r\n if (id == \"link_sso\") {\r\n var win = this.$scope.ui(link_sso.$ui);\r\n win.show();\r\n }\r\n\r\n if (id == \"hotro\") {\r\n var json = version.getInfocompany();\r\n\r\n var win = this.$scope.ui(hotroform.$ui);\r\n hotroform.initUI(json);\r\n win.show();\r\n }\r\n\r\n if (id == \"chat\") {\r\n var win = this.$scope.ui(chat.$ui);\r\n win.show();\r\n }\r\n\r\n if (id == \"delcache\") {\r\n webix.storage.local.remove(\"APP_CACHE\");\r\n webix.storage.local.put(\"APP_CACHE\", {});\r\n\r\n webix.message(\"Đã xóa cache dữ liệu\", \"debug\");\r\n }\r\n },\r\n },\r\n },\r\n },\r\n };\r\n});\r\n\n// JavaScript source code\r\ndefine('views/menus/notify',[\"app\", \"models/user\"], function (app, user) {\r\n var checkDataEmpty = 0;\r\n var dataList = new webix.DataCollection({\r\n data: [],\r\n });\r\n\r\n return {\r\n $ui: {\r\n view: \"popup\",\r\n id: \"notifyPopup\",\r\n css: \"notifyPopup\",\r\n resize: true,\r\n autofit: true,\r\n minHeight: 250,\r\n minWidth: 300,\r\n body: {\r\n view: \"list\",\r\n select: true,\r\n datatype: \"json\",\r\n css: \"profile\",\r\n // url: {\r\n // $proxy: true,\r\n // load: function (view, callback, params) {\r\n // var url = app.config.host + \"/Invoice68/GetInvoiceNotify\";\r\n\r\n // return webix.ajax(url, callback, view);\r\n\r\n // //webix.ajax().get(app.config.host + \"/Invoice68/GetInvoiceNotify\", function (text) {\r\n // // var listcerts = JSON.parse(text);\r\n // // if (listcerts.length > 0) {\r\n // // return listcerts;\r\n // // }\r\n // // else {\r\n // // var itemEmpty = {\r\n // // tgian_gui: null,\r\n // // contentnotify: \"Không có dữ liệu để hiển thị.\"\r\n // // };\r\n // // listcerts.push(itemEmpty);\r\n // // return listcerts;\r\n // // }\r\n // // //return webix.ajax(url, callback, view);\r\n // //});\r\n // }\r\n // },\r\n template: function (obj) {\r\n if (obj.tgian_gui != null) {\r\n return \"

\" + obj.contentnotify + \"

\" + \"

\" + obj.tgian_gui + \"

\";\r\n }\r\n else {\r\n document.getElementsByClassName(\"notifyPopup\")[0].style.height = \"80px\";\r\n return \"

\" + obj.contentnotify + \"

\";\r\n }\r\n },\r\n type: {\r\n height: \"auto\",\r\n },\r\n on: {\r\n onAfterLoad: function () {\r\n document.getElementsByClassName(\"notifyPopup\")[0].style.borderRadius = \"8px\";\r\n },\r\n },\r\n data: dataList\r\n },\r\n },\r\n showNotify: function() {\r\n if(dataList && dataList.count() == 0) {\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetInvoiceNotify\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n dataList.parse(listcerts);\r\n document.getElementsByClassName(\"notifyPopup\")[0].style.borderRadius = \"8px\";\r\n }\r\n });\r\n } \r\n }\r\n };\r\n});\r\n\ndefine('views/menus/menubar',[\"app\"], function (app) {\r\n\twebix.Touch.enable();\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"menu\",\r\n\t\t\tid: \"app:menu\",\r\n\t\t\turl: app.config.host + \"/System/GetMenuBar\",\r\n\t\t\tautowidth: true,\r\n\t\t\tcss: { \"background\": \"#005EB2\", \"padding-top\": \"0px\" },\r\n\t\t\topenAction:\"click\",\r\n\t\t\ttemplate: function (obj) {\r\n\t\t\t\tvar html = '
'\r\n\t\t\t\t\t+ '
'\r\n\t\t\t\t\t+ ' ' + obj.icon\r\n\t\t\t\t\t+ '
'\r\n\t\t\t\t\t+ '
' + obj.value + '
'\r\n\t\t\t\t\t+ '
'\r\n\t\t\t\treturn html;\r\n\t\t\t},\r\n\t\t\twidth:1200,\r\n\t\t\ton: {\r\n\t\t\t\tonMenuItemClick: function (id) {\r\n\t\t\t\t\tvar item = this.getMenuItem(id);\r\n\r\n\t\t\t\t\tif (item.url != \"\") {\r\n\t\t\t\t\t\tvar win = window.open(item.url, '_blank');\r\n\t\t\t\t\t\twin.focus();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (item.code == \"\") return;\r\n\t\t\t\t\tif (item.code == \"dashboard\") {\r\n\t\t\t\t\t\t$$(\"head-title\").define(\"hidden\", true);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\t$$(\"head-title\").show();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar start = item.window_id != \"\" ? item.code + \":\" + item.window_id : item.code;\r\n\t\t\t\t\tthis.$scope.show(\"./\" + start);\r\n\r\n\t\t\t\t\tvar _URL = window.location.href;\r\n\t\t\t\t\tif (!_URL.includes(item.window_id)) {\r\n\t\t\t\t\t\t$$(\"head-title\").removeView(\"tlbParams\");\r\n\t\t\t\t\t\twebix.$$(\"title\").parse({ title: item.value, details: item.details });\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (item.code == \"tinhhinhsudung\" || item.code == \"bangkebanra\") {\r\n\t\t\t\t\t\t$$(\"head-title\").removeView(\"tlbParams\");\r\n\t\t\t\t\t\twebix.$$(\"title\").parse({ title: item.value, details: item.details });\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\ttype: {\r\n\t\t\t\tsubsign: true\r\n\t\t\t}\r\n\t\t},\r\n\t\tgetApiHost: function () {\r\n\t\t\treturn app.config.host;\r\n\t\t}\r\n\t};\r\n\r\n});\n// icon button with count marker\r\nwebix.protoUI({\r\n\tname:\"icon\",\r\n\t$skin:function(){\r\n\t\tthis.defaults.height = webix.skin.$active.inputHeight;\r\n\t},\r\n\tdefaults:{\r\n\t\ttemplate:function(obj){\r\n\t\t\tvar html = \"\";\r\n\t\t\treturn html;\r\n\t\t},\r\n\t\twidth:33\r\n\t},\r\n\t_set_inner_size:function(){\r\n\r\n\t}\r\n}, webix.ui.button);\ndefine(\"views/webix/icon\", function(){});\n\n// Type for left menu\r\nwebix.type(webix.ui.tree, {\r\n\tname:\"menuTree\",\r\n\theight: 40,\r\n\ticon:function(obj, common){\r\n\t\tvar html = \"\";\r\n\t\t/*var open = \"\";\r\n\t\tfor (var i=1; i<=obj.$level; i++){\r\n\t\t\tif (i==obj.$level && obj.$count){\r\n\t\t\t\tvar dir = obj.open?\"down\":\"right\";\r\n\t\t\t\thtml+=\"\";\r\n\t\t\t}\r\n\t\t}*/\r\n\t\treturn html;\r\n\t},\r\n\tfolder:function(obj, common){\r\n\t\tif(obj.icon)\r\n\t\t\treturn \"\";\r\n\t\treturn \"\";\r\n\t}\r\n});\r\nwebix.type(webix.ui.tree, {\r\n\tname:\"menuTree2\",\r\n\theight: 40,\r\n\r\n\ticon:function(obj, common){\r\n\t\tvar html = \"\";\r\n\t\tvar open = \"\";\r\n\t\tfor (var i=1; i<=obj.$level; i++){\r\n\t\t\tif (i==obj.$level && obj.$count){\r\n\t\t\t\tvar dir = obj.open?\"down\":\"right\";\r\n\t\t\t\thtml+=\"\";\r\n\t\t }\r\n\t\t}\r\n\t\treturn html;\r\n\t},\r\n\tfolder:function(obj, common){\r\n\t\tif(obj.icon)\r\n\t\t\treturn \"\";\r\n\t\treturn \"\";\r\n\t}\r\n});\ndefine(\"views/webix/menutree\", function(){});\n\ndefine('views/app',[\r\n \"views/modules/minvoiceplugin\",\r\n \"views/menus/search\",\r\n \"views/menus/profile\",\r\n \"views/menus/notify\",\r\n //\"views/menus/sidebar\",\r\n \"views/menus/menubar\",\r\n \"models/user\",\r\n \"views/menus/version\",\r\n // \"views/menus/notification\",\r\n \"views/webix/icon\",\r\n \"views/webix/menutree\",\r\n], function (plugin, search, profile, notify, menuBar, user, version) {\r\n var apiHost = menuBar.getApiHost();\r\n\r\n webix.attachEvent(\"onBeforeAjax\", function (mode, url, data, request, headers, files, promise) {\r\n var token = user.getAccessToken();\r\n\r\n if (token == null) {\r\n webix.message(\"Authorization has been denied for this request.\", \"error\");\r\n user.logout();\r\n document.location.reload();\r\n }\r\n\r\n var dvcs = user.getDvcsID();\r\n\r\n var language = user.getLanguage();\r\n\r\n var bear = token + \";\" + dvcs + \";\" + language;\r\n\r\n headers[\"Authorization\"] = \"Bear \" + bear;\r\n });\r\n\r\n webix.attachEvent(\"onLoadError\", function (text, xml, ajax, owner) {\r\n console.log(text);\r\n console.log(xml);\r\n console.log(ajax);\r\n console.log(owner);\r\n\r\n if (text != undefined) {\r\n //console.log(text);\r\n var json = JSON.parse(text);\r\n\r\n if (json.Message == \"Authorization has been denied for this request.\") {\r\n webix.message(json.Message, \"Hết hạn phiên đăng nhập!\");\r\n user.logout();\r\n var baseUrl = document.location.href;\r\n if (baseUrl.startsWith(\"file\")) {\r\n webix.storage.local.remove(\"appCookie\");\r\n } else {\r\n Cookies.remove(\"appCookie\");\r\n }\r\n document.location.reload();\r\n }\r\n }\r\n });\r\n\r\n //Top toolbar\r\n var mainToolbar = {\r\n css: { \"background-color\": \"#005EB2 !important\" },\r\n view: \"toolbar\",\r\n elements: [\r\n {\r\n height: 40,\r\n id: \"person_template\",\r\n css: \"header_person\",\r\n view: \"template\",\r\n borderless: true,\r\n width: 250,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = apiHost + \"/System/ExecuteCommand\";\r\n\r\n var parameters = {};\r\n\r\n parameters.command = \"CM00010\";\r\n parameters.parameter = {\r\n code: user.getDvcsID(),\r\n };\r\n\r\n webix.ajax().bind(view).headers({ \"Content-type\": \"application/json\" }).post(url, parameters, callback);\r\n },\r\n },\r\n\r\n template: function (obj) {\r\n var html = \"
\";\r\n html += \"
\";\r\n html += \"\";\r\n html += \"
\";\r\n html += \"
\" + obj.name + \"
MST: \" + obj.tax_code + \"
\";\r\n return html;\r\n },\r\n },\r\n ],\r\n };\r\n\r\n var body = {\r\n rows: [\r\n { height: 2 },\r\n {\r\n id: \"head-title\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n hidden: true,\r\n cols: [\r\n {\r\n height: 30,\r\n id: \"title\",\r\n css: \"title\",\r\n width: 360,\r\n view: \"template\",\r\n template: \"
#title#
\",\r\n data: { text: \"\", title: \"Trang chủ\", details: \"Phân tích và thống kê\" },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"scrollview\",\r\n css: \"bodycolor\",\r\n body: {\r\n cols: [{ $subview: true }],\r\n },\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"label\",\r\n css: { background: \"#005EB2\" },\r\n label: \"\",\r\n width: 150,\r\n },\r\n {\r\n css: { background: \"#005EB2\" },\r\n view: \"scrollview\",\r\n scroll: \"x\",\r\n body: menuBar,\r\n },\r\n mainToolbar,\r\n ],\r\n },\r\n body,\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $menu: \"app:menu\",\r\n $oninit: function (view, scope) {\r\n scope.ui(search.$ui);\r\n scope.ui(profile.$ui);\r\n scope.ui(notify.$ui);\r\n // scope.ui(notification.$ui);\r\n\r\n var js = version.getInfocompany();\r\n document.title = js.tax_code + \" - \" + js.name;\r\n\r\n if(webix.$$(\"notifyPopup\")) {\r\n var popup = webix.$$(\"notifyPopup\");\r\n popup._originalShow = popup.show;\r\n\r\n // Ghi đè hàm show\r\n popup.show = function() {\r\n this._originalShow.apply(this, arguments);\r\n notify.showNotify();\r\n };\r\n }\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/bangkebanra',[\r\n \"app\",\r\n \"locale\",\r\n \"models/user\"\r\n], function (app, _, user) {\r\n var editmode = 0;\r\n\r\n var date = new Date();\r\n var _month = date.getMonth() + 1;\r\n var firstDay = new Date(date.getFullYear(), date.getMonth(), 1);\r\n var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n\r\n function subviewT() {\r\n $$('cbQuy').define('label', \"Tháng\");\r\n $$('cbQuy').refresh();\r\n $$('cbQuy').define('options', [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"]);\r\n //webix.extend(config, $$('cbQuy').config);\r\n //webix.ui(config, $$('cbThang'));\r\n //$$('cbThang').destructor();\r\n }\r\n\r\n function subviewQ() {\r\n\r\n $$('cbQuy').define('label', \"Quý\");\r\n $$('cbQuy').refresh();\r\n $$('cbQuy').define('options', [\"1\", \"2\", \"3\", \"4\"]);\r\n // webix.extend($$('cbQuy').config, config, true);\r\n //webix.ui(config, $$('cbQuy'));\r\n //$$('cbQuy').destructor();\r\n }\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n head: \"Bảng kê bán ra\",\r\n width: 550,\r\n resize: true,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 60 },\r\n view: \"form\",\r\n id: \"bangkebr\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n\t\t\t\t\t{\r\n view: \"multicombo\",\r\n label: _(\"DONVI\"),\r\n name: \"lst_branch_code\",\r\n labelWidth: 80,\r\n suggest: {\r\n selectAll: true,\r\n body: {\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00198\" \r\n }\r\n } \r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"radio\",\r\n id: \"head_extension\",\r\n value: 1,\r\n options: [\r\n { \"id\": 1, \"value\": \"Tháng\" }, // the initially selected item\r\n { \"id\": 2, \"value\": \"Quý\" }\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var d = new Date();\r\n var quarter = Math.floor((d.getMonth() / 3));\r\n var quarter1 = quarter + 1;\r\n if (newv == 2) {\r\n subviewQ();\r\n $$(\"cbQuy\").setValue(quarter1);\r\n }\r\n if (newv == 1) {\r\n subviewT();\r\n $$(\"cbQuy\").setValue(d.getMonth() + 1);\r\n }\r\n }\r\n }\r\n },\r\n {\r\n id: \"cbQuy\",\r\n name: \"quy\",\r\n view: \"combo\",\r\n label: \"Tháng\",\r\n value: _month,\r\n options: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"],\r\n on: {\r\n onChange: function () {\r\n var d = new Date();\r\n var quarter = Math.floor((d.getMonth() / 3));\r\n var quarter1 = quarter + 1;\r\n\r\n var option = $$('head_extension').getValue();\r\n if (option == 2) {\r\n var nam = d.getFullYear();\r\n var thang;\r\n var quy = $$(\"cbQuy\").getValue();\r\n if (quy == 1) {\r\n thang = 0;\r\n }\r\n if (quy == 2) {\r\n thang = 3;\r\n }\r\n if (quy == 3) {\r\n thang = 6\r\n }\r\n if (quy == 4) {\r\n thang = 9\r\n }\r\n var firstDate = new Date(nam, thang, 1);\r\n var lastDate = new Date(nam, thang + 3, 0);\r\n\r\n $$(\"tu_ngay\").setValue(firstDate);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDate);\r\n $$(\"den_ngay\").refresh();\r\n }\r\n if (option == 1) {\r\n var year = d.getFullYear();\r\n var month = $$(\"cbQuy\").getValue();\r\n var date1 = month + \"/01\" + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n var firstDay1 = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\r\n var lastDay1 = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n $$(\"tu_ngay\").setValue(firstDay1);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDay1);\r\n $$(\"den_ngay\").refresh();\r\n }\r\n }\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n view: \"datepicker\", label: _(\"TU_NGAY\"), name: \"tu_ngay\", id: \"tu_ngay\", value: firstDay, labelWidth: 80\r\n },\r\n {\r\n view: \"datepicker\", label: _(\"DEN_NGAY\"), name: \"den_ngay\", id: \"den_ngay\", value: lastDay, labelWidth: 80\r\n },\r\n {\r\n view: \"multicombo\",\r\n label: _(\"KY_HIEU\"),\r\n name: \"ky_hieu\",\r\n labelWidth: 80,\r\n // required: true,\r\n // invalidMessage: \"Tên truy cập không để trống hoặc nhập không đúng (a-z,A-Z,0-9)\",\r\n // validate: webix.rules.isNotEmpty,\r\n suggest: {\r\n selectAll: true,\r\n body: {\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00050\",\r\n //template: webix.template(\"#value#\")\r\n }\r\n }\r\n //value: \"2\"\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\", view: \"button\", label: \"Nhận (F10)\", width: 100, type: \"form\", align: \"center\",\r\n on: {\r\n onClick: function () {\r\n var form = this.getParentView().getParentView();\r\n var win = this.getTopParentView();\r\n\r\n var item = form.getValues();\r\n var load_event = \"loadBangkebanra\";\r\n\r\n app.callEvent(load_event, [item]);\r\n\r\n win.close();\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n\r\n }\r\n },\r\n {\r\n view: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", width: 100, align: \"center\", type: \"danger\",\r\n click: function () {\r\n this.getTopParentView().close();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n\r\n },\r\n\r\n setValues: function (item) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n\r\n form.setValues(item);\r\n }\r\n };\r\n\r\n});\r\n\ndefine('views/bangkebanra',[\"app\", \"locale\", \"models/user\", \"views/forms/bangkebanra\"], function (app, _, user, bangkebanra) {\r\n \r\n\r\n var op = [];\r\n\r\n webix.$$(\"title\").parse({ title: \"Bảng kê bán ra\", details: \"Báo cáo bảng kê bán ra hóa đơn\" });\r\n\r\n var controls = [\r\n {\r\n id: \"btnReload\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-refresh\",\r\n css: \"webix_secondary\",\r\n label: _(\"REFRESH\"),\r\n width: 95,\r\n on: {\r\n onClick: function () {\r\n var wininfoparam = this.$scope.ui(bangkebanra.$ui);\r\n wininfoparam.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnPrint\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-print\",\r\n css: \"webix_secondary\",\r\n label: _(\"PRINT\") + \" PDF\",\r\n width: 70,\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"bangkebanra\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n rpParameter.type = \"PDF\";\r\n //console.log(rpParameter);\r\n if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang in báo cáo ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/Bcthsd/PrintPDFBangKeBanRa\",\r\n rpParameter,\r\n {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n window.open(fileURL, \"_blank\");\r\n },\r\n }\r\n // function (text, data) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n // webix.modalbox.hide(box);\r\n // window.open(fileURL, '_blank');\r\n // }\r\n );\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnExport\",\r\n view: \"button\",\r\n type: \"icon\",\r\n css: \"webix_secondary\",\r\n icon: \"fas fa-file\",\r\n label: _(\"EXPORT_EXCEL\"),\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"bangkebanra\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n rpParameter.type = \"xlsx\";\r\n\r\n if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang kết xuất Excel ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/Bcthsd/PrintPDFBangKeBanRa\",\r\n rpParameter,\r\n {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n //var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n //window.location.href = fileURL;\r\n webix.html.download(file, \"BangKeBanRa.xlsx\");\r\n },\r\n }\r\n // function (text, data) {\r\n\r\n // var file = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // window.location.href = fileURL;\r\n // }\r\n );\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n container: \"testA\",\r\n view: \"treetable\",\r\n id: \"bangkebanra\",\r\n select: true,\r\n resizeColumn: true,\r\n fullScreen: true,\r\n fixedRowHeight: false,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n // on: {\r\n // onResize: function () {\r\n // this.adjustRowHeight(\"ghi_chu\", true);\r\n // this.render();\r\n // }\r\n // },\r\n columns: [\r\n {\r\n id: \"stt\",\r\n header: \"
STT
\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"so_hd\",\r\n header: [{ text: \"
Hóa đơn chứng từ bán
\", colspan: 2 }, { text: \"
Số hóa đơn
\" }],\r\n width: 500,\r\n template: function (obj, common) {\r\n if (obj.$level == 1) return common.treetable(obj, common) + \"\" + obj.value + \" ( \" + obj.$count + \" )\" + \"\";\r\n return obj.so_hd;\r\n },\r\n },\r\n {\r\n id: \"ngay_hd\",\r\n header: [null, { text: \"
Ngày hóa đơn
\" }],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n { id: \"inv_buyerlegalname\", header: \"
Tên người mua
\", width: 300 },\r\n // {\r\n // header: \"
Trạng thái
\", width: 150, template: function (obj) {\r\n // if (obj.$group == true) return \"\";\r\n // return \"\" + obj.trang_thai + \"\"\r\n // }\r\n // },\r\n { id: \"ms_thue\", header: \"
Mã số thuế
\", width: 150 },\r\n {\r\n id: \"tien_tt0\",\r\n header: \"
Doanh thu chưa có thuế GTGT
\",\r\n width: 200,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n },\r\n {\r\n id: \"tien\",\r\n header: \"
Thuế GTGT
\",\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n },\r\n { id: \"ghi_chu\", header: \"
Ghi chú
\", width: 150 },\r\n // {\r\n // id: \"nhom\", header: \"Nhóm\", width: 500\r\n // }\r\n // {\r\n // id: \"ngay_thuchien\", header: \"Ngày thực hiện\", width: 150, format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // }\r\n // }\r\n ],\r\n pager: \"pagerA\",\r\n scheme: {\r\n $group: {\r\n by: \"nhom\",\r\n //,css:{ \"text-align\": \"right\" }\r\n // map:{\r\n // \tnguoi_lien_he:[\"nguoi_lien_he\", \"count\"]\r\n // }\r\n },\r\n //$sort: { by: \"stt\", dir: \"asc\" }\r\n },\r\n ready: function () {\r\n //this.open(this.getFirstId());\r\n //this.sort({ by: \"stt\", dir: \"asc\" });\r\n this.openAll();\r\n this.adjustRowHeight(\"ghi_chu\", true);\r\n this.refresh();\r\n },\r\n //url: app.config.host + \"/System/ExecuteQuery?sql=\" + sql\r\n //autoheight: true,\r\n //autowidth:true,\r\n //data: big_film_set\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 35,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"loadBangkebanra\", function (item) {\r\n var table = $$(\"bangkebanra\");\r\n // webix.extend(table, webix.OverlayBox);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n table.config.rpParameter = item;\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Bcthsd/bangkebanra\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (!json.hasOwnProperty(\"error\")) {\r\n //console.log(json);\r\n $$(\"bangkebanra\").clearAll();\r\n $$(\"bangkebanra\").parse(json);\r\n $$(\"bangkebanra\").refresh();\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/infowindow',[\r\n\t\"app\",\r\n\t\"locale\",\r\n\t\"models/user\"\r\n], function (app, _, user) {\r\n\tvar editmode = 0;\r\n\r\n\tvar _date = new Date();\r\n\tvar _month = _date.getMonth() + 1;\r\n\tfunction subviewT() {\r\n\t\t$$('cbQuy').define('label', \"Tháng\");\r\n\t\t$$('cbQuy').refresh();\r\n\t\t$$('cbQuy').define('options', [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"]);\r\n\t\t//webix.extend(config, $$('cbQuy').config);\r\n\t\t//webix.ui(config, $$('cbThang'));\r\n\t\t//$$('cbThang').destructor();\r\n\t}\r\n\r\n\tfunction subviewQ() {\r\n\r\n\t\t$$('cbQuy').define('label', \"Quý\");\r\n\t\t$$('cbQuy').refresh();\r\n\t\t$$('cbQuy').define('options', [\"1\", \"2\", \"3\", \"4\"]);\r\n\t\t// webix.extend($$('cbQuy').config, config, true);\r\n\t\t//webix.ui(config, $$('cbQuy'));\r\n\t\t//$$('cbQuy').destructor();\r\n\t}\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\",\r\n\t\t\tmodal: true,\r\n\t\t\tposition: \"center\",\r\n\t\t\thead: \"Thông tin Tab\",\r\n\t\t\tresize: true,\r\n\t\t\tbody: {\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\telementsConfig: { labelWidth: 60 },\r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\tmargin: 0,\r\n\t\t\t\telements: []\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tinitUI: function (infoWindowId) {\r\n\r\n\t\t\tvar url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n\t\t\tvar parameters = {\r\n\t\t\t\tcommand: \"CM00013\",\r\n\t\t\t\tparameter: {\r\n\t\t\t\t\twb_infowindow_id: infoWindowId\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\twebix.ajax().headers({ \"Content-Type\": \"application/json\" })\r\n\t\t\t\t.post(url, parameters, function (response) {\r\n\t\t\t\t\tvar result = JSON.parse(response);\r\n\r\n\t\t\t\t\tvar win = webix.$$(infoWindowId);\r\n\r\n\t\t\t\t\twin.define(\"width\", result[0].window_width);\r\n\t\t\t\t\twin.define(\"height\", result[0].window_height);\r\n\r\n\t\t\t\t\tvar form = win.getChildViews()[1];\r\n\t\t\t\t\tform.clear();\r\n\r\n\t\t\t\t\tvar view_extension = {\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"radio\",\r\n\t\t\t\t\t\t\t\tid: \"head_extension\",\r\n\t\t\t\t\t\t\t\tvalue: 1,\r\n\t\t\t\t\t\t\t\toptions: [\r\n\t\t\t\t\t\t\t\t\t{ \"id\": 1, \"value\": \"Tháng\" }, // the initially selected item\r\n\t\t\t\t\t\t\t\t\t{ \"id\": 2, \"value\": \"Quý\" }\r\n\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonChange: function (newv, oldv) {\r\n\t\t\t\t\t\t\t\t\t\tvar d = new Date();\r\n\t\t\t\t\t\t\t\t\t\tvar quarter = Math.floor((d.getMonth() / 3));\r\n\t\t\t\t\t\t\t\t\t\tvar quarter1 = quarter + 1;\r\n\t\t\t\t\t\t\t\t\t\tif (newv == 2) {\r\n\t\t\t\t\t\t\t\t\t\t\tsubviewQ();\r\n\t\t\t\t\t\t\t\t\t\t\t$$(\"cbQuy\").setValue(quarter1);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tif (newv == 1) {\r\n\t\t\t\t\t\t\t\t\t\t\tsubviewT();\r\n\t\t\t\t\t\t\t\t\t\t\t$$(\"cbQuy\").setValue(d.getMonth() + 1);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tid: \"cbQuy\",\r\n\t\t\t\t\t\t\t\tname: \"quy\",\r\n\t\t\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\t\t\tlabel: \"Tháng\",\r\n\t\t\t\t\t\t\t\t//height: 30,\r\n\t\t\t\t\t\t\t\tvalue: _month,\r\n\t\t\t\t\t\t\t\toptions: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"],\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonChange: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar d = new Date();\r\n\t\t\t\t\t\t\t\t\t\tvar quarter = Math.floor((d.getMonth() / 3));\r\n\t\t\t\t\t\t\t\t\t\tvar quarter1 = quarter + 1;\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar option = $$('head_extension').getValue();\r\n\t\t\t\t\t\t\t\t\t\tif (option == 2) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar nam = d.getFullYear();\r\n\t\t\t\t\t\t\t\t\t\t\tvar thang;\r\n\t\t\t\t\t\t\t\t\t\t\tvar quy = $$(\"cbQuy\").getValue();\r\n\t\t\t\t\t\t\t\t\t\t\tif (quy == 1) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tthang = 0;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tif (quy == 2) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tthang = 3;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tif (quy == 3) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tthang = 6\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tif (quy == 4) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tthang = 9\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tvar firstDate = new Date(nam, thang, 1);\r\n\t\t\t\t\t\t\t\t\t\t\tvar lastDate = new Date(nam, thang + 3, 0);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_tu_ngay\").setValue(firstDate);\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_tu_ngay\").refresh();\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_den_ngay\").setValue(lastDate);\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_den_ngay\").refresh();\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tif (option == 1) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar year = d.getFullYear();\r\n\t\t\t\t\t\t\t\t\t\t\tvar month = $$(\"cbQuy\").getValue();\r\n\t\t\t\t\t\t\t\t\t\t\tvar date1 = month + \"/01\" + \"/\" + year;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tvar date = new Date(date1);\r\n\t\t\t\t\t\t\t\t\t\t\tvar firstDay1 = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tvar lastDay1 = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_tu_ngay\").setValue(firstDay1);\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_tu_ngay\").refresh();\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_den_ngay\").setValue(lastDay1);\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_den_ngay\").refresh();\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tvar formValues = {};\r\n\r\n\t\t\t\t\tvar rows_max = result[0].rows_max;\r\n\r\n\t\t\t\t\tvar el = [];\r\n\r\n\t\t\t\t\tfor (var i = 1; i <= rows_max; i++) {\r\n\t\t\t\t\t\tel.push({ cols: [] });\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfor (var i = 0; i < result.length; i++) {\r\n\r\n\t\t\t\t\t\tvar field = result[i];\r\n\r\n\t\t\t\t\t\tvar row = field.row;\r\n\r\n\t\t\t\t\t\tvar item = {\r\n\t\t\t\t\t\t\tview: field.type_editor,\r\n\t\t\t\t\t\t\tname: field.name,\r\n\t\t\t\t\t\t\tlabel: _(field.caption),\r\n\t\t\t\t\t\t\twidth: field.width,\r\n\t\t\t\t\t\t\tlabelPosition: field.label_position,\r\n\t\t\t\t\t\t\tlabelWidth: field.label_width,\r\n\t\t\t\t\t\t\tformat: field.format,\r\n\t\t\t\t\t\t\thidden: field.hidden == \"C\" ? true : false,\r\n\t\t\t\t\t\t\tid: win.config.id + \"_\" + field.name\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\tif (field.default_value != null) {\r\n\t\t\t\t\t\t\tvar defaultValue = field.default_value;\r\n\r\n\t\t\t\t\t\t\tvar date = new Date();\r\n\t\t\t\t\t\t\tvar firstDay = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\t\t\t\t\t\t\tvar lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n\r\n\t\t\t\t\t\t\tif (defaultValue.startsWith(\"@Default=\")) {\r\n\t\t\t\t\t\t\t\tdefaultValue = defaultValue.replace(\"@Default=\", \"\");\r\n\t\t\t\t\t\t\t\tif (defaultValue == \"MA_DVCS\" || defaultValue == \"BRANCH_CODE\") {\r\n\t\t\t\t\t\t\t\t\titem.value = user.getDvcsID();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse if (defaultValue == \"USER\") {\r\n\t\t\t\t\t\t\t\t\titem.value = user.getCurrentUser();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse if (defaultValue == \"MA_CT\") {\r\n\t\t\t\t\t\t\t\t\titem.value = \"MA_CT\";\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse if (defaultValue == \"FIRST_DATE\") {\r\n\t\t\t\t\t\t\t\t\titem.value = firstDay;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse if (defaultValue == \"LAST_DATE\") {\r\n\t\t\t\t\t\t\t\t\titem.value = lastDay;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\titem.value = defaultValue;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.hidden == true) {\r\n\t\t\t\t\t\t\tformValues[item.name] = item.value;\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.view == \"combo\" || item.view == \"multiselect\") {\r\n\t\t\t\t\t\t\titem.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.wb_references_id;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.view == \"multicombo\"){\r\n\t\t\t\t\t\t\titem.suggest= {\r\n\t\t\t\t\t\t\t\tselectAll: true,\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\turl: app.config.host + \"/System/GetDataByReferencesId?id=\" + field.wb_references_id \r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.view == \"radio\") {\r\n\t\t\t\t\t\t\tvar ajax = webix.ajax();\r\n\t\t\t\t\t\t\tajax.master = {\r\n\t\t\t\t\t\t\t\tradio_id: item.id,\r\n\t\t\t\t\t\t\t\twin_id: win.config.id\r\n\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\tajax.get(app.config.host + \"/System/GetDataByReferencesId?id=\" + field.wb_references_id, function (text) {\r\n\t\t\t\t\t\t\t\tvar json = JSON.parse(text);\r\n\t\t\t\t\t\t\t\tvar radio = $$(this.radio_id);\r\n\t\t\t\t\t\t\t\tradio.define(\"options\", json);\r\n\t\t\t\t\t\t\t\tradio.refresh();\r\n\r\n\t\t\t\t\t\t\t\t$$(this.win_id).resize();\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.view == \"treesuggest\") {\r\n\r\n\t\t\t\t\t\t\t//item.REF_ID = field.REF_ID.toString();\r\n\t\t\t\t\t\t\tvar listColumns = JSON.parse(field.list_column);\r\n\r\n\t\t\t\t\t\t\tfor (var v = 0; v < listColumns.length; v++) {\r\n\t\t\t\t\t\t\t\tlistColumns[v].header = _(listColumns[v].id);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\titem.view = \"combo\";\r\n\t\t\t\t\t\t\titem.options = {\r\n\t\t\t\t\t\t\t\tview: \"treesuggest\",\r\n\t\t\t\t\t\t\t\turl: {\r\n\t\t\t\t\t\t\t\t\t$proxy: true,\r\n\t\t\t\t\t\t\t\t\tload: function (view, callback, params) {\r\n\t\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/System/GetDataByReferencesId?id=\" + view.config.refid;\r\n\r\n\t\t\t\t\t\t\t\t\t\twebix.ajax(url, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar json = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\tvar data = listToTree(json);\r\n\t\t\t\t\t\t\t\t\t\t\tview.parse(data, \"json\");\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\tcolumns: listColumns,\r\n\t\t\t\t\t\t\t\t\trefid: field.wb_references_id,\r\n\t\t\t\t\t\t\t\t\tfilterMode: {\r\n\t\t\t\t\t\t\t\t\t\tlevel: false,\r\n\t\t\t\t\t\t\t\t\t\tshowSubItems: false\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.view == \"gridcombo\") {\r\n\r\n\t\t\t\t\t\t\tvar listColumns = JSON.parse(field.list_column);\r\n\r\n\t\t\t\t\t\t\tfor (var v = 0; v < listColumns.length; v++) {\r\n\t\t\t\t\t\t\t\tlistColumns[v].header = _(listColumns[v].id);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\titem.view = \"combo\";\r\n\t\t\t\t\t\t\titem.options = {\r\n\t\t\t\t\t\t\t\tview: \"gridsuggest\",\r\n\t\t\t\t\t\t\t\turl: app.config.host + \"/api/System/GetDataByReferencesId?id=\" + field.wb_references_id,\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\tcolumns: listColumns,\r\n\t\t\t\t\t\t\t\t\trefid: field.wb_references_id\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.view == \"gridsuggest\") {\r\n\t\t\t\t\t\t\tvar listColumns = JSON.parse(field.list_column);\r\n\r\n\t\t\t\t\t\t\tfor (var v = 0; v < listColumns.length; v++) {\r\n\t\t\t\t\t\t\t\tlistColumns[v].header = _(listColumns[v].id);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\titem.view = \"text\";\r\n\t\t\t\t\t\t\titem.suggest = {\r\n\t\t\t\t\t\t\t\tview: \"gridsuggest\",\r\n\t\t\t\t\t\t\t\tvalue_suggest: field.value_suggest,\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\tcolumns: listColumns,\r\n\t\t\t\t\t\t\t\t\trefid: field.wb_references_id,\r\n\t\t\t\t\t\t\t\t\tdatatype: \"json\",\r\n\t\t\t\t\t\t\t\t\tdataFeed: function (filtervalue, filter) {\r\n\t\t\t\t\t\t\t\t\t\tif (filtervalue.length < 3) return;\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar refid = this.config.refid;\r\n\t\t\t\t\t\t\t\t\t\tvar pathUrl = app.config.host + \"/System/GetDataByReferencesId?id=\" + refid;\r\n\t\t\t\t\t\t\t\t\t\tvar urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n\t\t\t\t\t\t\t\t\t\tthis.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n\t\t\t\t\t\t\t\t\t},\r\n\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonValueSuggest: function (obj) {\r\n\t\t\t\t\t\t\t\t\t\tif (this.config.value_suggest != null) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar fn = Function(\"obj\", \"id\", this.config.value_suggest);\r\n\t\t\t\t\t\t\t\t\t\t\tfn(obj, this.config.id);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.name == \"tu_ngay\") {\r\n\t\t\t\t\t\t\titem.value = firstDay;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.name == \"den_ngay\") {\r\n\t\t\t\t\t\t\titem.value = lastDay;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tformValues[item.name] = item.value;\r\n\t\t\t\t\t\tel[row - 1].cols.push(item);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tform.setValues(formValues);\r\n\r\n\t\t\t\t\tvar buttons = {\r\n\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tshortcut: \"F10\", view: \"button\", label: \"Lưu (F10)\",\r\n\t\t\t\t\t\t\t\twidth: 120,\r\n\t\t\t\t\t\t\t\ttype: \"form\", align: \"center\",\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar form = this.getParentView().getParentView();\r\n\t\t\t\t\t\t\t\t\t\tvar win = this.getTopParentView();\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\t\t\t// xóa header ngày tháng trong sproc ko cần\r\n\t\t\t\t\t\t\t\t\t\tdelete item.quy;\r\n\t\t\t\t\t\t\t\t\t\tvar load_event = win.config.load_event == null ? \"loadReport\" : win.config.load_event;\r\n\r\n\t\t\t\t\t\t\t\t\t\tapp.callEvent(load_event, [win.config.report_id, win.config.id, item, win.config.menuitem]);\r\n\r\n\t\t\t\t\t\t\t\t\t\twin.close();\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\",\r\n\t\t\t\t\t\t\t\twidth: 120,\r\n\t\t\t\t\t\t\t\talign: \"center\", type: \"danger\",\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.getTopParentView().close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tel.push(buttons);\r\n\r\n\t\t\t\t\twebix.ui(el, form);\r\n\t\t\t\t\tif ($$(win.config.id + \"_tu_ngay\") != undefined && $$(win.config.id + \"_den_ngay\") != undefined) {\r\n\t\t\t\t\t\tform.addView(view_extension, 0);\r\n\t\t\t\t\t}\r\n\t\t\t\t\twin.getHead().setHTML(result[0][\"window_name\"]);\r\n\r\n\t\t\t\t\t//win.config.height= result[0][\"WINDOW_HEIGHT\"];\r\n\t\t\t\t\t//win.config.width= result[0][\"WINDOW_WIDTH\"];\r\n\r\n\t\t\t\t\tif (win.config.editmode != null) {\r\n\t\t\t\t\t\tif (win.config.editmode == 1) {\r\n\t\t\t\t\t\t\tform.setValues(win.config.formvalues);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//win.resize();\r\n\r\n\t\t\t\t});\r\n\t\t},\r\n\t\tsetEditMode: function (mode) {\r\n\t\t\teditmode = mode;\r\n\t\t},\r\n\t\tsetValues: function (item) {\r\n\t\t\tvar win = $$(this.$ui.id);\r\n\t\t\tvar form = win.getChildViews()[1];\r\n\r\n\t\t\tform.setValues(item);\r\n\t\t}\r\n\t};\r\n\r\n});\r\n\ndefine('views/forms/editwindow',[\r\n\t\"app\",\r\n\t\"locale\",\r\n\t\"models/user\"\r\n],function(app,_,user){\r\n\tvar editmode = 0;\t\r\n var tables = [];\r\n\r\n\tvar windowno = app.path[1].params[0];\r\n var col=[];\r\n\tvar rw =[];\t\t\t\t\t\r\n\tvar el = [];\r\n\tvar head_name=[];\r\n\tvar head;\r\n\tvar url = app.config.host + \"/System/GetAllByWindowNo?window_id=\" + windowno;\r\n\r\n\tfunction setParentValue(windowId){\r\n\r\n\t\tvar win = $$(windowId);\r\n\t\tvar form = win.getChildViews()[1];\t\t\t\t\t\t\t\r\n\t\tvar item = form.getValues();\r\n\t\tvar valueField = win.config.valueField;\r\n\r\n\t\tif (win.config.editorId == null){\r\n\t\t\tvar table = $$(win.config.tableId);\r\n\t\t\tvar selectedItem = table.getSelectedItem();\r\n\r\n\t\t\tselectedItem[win.config.columnName] = item[valueField];\t\t\t\r\n\r\n\t\t\tif (win.config.fieldExpression!=null){\r\n\t\t\t\tvar fields = win.config.fieldExpression.split(';');\r\n\r\n\t\t\t\tfor(var i=0;i 0) {\r\n json[0].editorId = this.editorId;\r\n json[0].formId = this.formId;\r\n json[0].fieldExpression = this.fieldExpression;\r\n json[0].editmode = this.editmode;\r\n json[0].editorvalue = this.editorvalue;\r\n json[0].suggest = this.suggest;\r\n\r\n var windowno = json[0].windowno;\r\n\r\n var url = app.config.host + \"/System/GetConfigWinByNo?id=\" + windowno;\r\n var a = webix.ajax(url);\r\n url = app.config.host + \"/System/GetRecordByReferencesId?id=\" + json[0].wb_references_id + \"&value=\" + this.editorvalue;\r\n var b = webix.ajax(url);\r\n var c = this.editmode;\r\n var d = json[0];\r\n\r\n webix.promise.all([a, b, c, d]).then(function (results) {\r\n var windowconfig = results[0].json();\r\n var res_b = results[1].json();\r\n var mode = results[2];\r\n var master = results[3];\r\n\r\n var vc_window = windowconfig[\"data\"][0];\r\n\r\n if (mode == 1) {\r\n editwindow.$ui.id = vc_window.code;\r\n editwindow.$ui.editorId = master.editorId;\r\n editwindow.$ui.valueField = master.value_field;\r\n editwindow.$ui.fieldExpression = master.fieldExpression;\r\n editwindow.$ui.formId = master.formId;\r\n\r\n var win = webix.ui(editwindow.$ui);\r\n\r\n editwindow.initUI(windowconfig);\r\n editwindow.setEditMode(mode);\r\n editwindow.setValues(null, windowconfig);\r\n\r\n $$(master.suggest).hide();\r\n win.show();\r\n } else {\r\n if (res_b.length == 0) {\r\n webix.alert({\r\n title: \"Thông báo\",\r\n text: \"Không tìm thấy dữ liệu\",\r\n });\r\n\r\n return;\r\n }\r\n\r\n var ajax = webix.ajax();\r\n\r\n ajax.master = {\r\n master: master,\r\n vc_window: vc_window,\r\n };\r\n\r\n var url = app.config.host + \"/System/GetDataById?window_id=\" + vc_window.code + \"&id=\" + res_b[0].doc_id;\r\n\r\n ajax.get(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = json;\r\n\r\n var vc_window = this.vc_window;\r\n var master = this.master;\r\n\r\n editwindow.$ui.id = vc_window.code;\r\n editwindow.$ui.editorId = master.editorId;\r\n editwindow.$ui.valueField = master.value_field;\r\n editwindow.$ui.fieldExpression = master.fieldExpression;\r\n editwindow.$ui.formId = master.formId;\r\n\r\n var win = webix.ui(editwindow.$ui);\r\n\r\n editwindow.initUI(windowconfig);\r\n editwindow.setEditMode(2);\r\n editwindow.setValues(data, windowconfig);\r\n\r\n $$(master.suggest).hide();\r\n win.show();\r\n });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n function tableShowEditWindow(table, editmode) {\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n var suggest = $$(editor.config.suggest);\r\n var refid = suggest.config.body.refid;\r\n var sql = {\r\n command: \"SYS003\",\r\n parameter: {\r\n refid: refid,\r\n },\r\n };\r\n //var sql = \"SELECT a.*,b.code as WINDOWNO FROM #SCHEMA_NAME#.wb_references a INNER JOIN #SCHEMA_NAME#.wb_window b ON a.wb_window_id=b.wb_window_id WHERE a.wb_references_id='\" + refid + \"'\";\r\n // var url = app.config.host + \"/System/ExecuteQuery?sql=\" + sql;\r\n //var url = app.config.host + \"/System/Query\";\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n var model = sql;\r\n var tableId = table.config.id;\r\n //console.log(tableId);\r\n var columnName = editor.config.id;\r\n\r\n var ajax = webix.ajax();\r\n\r\n ajax.master = {\r\n editorId: null,\r\n tableId: tableId,\r\n fieldExpression: suggest.config.fieldExpression,\r\n columnName: columnName,\r\n editmode: editmode,\r\n editorvalue: editor.getValue(),\r\n suggest: editor.config.suggest,\r\n };\r\n\r\n ajax.post(url, model, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.length > 0) {\r\n json[0].editorId = this.editorId;\r\n json[0].tableId = this.tableId;\r\n json[0].fieldExpression = this.fieldExpression;\r\n json[0].columnName = this.columnName;\r\n json[0].editmode = this.editmode;\r\n json[0].editorvalue = this.editorvalue;\r\n json[0].suggest = this.suggest;\r\n\r\n var windowno = json[0].windowno;\r\n\r\n var url = app.config.host + \"/System/GetConfigWinByNo?id=\" + windowno;\r\n var a = webix.ajax(url);\r\n url = app.config.host + \"/System/GetRecordByReferencesId?id=\" + json[0].wb_references_id + \"&value=\" + this.editorvalue;\r\n var b = webix.ajax(url);\r\n var c = this.editmode;\r\n var d = json[0];\r\n\r\n webix.promise.all([a, b, c, d]).then(function (results) {\r\n var windowconfig = results[0].json();\r\n var res_b = results[1].json();\r\n var mode = results[2];\r\n var master = results[3];\r\n\r\n var vc_window = windowconfig[\"data\"][0];\r\n\r\n if (mode == 1) {\r\n editwindow.$ui.id = vc_window.code;\r\n editwindow.$ui.editorId = master.editorId;\r\n editwindow.$ui.valueField = master.value_field;\r\n editwindow.$ui.fieldExpression = master.fieldExpression;\r\n editwindow.$ui.formId = master.formId;\r\n editwindow.$ui.tableId = master.tableId;\r\n editwindow.$ui.columnName = master.columnName;\r\n\r\n var win = webix.ui(editwindow.$ui);\r\n\r\n editwindow.initUI(windowconfig);\r\n editwindow.setValues(null, windowconfig);\r\n editwindow.setEditMode(mode);\r\n\r\n $$(master.suggest).hide();\r\n win.show();\r\n } else {\r\n if (res_b.length == 0) {\r\n webix.alert({\r\n title: \"Thông báo\",\r\n text: \"Không tìm thấy dữ liệu\",\r\n });\r\n\r\n return;\r\n }\r\n var ajax = webix.ajax();\r\n\r\n ajax.master = {\r\n master: master,\r\n vc_window: vc_window,\r\n };\r\n\r\n var url = app.config.host + \"/System/GetDataById?window_id=\" + vc_window.code + \"&id=\" + res_b[0].doc_id;\r\n\r\n ajax.get(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = json;\r\n\r\n var vc_window = this.vc_window;\r\n var master = this.master;\r\n\r\n editwindow.$ui.id = vc_window.code;\r\n editwindow.$ui.editorId = master.editorId;\r\n editwindow.$ui.valueField = master.value_field;\r\n editwindow.$ui.fieldExpression = master.fieldExpression;\r\n editwindow.$ui.formId = master.formId;\r\n editwindow.$ui.tableId = master.tableId;\r\n editwindow.$ui.columnName = master.columnName;\r\n\r\n var win = webix.ui(editwindow.$ui);\r\n\r\n editwindow.initUI(windowconfig);\r\n editwindow.setValues(data, windowconfig);\r\n editwindow.setEditMode(2);\r\n\r\n $$(master.suggest).hide();\r\n win.show();\r\n });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n function generateGUID() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\r\n var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n var wb_excel_id = generateGUID();\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n id: \"window-win\",\r\n position: \"center\",\r\n //width:800,\r\n head: \"Thông tin khách hàng\",\r\n //fullscreen:true,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n id: \"window-form\",\r\n complexData: true,\r\n keepViews: true,\r\n multiview: { keepViews: true },\r\n margin: 0,\r\n elements: el,\r\n },\r\n },\r\n initUI: function (windowconfig) {\r\n \r\n var rp = windowconfig;\r\n var max_row = rp[\"data\"][0][\"max_row\"];\r\n var vc_window = rp[\"data\"][0];\r\n var tabs = vc_window.Tabs;\r\n\r\n var win = $$(vc_window.code);\r\n\r\n if (typeof win.showProgress === \"undefined\") webix.extend(win, webix.ProgressBar);\r\n\r\n el = [];\r\n col = [];\r\n\r\n if (vc_window.width == null && vc_window.height == null) {\r\n win.config.fullscreen = true;\r\n }\r\n\r\n if (vc_window.after_save != null) {\r\n win.config.after_save = vc_window.after_save;\r\n }\r\n // nếu có layout_detail thì bindding layout vào el\r\n\r\n if (vc_window.detail_layout != null && vc_window.detail_layout != \"\") {\r\n var layoutdetail = JSON.parse(vc_window.detail_layout);\r\n\r\n var layout_element = JSON.stringify(layoutdetail.elements);\r\n var json_layout = JSON.parse(layout_element);\r\n //console.log(json_layout);\r\n for (var i = 0; i < json_layout.length; i++) {\r\n el.push(json_layout[i]);\r\n }\r\n\r\n var jsonElement = findJson.getObjects(JSON.parse(JSON.stringify(el)), \"id\", \"\");\r\n\r\n for (var i = 0; i < jsonElement.length; i++) {\r\n //var item = jsonElement[i];\r\n var fields = rp[\"data\"][0][\"Tabs\"][0][\"Fields\"];\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (jsonElement[i].name == field.column_name) {\r\n // if (field.hidden == true) {\r\n // continue;\r\n // }\r\n\r\n var item = {\r\n view: field.type_editor,\r\n resizeColumn: true,\r\n //keepViews: true,\r\n multiview: { keepViews: true },\r\n name: field.column_name,\r\n label: _(field.column_name),\r\n id: field.column_name + \"_\" + rp[\"data\"][0][\"Tabs\"][0][\"table_name\"],\r\n width: field.width,\r\n labelPosition: field.label_position,\r\n labelWidth: field.label_width,\r\n format: field.format,\r\n value_change: field.value_change,\r\n fieldExpression: field.field_expression,\r\n data_width: field.data_width,\r\n column_type: field.column_type,\r\n css: field.css,\r\n attributes: {},\r\n on: {},\r\n hidden: field.hidden,\r\n };\r\n if (field.type_editor == \"password\") {\r\n item.view = \"text\";\r\n item.type = \"password\";\r\n }\r\n\r\n if (item.data_width != null) {\r\n if (item.data_width != 0) {\r\n item.attributes.maxlength = item.data_width;\r\n //style: \"text-transform: uppercase;\"\r\n }\r\n }\r\n\r\n if (field.styleinput != null && field.styleinput != \"\") {\r\n item.attributes.style = field.styleinput;\r\n }\r\n\r\n if (field.height != null) {\r\n if (field.height != 0) {\r\n item.height = field.height;\r\n }\r\n }\r\n\r\n if (field.caption != null) {\r\n item.label = _(field.caption);\r\n }\r\n\r\n if (field.read_only == \"C\") {\r\n item.readonly = true;\r\n }\r\n\r\n if (item.view == \"combo\") {\r\n item.suggest = {\r\n body: {\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id,\r\n },\r\n };\r\n //item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n\r\n if (item.view == \"select\") {\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n if (item.view == \"checkbox\") {\r\n if (field.label_position == \"right\") {\r\n item.labelRight = _(field.column_name);\r\n item.label = \"\";\r\n }\r\n\r\n if (field.column_type == \"char\") {\r\n item.checkValue = \"C\";\r\n item.uncheckValue = \"K\";\r\n }\r\n\r\n if (field.column_type == \"tinyint\") {\r\n item.checkValue = \"1\";\r\n item.uncheckValue = \"0\";\r\n }\r\n\r\n if (field.column_type == \"bit\") {\r\n item.checkValue = true;\r\n item.uncheckValue = false;\r\n }\r\n }\r\n\r\n if (item.view == \"autonumeric\" || field.column_type == \"numeric\") {\r\n item.inputAlign = \"left\";\r\n item.decimalPlaces = field.data_decimal;\r\n }\r\n\r\n if (field.valid_rule != null) {\r\n var rule = field.valid_rule;\r\n\r\n if (rule == \"isNotEmpty\") {\r\n item.required = true;\r\n item.invalidMessage = item.label + \" không được bỏ trống\";\r\n item.validate = webix.rules.isNotEmpty;\r\n }\r\n\r\n if (rule == \"isSpecialCharacter\") {\r\n item.required = true;\r\n item.invalidMessage = \"Không bỏ trống hoặc ký tự không hợp lệ (a-z,A-Z,0-9)\";\r\n item.validate = webix.rules.isSpecialCharacter;\r\n }\r\n\r\n if (rule == \"isEmail\") {\r\n item.invalidMessage = item.label + \" không hợp lệ\";\r\n item.validate = webix.rules.isEmail;\r\n }\r\n\r\n if (rule == \"isTaxCode\") {\r\n item.invalidMessage = item.label + \" không hợp lệ\";\r\n item.validate = webix.rules.isTaxCode;\r\n }\r\n\r\n if (rule == \"isPositiveNumbers\") {\r\n item.invalidMessage = item.label + \" không hợp lệ\";\r\n item.validate = webix.rules.isPositiveNumbers;\r\n }\r\n }\r\n\r\n if (item.view == \"treesuggest\") {\r\n //item.REF_ID = field.REF_ID.toString();\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n item.view = \"combo\";\r\n item.options = {\r\n view: \"treesuggest\",\r\n textValue: field.display_field,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataByReferencesId?id=\" + view.config.refid;\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n body: {\r\n columns: listColumns,\r\n refid: field.ref_id,\r\n filterMode: {\r\n level: false,\r\n showSubItems: false,\r\n },\r\n },\r\n };\r\n\r\n item.on.onKeyPress = function (code, e) {\r\n if (e.code == \"F4\") {\r\n alert(\"Moi\");\r\n }\r\n };\r\n }\r\n\r\n if (item.view == \"gridcombo\") {\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n item.view = \"combo\";\r\n item.options = {\r\n view: \"gridsuggest\",\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id,\r\n body: {\r\n columns: listColumns,\r\n refid: field.REF_ID,\r\n textValue: field.display_field,\r\n },\r\n };\r\n\r\n item.on.onKeyPress = function (code, e) {\r\n if (e.code == \"F4\") {\r\n alert(\"Moi\");\r\n }\r\n };\r\n }\r\n // if (item.view == \"search\") {\r\n // \tvar express = item.fieldExpression;\r\n\r\n // \titem.on.onSearchIconClick = function (e) {\r\n // \t\tvar form = $$(this.getFormView());\r\n\r\n // \t\t//get value của form hiện tại để đổi giá trị\r\n // \t\tvar parentItem = form.getValues();\r\n\r\n // \t\tvar field_express = this.config.fieldExpression;\r\n // \t\tvar text = this.getValue();\r\n // \t\tvar datapost = { \"masothue\": text };\r\n // \t\tvar form = $$(\"window-form\");\r\n // \t\twebix.extend(form, webix.ProgressBar);\r\n // \t\tform.disable();\r\n // \t\tform.showProgress();\r\n // \t\twebix.ajax()\r\n // \t\t\t.headers({ 'Content-type': 'application/json' })\r\n // \t\t\t.post(app.config.host + \"/System/GetInfoMST\", datapost, function (text) {\r\n\r\n // \t\t\t\tvar json = JSON.parse(text);\r\n\r\n // \t\t\t\tif (!json.hasOwnProperty(\"error\")) {\r\n // \t\t\t\t\tif (field_express != null) {\r\n\r\n // \t\t\t\t\t\tvar fields = field_express.split(';');\r\n // \t\t\t\t\t\t// tách json thành array\r\n // \t\t\t\t\t\tfor (var i = 0; i < fields.length; i++) {\r\n // \t\t\t\t\t\t\tvar field = fields[i].replace(\"{\", \"\").replace(\"}\", \"\");\r\n // \t\t\t\t\t\t\tvar array = field.split(\":\");\r\n\r\n // \t\t\t\t\t\t\tparentItem[array[1]] = json[array[0]];\r\n\r\n // \t\t\t\t\t\t}\r\n // \t\t\t\t\t\tform.setValues(parentItem);\r\n // \t\t\t\t\t}\r\n // \t\t\t\t\telse {\r\n // \t\t\t\t\t\twebix.message(\"FIELD_EXPRESSION IS NULL IN FIELD !\", \"error\", 2000);\r\n // \t\t\t\t\t}\r\n // \t\t\t\t}\r\n // \t\t\t\telse {\r\n // \t\t\t\t\t// nếu không tồn tại mã số thuế phải xóa địa chỉ + tên cty ở đây\r\n // \t\t\t\t\twebix.message(json.error, \"error\", 2000);\r\n // \t\t\t\t}\r\n // \t\t\t\tform.enable();\r\n // \t\t\t\tform.hideProgress();\r\n // \t\t\t});\r\n\r\n // \t}\r\n // }\r\n\r\n if (item.view == \"search\") {\r\n item.on.onSearchIconClick = function (e) {\r\n var form = $$(this.getFormView());\r\n\r\n //get value của form hiện tại để đổi giá trị\r\n var mst = this.getValue();\r\n // window.location.href = \"http://tracuunnt.gdt.gov.vn/tcnnt/mstdn.jsp?mst=\" + mst;\r\n window.open(\"http://tracuunnt.gdt.gov.vn/tcnnt/mstdn.jsp?mst=\" + mst);\r\n };\r\n }\r\n\r\n if (item.view == \"gridsuggest\") {\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n item.view = \"search\";\r\n item.icon = \"mdi mdi-plus\";\r\n item.on.onSearchIconClick = function (e) {\r\n showEditWindow(this, 1);\r\n };\r\n item.suggest = {\r\n view: \"gridsuggest\",\r\n autoheight: false,\r\n value_suggest: field.value_suggest,\r\n textValue: field.display_field,\r\n body: {\r\n columns: listColumns,\r\n refid: field.ref_id,\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n textValue: field.display_field,\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataByReferencesId?id=\" + refid;\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n //console.log(obj);\r\n var master = $$(this.config.master);\r\n if (master.config.fieldExpression != null) {\r\n var win = master.getTopParentView();\r\n var form = win.getChildViews()[1];\r\n //console.log(form);\r\n var parentItem = form.getValues();\r\n //console.log(parentItem);\r\n var fields = master.config.fieldExpression.split(\";\");\r\n\r\n for (var i = 0; i < fields.length; i++) {\r\n var field = fields[i].replace(\"{\", \"\").replace(\"}\", \"\");\r\n var array = field.split(\":\");\r\n //console.log(array);\r\n parentItem[array[1]] = obj[array[0]];\r\n }\r\n\r\n form.setValues(parentItem);\r\n }\r\n\r\n if (this.config.value_suggest != null) {\r\n var fn = Function(\"obj\", \"id\", this.config.value_suggest);\r\n fn(obj, this.config.id);\r\n }\r\n },\r\n },\r\n };\r\n\r\n item.on.onKeyPress = function (code, e) {\r\n if (e.code == \"F2\") {\r\n var suggest = $$(this.config.suggest);\r\n var refid = suggest.config.body.refid;\r\n\r\n suggest.hide();\r\n var sql = {\r\n command: \"SYS004\",\r\n parameter: {\r\n refid: refid,\r\n },\r\n };\r\n //var sql = \"SELECT a.*,b.window_id as WINDOWNO FROM #SCHEMA_NAME#.wb_references a INNER JOIN #SCHEMA_NAME#.wb_window b ON a.wb_window_id=b.wb_window_id WHERE a.wb_references_id='\" + refid + \"'\";\r\n //var url = app.config.host + \"/System/ExecuteQuery?sql=\" + sql;\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n var win = this.getTopParentView();\r\n var form = win.getChildViews()[1];\r\n\r\n var editorId = this.config.id;\r\n var formId = form.config.id;\r\n\r\n var a = webix.ajax().post(url, sql);\r\n var b = this.config.suggest;\r\n var c = this.config.id;\r\n var d = this.config.fieldExpression;\r\n var e = editorId;\r\n var f = formId;\r\n\r\n webix.promise.all([a, b, c, d, e, f]).then(function (results) {\r\n var res_a = results[0].json();\r\n\r\n var suggest = $$(results[1]);\r\n\r\n suggest.hide();\r\n\r\n var url = app.config.host + \"/System/GetConfigWinByNo?id=\" + res_a[0][\"windowno\"];\r\n\r\n var ajax = webix.ajax();\r\n ajax.master = {\r\n searchId: results[2],\r\n fieldExpression: d,\r\n valueField: res_a[0][\"value_field\"],\r\n formId: f,\r\n editorId: e,\r\n };\r\n\r\n ajax.get(url, function (text) {\r\n var windowconfig = JSON.parse(text);\r\n var txtSearch = $$(this.searchId);\r\n\r\n var win = txtSearch.$scope.ui(selectwindow.$ui);\r\n\r\n win.config.valueField = this.valueField;\r\n win.config.fieldExpression = this.fieldExpression;\r\n win.config.formId = this.formId;\r\n win.config.editorId = this.editorId;\r\n\r\n selectwindow.initUI(windowconfig);\r\n\r\n win.getHead().setHTML(windowconfig.data[0].name);\r\n win.show();\r\n });\r\n });\r\n\r\n var win = this.$scope.ui(selectwindow.$ui);\r\n win.show();\r\n }\r\n\r\n if (e.code == \"F4\" || e.code == \"F3\") {\r\n var editmode = e.code == \"F3\" ? 2 : 1;\r\n showEditWindow(this, editmode);\r\n }\r\n };\r\n }\r\n\r\n if (item.value_change != null || item.css != null || item.validate != null) {\r\n item.on.onChange = function (newv, oldv) {\r\n if (this.config.validate != null && editmode != 0) {\r\n this.validate();\r\n }\r\n\r\n if (this.config.css != null) {\r\n if (this.config.css == \"mcls_uppercase\" && newv !== undefined && oldv !== undefined) {\r\n if (newv.toUpperCase() != oldv.toUpperCase()) {\r\n webix.$$(this.config.id).setValue(newv.toUpperCase());\r\n }\r\n }\r\n }\r\n\r\n if (this.config.value_change != null) {\r\n var topParentView = this.getTopParentView();\r\n\r\n if (topParentView.config.editmode == 0) return;\r\n\r\n var fn = Function(\"newv\", \"oldv\", \"id\", this.config.value_change);\r\n fn(newv, oldv, this.config.id);\r\n }\r\n };\r\n }\r\n\r\n jsonElement[i] = item;\r\n var finish_replace = findJson.findAndReplace(el, jsonElement[i].name, item);\r\n // console.log(finish_replace);\r\n //webix.extend(el,jsonElement[i], true);\r\n }\r\n }\r\n }\r\n //console.log(jsonElement);\r\n } // nếu không có thì push vào el theo field\r\n else {\r\n // insert số dòng max của form\r\n \r\n if (vc_window.code == \"WIN00107\") {\r\n el.push({\r\n view: \"label\",\r\n height: 80,\r\n template: \"
Chú ý: Khi thêm cấu hình, toàn bộ hóa đơn đã ký sẽ tự động gửi trực tiếp tới Cơ quan thuế, không gửi Bảng tổng hợp dữ liệu
\"\r\n });\r\n }\r\n for (var i = 1; i <= max_row; i++) {\r\n el.push({ cols: [] });\r\n }\r\n\r\n var fields = rp[\"data\"][0][\"Tabs\"][0][\"Fields\"];\r\n // field của tab master (đầu phiếu )\r\n\r\n for (var i = 0; i < fields.length; i++) {\r\n var field = fields[i];\r\n\r\n if (field.hidden == true) {\r\n continue;\r\n }\r\n\r\n var row = field.row;\r\n\r\n var item = {\r\n view: field.type_editor,\r\n resizeColumn: true,\r\n multiview: { keepViews: true },\r\n keepViews: true,\r\n name: field.column_name,\r\n label: _(field.column_name),\r\n id: field.column_name + \"_\" + rp[\"data\"][0][\"Tabs\"][0][\"table_name\"],\r\n width: field.width,\r\n labelPosition: field.label_position,\r\n labelWidth: field.label_width,\r\n format: field.format,\r\n value_change: field.value_change,\r\n fieldExpression: field.field_expression,\r\n data_width: field.data_width,\r\n column_type: field.column_type,\r\n css: field.css,\r\n attributes: {},\r\n on: {},\r\n };\r\n\r\n if (field.type_editor == \"password\") {\r\n item.view = \"text\";\r\n item.type = \"password\";\r\n }\r\n webix.editors.$popup = {\r\n date: {\r\n view: \"popup\",\r\n body: { view: \"calendar\", timepicker: true, icons: true },\r\n },\r\n };\r\n\r\n if (field.type_editor == \"datepicker\" && field.column_type != \"time\") {\r\n item.editor = \"date\";\r\n item.format = function (text) {\r\n if (text != null && text != undefined) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n };\r\n item.timepicker = true;\r\n }\r\n\r\n if (field.type_editor == \"datepicker\" && field.column_type == \"time\") {\r\n item.editor = \"date\";\r\n item.type = \"time\";\r\n item.format = \"%H:%i\";\r\n item.timepicker = true;\r\n }\r\n\r\n if (item.data_width != null) {\r\n if (item.data_width != 0) {\r\n item.attributes.maxlength = item.data_width;\r\n //style: \"text-transform: uppercase;\"\r\n }\r\n }\r\n\r\n if (field.styleinput != null && field.styleinput != \"\") {\r\n item.attributes.style = field.styleinput;\r\n }\r\n\r\n if (field.height != null) {\r\n if (field.height != 0) {\r\n item.height = field.height;\r\n }\r\n }\r\n\r\n if (field.caption != null) {\r\n item.label = _(field.caption);\r\n }\r\n\r\n if (field.read_only == \"C\") {\r\n item.readonly = true;\r\n }\r\n\r\n if (item.view == \"combo\") {\r\n item.suggest = {\r\n body: {\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id,\r\n },\r\n };\r\n //item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n if (item.view == \"select\") {\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n if (item.view == \"checkbox\") {\r\n if (field.label_position == \"right\") {\r\n item.labelRight = _(field.column_name);\r\n item.label = \"\";\r\n }\r\n\r\n if (field.column_type == \"char\") {\r\n item.checkValue = \"C\";\r\n item.uncheckValue = \"K\";\r\n }\r\n\r\n if (field.column_type == \"tinyint\") {\r\n item.checkValue = \"1\";\r\n item.uncheckValue = \"0\";\r\n }\r\n\r\n if (field.column_type == \"bit\") {\r\n item.checkValue = true;\r\n item.uncheckValue = false;\r\n }\r\n }\r\n\r\n if (item.view == \"autonumeric\" || field.column_type == \"numeric\") {\r\n item.inputAlign = \"left\";\r\n item.decimalPlaces = field.data_decimal;\r\n }\r\n\r\n if (field.valid_rule != null) {\r\n var rule = field.valid_rule;\r\n\r\n if (rule == \"isNotEmpty\") {\r\n item.required = true;\r\n item.invalidMessage = item.label + \" không được bỏ trống\";\r\n item.validate = webix.rules.isNotEmpty;\r\n }\r\n\r\n if (rule == \"isSpecialCharacter\") {\r\n item.required = true;\r\n item.invalidMessage = \"Không bỏ trống hoặc ký tự không hợp lệ (a-z,A-Z,0-9)\";\r\n item.validate = webix.rules.isSpecialCharacter;\r\n }\r\n\r\n if (rule == \"isEmail\") {\r\n item.invalidMessage = item.label + \" không hợp lệ\";\r\n item.validate = webix.rules.isEmail;\r\n }\r\n\r\n if (rule == \"isTaxCode\") {\r\n item.invalidMessage = item.label + \" không hợp lệ\";\r\n item.validate = webix.rules.isTaxCode;\r\n }\r\n\r\n if (rule == \"isPositiveNumbers\") {\r\n item.invalidMessage = item.label + \" không hợp lệ\";\r\n item.validate = webix.rules.isPositiveNumbers;\r\n }\r\n }\r\n\r\n if (item.view == \"treesuggest\") {\r\n //item.REF_ID = field.REF_ID.toString();\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n item.view = \"combo\";\r\n item.options = {\r\n view: \"treesuggest\",\r\n textValue: field.display_field,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataByReferencesId?id=\" + view.config.refid;\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n body: {\r\n columns: listColumns,\r\n refid: field.ref_id,\r\n filterMode: {\r\n level: false,\r\n showSubItems: false,\r\n },\r\n },\r\n };\r\n\r\n item.on.onKeyPress = function (code, e) {\r\n if (e.code == \"F4\") {\r\n alert(\"Moi\");\r\n }\r\n };\r\n }\r\n\r\n if (item.view == \"gridcombo\") {\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n item.view = \"combo\";\r\n item.options = {\r\n view: \"gridsuggest\",\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id,\r\n body: {\r\n columns: listColumns,\r\n refid: field.REF_ID,\r\n textValue: field.display_field,\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n //console.log(obj);\r\n var master = $$(this.config.master);\r\n if (master.config.fieldExpression != null) {\r\n var win = master.getTopParentView();\r\n var form = win.getChildViews()[1];\r\n //console.log(form);\r\n var parentItem = form.getValues();\r\n //console.log(parentItem);\r\n var fields = master.config.fieldExpression.split(\";\");\r\n\r\n for (var i = 0; i < fields.length; i++) {\r\n var field = fields[i].replace(\"{\", \"\").replace(\"}\", \"\");\r\n var array = field.split(\":\");\r\n //console.log(array);\r\n parentItem[array[1]] = obj[array[0]];\r\n }\r\n\r\n form.setValues(parentItem);\r\n }\r\n\r\n if (this.config.value_suggest != null) {\r\n var fn = Function(\"obj\", \"id\", this.config.value_suggest);\r\n fn(obj, this.config.id);\r\n }\r\n },\r\n },\r\n };\r\n\r\n item.on.onKeyPress = function (code, e) {\r\n if (e.code == \"F4\") {\r\n alert(\"Moi\");\r\n }\r\n };\r\n }\r\n if (item.view == \"search\") {\r\n var express = item.fieldExpression;\r\n\r\n item.on.onSearchIconClick = function (e) {\r\n var form = $$(this.getFormView());\r\n\r\n //get value của form hiện tại để đổi giá trị\r\n var parentItem = form.getValues();\r\n\r\n var field_express = this.config.fieldExpression;\r\n var text = this.getValue();\r\n var datapost = { masothue: text };\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/GetInfoByMST\", datapost, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n if (field_express != null) {\r\n var fields = field_express.split(\";\");\r\n // tách json thành array\r\n for (var i = 0; i < fields.length; i++) {\r\n var field = fields[i].replace(\"{\", \"\").replace(\"}\", \"\");\r\n var array = field.split(\":\");\r\n\r\n parentItem[array[1]] = json[array[0]];\r\n }\r\n form.setValues(parentItem);\r\n } else {\r\n webix.message(\"FIELD_EXPRESSION IS NULL IN FIELD !\", \"error\", 2000);\r\n }\r\n } else {\r\n // nếu không tồn tại mã số thuế phải xóa địa chỉ + tên cty ở đây\r\n webix.message(json.error, \"error\", 2000);\r\n }\r\n });\r\n };\r\n }\r\n\r\n if (item.view == \"gridsuggest\") {\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n item.view = \"search\";\r\n item.icon = \"mdi mdi-plus\";\r\n item.on.onSearchIconClick = function (e) {\r\n showEditWindow(this, 1);\r\n };\r\n item.suggest = {\r\n view: \"gridsuggest\",\r\n autoheight: false,\r\n value_suggest: field.value_suggest,\r\n textValue: field.display_field,\r\n body: {\r\n columns: listColumns,\r\n refid: field.ref_id,\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n textValue: field.display_field,\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataByReferencesId?id=\" + refid;\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n //console.log(obj);\r\n var master = $$(this.config.master);\r\n if (master.config.fieldExpression != null) {\r\n var win = master.getTopParentView();\r\n var form = win.getChildViews()[1];\r\n //console.log(form);\r\n var parentItem = form.getValues();\r\n //console.log(parentItem);\r\n var fields = master.config.fieldExpression.split(\";\");\r\n\r\n for (var i = 0; i < fields.length; i++) {\r\n var field = fields[i].replace(\"{\", \"\").replace(\"}\", \"\");\r\n var array = field.split(\":\");\r\n //console.log(array);\r\n parentItem[array[1]] = obj[array[0]];\r\n }\r\n\r\n form.setValues(parentItem);\r\n }\r\n\r\n if (this.config.value_suggest != null) {\r\n var fn = Function(\"obj\", \"id\", this.config.value_suggest);\r\n fn(obj, this.config.id);\r\n }\r\n },\r\n },\r\n };\r\n\r\n item.on.onKeyPress = function (code, e) {\r\n if (e.code == \"F2\") {\r\n var suggest = $$(this.config.suggest);\r\n var refid = suggest.config.body.refid;\r\n\r\n suggest.hide();\r\n var sql = {\r\n command: \"SYS004\",\r\n parameter: {\r\n refid: refid,\r\n },\r\n };\r\n //var sql = \"SELECT a.*,b.window_id as WINDOWNO FROM #SCHEMA_NAME#.wb_references a INNER JOIN #SCHEMA_NAME#.wb_window b ON a.wb_window_id=b.wb_window_id WHERE a.wb_references_id='\" + refid + \"'\";\r\n //var url = app.config.host + \"/System/ExecuteQuery?sql=\" + sql;\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n var win = this.getTopParentView();\r\n var form = win.getChildViews()[1];\r\n\r\n var editorId = this.config.id;\r\n var formId = form.config.id;\r\n\r\n var a = webix.ajax().post(url, sql);\r\n var b = this.config.suggest;\r\n var c = this.config.id;\r\n var d = this.config.fieldExpression;\r\n var e = editorId;\r\n var f = formId;\r\n\r\n webix.promise.all([a, b, c, d, e, f]).then(function (results) {\r\n var res_a = results[0].json();\r\n var suggest = $$(results[1]);\r\n\r\n suggest.hide();\r\n\r\n var url = app.config.host + \"/System/GetConfigWinByNo?id=\" + res_a[0][\"windowno\"];\r\n\r\n var ajax = webix.ajax();\r\n ajax.master = {\r\n searchId: results[2],\r\n fieldExpression: d,\r\n valueField: res_a[0][\"value_field\"],\r\n formId: f,\r\n editorId: e,\r\n };\r\n\r\n ajax.get(url, function (text) {\r\n var windowconfig = JSON.parse(text);\r\n var txtSearch = $$(this.searchId);\r\n\r\n var win = txtSearch.$scope.ui(selectwindow.$ui);\r\n\r\n win.config.valueField = this.valueField;\r\n win.config.fieldExpression = this.fieldExpression;\r\n win.config.formId = this.formId;\r\n win.config.editorId = this.editorId;\r\n\r\n selectwindow.initUI(windowconfig);\r\n\r\n win.getHead().setHTML(windowconfig.data[0].name);\r\n win.show();\r\n });\r\n });\r\n\r\n var win = this.$scope.ui(selectwindow.$ui);\r\n win.show();\r\n }\r\n\r\n if (e.code == \"F4\" || e.code == \"F3\") {\r\n var editmode = e.code == \"F3\" ? 2 : 1;\r\n showEditWindow(this, editmode);\r\n }\r\n };\r\n }\r\n\r\n if (item.value_change != null || item.css != null || item.validate != null) {\r\n item.on.onChange = function (newv, oldv) {\r\n if (this.config.validate != null && editmode != 0) {\r\n this.validate();\r\n }\r\n\r\n if (this.config.css != null) {\r\n if (this.config.css == \"mcls_uppercase\" && newv !== undefined && oldv !== undefined) {\r\n if (newv.toUpperCase() != oldv.toUpperCase()) {\r\n webix.$$(this.config.id).setValue(newv.toUpperCase());\r\n }\r\n }\r\n }\r\n\r\n if (this.config.value_change != null) {\r\n var topParentView = this.getTopParentView();\r\n\r\n if (topParentView.config.editmode == 0) return;\r\n\r\n var fn = Function(\"newv\", \"oldv\", \"id\", this.config.value_change);\r\n fn(newv, oldv, this.config.id);\r\n }\r\n };\r\n }\r\n\r\n el[row - 1].cols.push(item);\r\n //console.log(el);\r\n }\r\n }\r\n if (vc_window.window_type == \"MasterDetail\") {\r\n var cells = [];\r\n\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Master\") {\r\n continue;\r\n }\r\n\r\n var subCols = [];\r\n\r\n for (var j = 0; j < tab.Fields.length; j++) {\r\n var field = tab.Fields[j];\r\n\r\n var subCol = {\r\n id: field.column_name,\r\n header: field.caption != null ? _(field.caption) : _(field.column_name),\r\n editor: field.type_editor,\r\n hidden: field.hidden,\r\n value_change: field.value_change,\r\n };\r\n\r\n if (field.read_only == \"C\" || field.type_editor == \"checkbox\") {\r\n delete subCol.editor;\r\n }\r\n\r\n if (field.type_editor == \"checkbox\") {\r\n subCol.template = \"{common.checkbox()}\";\r\n subCol.checkValue = true;\r\n subCol.uncheckValue = false;\r\n }\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n subCol.format = function (text) {\r\n if (text != null && text != undefined) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n };\r\n }\r\n\r\n if (field.column_type == \"numeric\") {\r\n subCol.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: field.data_decimal,\r\n });\r\n }\r\n if (field.column_type == \"autonumeric\") {\r\n subCol.css = { \"text-align\": \"left\" };\r\n }\r\n if (field.column_width == null) {\r\n subCol.fillspace = true;\r\n } else {\r\n subCol.width = field.column_width;\r\n }\r\n\r\n if (field.type_editor == \"combo\" || field.type_editor == \"multiselect\") {\r\n subCol.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n subCol.optionslist = true;\r\n }\r\n webix.editors.$popup = {\r\n date: {\r\n view: \"popup\",\r\n body: { view: \"calendar\", timepicker: true, icons: true },\r\n },\r\n };\r\n if (field.type_editor == \"datepicker\") {\r\n subCol.editor = \"date\";\r\n subCol.format = function (text) {\r\n if (text != null && text != undefined) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n };\r\n }\r\n\r\n if (field.type_editor == \"treesuggest\") {\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n var popup = webix.ui({\r\n view: \"treesuggest\",\r\n body: {\r\n columns: listColumns,\r\n refid: field.ref_id,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataByReferencesId?id=\" + view.config.refid;\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n filterMode: {\r\n level: false,\r\n showSubItems: false,\r\n },\r\n },\r\n });\r\n\r\n subCol.popup = popup;\r\n subCol.editor = \"combo\";\r\n }\r\n\r\n if (field.type_editor == \"gridcombo\") {\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n var popup = webix.ui({\r\n view: \"gridsuggest\",\r\n textValue: field.display_field,\r\n body: {\r\n columns: listColumns,\r\n refid: field.ref_id,\r\n textValue: field.display_field,\r\n tableId: \"edit_\" + tab.table_name,\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id,\r\n },\r\n });\r\n\r\n subCol.popup = popup;\r\n subCol.editor = \"combo\";\r\n }\r\n if (field.type_editor == \"search\") {\r\n subCol.onSearchIconClick = function (e) {\r\n var form = $$(this.getFormView());\r\n\r\n var field_express = this.config.fieldExpression;\r\n var text = this.getValue();\r\n var datapost = { masothue: text };\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/GetInfoByMST\", datapost, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n //console.log(JSON.stringify(json));\r\n form.setValues(json);\r\n } else {\r\n // nếu không tồn tại mã số thuế phải xóa địa chỉ + tên cty ở đây\r\n webix.message(json.error, \"error\", 2000);\r\n }\r\n });\r\n };\r\n }\r\n if (field.type_editor == \"gridsuggest\") {\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id.toUpperCase());\r\n }\r\n\r\n subCol.editor = \"textsearch\";\r\n subCol.tableId = \"edit_\" + tab.table_name;\r\n subCol.onIconButtonClick = function (e) {\r\n var tableId = this.getAttribute(\"tableId\");\r\n var table = $$(tableId);\r\n tableShowEditWindow(table, 1);\r\n };\r\n\r\n subCol.suggest = {\r\n view: \"gridsuggest\",\r\n value_suggest: field.value_suggest,\r\n fieldExpression: field.field_expression,\r\n displayField: field.display_field,\r\n tableId: \"edit_\" + tab.table_name,\r\n columnName: field.column_name,\r\n body: {\r\n columns: listColumns,\r\n refid: field.ref_id,\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataByReferencesId?id=\" + refid;\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n if (this.config.fieldExpression != null) {\r\n var table = $$(this.config.tableId);\r\n var selectedItem = table.getSelectedItem();\r\n\r\n var fields = this.config.fieldExpression.split(\";\");\r\n\r\n for (var i = 0; i < fields.length; i++) {\r\n var field = fields[i].replace(\"{\", \"\").replace(\"}\", \"\");\r\n var array = field.split(\":\");\r\n\r\n selectedItem[array[1]] = obj[array[0]];\r\n }\r\n\r\n table.updateItem(selectedItem.id, selectedItem);\r\n }\r\n\r\n if (this.config.value_suggest != null) {\r\n var fn = Function(\"obj\", \"id\", this.config.value_suggest);\r\n fn(obj, this.config.id);\r\n }\r\n },\r\n },\r\n };\r\n }\r\n\r\n subCols.push(subCol);\r\n }\r\n\r\n if (tab.tab_type == \"Detail\") {\r\n var item = {\r\n header: tab.name,\r\n select: \"cell\",\r\n body: {\r\n rows: [\r\n {\r\n view: \"toolbar\",\r\n height: 28,\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n label: \" (F9)\",\r\n width: 60,\r\n icon: \"fas fa-plus\",\r\n css: { \"font-size\": \"15px\" },\r\n on: {\r\n onItemClick: function (id, e) {\r\n var parentView = this.getParentView().getParentView();\r\n var childViews = parentView.getChildViews();\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var childview = childViews[i];\r\n\r\n if (childview.config.view == \"datatable\") {\r\n var table = childview;\r\n\r\n var item = {\r\n id: webix.uid(),\r\n };\r\n webix.editors.$popup = {\r\n date: {\r\n view: \"popup\",\r\n body: { view: \"calendar\", timepicker: true, icons: true },\r\n },\r\n };\r\n var vc_window = windowconfig[\"data\"][0];\r\n var tabs = vc_window.Tabs;\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n if (tab.tab_type == \"Detail\") {\r\n var fields = tab.Fields;\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (field.column_name == \"branch_code\") {\r\n item[field.column_name] = user.getDvcsID();\r\n }\r\n\r\n if (field.default_value != null) {\r\n var defaultValue = field.default_value.toString();\r\n\r\n if (defaultValue.startsWith(\"@Default=\")) {\r\n item[field.column_name] = defaultValue.replace(\"@Default=\", \"\");\r\n }\r\n\r\n if (defaultValue.startsWith(\"@JS=\")) {\r\n var fn = Function(defaultValue.replace(\"@JS=\", \"\"));\r\n item[field.column_name] = fn();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n //console.log(item);\r\n table.add(item);\r\n\r\n table.select(item.id, table.config.columns[0].id, false);\r\n table.edit({ row: item.id, column: table.config.columns[0].id });\r\n\r\n break;\r\n }\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n label: \" (F8)\",\r\n width: 60,\r\n icon: \"fas fa-minus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var parentView = this.getParentView().getParentView();\r\n var childViews = parentView.getChildViews();\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var childview = childViews[i];\r\n\r\n if (childview.config.view == \"datatable\") {\r\n var table = childview;\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n break;\r\n }\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n label: \" (F7)\",\r\n width: 45,\r\n icon: \"fas fa-copy\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var parentView = this.getParentView().getParentView();\r\n var childViews = parentView.getChildViews();\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var childview = childViews[i];\r\n\r\n if (childview.config.view == \"datatable\") {\r\n var table = childview;\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n //item.id = webix.uid();\r\n var copy = webix.copy(item);\r\n copy.id = webix.uid();\r\n copy[tab.table_name + \"_id\"] = null;\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, table.config.columns[0].id, false);\r\n table.edit({ row: copy.id, column: table.config.columns[0].id });\r\n\r\n break;\r\n }\r\n }\r\n },\r\n },\r\n },\r\n {\r\n hidden: vc_window.code !== \"WIN00023\" ? true : false,\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-folder-open\",\r\n label: \"Import file excel mẫu\",\r\n width: 150,\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"edit_\" + tab.table_name);\r\n require([\"views/forms/uploadexceltemplate\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n var form = webix.$$(\"window-form\");\r\n var data = form.getValues();\r\n win.show();\r\n\r\n var formData;\r\n if(data.id) {\r\n formData = { wb_excel_id: data.id, excel_id: data.code, filename: data.name };\r\n } else {\r\n formData = { wb_excel_id: wb_excel_id, excel_id: data.code, filename: data.name };\r\n }\r\n\r\n if(parentCodeParam) {\r\n formData['parent_code'] = $$(parentCodeParam.id).getValue();\r\n }\r\n\r\n webix.$$(\"uploader\").define(\"formData\", formData);\r\n webix.$$(\"uploader\").hide();\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"edit_\" + tab.table_name,\r\n tab_table: tab.table_name,\r\n tab_id: tab.tab_id,\r\n editable: true,\r\n select: \"cell\",\r\n select_change: tab.select_change,\r\n cell_editstop: tab.cell_editstop,\r\n after_addrow: tab.after_addrow,\r\n after_delrow: tab.after_delrow,\r\n oncheck: tab.oncheck,\r\n columns: subCols,\r\n on: {\r\n onCheck: function (row, column, state) {\r\n var table = this;\r\n\r\n if (this.config.oncheck != null) {\r\n var fn = Function(\"row\", \"column\", \"state\", \"tableId\", this.config.oncheck);\r\n fn(row, column, state, this.config.id);\r\n }\r\n },\r\n onAfterAdd: function (id, index) {\r\n if (this.config.after_addrow != null) {\r\n var fn = Function(\"id\", \"index\", \"tableId\", this.config.after_addrow);\r\n fn(id, index, this.config.id);\r\n }\r\n },\r\n\r\n onAfterDelete: function (id) {\r\n if (this.config.after_delrow != null) {\r\n var fn = Function(\"id\", \"tableId\", this.config.after_delrow);\r\n fn(id, this.config.id);\r\n }\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n if (state.value === state.old) return;\r\n\r\n if (editor.config.value_change != null && editor.config.value_change != \"\") {\r\n var selectedItem = null;\r\n\r\n if (typeof editor.getPopup === \"function\") {\r\n var popup = editor.getPopup();\r\n\r\n if (popup != null) {\r\n var list = popup.getList();\r\n\r\n if (list != null) {\r\n selectedItem = list.getSelectedItem();\r\n }\r\n }\r\n }\r\n\r\n var fn = Function(\"newv\", \"oldv\", \"id\", \"selectedItem\", editor.config.value_change);\r\n fn(state.value, state.old, editor.config.id, selectedItem);\r\n }\r\n\r\n if (this.config.cell_editstop != null) {\r\n var fn = Function(\"columnId\", \"tableId\", \"rowId\", this.config.cell_editstop);\r\n fn(editor.config.id, this.config.id, editor.row);\r\n }\r\n },\r\n // onKeyDown: function(code, e)\r\n // {\r\n // \t\tif (e.key == 40) {\r\n // \t\tvar toolbar = this.getParentView().getChildViews()[0];\r\n // \t\tvar btnPlus = toolbar.getChildViews()[0];\r\n // \t\tconsole.log(btnPlus);\r\n // \t\tbtnPlus.callEvent(\"onItemClick\");\r\n // \t}\r\n // },\r\n onKeyPress: function (code, e) {\r\n var table = this;\r\n\r\n if (e.key == \"F8\") {\r\n var toolbar = this.getParentView().getChildViews()[0];\r\n var btnMinus = toolbar.getChildViews()[1];\r\n\r\n btnMinus.callEvent(\"onItemClick\");\r\n }\r\n if (e.key == \"F9\") {\r\n var toolbar = this.getParentView().getChildViews()[0];\r\n var btnPlus = toolbar.getChildViews()[0];\r\n\r\n btnPlus.callEvent(\"onItemClick\");\r\n }\r\n if (e.key == \"F7\") {\r\n var toolbar = this.getParentView().getChildViews()[0];\r\n var btnCopy = toolbar.getChildViews()[2];\r\n\r\n btnCopy.callEvent(\"onItemClick\");\r\n }\r\n\r\n if (e.key == \"F2\") {\r\n var editor = table.getEditState();\r\n\r\n if (editor === false) return;\r\n\r\n var suggest = $$(editor.config.suggest);\r\n var refid = suggest.config.body.refid;\r\n var sql = {\r\n command: \"SYS004\",\r\n parameter: {\r\n refid: refid,\r\n },\r\n };\r\n //\tvar sql = \"SELECT a.*,b.window_id as WINDOWNO FROM #SCHEMA_NAME#.wb_references a INNER JOIN #SCHEMA_NAME#.wb_window b ON a.wb_window_id=b.wb_window_id WHERE a.wb_references_id='\" + refid + \"'\";\r\n // var url = app.config.host + \"/System/ExecuteQuery?sql=\" + sql;\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n var a = webix.ajax().post(url, sql);\r\n var b = editor.config.suggest;\r\n var c = table.config.id;\r\n var d = suggest.config.fieldExpression;\r\n var e = editor.config.id;\r\n var f = suggest.config.displayField;\r\n //console.log(f);\r\n\r\n webix.promise.all([a, b, c, d, e, f]).then(function (results) {\r\n var res_a = results[0].json();\r\n //\tconsole.log(res_a);\r\n var suggest = $$(results[1]);\r\n\r\n suggest.hide();\r\n\r\n var url = app.config.host + \"/System/GetConfigWinByNo?id=\" + res_a[0][\"windowno\"];\r\n\r\n var ajax = webix.ajax();\r\n ajax.master = {\r\n tableId: results[2],\r\n fieldExpression: d,\r\n valueField: res_a[0][\"value_field\"],\r\n editorId: null,\r\n columnName: e,\r\n displayField: f,\r\n };\r\n\r\n ajax.get(url, function (text) {\r\n var windowconfig = JSON.parse(text);\r\n var table = $$(this.tableId);\r\n //console.log(windowconfig);\r\n var win = table.$scope.ui(selectwindow.$ui);\r\n\r\n win.config.valueField = this.valueField;\r\n win.config.fieldExpression = this.fieldExpression;\r\n win.config.tableId = this.tableId;\r\n win.config.editorId = null;\r\n win.config.columnName = this.columnName;\r\n win.config.displayField = this.displayField;\r\n\r\n selectwindow.initUI(windowconfig);\r\n\r\n win.getHead().setHTML(windowconfig.data[0].name);\r\n win.show();\r\n });\r\n });\r\n\r\n var win = this.$scope.ui(selectwindow.$ui);\r\n win.show();\r\n }\r\n\r\n if (e.key == \"F4\" || e.key == \"F3\") {\r\n var editor = table.getEditState();\r\n\r\n if (editor === false) {\r\n var toolbar = this.getParentView().getChildViews()[0];\r\n //console.log(toolbar);\r\n var btnPlus = toolbar.getChildViews()[0];\r\n //console.log(btnPlus);\r\n btnPlus.callEvent(\"onItemClick\");\r\n return;\r\n }\r\n var editmode = e.key == \"F3\" ? 2 : 1;\r\n tableShowEditWindow(table, editmode);\r\n }\r\n },\r\n onSelectChange: function () {\r\n var selectedItem = this.getSelectedId();\r\n\r\n if (this.config.select_change != null) {\r\n var fn = Function(\"selectedItem\", this.config.select_change);\r\n fn(selectedItem);\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n\r\n cells.push(item);\r\n }\r\n }\r\n\r\n var subview = {\r\n borderless: true,\r\n view: \"tabview\",\r\n scrollX: true,\r\n cells: cells,\r\n tabbar: {\r\n width: 200,\r\n },\r\n };\r\n\r\n if (vc_window.width != null || vc_window.height != null) {\r\n subview.height = 250;\r\n }\r\n\r\n //el.push(subview);\r\n\r\n var myJsonString = JSON.stringify(el);\r\n var x = findJson.getObjects(JSON.parse(myJsonString), \"id\", \"tab_replace\");\r\n //replace tab chi tiết\r\n if (x.length > 0) {\r\n var Y = x[0];\r\n //webix.extend(Y, subview, true);\r\n // cần cập nhật lại x[0] cho el\r\n\r\n for (var i = 0; i < el.length; i++) {\r\n if (el[i].id == \"tab_replace\") {\r\n //console.log(el[i]);\r\n el[i] = subview;\r\n }\r\n }\r\n } else {\r\n if (vc_window.tab_row != null) {\r\n el[vc_window.tab_row - 1] = subview;\r\n } else {\r\n el.push(subview);\r\n }\r\n }\r\n }\r\n\r\n var cols = [\r\n // {},\r\n {\r\n // \t\t view: \"button\", type: \"htmlbutton\", width: 100,\r\n // label: ' ' +\r\n // 'LƯU (F10)',\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"LƯU (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 110,\r\n before_save: vc_window.before_save,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var form = webix.$$(\"window-form\");\r\n\r\n if (form.validate() == false) {\r\n return;\r\n }\r\n\r\n if (self.config.before_save != null) {\r\n var fn = Function(self.config.before_save);\r\n var result = fn();\r\n\r\n if (result == false) return;\r\n }\r\n\r\n var item = form.getValues();\r\n \r\n var khData = {};\r\n \r\n khData.windowid = String(rp[\"data\"][0][\"code\"]);\r\n khData.editmode = editmode;\r\n khData.data = [];\r\n \r\n var vc_window = rp[\"data\"][0];\r\n if(vc_window.code === \"WIN00023\" && editmode == 1) {\r\n item[\"wb_excel_id\"] = wb_excel_id;\r\n }\r\n \r\n if (vc_window.window_type == \"MasterDetail\") {\r\n var tabs = vc_window.Tabs;\r\n var details = [];\r\n\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Detail\") {\r\n var table = webix.$$(\"edit_\" + tab.table_name);\r\n details.push({\r\n tab_id: tab.code,\r\n tab_table: tab.table_name,\r\n data: table.serialize(),\r\n });\r\n }\r\n }\r\n\r\n item[\"details\"] = details;\r\n }\r\n\r\n khData.data.push(item);\r\n\r\n self.getTopParentView().disable();\r\n self.getTopParentView().showProgress();\r\n \r\n var box = null\r\n if(khData.windowid == \"WIN00026\" && item.code == \"CHECK_QUANTITY_KH\") {\r\n box = webix.modalbox({\r\n title: \"Hệ thống đang cập nhật cấu hình. Vui lòng không phát hành hóa đơn!\",\r\n text: \"

\",\r\n width: 450,\r\n height: 200,\r\n });\r\n }\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/Save\", khData, function (text) {\r\n if(box) {\r\n webix.modalbox.hide(box)\r\n }\r\n\r\n var json = JSON.parse(text);\r\n\r\n $$(json.windowid).enable();\r\n $$(json.windowid).hideProgress();\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var after_save = $$(json.windowid).config.after_save;\r\n\r\n if (after_save != null) {\r\n //Function\r\n var fn = Function(\"editmode\", \"data\", after_save);\r\n fn(editmode, json.data);\r\n //console.log(editmode);\r\n }\r\n\r\n $$(json.windowid).close();\r\n app.callEvent(\"dataChanged\", [editmode, json.data]);\r\n webix.message(\"Cập nhật cấu hình thành công\", \"success\", 2000);\r\n } else {\r\n webix.message(json.error, \"error\", 2000);\r\n }\r\n });\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n shortcut: \"esc\",\r\n label: \"HỦY (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 110,\r\n on: {\r\n onClick: function () {\r\n this.getTopParentView().close();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n el.push({\r\n // paddingY:10,\r\n margin: 10,\r\n height: 40,\r\n cols: cols,\r\n });\r\n\r\n webix.ui(el, $$(\"window-form\"));\r\n //console.log(el);\r\n\r\n win.getHead().setHTML(windowconfig.data[0].name);\r\n },\r\n focusFirstElement: function () {\r\n var form = $$(\"window-form\");\r\n form.focus(form.elements[0]);\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n\r\n var form = webix.$$(\"window-form\");\r\n var topParentView = form.getTopParentView();\r\n topParentView.config.editmode = mode;\r\n },\r\n setValues: function (item, winconfig, params) {\r\n var form = webix.$$(\"window-form\");\r\n var vc_window = winconfig[\"data\"][0];\r\n webix.editors.$popup = {\r\n date: {\r\n view: \"popup\",\r\n body: { view: \"calendar\", timepicker: true, icons: true },\r\n },\r\n };\r\n if (item == null) {\r\n var tabs = vc_window.Tabs;\r\n\r\n item = {};\r\n\r\n if (params != null) {\r\n item = params;\r\n }\r\n\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n if (tab.tab_type == \"Normal\" || tab.tab_type == \"Master\") {\r\n var fields = tab.Fields;\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (field.column_name == \"branch_code\") {\r\n item[field.column_name] = user.getDvcsID();\r\n }\r\n\r\n if (field.default_value != null) {\r\n var defaultValue = field.default_value.toString();\r\n\r\n if (defaultValue.startsWith(\"@Default=\")) {\r\n item[field.column_name] = defaultValue.replace(\"@Default=\", \"\");\r\n }\r\n\r\n if (defaultValue.startsWith(\"@JS=\")) {\r\n var fn = Function(defaultValue.replace(\"@JS=\", \"\"));\r\n item[field.column_name] = fn();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n form.setValues(item);\r\n } else {\r\n form.setValues(item);\r\n\r\n var tabs = vc_window.Tabs;\r\n\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type != \"Detail\") {\r\n var fields = tab.Fields;\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n //if (field.hidden != true) {\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n if (item[field.column_name] != null && item[field.column_name] != undefined) {\r\n item[field.column_name] = removeTimeZoneT(item[field.column_name]);\r\n form.setValues(item);\r\n }\r\n }\r\n\r\n if (field.column_type == \"time\") {\r\n \r\n if (item[field.column_name] != null && item[field.column_name] != undefined) {\r\n item[field.column_name] = new Date(item[field.column_name]);\r\n form.setValues(item);\r\n }\r\n }\r\n\r\n\r\n }\r\n\r\n break;\r\n }\r\n }\r\n\r\n if (vc_window.window_type == \"MasterDetail\") {\r\n if(winconfig[\"data_params\"] && winconfig[\"data_params\"].length > 0) {\r\n parentCodeParam = winconfig[\"data_params\"].find(function(e) {\r\n return e.value_field == 'parent_code';\r\n })\r\n }\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Master\") {\r\n continue;\r\n }\r\n\r\n var table = webix.$$(\"edit_\" + tab.table_name);\r\n var url = app.config.host + \"/System/GetDataDetailsByTabTable?window_id=\" + vc_window.code + \"&id=\" + item.id + \"&tab_table=\" + tab.table_name;\r\n if(parentCodeParam) {\r\n url = url + \"&parent_code=\" + $$(parentCodeParam.id).getValue();\r\n }\r\n table.clearAll();\r\n // if(editmode == 4) continue;\r\n table.load(url);\r\n }\r\n }\r\n }\r\n },\r\n copyValues: function (item, winconfig) {\r\n var form = webix.$$(\"window-form\");\r\n var vc_window = winconfig[\"data\"][0];\r\n\r\n var dataParam = null;\r\n if(winconfig[\"data_params\"] && winconfig[\"data_params\"].length > 0) {\r\n dataParam = winconfig[\"data_params\"].find(function(e) {\r\n return e.value_field == 'parent_code';\r\n })\r\n }\r\n if (vc_window.window_type == \"MasterDetail\") {\r\n var tabs = vc_window.Tabs;\r\n\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Master\") {\r\n continue;\r\n }\r\n\r\n var table = webix.$$(\"edit_\" + tab.table_name);\r\n\r\n var url = app.config.host + \"/System/GetDataDetailsByTabTable?window_id=\" + vc_window.code + \"&id=\" + item.id + \"&tab_table=\" + tab.table_name;\r\n if(dataParam) {\r\n url = url + \"&parent_code=\" + $$(dataParam.id).getValue();\r\n }\r\n\r\n table.clearAll();\r\n\r\n if (vc_window.code == \"WIN00008\") {\r\n continue;\r\n }\r\n\r\n table.load(url);\r\n }\r\n }\r\n\r\n var tabs = vc_window.Tabs;\r\n\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Normal\" || tab.tab_type == \"Master\") {\r\n var fields = tab.Fields;\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (field.column_name == tab.table_name + \"_id\") {\r\n item[field.column_name] = null;\r\n }\r\n\r\n if (field.column_name == \"branch_code\") {\r\n item[field.column_name] = user.getDvcsID();\r\n }\r\n\r\n if (field.default_value != null) {\r\n var defaultValue = field.default_value.toString();\r\n\r\n if (defaultValue.startsWith(\"@Default=\")) {\r\n item[field.column_name] = defaultValue.replace(\"@Default=\", \"\");\r\n }\r\n\r\n if (defaultValue.startsWith(\"@JS=\")) {\r\n var fn = Function(defaultValue.replace(\"@JS=\", \"\"));\r\n item[field.column_name] = fn();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n form.setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/detailreport',[\r\n\t\"app\",\r\n\t\"locale\",\r\n\t\"views/forms/infowindow\",\r\n\t\"views/forms/window\"\r\n],function(app,_,infowindow,windowform){\r\n\tvar editmode = 0;\r\n\tvar tableId = 0;\r\n\r\n\tvar contextmenu = webix.ui({\r\n view:\"contextmenu\",\r\n id:\"ctxMenuDetail\",\r\n on:{\r\n onMenuItemClick:function(id){\r\n var item = this.getItem(id);\r\n\r\n if (id==\"SUACTGOCDETAIL\"){\r\n var table =this.getContext().obj;\r\n var row = table.getSelectedItem(); \r\n\r\n var sql = \"SELECT TOP 1 a.* FROM VC_WINDOW a WHERE a.ma_ct='\"+row.MA_CT+\"'\";\r\n var url = app.config.host + \"/api/System/ExecuteQuery?sql=\" + sql;\r\n\r\n\t\t\t\t\t\tvar ajax = webix.ajax();\r\n\t\t\t\t\t\tajax.master = table;\r\n\r\n ajax.get(url,function(text){\r\n var json = JSON.parse(text);\r\n var data = json[0];\r\n \r\n var table = this;\r\n var row = table.getSelectedItem();\r\n\r\n var a = webix.ajax(app.config.host + \"/api/System/GetDataById?window_id=\"+data.WINDOW_ID + \"&id=\"+row.DOC_ID);\r\n var b = webix.ajax(app.config.host + \"/api/System/GetAllByWindowNo?window_id=\"+ data.WINDOW_ID);\r\n\t\t\t\t\t\t\tvar c = table.config.id;\r\n\r\n webix.promise.all([a,b,c]).then(function(results){\r\n var a_result = results[0].json();\r\n var windowconfig = results[1].json();\r\n\r\n var vc_window = windowconfig[\"data\"][0];\r\n windowform.$ui.id = vc_window.WINDOW_ID;\r\n\r\n var table = $$(c);\r\n var detailForm = table.$scope.ui(windowform.$ui);\r\n \r\n var item = a_result.data[0]; \r\n \r\n windowform.initUI(windowconfig);\r\n windowform.setEditMode(2);\r\n windowform.setValues(item,windowconfig);\r\n \r\n detailForm.show();\r\n });\r\n \r\n });\r\n }\r\n else {\r\n var ctx =this.getContext();\r\n\r\n detailreport.$ui.id = \"dtrp_\"+ item.MENU_ID;\r\n detailreport.$ui.parentParameter = ctx.obj.config.rpParameter.parameters;\r\n detailreport.$ui.parentRow = ctx.obj.getSelectedItem();\r\n\r\n this.hide();\r\n\r\n var win = ctx.obj.$scope.ui(detailreport.$ui);\r\n detailreport.initUI(item);\r\n win.show();\r\n }\r\n \r\n\r\n \r\n }\r\n }\r\n });\r\n\r\n\r\n\tfunction initData(windowId,tableId,infoWindowId,report_id){\r\n\r\n\t\tvar win = $$(windowId);\r\n\t\tvar table = win.getChildViews()[1].getChildViews()[1];\r\n\r\n\t\tvar menuitem = win.config.menuitem;\r\n\r\n\t\tvar parentParamter = win.config.parentParameter;\r\n\t\tvar parentRow = win.config.parentRow;\r\n\r\n\t\tinfowindow.$ui.id = infoWindowId;\r\n\t\tinfowindow.$ui.report_id = report_id;\r\n\t\tinfowindow.$ui.editmode = 1;\r\n\t\tinfowindow.$ui.load_event = \"loadDetailReport\";\r\n\t\tinfowindow.$ui.menuitem = menuitem;\r\n\r\n\t\tvar parameters = menuitem.PARAMETERS\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t.split(';');\r\n\r\n\t\tvar item = {};\r\n\r\n\t\tfor(var i=0;i\" + _(col.REPORTCOLUMN_NAME) +\"\",\r\n\t\t\t\t\t\twidth: col.REPORTCOLUMN_WIDTH,\r\n\t\t\t\t\t\thidden: col.HIDDEN == \"C\" ? true : false\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tif (col.HEADER!=null){\r\n\t\t\t\t\t\tif (col.HEADER!=\"\"){\r\n\t\t\t\t\t\t\tvar headers = JSON.parse(col.HEADER);\r\n\r\n\t\t\t\t\t\t\tfor(var j=0;j\" + _(hd.text) +\"\";\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\titem.header = headers;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (col.COLUMN_TYPE == \"VC_DATE\"){\r\n\t\t\t\t\t\titem.format = function(text) {\r\n\t\t\t\t\t\t\tvar format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n\t\t\t\t\t\t\ttext = removeTimeZoneT(text); \r\n\t\t\t\t\t\t\treturn format(text);\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (col.COLUMN_TYPE == \"VC_TYGIA\" || col.COLUMN_TYPE == \"VC_TIEN\"){\r\n\t\t\t\t\t\titem.css = { \"text-align\" : \"right\" };\r\n\t\t\t\t\t\titem.format = webix.Number.numToStr({\r\n\t\t\t\t\t\t\t\tgroupDelimiter:\",\",\r\n\t\t\t\t\t\t\t\tgroupSize:3,\r\n\t\t\t\t\t\t\t\tdecimalDelimiter:\".\",\r\n\t\t\t\t\t\t\t\tdecimalSize:0\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcols.push(item);\r\n\t\t\t\t}\r\n\r\n\t\t\t\r\n\t\t\t\ttable.config.columns = cols;\r\n\t\t\t\ttable.config.report_id = json[0][\"VC_REPORT_id\"];\r\n\t\t\t\ttable.config.infowindow_id = json[0][\"INFOWINDOW_ID\"];\r\n\r\n\t\t\t\ttable.refreshColumns();\t\r\n\t\t\t\t\r\n\t\t\t\tinitData(win.config.id,table.config.id,json[0][\"INFOWINDOW_ID\"],json[0][\"VC_REPORT_id\"]);\r\n\r\n\t\t\t});\r\n\t\t},\r\n\t\t$oninit: function(view,$scope) {\r\n\t\t\t\r\n\t\t\t $scope.on(app, \"loadDetailReport\", function(report_id,infoWindowId,item,menuitem){\r\n\t\t\t\t\r\n var win = $$(infoWindowId);\r\n\t\t\t\tvar table = win.getChildViews()[1].getChildViews()[1];\r\n\r\n if (table.config.report_id == report_id){\r\n\r\n var rpParameter={\r\n parameters: item,\r\n infowindow_id: infoWindowId,\r\n type: \"json\",\r\n report_id: report_id\r\n };\r\n\r\n table.config.rpParameter = rpParameter;\r\n\r\n webix.ajax()\r\n .headers({'Content-type':'application/json'})\r\n .post( app.config.host + \"/api/System/CreateReport\", rpParameter, function(text){\r\n var data = JSON.parse(text);\r\n\r\n var table = $$(\"tblReport\");\r\n table.clearAll();\r\n table.parse(data,\"json\");\r\n });\r\n }\r\n\r\n \r\n });\r\n }\r\n\t};\r\n\r\n});\ndefine('views/baocao_bangkebienlai',[\"app\", \"locale\", \"views/forms/infowindow\", \"views/forms/detailreport\", \"views/forms/window\", \"models/user\"], function (app, _, infowindow, detailreport, windowform, user) {\r\n \r\n\r\n var windowno = app.path[1].params[0];\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"fas fa-refresh\",\r\n // css: \"webix_secondary\",\r\n // label: _(\"REFRESH\"),\r\n // width: 95,\r\n on: {\r\n onClick: function () {\r\n //console.log($$(\"cbReport\").getValue());\r\n \r\n if ($$(\"cbReport\").getValue() == null || $$(\"cbReport\").getValue() == \"\") {\r\n webix.message(\"Bạn chưa chọn báo cáo !\", \"error\");\r\n return;\r\n }\r\n var cbReport = webix.$$(\"cbReport\");\r\n var list = cbReport.getList();\r\n\r\n var item = list.getItem(cbReport.getValue());\r\n\r\n infowindow.$ui.id = item.wb_infowindow_id;\r\n infowindow.$ui.report_id = cbReport.getValue();\r\n infowindow.$ui.load_event = \"loadReport\";\r\n\r\n if ($$(\"tblReportBangKe\").config.rpParameter != null) {\r\n infowindow.$ui.editmode = 1;\r\n infowindow.$ui.formvalues = $$(\"tblReportBangKe\").config.rpParameter.parameters;\r\n } else {\r\n infowindow.$ui.editmode = 0;\r\n infowindow.$ui.formvalues = null;\r\n }\r\n\r\n var wininfoparam = this.$scope.ui(infowindow.$ui);\r\n\r\n infowindow.initUI(item.wb_infowindow_id);\r\n wininfoparam.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \" (PDF)\" + \"\",\r\n id: \"btnPrint\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-print\",\r\n // label: _(\"PRINT\") + \" PDF\",\r\n // width: 70,\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"tblReportBangKe\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n rpParameter.type = \"PDF\";\r\n\r\n if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang in báo cáo ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/System/CreateReport\",\r\n rpParameter,\r\n {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n window.open(fileURL, \"_blank\");\r\n },\r\n }\r\n // function (text, data) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n // webix.modalbox.hide(box);\r\n // window.open(fileURL, '_blank');\r\n // }\r\n );\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"EXPORT_EXCEL\") + \"\",\r\n id: \"btnExport\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-file\",\r\n // label: _(\"EXPORT_EXCEL\"),\r\n // width: 120,\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"tblReportBangKe\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n rpParameter.type = \"xlsx\";\r\n\r\n if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang kết xuất Excel ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/System/CreateReport\",\r\n rpParameter,\r\n {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n //var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n var reportItem = $$(\"cbReport\").getList().getSelectedItem();\r\n\r\n if (reportItem != null) {\r\n var export_name = reportItem.export_name;\r\n webix.html.download(file, export_name + \".xlsx\");\r\n }\r\n },\r\n }\r\n );\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n {\r\n id: \"cbReport\",\r\n view: \"combo\",\r\n width: 450,\r\n label: \"Chọn báo cáo\",\r\n labelWidth: 90,\r\n suggest: {\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n var parameters = {\r\n command: \"CM00097\",\r\n parameter: {\r\n window_id: windowno,\r\n username: user.getCurrentUser(),\r\n },\r\n };\r\n\r\n webix.ajax().bind(view).headers({ \"Content-Type\": \"application/json\" }).post(url, parameters, callback);\r\n },\r\n },\r\n template: \"#name#\",\r\n body: {\r\n template: \"#name#\",\r\n },\r\n },\r\n on: {\r\n onChange: function () {\r\n var report_id = this.getValue();\r\n\r\n if (report_id == \"\") {\r\n return;\r\n }\r\n var name = $$(\"cbReport\").getText();\r\n\r\n webix.$$(\"title\").parse({ title: name, details: name });\r\n initTable(report_id);\r\n },\r\n },\r\n },\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"tblReportBangKe\",\r\n view: \"treetable\",\r\n resizeColumn: true,\r\n select: true,\r\n css: \"report\",\r\n columns: [],\r\n headermenu: {\r\n width: 200,\r\n autoheight: false,\r\n scroll: true,\r\n },\r\n scheme: {\r\n $change: function (item) {\r\n if (item.BOLD == \"C\") item.$css = \"rowBold\";\r\n },\r\n $group: {\r\n by: \"nhom\"\r\n },\r\n },\r\n pager: \"pagerA\",\r\n on: {\r\n onBeforeContextMenu: function (id) {\r\n var item = this.getItem(id);\r\n\r\n if (item.DOC_ID != null && item.MA_CT != null) {\r\n var mn = $$(\"ctxMenu\");\r\n var menuitem = mn.getItem(\"SUACTGOC\");\r\n if (menuitem == null) {\r\n mn.add({ id: \"SUACTGOC\", value: \"Sửa chứng từ\" });\r\n }\r\n }\r\n\r\n webix.delay(function () {\r\n this.clearSelection();\r\n this.select(id.row, id.column);\r\n }, this);\r\n },\r\n },\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var contextmenu = webix.ui({\r\n view: \"contextmenu\",\r\n id: \"ctxMenu\",\r\n on: {\r\n onMenuItemClick: function (id) {\r\n var item = this.getItem(id);\r\n\r\n if (id == \"SUACTGOC\") {\r\n var table = $$(\"tblReportBangKe\");\r\n var row = table.getSelectedItem();\r\n\r\n var sql = \"SELECT TOP 1 a.* FROM VC_WINDOW a WHERE a.ma_ct='\" + row.MA_CT + \"'\";\r\n var url = app.config.host + \"/api/System/ExecuteQuery?sql=\" + sql;\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = json[0];\r\n\r\n var table = $$(\"tblReportBangKe\");\r\n var row = table.getSelectedItem();\r\n\r\n var a = webix.ajax(app.config.host + \"/api/System/GetDataById?window_id=\" + data.WINDOW_ID + \"&id=\" + row.DOC_ID);\r\n var b = webix.ajax(app.config.host + \"/api/System/GetAllByWindowNo?window_id=\" + data.WINDOW_ID);\r\n\r\n webix.promise.all([a, b]).then(function (results) {\r\n var a_result = results[0].json();\r\n var windowconfig = results[1].json();\r\n\r\n var vc_window = windowconfig[\"data\"][0];\r\n windowform.$ui.id = vc_window.WINDOW_ID;\r\n\r\n var table = $$(\"tblReportBangKe\");\r\n var detailForm = table.$scope.ui(windowform.$ui);\r\n\r\n var item = a_result.data[0];\r\n\r\n windowform.initUI(windowconfig);\r\n windowform.setEditMode(2);\r\n windowform.setValues(item, windowconfig);\r\n\r\n detailForm.show();\r\n });\r\n });\r\n } else {\r\n var ctx = this.getContext();\r\n\r\n detailreport.$ui.id = \"dtrp_\" + item.MENU_ID;\r\n detailreport.$ui.parentParameter = ctx.obj.config.rpParameter.parameters;\r\n detailreport.$ui.parentRow = ctx.obj.getSelectedItem();\r\n\r\n this.hide();\r\n\r\n var win = ctx.obj.$scope.ui(detailreport.$ui);\r\n detailreport.initUI(item);\r\n win.show();\r\n }\r\n },\r\n },\r\n });\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n type: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n function initTable(report_id) {\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n var parameters = {\r\n command: \"CM00012\",\r\n parameter: {\r\n wb_report_id: report_id,\r\n },\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, parameters, function (text) {\r\n var json = JSON.parse(text);\r\n var table = webix.$$(\"tblReportBangKe\");\r\n\r\n table.clearAll();\r\n table.config.rpParameter = null;\r\n\r\n var cols = [];\r\n var isFooter = false;\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n var col = json[i];\r\n //console.log(col);\r\n\r\n var item = {\r\n id: col.value_field,\r\n header: \"
\" + _(col.header_title) + \"
\",\r\n width: col.width,\r\n hidden: col.hidden == \"C\" ? true : false,\r\n };\r\n\r\n // cột tổng dưới footer\r\n if (col.footer === \"\" || col.footer === null) {\r\n } else {\r\n var temp = JSON.parse(col.footer);\r\n item.footer = temp;\r\n\r\n isFooter = true;\r\n }\r\n\r\n //console.log(col.sum);\r\n if (col.header != null) {\r\n if (col.header != \"\") {\r\n var headers = JSON.parse(col.header);\r\n\r\n for (var j = 0; j < headers.length; j++) {\r\n var hd = headers[j];\r\n if (hd != null) {\r\n hd.text = \"
\" + _(hd.text) + \"
\";\r\n }\r\n }\r\n\r\n item.header = headers;\r\n }\r\n }\r\n\r\n if (col.data_type == \"datetime\" || col.data_type == \"date\") {\r\n item.format = function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (col.data_type == \"decimal\" || col.data_type == \"int\" || col.data_type == \"integer\" || col.data_type == \"numeric\") {\r\n item.css = { \"text-align\": \"right\" };\r\n item.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n });\r\n }\r\n\r\n if (col.data_type == \"boolean\") {\r\n item.template = function (obj, common, value) {\r\n if (value) return \"
\";\r\n else return \"
\";\r\n };\r\n }\r\n\r\n if (col.value_field == \"nlap\" && col.wb_report_id == \"7fdfab2b-9508-4471-98e0-96d36443ab08\") {\r\n item.template = function (obj, common) {\r\n if (obj.$level == 1) return common.treetable(obj, common) + \"\" + obj.value + \" ( \" + obj.$count + \" )\" + \"\";\r\n return obj.nlap;\r\n };\r\n }\r\n\r\n if (col.value_field == \"ord\") {\r\n item.sort = \"int\";\r\n }\r\n\r\n cols.push(item);\r\n }\r\n\r\n table.define(\"footer\", isFooter);\r\n\r\n table.config.columns = cols;\r\n table.config.report_id = json[0][\"wb_report_id\"];\r\n table.refreshColumns();\r\n });\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var windowno = app.path[1].params[0];\r\n var query = \"SELECT * FROM #SCHEMA_NAME#.wb_menu WHERE window_code='\" + windowno + \"' LIMIT 1\";\r\n\r\n var url = app.config.host + \"/System/ExecuteQuery?sql=\" + encodeURIComponent(query);\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.length > 0) {\r\n var title = $$(\"title\");\r\n\r\n if (title != undefined && title != null) {\r\n title.parse({ title: json[0][\"name\"], details: json[0][\"details\"] });\r\n }\r\n }\r\n });\r\n\r\n if (app.path[1].params[1] != null) {\r\n var id = app.path[1].params[1];\r\n $$(\"cbReport\").setValue(id);\r\n\r\n var load_event = \"loadReport\";\r\n var report_id = \"d13001df-01fe-4d4f-ab65-cc98e7b41661\";\r\n var id = \"5accccd3-51bd-4370-b130-b01ab35d6c86\";\r\n\r\n var now = new Date();\r\n now.setHours(0, 0, 0, 0);\r\n\r\n var item = {\r\n ma_dvcs: user.getDvcsID(),\r\n tu_ngay: null,\r\n den_ngay: now,\r\n };\r\n\r\n var table = $$(\"tblReportBangKe\");\r\n table.report_id = report_id;\r\n\r\n var rpParameter = {\r\n parameters: item,\r\n infowindow_id: id,\r\n type: \"json\",\r\n report_id: report_id,\r\n };\r\n\r\n table.config.rpParameter = rpParameter;\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/CreateReport\", rpParameter, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n var table = $$(\"tblReportBangKe\");\r\n table.clearAll();\r\n table.parse(data, \"json\");\r\n });\r\n }\r\n\r\n $scope.on(app, \"loadReport\", function (report_id, infoWindowId, item) {\r\n var table = $$(\"tblReportBangKe\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n if (table.config.report_id == report_id) {\r\n var rpParameter = {\r\n parameters: item,\r\n infowindow_id: infoWindowId,\r\n type: \"json\",\r\n report_id: report_id,\r\n };\r\n\r\n table.config.rpParameter = rpParameter;\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/CreateReport\", rpParameter, function (text) {\r\n webix.delay(\r\n function () {\r\n var data = JSON.parse(text);\r\n\r\n var table = $$(\"tblReportBangKe\");\r\n table.clearAll();\r\n table.parse(data, \"json\");\r\n },\r\n null,\r\n null,\r\n 1000\r\n );\r\n\r\n table.enable();\r\n table.hideProgress();\r\n // var data = JSON.parse(text);\r\n\r\n // var table = $$(\"tblReportBangKe\");\r\n // table.clearAll();\r\n // table.parse(data, \"json\");\r\n });\r\n }\r\n });\r\n\r\n $scope.on(app, \"loadDetailReport\", function (report_id, infoWindowId, item, menuitem) {\r\n var win = $$(\"dtrp_\" + menuitem.MENU_ID);\r\n var table = win.getChildViews()[1].getChildViews()[1];\r\n\r\n if (table.config.report_id == report_id) {\r\n var rpParameter = {\r\n parameters: item,\r\n infowindow_id: infoWindowId,\r\n type: \"json\",\r\n report_id: report_id,\r\n };\r\n\r\n table.config.rpParameter = rpParameter;\r\n\r\n var ajax = webix.ajax();\r\n ajax.master = menuitem;\r\n\r\n ajax.headers({ \"Content-type\": \"application/json\" }).post(app.config.host + \"/api/System/CreateReport\", rpParameter, function (text) {\r\n var win = $$(\"dtrp_\" + this.MENU_ID);\r\n var table = win.getChildViews()[1].getChildViews()[1];\r\n \r\n table.clearAll();\r\n var data = JSON.parse(text);\r\n table.parse(data, \"json\");\r\n table.refresh();\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n }\r\n });\r\n },\r\n initUI: function () {},\r\n };\r\n});\r\n\ndefine('views/forms/chukyso',[\"app\", \"locale\"], function (app, _) {\r\n\tvar editmode = 0;\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"chukyso-win\", position: \"center\",\r\n\t\t\thead: \"Thông tin chứng thư số\",\r\n\t\t\t// height: 490,\r\n\t\t\tbody: {\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"chukyso-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\tmargin: 0,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"cer_serial\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tlabel: _(\"SO_SERIAL\"),\r\n\t\t\t\t\t\treadonly: true,\r\n\t\t\t\t\t\tcss: \"mcls_readonly_text\",\r\n\t\t\t\t\t\twidth: 550\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"textarea\",\r\n\t\t\t\t\t\tname: \"subject_name\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tlabel: _(\"SUBJECTNAME\"),\r\n\t\t\t\t\t\treadonly: true,\r\n\t\t\t\t\t\tcss: \"mcls_readonly_text\",\r\n\t\t\t\t\t\theight: 100\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"textarea\",\r\n\t\t\t\t\t\tname: \"issuer\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tlabel: _(\"DONVI\"),\r\n\t\t\t\t\t\tcss: \"mcls_readonly_text\",\r\n\t\t\t\t\t\treadonly: true,\r\n\t\t\t\t\t\theight: 80\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"datepicker\",\r\n\t\t\t\t\t\t\t\tlabel: _(\"NGAY_BAT_DAU\"),\r\n\t\t\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\t\t\tname: \"begin_date\",\r\n\t\t\t\t\t\t\t\ttimepicker: true,\r\n\t\t\t\t\t\t\t\tformat: \"%d/%m/%Y %H:%i:%s\",\r\n\t\t\t\t\t\t\t\tcss: \"mcls_readonly_text\",\r\n\t\t\t\t\t\t\t\treadonly: true\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"datepicker\",\r\n\t\t\t\t\t\t\t\tlabel: _(\"NGAY_KET_THUC\"),\r\n\t\t\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\t\t\tname: \"end_date\",\r\n\t\t\t\t\t\t\t\tformat: \"%d/%m/%Y %H:%i:%s\",\r\n\t\t\t\t\t\t\t\ttimepicker: true,\r\n\t\t\t\t\t\t\t\tcss: \"mcls_readonly_text\",\r\n\t\t\t\t\t\t\t\treadonly: true\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"token_serial\",\r\n\t\t\t\t\t\tlabel: _(\"TOKEN_SERIAL\"),\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tcss: \"mcls_readonly_text\",\r\n\t\t\t\t\t\treadonly: true\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"signer\",\r\n\t\t\t\t\t\tlabel: _(\"NGUOI_KY\"),\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t/* {\r\n\t\t\t\t\t\tview: \"checkbox\",\r\n\t\t\t\t\t\tname: \"chon\",\r\n\t\t\t\t\t\tlabel: _(\"CHON\"),\r\n\t\t\t\t\t\tcheckValue: true,\r\n\t\t\t\t\t\tuncheckValue: false,\r\n\t\t\t\t\t}, */\r\n\t\t\t\t\t{},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tshortcut: \"F10\", view: \"button\", label: \"Lưu (F10)\", type: \"form\", align: \"center\", width: 120,\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"chukyso-form\");\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar khData = {};\r\n\r\n\t\t\t\t\t\t\t\t\t\tkhData.windowid = app.path[1].params[0];\r\n\t\t\t\t\t\t\t\t\t\tkhData.editmode = editmode;\r\n\t\t\t\t\t\t\t\t\t\tkhData.data = [];\r\n\r\n\t\t\t\t\t\t\t\t\t\tkhData.data.push(item);\r\n\r\n\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t.post(app.config.host + \"/System/Save\", khData, function (text) {\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar json = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!json.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"chukyso-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tapp.callEvent(\"dataChanged\", [editmode, json.data]);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(json.error);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", type: \"danger\", align: \"center\", width: 120,\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\twebix.$$(\"chukyso-win\").close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t]\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tsetEditMode: function (mode) {\r\n\t\t\teditmode = mode;\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/chukyso',[\"app\", \"views/forms/chukyso\", \"locale\", \"views/modules/minvoiceplugin\"], function (app, dmwindowform, _, plugin) {\r\n \r\n\r\n var op = [];\r\n\r\n webix.$$(\"title\").parse({ title: \"Đăng ký chứng thư số\", details: \"Danh sách chứng thư số\" });\r\n\r\n var controls = [\r\n {\r\n id: \"btnPlus\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-plus\",\r\n label: _(\"THEM\") + \" (F4)\",\r\n width: 85,\r\n css: \"webix_secondary\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(\r\n url,\r\n {\r\n command: \"CM00019\",\r\n parameter: {\r\n ma_dvcs: \"\",\r\n },\r\n },\r\n function (text) {\r\n var array = JSON.parse(text);\r\n\r\n var kytaptrung = \"\";\r\n var server_cert = \"\";\r\n\r\n for (var i = 0; i < array.length; i++) {\r\n var item = array[i];\r\n\r\n if (item.code == \"KYTAPTRUNG\") {\r\n kytaptrung = item.value;\r\n }\r\n\r\n if (item.code == \"FILE\") {\r\n kytaptrung = item.value;\r\n }\r\n\r\n if (item.code == \"SERVER_CERT\") {\r\n server_cert = item.value;\r\n }\r\n }\r\n\r\n if (kytaptrung == \"C\") {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n\r\n var item = {\r\n certs: table.serialize(),\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Token/SaveCerts\", item, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var table = $$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n webix.modalbox.hide();\r\n } else {\r\n webix.message(json.error);\r\n }\r\n });\r\n break;\r\n }\r\n },\r\n });\r\n\r\n var popupText = document.getElementsByClassName(\"webix_popup_text\")[0];\r\n popupText.style.paddingTop = 0;\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"so_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subjectname\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"ngaybatdau\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"ngayketthuc\",\r\n header: _(\"NGAY_HET_HAN\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"tokenSerial\",\r\n header: _(\"TOKEN_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: server_cert + \"/Token/AllCertificates\",\r\n });\r\n } else {\r\n if (kytaptrung == \"FILE\") {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n\r\n var item = {\r\n certs: table.serialize(),\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Token/SaveChukysoFile\", item, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var table = $$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n webix.modalbox.hide();\r\n } else {\r\n webix.message(json.error);\r\n }\r\n });\r\n break;\r\n }\r\n },\r\n });\r\n\r\n var popupText = document.getElementsByClassName(\"webix_popup_text\")[0];\r\n popupText.style.paddingTop = 0;\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"serial_number\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 250,\r\n },\r\n {\r\n id: \"file_path\",\r\n header: _(\"Đường dẫn\"),\r\n width: 250,\r\n },\r\n // {\r\n // id: \"pass\",\r\n // header: _(\"Mật khẩu\"),\r\n // type:\"password\",\r\n // editor:\"password\",\r\n // width: 200\r\n // }\r\n ],\r\n url: app.config.host + \"/Token/AllCertificatesFile\",\r\n });\r\n } else {\r\n var hub = plugin.hub();\r\n\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var callback = json.callback;\r\n\r\n if (callback == \"RegisterCert\") {\r\n var item = {\r\n chon: true,\r\n so_serial: json.data.so_serial,\r\n subjectname: json.data.subjectname,\r\n issuer: json.data.issuer,\r\n ngaybatdau: json.data.ngaybatdau,\r\n ngayketthuc: json.data.ngayketthuc,\r\n tokenSerial: \"\",\r\n };\r\n\r\n var certs = [];\r\n certs.push(item);\r\n\r\n var parameter = {\r\n certs: certs,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Token/SaveCerts\", parameter, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var table = $$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(json.error);\r\n }\r\n });\r\n }\r\n }\r\n });\r\n\r\n var arg = {\r\n callback: \"RegisterCert\",\r\n };\r\n\r\n hub.invoke(\"execCommand\", arg.callback, JSON.stringify(arg));\r\n }\r\n }\r\n }\r\n );\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-edit\",\r\n label: _(\"SUA\") + \" (F3)\",\r\n width: 80,\r\n css: \"webix_secondary\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmwindowform.$ui);\r\n var form = webix.$$(\"chukyso-form\");\r\n\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n //var chon = item.chon;\r\n\r\n //item.chon = chon == true ? \"true\" : \"false\";\r\n\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n\r\n item.begin_date = removeTimeZoneT(item.begin_date);\r\n item.end_date = removeTimeZoneT(item.end_date);\r\n\r\n form.setValues(item);\r\n\r\n dmwindowform.setEditMode(2);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnDelete\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-trash-o\",\r\n css: \"webix_secondary\",\r\n label: _(\"XOA\") + \" (F8)\",\r\n width: 80,\r\n //css:\"button_raised\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n var khData = {};\r\n khData.windowid = app.path[1].params[0];\r\n khData.editmode = 3;\r\n khData.data = [];\r\n khData.data.push(item);\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \" + item.cer_serial,\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/Save\", khData, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error);\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-file-text-o\",\r\n css: \"webix_secondary\",\r\n label: \"Tải file\",\r\n width: \"90\",\r\n on: {\r\n onClick: function () {\r\n var form = {\r\n view: \"form\",\r\n elements: [\r\n {\r\n id: \"txtPass\",\r\n view: \"text\",\r\n label: \"Mật khẩu\",\r\n labelPosition: \"top\",\r\n required: true,\r\n type: \"password\",\r\n },\r\n {\r\n view: \"uploader\",\r\n id: \"upl1\",\r\n autosend: false,\r\n value: \"Chọn file\",\r\n link: \"mylist\",\r\n upload: app.config.host + \"/Token/UploadCertFile\",\r\n },\r\n {\r\n view: \"list\",\r\n id: \"mylist\",\r\n type: \"uploader\",\r\n autoheight: true,\r\n borderless: true,\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Lưu file\",\r\n type: \"form\",\r\n click: function () {\r\n var formData = {\r\n pass: $$(\"txtPass\").getValue(),\r\n };\r\n\r\n $$(\"upl1\").define(\"formData\", formData);\r\n\r\n $$(\"upl1\").send(function (res) {\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n webix.message(\"Đã tải thành công\");\r\n\r\n var win = $$(\"upl1\").getTopParentView();\r\n win.close();\r\n\r\n var table = $$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Hủy bỏ\",\r\n type: \"danger\",\r\n shortcut: \"esc\",\r\n click: function () {\r\n var win = this.getTopParentView();\r\n win.close();\r\n },\r\n },\r\n ],\r\n };\r\n\r\n var comp = {\r\n view: \"window\",\r\n position: \"center\",\r\n modal: true,\r\n head: \"Đăng ký File chứng thư số\",\r\n body: form,\r\n };\r\n\r\n var win = this.$scope.ui(comp);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"mdi mdi-sim\",\r\n css: \"webix_secondary\",\r\n label: \"Thêm Sim PKI\",\r\n width: \"120\",\r\n on: {\r\n onClick: function () {\r\n var form = {\r\n id: \"formSimPKI\",\r\n view: \"form\",\r\n elements: [\r\n {\r\n id: \"txtPhone\",\r\n view: \"text\",\r\n label: \"Số điện thoại\",\r\n labelPosition: \"top\",\r\n required: true,\r\n name: \"txtPhone\",\r\n validate: function (value) {\r\n return /([0-9]{9,13})/.test(value);\r\n },\r\n invalidMessage: \"Định dạng điện thoại không đúng, ví dụ: 0862262040\",\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Lưu\",\r\n type: \"form\",\r\n click: function () {\r\n var form = this.getParentView();\r\n if (form.validate() == false) {\r\n return;\r\n }\r\n var formData = {\r\n phone: $$(\"txtPhone\").getValue(),\r\n };\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Token/SaveSimPKI\", formData, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var table = $$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n var win = $$(\"modalSimPKI\");\r\n win.close();\r\n } else {\r\n webix.message(json.error);\r\n }\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Hủy bỏ\",\r\n type: \"danger\",\r\n shortcut: \"esc\",\r\n click: function () {\r\n var win = this.getTopParentView();\r\n win.close();\r\n },\r\n },\r\n ],\r\n };\r\n var comp = {\r\n id: \"modalSimPKI\",\r\n view: \"window\",\r\n position: \"center\",\r\n modal: true,\r\n head: \"Thêm số sim PKI\",\r\n body: form,\r\n };\r\n\r\n var win = this.$scope.ui(comp);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"mdi mdi-certificate\",\r\n // css: \"webix_secondary\",\r\n // label: \"Thêm HSM NCCA\",\r\n // width: \"130\",\r\n // on: {\r\n // onClick: function () {\r\n // var form = {\r\n // id: \"formHSM\",\r\n // view: \"form\",\r\n // elements: [\r\n // {\r\n // id: \"token_serial\",\r\n // view: \"text\",\r\n // label: \"Mã UUID\",\r\n // labelPosition: \"top\",\r\n // required: true,\r\n // name: \"token_serial\",\r\n // css:\"mcls_uppercase\",\r\n // // validate: function (value) {\r\n // // return /([0-9]{9,13})/.test(value);\r\n // // },\r\n // // invalidMessage: \"Định dạng điện thoại không đúng, ví dụ: 0862262040\",\r\n // },\r\n // {\r\n // id: \"pass\",\r\n // view: \"text\",\r\n // label: \"Pass code\",\r\n // labelPosition: \"top\",\r\n // required: true,\r\n // name: \"pass\",\r\n // css:\"mcls_uppercase\",\r\n // // validate: function (value) {\r\n // // return /([0-9]{9,13})/.test(value);\r\n // // },\r\n // // invalidMessage: \"Định dạng điện thoại không đúng, ví dụ: 0862262040\",\r\n // },\r\n // {\r\n // view: \"button\",\r\n // label: \"Lưu\",\r\n // type: \"form\",\r\n // click: function () {\r\n // var form = this.getParentView();\r\n // if (form.validate() == false) {\r\n // return;\r\n // }\r\n // var formData = $$(\"formHSM\").getValues();\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-type\": \"application/json\" })\r\n // .post(app.config.host + \"/Token/SaveHSM_NCCA\", formData, function (text) {\r\n // var json = JSON.parse(text);\r\n\r\n // if (!json.hasOwnProperty(\"error\")) {\r\n // var table = $$(\"dmwindowData\");\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n // var win = $$(\"modelHSM\");\r\n // win.close();\r\n // } else {\r\n // webix.message(json.error, \"error\");\r\n // }\r\n // });\r\n // },\r\n // },\r\n // {\r\n // view: \"button\",\r\n // label: \"Hủy bỏ\",\r\n // type: \"danger\",\r\n // shortcut: \"esc\",\r\n // click: function () {\r\n // var win = this.getTopParentView();\r\n // win.close();\r\n // },\r\n // },\r\n // ],\r\n // };\r\n // var comp = {\r\n // id: \"modelHSM\",\r\n // view: \"window\",\r\n // position: \"center\",\r\n // modal: true,\r\n // head: \"Thêm HSM NCCA\",\r\n // body: form,\r\n // };\r\n\r\n // var win = this.$scope.ui(comp);\r\n // win.show();\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"mdi mdi-certificate\",\r\n css: \"webix_secondary\",\r\n label: \"Thêm HSM Khác\",\r\n width: \"150\",\r\n on: {\r\n onClick: function () {\r\n var form = {\r\n id: \"formHSM\",\r\n view: \"form\",\r\n elements: [\r\n {\r\n id: \"token_serial\",\r\n view: \"text\",\r\n label: \"Mã UUID\",\r\n labelPosition: \"top\",\r\n required: true,\r\n name: \"token_serial\",\r\n css:\"mcls_uppercase\",\r\n // validate: function (value) {\r\n // return /([0-9]{9,13})/.test(value);\r\n // },\r\n // invalidMessage: \"Định dạng điện thoại không đúng, ví dụ: 0862262040\",\r\n },\r\n {\r\n id: \"pass\",\r\n view: \"text\",\r\n label: \"Pass code\",\r\n labelPosition: \"top\",\r\n required: true,\r\n name: \"pass\",\r\n css:\"mcls_uppercase\",\r\n // validate: function (value) {\r\n // return /([0-9]{9,13})/.test(value);\r\n // },\r\n // invalidMessage: \"Định dạng điện thoại không đúng, ví dụ: 0862262040\",\r\n },\r\n {\r\n id: \"loai\",\r\n view: \"combo\",\r\n label: \"Loại\",\r\n labelPosition: \"top\",\r\n required: true,\r\n name: \"loai\",\r\n css:\"mcls_uppercase\",\r\n options:[\"NCCA\", \"ICORP\"]\r\n // validate: function (value) {\r\n // return /([0-9]{9,13})/.test(value);\r\n // },\r\n // invalidMessage: \"Định dạng điện thoại không đúng, ví dụ: 0862262040\",\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Lưu\",\r\n type: \"form\",\r\n click: function () {\r\n var form = this.getParentView();\r\n if (form.validate() == false) {\r\n return;\r\n }\r\n var formData = $$(\"formHSM\").getValues();\r\n\r\n var url = \"\";\r\n\r\n switch(formData.loai) {\r\n case \"NCCA\":\r\n url = \"/Token/SaveHSM_NCCA\";\r\n break;\r\n case \"ICORP\":\r\n url = \"/Token/SaveHSM_ICORP\";\r\n break;\r\n }\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + url, formData, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var table = $$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n var win = $$(\"modelHSM\");\r\n win.close();\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Hủy bỏ\",\r\n type: \"danger\",\r\n shortcut: \"esc\",\r\n click: function () {\r\n var win = this.getTopParentView();\r\n win.close();\r\n },\r\n },\r\n ],\r\n };\r\n var comp = {\r\n id: \"modelHSM\",\r\n view: \"window\",\r\n position: \"center\",\r\n modal: true,\r\n head: \"Thêm HSM Khác\",\r\n body: form,\r\n };\r\n\r\n var win = this.$scope.ui(comp);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"mdi mdi-certificate\",\r\n css: \"webix_secondary\",\r\n label: \"Thêm Remote Signing\",\r\n width: \"150\",\r\n on: {\r\n onClick: function () {\r\n var form = {\r\n id: \"formCKSRS\",\r\n view: \"form\",\r\n elements: [\r\n {\r\n id: \"private_number\",\r\n view: \"text\",\r\n label: \"CCCD/CMND/Hộ chiếu/Mã số thuế/Số điện thoại\",\r\n labelPosition: \"top\",\r\n required: true,\r\n name: \"private_number\",\r\n css:\"mcls_uppercase label_CKS\",\r\n width: 300\r\n \r\n },\r\n {\r\n id: \"loaiRS\",\r\n view: \"combo\",\r\n label: \"Loại\",\r\n labelPosition: \"top\",\r\n required: true,\r\n name: \"loai\",\r\n css: \"mcls_uppercase label_type_CKS\",\r\n options: [\r\n { id: \"RS_MOBIFONECA\", value: \"MOBIFONECA\" },\r\n { id: \"RS_NCM\", value: \"NCM\" }\r\n ],\r\n value: \"RS_MOBIFONECA\" \r\n },\r\n {\r\n view: \"button\",\r\n label: \"Lưu\",\r\n type: \"form\",\r\n click: function () {\r\n var pathAPI = $$(\"loaiRS\").getValue() == \"RS_NCM\" ? \"RSNacencom\" : \"RSMobifoneCA\"\r\n var formData = {\r\n user_id: $$(\"private_number\").getValue(),\r\n type: $$(\"loaiRS\").getValue(),\r\n };\r\n if($$(\"private_number\").getValue().trim() == \"\"){\r\n webix.message(\"Số CCCD/CMND/Hộ chiếu/Mã số thuế/Số điện thoại không được để trống\", \"error\");\r\n return;\r\n }\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Token/Save\" + pathAPI, formData, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\") || (json.hasOwnProperty(\"error\") && Object.keys(json).length > 1)) { \r\n var table = $$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n var win = $$(\"modelCKSRS\");\r\n win.close();\r\n debugger\r\n if((json.hasOwnProperty(\"error\") && Object.keys(json).length > 1))\r\n {\r\n var lstError= json.error.split(\";\");\r\n lstError.pop();\r\n for (var i = 0 ; i< lstError.length; i++) {\r\n webix.message(lstError[i], \"error\");\r\n }\r\n }\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Hủy bỏ\",\r\n type: \"danger\",\r\n shortcut: \"esc\",\r\n click: function () {\r\n var win = this.getTopParentView();\r\n win.close();\r\n },\r\n },\r\n ],\r\n };\r\n var comp = {\r\n id: \"modelCKSRS\",\r\n view: \"window\",\r\n position: \"center\",\r\n modal: true,\r\n head: \"Thêm CKS Remote Signing\",\r\n body: form,\r\n };\r\n\r\n var win = this.$scope.ui(comp);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"dmwindowData\",\r\n view: \"datatable\",\r\n select: true,\r\n datafetch: 100,\r\n //loadahead: 15,\r\n on: {\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n },\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/System/GetDataByWindowNo?window_id=\" + windowno;\r\n\r\n if (params == null) {\r\n url = url + \"&start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"&start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n if (column !== undefined) {\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n if (array.length > 0) {\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n } else {\r\n url = url + \"&filter=null\";\r\n }\r\n } else {\r\n url = url + \"&filter=null\";\r\n }\r\n }\r\n\r\n if (view.config.infoparam != null) {\r\n url = url + \"&infoparam=\" + JSON.stringify(view.config.infoparam);\r\n } else {\r\n url = url + \"&infoparam=null\";\r\n }\r\n\r\n var tlbParams = $$(\"tlbParams\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n var item = {\r\n columnName: value_field,\r\n value: $$(id).getValue(),\r\n };\r\n\r\n parameters.push(item);\r\n }\r\n\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n\r\n //console.log(url);\r\n\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n columns: [\r\n { id: \"cer_serial\", header: _(\"SO_SERIAL\"), width: 250 },\r\n { id: \"subject_name\", header: _(\"SUBJECTNAME\"), width: 550 },\r\n { id: \"signer\", header: _(\"NGUOI_KY\"), width: 150 },\r\n { id: \"cert_type\", header: \"Loại\", width: 130 },\r\n /* {\r\n id: \"chon\",\r\n checkValue: \"true\",\r\n uncheckValue: \"false\",\r\n template: function (obj, common, value) {\r\n if (value)\r\n return \"
\";\r\n else\r\n return \"
\";\r\n },\r\n header: _(\"CHON\"),\r\n width: 100\r\n }, */\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_HET_HAN\"),\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n { id: \"issuer\", header: _(\"DONVI\"), width: 550 },\r\n {\r\n id: \"file_name\",\r\n header: \"Tên File\",\r\n width: 120,\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 35,\r\n view: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmwindowData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmwindow,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/modules/dashline_license',[\"app\"], function (app) {\r\n return {\r\n $ui: {\r\n height: 136,\r\n CSS: \"titles\",\r\n borderless: true,\r\n template: function (data) {\r\n var t = null;\r\n\r\n if (data.items == undefined) return \"\";\r\n var items = data.items;\r\n \r\n var html = \"

Thông tin gói hóa đơn

\";\r\n html += \"
\";\r\n\r\n for (var i = 0; i < items.length; i++) {\r\n t = items[i];\r\n\r\n var tien = webix.Number.format(t.tien, {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n });\r\n\r\n var code = \"duyethoadon\";\r\n var params = \"0\" + t.p_id;\r\n\r\n if (t.p_id == \"04\") {\r\n code = \"reportwindow\";\r\n params = \"WIN00022:d13001df-01fe-4d4f-ab65-cc98e7b41661\";\r\n }\r\n html += \"
\";\r\n html +=\r\n \"

\" +\r\n t.dien_giai +\r\n \"

\";\r\n html +=\r\n \"

\" +\r\n tien +\r\n \"

\";\r\n html += \"
\";\r\n }\r\n html += \"
\";\r\n return html;\r\n },\r\n url: app.config.host + \"/Invoice68/DashboardTiles_License\",\r\n },\r\n };\r\n});\r\n\ndefine('views/modules/dashline78_new',[\"app\"], function (app) {\r\n return {\r\n $ui: {\r\n id: 'dashline78_new',\r\n height: 136,\r\n CSS: \"titles\",\r\n borderless: true,\r\n template: function (data) {\r\n var t = null;\r\n \r\n if (data.items == undefined) return \"\";\r\n \r\n var items = data.items;\r\n\r\n var html = \"

Hóa đơn 78

\";\r\n html += \"
\";\r\n\r\n for (var i = 0; i < items.length; i++) {\r\n t = items[i];\r\n\r\n var tien = webix.Number.format(t.tien, {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n });\r\n\r\n var code = \"duyethoadon\";\r\n var params = \"0\" + t.p_id;\r\n\r\n if (t.p_id == \"04\") {\r\n code = \"reportwindow\";\r\n params = \"WIN00022:d13001df-01fe-4d4f-ab65-cc98e7b41661\";\r\n }\r\n html += \"
\";\r\n html +=\r\n \"

\" +\r\n t.dien_giai +\r\n \"

\";\r\n html +=\r\n \"

\" +\r\n tien +\r\n \"

\";\r\n html += \"
\";\r\n }\r\n html += \"
\";\r\n return html;\r\n },\r\n //url: app.config.host + \"/Invoice68/DashboardTiles78New\",\r\n },\r\n };\r\n});\r\n\ndefine('views/modules/dashline_bienlai',[\"app\"], function (app) {\r\n return {\r\n $ui: {\r\n height: 136,\r\n id: 'dashline_bienlai',\r\n CSS: \"titles\",\r\n borderless: true,\r\n template: function (data) {\r\n var t = null;\r\n\r\n if (data.items == undefined) return \"\";\r\n var items = data.items;\r\n\r\n var html = \"

Biên lai

\";\r\n html += \"
\";\r\n \r\n\r\n for (var i = 0; i < items.length; i++) {\r\n t = items[i];\r\n\r\n var tien = webix.Number.format(t.tien, {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n });\r\n\r\n var code = \"duyethoadon\";\r\n var params = \"0\" + t.p_id;\r\n\r\n if (t.p_id == \"04\") {\r\n code = \"reportwindow\";\r\n params = \"WIN00022:d13001df-01fe-4d4f-ab65-cc98e7b41661\";\r\n }\r\n html += \"
\";\r\n html +=\r\n \"

\" +\r\n t.dien_giai +\r\n \"

\";\r\n html +=\r\n \"

\" +\r\n tien +\r\n \"

\";\r\n html += \"
\";\r\n }\r\n html += \"
\";\r\n return html;\r\n },\r\n //url: app.config.host + \"/Invoice68/DashboardTiles_BienLai\",\r\n },\r\n };\r\n});\r\n\ndefine('views/modules/dashline_chungtu',[\"app\"], function (app) {\r\n return {\r\n $ui: {\r\n height: 136,\r\n id: 'dashline_chungtu',\r\n CSS: \"titles\",\r\n borderless: true,\r\n template: function (data) {\r\n var t = null;\r\n\r\n if (data.items == undefined) return \"\";\r\n var items = data.items;\r\n\r\n var html = \"

Chứng từ

\";\r\n html += \"
\";\r\n\r\n for (var i = 0; i < items.length; i++) {\r\n t = items[i];\r\n\r\n var tien = webix.Number.format(t.tien, {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n });\r\n\r\n var code = \"duyethoadon\";\r\n var params = \"0\" + t.p_id;\r\n\r\n if (t.p_id == \"04\") {\r\n code = \"reportwindow\";\r\n params = \"WIN00022:d13001df-01fe-4d4f-ab65-cc98e7b41661\";\r\n }\r\n html += \"
\";\r\n html +=\r\n \"

\" +\r\n t.dien_giai +\r\n \"

\";\r\n html +=\r\n \"

\" +\r\n tien +\r\n \"

\";\r\n html += \"
\";\r\n }\r\n html += \"
\";\r\n return html;\r\n },\r\n //url: app.config.host + \"/Invoice68/DashboardTiles_Chungtu\",\r\n },\r\n };\r\n});\r\n\ndefine('views/modules/chart',[\"app\"], function (app) {\r\n\r\n return {\r\n $ui: {\r\n \"type\": \"clean\",\r\n \"cols\": [\r\n {\r\n rows: [\r\n {\r\n \"template\": \" Doanh thu ( triệu đồng )\",\r\n \"css\": \"sub_title\",\r\n \"height\": 30,\r\n borderless: true\r\n // \"paddingX\": 10,\r\n // \"paddingY\": 10,\r\n // \"margin-left\": 10\r\n },\r\n {\r\n view: \"chart\",\r\n type: \"line\",\r\n barWidth: 165,\r\n radius: 0,\r\n resize: true,\r\n gradient: \"falling\",\r\n // value: \"#hd01#\",a\r\n // label: \"#hd01#\",\r\n preset: \"column\",\r\n //border:false,\r\n borderless: true,\r\n xAxis: {\r\n title: \"Tháng\",\r\n lines: false,\r\n template: \" #thang#\"\r\n },\r\n yAxis: {\r\n // title: \"Years\",\r\n // lines: true,\r\n start: 0,\r\n step: 500,\r\n end: 5000,\r\n template: function (obj) {\r\n return (obj % 500 ? \"\" : obj)\r\n }\r\n },\r\n legend: {\r\n values: [{ text: \"01GTKT\", color: \"#4bbaa4\" }, { text: \"02GTTT\", color: \"#ee9e36\" }, { text: \"03XKNB\", color: \"#36abee\" }, { text: \"07KPTQ\", color: \"#ee3639\" }, { text: \"01BLP\", color: \"#914ad8\" }],\r\n valign: \"middle\",\r\n align: \"right\",\r\n width: 90,\r\n layout: \"y\",\r\n marker: {\r\n type: \"round\",\r\n // width:15,\r\n radius: 3\r\n }\r\n },\r\n eventRadius: 5,\r\n series: [\r\n {\r\n preset: \"column\",\r\n barWidth: 65,\r\n alpha: 1,\r\n value: \"#hd01#\",\r\n color: \"#4bbaa4\",\r\n item: {\r\n // radius: 3,\r\n // type: \"s\",\r\n borderColor: \"#1777ef\",\r\n color: \"#ffffff\"\r\n },\r\n line: {\r\n color: \"#4bbaa4\",\r\n width: 2\r\n },\r\n tooltip: {\r\n template: \"Type: 01GTKT
Value: #hd01#\"\r\n }\r\n },\r\n {\r\n alpha: 0.5,\r\n value: \"#hd02#\",\r\n color: \"#ee9e36\",\r\n item: {\r\n borderColor: \"#1777ef\",\r\n color: \"#ffffff\"\r\n },\r\n line: {\r\n color: \"#ee9e36\",\r\n width: 2\r\n },\r\n tooltip: {\r\n template: \"Type: 02GTTT
Value: #hd02#\"\r\n }\r\n },\r\n {\r\n alpha: 0.5,\r\n value: \"#hd03#\",\r\n color: \"#36abee\",\r\n item: {\r\n borderColor: \"#1777ef\",\r\n color: \"#ffffff\"\r\n },\r\n line: {\r\n color: \"#36abee\",\r\n width: 2\r\n },\r\n tooltip: {\r\n template: \"Type: 03XKNB
Value: #hd03#\"\r\n }\r\n },\r\n {\r\n alpha: 0.5,\r\n value: \"#hd07#\",\r\n color: \"#ee3639\",\r\n item: {\r\n borderColor: \"#1777ef\",\r\n color: \"#ffffff\"\r\n },\r\n line: {\r\n color: \"#ee3639\",\r\n width: 2\r\n },\r\n tooltip: {\r\n template: \"Type: 07KPTQ
Value: #hd07#\"\r\n }\r\n },\r\n {\r\n alpha: 0.5,\r\n value: \"#bienlai#\",\r\n color: \"#914ad8\",\r\n item: {\r\n borderColor: \"#1777ef\",\r\n color: \"#ffffff\"\r\n },\r\n line: {\r\n color: \"#914ad8\",\r\n width: 2\r\n },\r\n tooltip: {\r\n template: \"Type: 01BLP
Value: #bienlai#\"\r\n }\r\n }\r\n ],\r\n url: app.config.host + \"/Invoice/bar_chart\"\r\n }\r\n // {\r\n // view: \"chart\",\r\n // type: \"bar\",\r\n // barWidth: 60,\r\n // // preset:\"column\",\r\n // radius: 2,\r\n // gradient: \"rising\",\r\n // xAxis: {\r\n // template: \"'#thang#\"\r\n // },\r\n // yAxis: {\r\n // start: 0,\r\n // step: 100,\r\n // end: 1000\r\n // },\r\n // legend: {\r\n // values: [{ text: \"01GTKT\", color: \"#58dccd\" }, { text: \"02GTTT\", color: \"#a7ee70\" }, { text: \"03XKNB\", color: \"#36abee\" }, { text: \"07KPTQ\", color: \"red\" }, { text: \"01BLP\", color: \"blue\" }],\r\n // valign: \"middle\",\r\n // align: \"right\",\r\n // width: 90,\r\n // layout: \"y\"\r\n // },\r\n // series: [\r\n // {\r\n // value: \"#hd01#\",\r\n // color: \"#58dccd\",\r\n // tooltip: {\r\n // template: \"#hd01#\"\r\n // }\r\n // },\r\n // {\r\n // value: \"#hd02#\",\r\n // color: \"#a7ee70\",\r\n // tooltip: {\r\n // template: \"#hd02#\"\r\n // }\r\n // },\r\n // {\r\n // value: \"#hd03#\",\r\n // color: \"#36abee\",\r\n // tooltip: {\r\n // template: \"#hd03#\"\r\n // }\r\n // },\r\n // {\r\n // value: \"#hd07#\",\r\n // color: \"#36abee\",\r\n // tooltip: {\r\n // template: \"#hd07#\"\r\n // }\r\n // },\r\n // {\r\n // value: \"#bienlai#\",\r\n // color: \"#36abee\",\r\n // tooltip: {\r\n // template: \"#bienlai#\"\r\n // }\r\n // }\r\n // ],\r\n // url: app.config.host + \"/Invoice/bar_chart\",\r\n // // data: multiple_dataset\r\n // },\r\n ]\r\n }\r\n // {\r\n // rows:\r\n // [\r\n // {\r\n // \"template\": \" Biểu đồ loại hóa đơn\",\r\n // \"css\": \"sub_title\",\r\n // \"height\": 30,\r\n // \"paddingX\": 0,\r\n // \"paddingY\": 10,\r\n // \"margin\": 0\r\n // },\r\n // {\r\n // view: \"chart\",\r\n // type: \"pie\",\r\n // value: \"#soluong#\",\r\n // color: \"#color#\",\r\n // //label: \"#loai#\",\r\n // borderless: true,\r\n // pieInnerText: \"#soluong#\",\r\n // shadow: 0,\r\n // //data: month_dataset,\r\n // url: app.config.host + \"/Invoice/bar_chart2\",\r\n // legend: {\r\n // // width: 75,\r\n // align: \"right\",\r\n // valign: \"middle\",\r\n // template: \"#loai#\"\r\n // }\r\n // }\r\n // ]\r\n\r\n // }\r\n\r\n ]\r\n }\r\n };\r\n\r\n});\ndefine('views/thongbaosso',[\"app\", \"locale\", \"views/forms/link_sso\"], function (app, _, linkSSO) {\r\n\tvar layout = {\r\n\t\tview: \"window\",\r\n\t\tmodal: true,\r\n\t\tid: \"notisso\",\r\n\t\tposition: \"center\",\r\n\t\thead: \"Thông báo\",\r\n\t\twidth: 800,\r\n\t\theight: 400,\r\n\t\tbody: {\r\n\t\t\tview: \"form\",\r\n\t\t\tid: \"notissobody\",\r\n\t\t\telements: [\r\n\t\t\t\t{\r\n\t\t\t\t\ttype: \"clean\",\r\n\t\t\t\t\trows: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tview: \"template\",\r\n\t\t\t\t\t\t\ttemplate: \"
\" +\r\n\t\t\t\t\t\t\t\t\"

Kính gửi Quý khách hàng

\" +\r\n\t\t\t\t\t\t\t\t\"
Nhằm nâng cao chất lượng dịch vụ, MobiFone tiến hành nâng cấp hệ thống Quản lý tài khoản tập trung (SSO) cho các khách hàng sử dụng hệ sinh thái giải pháp số của MobiFone.
\" +\r\n\t\t\t\t\t\t\t\t\"
\" +\r\n\t\t\t\t\t\t\t\t\"
Sau khi hoàn thành liên kết, Quý khách có thể đăng nhập toàn bộ các hệ thống thuộc hệ sinh thái giải pháp của MobiFone bằng một tài khoản duy nhất.
\" +\r\n\t\t\t\t\t\t\t\t\"
\" +\r\n\t\t\t\t\t\t\t\t\"
Thời gian liên kết: Từ ngày 01/04/2024 đến 30/04/2024
\" +\r\n\t\t\t\t\t\t\t\t\"
\" +\r\n\t\t\t\t\t\t\t\t\"
\" +\r\n\t\t\t\t\t\t\t\t\"
\",\r\n\t\t\t\t\t\t\tborderless: false,\r\n\t\t\t\t\t\t\theight: 200\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tview: \"button\",\r\n\t\t\t\t\t\t\ttemplate: \"
Liên kết ngay tại đây
\",\r\n\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\tvar win = this.$scope.ui(linkSSO.$ui);\r\n\t\t\t\t\t\t\t\t\twin.show();\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\theight: 50\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\ttype: \"clean\",\r\n\t\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview: \"template\",\r\n\t\t\t\t\t\t\t\t\ttemplate: \"Xem chi tiết hướng dẫn tại đây\",\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview: \"button\",\r\n\t\t\t\t\t\t\t\t\tvalue: \"Đóng\",\r\n\t\t\t\t\t\t\t\t\twidth: 100,\r\n\t\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\t$$(\"notisso\").hide();\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t]\r\n\t\t\t\t}\r\n\t\t\t]\r\n\t\t}\r\n\t};\r\n\treturn {\r\n\t\t$ui: layout,\r\n\t\tinitUI: function (json) {\r\n\t\t\treturn\r\n\t\t},\r\n\t};\r\n});\ndefine('views/forms/changeweakpass',[\"app\"], function (app) {\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"listuser-win\", position: \"center\", css: \"custom-window\",\r\n\t\t\thead: \"Thiết lập mật khẩu\",\r\n\t\t\tbody: {\r\n\t\t\t\tcss: \"custom-body\",\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\t//elementsConfig:{labelWidth: 120}, \r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"listuser-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{ view: \"template\", template: \"Để tăng cường bảo mật cho hệ thống, quý khách vui lòng đặt mật khẩu mới.\", css: \"notify-text\"},\r\n\t\t\t\t\t{ view: \"template\", template: \"Chú ý: Mật khẩu phải lớn hơn 8 ký tự, có chứa chữ hoa, chữ thường, số và ký tự đặc biệt.\", css: \"notify-text\"},\r\n\t\t\t\t\t{ view: \"text\", id:\"newpass\", name: \"newpass\", required: true, invalidMessage: \"Mật khẩu mới không được bỏ trống\", type: \"password\", label: \"Mật khẩu mới\", labelPosition: \"top\" , css:\"custom-input\", icon: \"fa fa-eye\", \r\n\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\tonItemClick: function (id, e) {\r\n\t\t\t\t\t\t\t\t// Kiểm tra xem người dùng có click vào biểu tượng không\r\n\t\t\t\t\t\t\t\tif (e.target && e.target.classList.contains(\"webix_input_icon\")) {\r\n\t\t\t\t\t\t\t\t\tvar inputNode = $$(\"newpass\").getInputNode(); // Lấy node input\r\n\t\t\t\t\t\t\t\t\tvar inputType = inputNode.type; // Kiểm tra loại của input (password hoặc text)\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t// Thay đổi loại input và biểu tượng tương ứng\r\n\t\t\t\t\t\t\t\t\tif (inputType === \"password\") {\r\n\t\t\t\t\t\t\t\t\t\tinputNode.type = \"text\"; // Hiển thị mật khẩu\r\n\t\t\t\t\t\t\t\t\t\twebix.html.removeCss(e.target, \"fa-eye\");\r\n\t\t\t\t\t\t\t\t\t\twebix.html.addCss(e.target, \"fa-eye-slash\"); // Thêm biểu tượng mắt đóng\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tinputNode.type = \"password\"; // Ẩn mật khẩu\r\n\t\t\t\t\t\t\t\t\t\twebix.html.removeCss(e.target, \"fa-eye-slash\");\r\n\t\t\t\t\t\t\t\t\t\twebix.html.addCss(e.target, \"fa-eye\"); // Thêm biểu tượng mắt mở\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tonBlur: function() {\r\n\t\t\t\t\t\t\t\tvar password = this.getValue();\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t// Password regex: at least 8 characters, including uppercase, lowercase, number, and special character\r\n\t\t\t\t\t\t\t\tvar passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*\\W)[A-Za-z\\d\\W]{8,}$/;\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tvar errorLabel = this.$view.querySelector(\".custom-error-label\");\r\n\t\t\t\t\t\t\t\tif (!errorLabel) {\r\n\t\t\t\t\t\t\t\t\terrorLabel = document.createElement(\"div\");\r\n\t\t\t\t\t\t\t\t\terrorLabel.className = \"custom-error-label\";\r\n\t\t\t\t\t\t\t\t\terrorLabel.style.color = \"red\";\r\n\t\t\t\t\t\t\t\t\terrorLabel.style.marginTop = \"10px\";\r\n\t\t\t\t\t\t\t\t\tthis.$view.appendChild(errorLabel);\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t// Show or hide the error message based on password validity\r\n\t\t\t\t\t\t\t\tif (passwordRegex.test(password)) {\r\n\t\t\t\t\t\t\t\t\terrorLabel.innerText = \"\"; // Clear error if valid\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\terrorLabel.innerText = \"Mật khẩu phải có ít nhất 8 ký tự, bao gồm chữ hoa, chữ thường, số và ký tự đặc biệt.\";\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{ view: \"text\", id:\"confirmpass\", name: \"confirmpass\", required: true, invalidMessage: \"Xác nhận mật khẩu không được bỏ trống\", type: \"password\", label: \"Xác nhận mật khẩu\", labelPosition: \"top\", css:\"custom-input\", icon: \"fa fa-eye\", \r\n\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\tonItemClick: function (id, e) {\r\n\t\t\t\t\t\t\t\t// Kiểm tra xem người dùng có click vào biểu tượng không\r\n\t\t\t\t\t\t\t\tif (e.target && e.target.classList.contains(\"webix_input_icon\")) {\r\n\t\t\t\t\t\t\t\t\tvar inputNode = $$(\"confirmpass\").getInputNode(); // Lấy node input\r\n\t\t\t\t\t\t\t\t\tvar inputType = inputNode.type; // Kiểm tra loại của input (password hoặc text)\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t// Thay đổi loại input và biểu tượng tương ứng\r\n\t\t\t\t\t\t\t\t\tif (inputType === \"password\") {\r\n\t\t\t\t\t\t\t\t\t\tinputNode.type = \"text\"; // Hiển thị mật khẩu\r\n\t\t\t\t\t\t\t\t\t\twebix.html.removeCss(e.target, \"fa-eye\");\r\n\t\t\t\t\t\t\t\t\t\twebix.html.addCss(e.target, \"fa-eye-slash\"); // Thêm biểu tượng mắt đóng\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tinputNode.type = \"password\"; // Ẩn mật khẩu\r\n\t\t\t\t\t\t\t\t\t\twebix.html.removeCss(e.target, \"fa-eye-slash\");\r\n\t\t\t\t\t\t\t\t\t\twebix.html.addCss(e.target, \"fa-eye\"); // Thêm biểu tượng mắt mở\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tonBlur: function() {\r\n\t\t\t\t\t\t\t\tvar password = this.getValue();\r\n\t\t\t\t\t\t\t\tvar passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*\\W)[A-Za-z\\d\\W]{8,}$/;\r\n\t\t\t\t\t\t\t\tvar errorLabel = this.$view.querySelector(\".custom-error-label\");\r\n\t\t\t\t\t\t\t\tif (!errorLabel) {\r\n\t\t\t\t\t\t\t\t\terrorLabel = document.createElement(\"div\");\r\n\t\t\t\t\t\t\t\t\terrorLabel.className = \"custom-error-label\";\r\n\t\t\t\t\t\t\t\t\terrorLabel.style.color = \"red\";\r\n\t\t\t\t\t\t\t\t\terrorLabel.style.marginTop = \"10px\";\r\n\t\t\t\t\t\t\t\t\tthis.$view.appendChild(errorLabel);\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tif (passwordRegex.test(password)) {\r\n\t\t\t\t\t\t\t\t\terrorLabel.innerText = \"\"; // Clear error if valid\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\terrorLabel.innerText = \"Mật khẩu phải có ít nhất 8 ký tự, bao gồm chữ hoa, chữ thường, số và ký tự đặc biệt.\";\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t },\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcss: \"custom-button\",\r\n\t\t\t\t\t\tmargin: 30,\r\n\t\t\t\t\t\tcols: [\t\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", label: \"Lưu (F10)\", hotkey: \"F10\", type: \"form\", align: \"center\", width: 120, click: function () {\r\n\r\n\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"listuser-form\");\r\n\t\t\t\t\t\t\t\t\tdebugger;\r\n\t\t\t\t\t\t\t\t\tif (form.validate() == false) {\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\t\tvar passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*\\W)[A-Za-z\\d\\W]{8,}$/;\r\n\r\n\t\t\t\t\t\t\t\t\tif (!passwordRegex.test(item.newpass) || !passwordRegex.test(item.confirmpass)) {\r\n\t\t\t\t\t\t\t\t\t\twebix.message(\"Mật khẩu phải lớn hơn 8 ký tự, có chứa chữ hoa, chữ thường, số và ký tự đặc biệt!\", \"error\");\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tif (item.newpass != item.confirmpass) {\r\n\t\t\t\t\t\t\t\t\t\twebix.message(\"Mật khẩu mới không giống nhau\", \"error\");\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t.post(app.config.host + \"/Account/ChangeWeakPass\", item, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"listuser-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.message(\"Đổi mật khẩu thành công !\", \"success\");\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar baseUrl = document.location.href;\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (baseUrl.startsWith(\"file\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.storage.local.remove(\"appCookie\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCookies.remove(\"appCookie\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdocument.location.reload();\r\n\t\t\t\t\t\t\t\t\t\t\t\t}, 500);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.message(data.error, \"error\");\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", label: \"Hủy bỏ (ESC)\", hotkey: \"esc\", type: \"danger\", align: \"center\", width: 120, click: function () {\r\n\t\t\t\t\t\t\t\t\twebix.$$(\"listuser-win\").close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t]\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/dashboard',[\r\n //\"views/modules/dashline\",\r\n // \"views/modules/dashline78\",\r\n \"views/modules/dashline_license\",\r\n \"views/modules/dashline78_new\",\r\n \"views/modules/dashline_bienlai\",\r\n \"views/modules/dashline_chungtu\",\r\n // \"views/modules/data_invoice\",\r\n // \"views/menus/version\",\r\n \"views/modules/chart\",\r\n \"views/thongbaosso\",\r\n \"views/forms/changeweakpass\",\r\n \"app\",\r\n \"models/user\",\r\n], function (dashline_license, dashline78new, dashline_bienlai, dashline_chungtu, chart, thongbaosso,changeweakpass, app, user) {\r\n debugger;\r\n var cookie = user.getAppCookie();\r\n var noti = false;\r\n var notes = false;\r\n if (cookie.noti_sso ==\"1\") {\r\n noti = true;\r\n }\r\n if (cookie.notes_sso ==\"1\") {\r\n notes = true;\r\n }\r\n // if(cookie.is_weak_pass){\r\n // var win = webix.ui(changeweakpass.$ui);\r\n // win.show();\r\n // cookie.is_weak_pass = false;\r\n // Cookies.set(\"appCookie\", cookie);\r\n // }\r\n webix.$$(\"title\").parse({ title: \"Trang chủ\", details: \"Phân tích và thống kê\" });\r\n //var soluong = version.getWarning();\r\n var layout = {\r\n type: \"clean\",\r\n borderless: true,\r\n paddingX: 20,\r\n rows: [\r\n //dashline,\r\n { height: 15 },\r\n {\r\n view: \"template\",\r\n height: 40,\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n template:\r\n \"
\\n\",\r\n },\r\n { height: 8 },\r\n {\r\n css: \"dash_invoice\",\r\n type: \"clean\",\r\n hidden: !notes,\r\n rows: [\r\n {\r\n template: \"[THÔNG BÁO] Nhằm nâng cao chất lượng dịch vụ, MobiFone tiến hành nâng cấp hệ thống Quản lý tài khoản tập trung (SSO) cho các khách hàng sử dụng hệ sinh thái giải pháp số của MobiFone. Quý khách sẽ thực hiện liên kết tài khoản sử dụng với hệ thống Quản lý tài khoản tập trung SSO khi truy cập vào hệ thống từ ngày 22/04/2024\",\r\n height: 30,\r\n }\r\n ],\r\n },\r\n { height: 8 },\r\n {\r\n css: \"dash_invoice\",\r\n type: \"space\",\r\n rows: [dashline_license],\r\n },\r\n { height: 8 },\r\n {\r\n css: \"dash_invoice\",\r\n type: \"space\",\r\n rows: [dashline78new],\r\n },\r\n { height: 8 },\r\n {\r\n css: \"dash_invoice\",\r\n type: \"space\",\r\n rows: [dashline_bienlai],\r\n },\r\n { height: 8 },\r\n {\r\n css: \"dash_invoice\",\r\n type: \"space\",\r\n rows: [dashline_chungtu],\r\n },\r\n // {\r\n // \tcols: [\r\n // \t\t{\r\n // \t\t\t// paddingX: 18,\r\n // \t\t\tcss: \"dash_invoice\",\r\n // \t\t\ttype: \"space\",\r\n // \t\t\trows: [chart]\r\n // \t\t},\r\n // \t\t{ width: 10 },\r\n // \t\t{\r\n // \t\t\t// paddingX: 30,\r\n // \t\t\tcss: \"dash_invoice\",\r\n // \t\t\ttype: \"space\",\r\n // \t\t\trows: []\r\n // \t\t}\r\n // \t]\r\n // }\r\n // chart,\r\n // {\r\n // \ttype: \"space\",\r\n // \trows: [\r\n // \t\t{\r\n // \t\t\ttype: \"wide\",\r\n // \t\t\tcols: [\r\n // \t\t\t\tinvoice,\r\n // \t\t\t\t//orders\r\n // \t\t\t]\r\n // \t\t},\r\n // \t\t/* {\r\n // \t\t\ttype: \"wide\",\r\n // \t\t\tcols: [\r\n // \t\t\t\tmessages,\r\n // \t\t\t\trevenue\r\n // \t\t\t]\r\n // \t\t},\r\n // \t\t{\r\n // \t\t\ttype: \"wide\",\r\n // \t\t\tcols: [\r\n // \t\t\t\ttasks,\r\n // \t\t\t\tmap\r\n // \t\t\t]\r\n // \t\t} */\r\n // \t]\r\n // }\r\n ],\r\n };\r\n\r\n var form_filter = {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n id: \"lkdlieu\",\r\n name: \"lkdlieu\",\r\n view: \"combo\",\r\n css: { \"border-radius\": \"20px\" },\r\n width: 100,\r\n height: 30,\r\n value: \"T\",\r\n options: [\r\n { id: \"T\", value: \"Tháng\" },\r\n { id: \"N\", value: \"Năm\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv === \"T\") {\r\n $$(\"thoigian_thang\").show();\r\n $$(\"thoigian_thang\").setValue(new Date());\r\n $$(\"thoigian_nam\").hide();\r\n }\r\n else {\r\n $$(\"thoigian_thang\").hide();\r\n $$(\"thoigian_nam\").show();\r\n $$(\"thoigian_nam\").setValue(new Date());\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"datepicker\", css: { \"border-radius\": \"20px\" }, id: \"thoigian_thang\", format: \"%m-%Y\", width: 100, height: 30, type: \"month\", on: {\r\n onChange: function (newv, oldv) {\r\n var date = new Date(newv.getFullYear(), newv.getMonth(), 1);\r\n const lastday = new Date(new Date(newv.getFullYear(), newv.getMonth() + 1, 1) - 1);\r\n var format = webix.Date.dateToStr(\"%Y.%m.%d\");\r\n\r\n $$(\"thoigian_thang\").disable();\r\n $$(\"thoigian_nam\").disable();\r\n\r\n var loadUrl_HD = app.config.host + \"/Invoice68/DashboardTiles78New?from=\" + format(date) + \"&to=\" + format(lastday);\r\n $$(\"dashline78_new\").load(loadUrl_HD).then(function (data) {\r\n $$(\"thoigian_thang\").enable();\r\n $$(\"thoigian_nam\").enable();\r\n });;\r\n\r\n var loadUrl_BL = app.config.host + \"/Invoice68/DashboardTiles_BienLai?from=\" + format(date) + \"&to=\" + format(lastday);\r\n $$(\"dashline_bienlai\").load(loadUrl_BL);\r\n\r\n var loadUrl_CT = app.config.host + \"/Invoice68/DashboardTiles_ChungTu?from=\" + format(date) + \"&to=\" + format(lastday);\r\n $$(\"dashline_chungtu\").load(loadUrl_CT);\r\n },\r\n },\r\n },\r\n {\r\n view: \"datepicker\", id: \"thoigian_nam\", hidden: true, format: \"%Y\", width: 100, height: 30, type: \"year\", on: {\r\n onChange: function (newv, oldv) {\r\n var date = new Date(newv.getFullYear(), 0, 1);;\r\n const lastday = new Date(new Date(newv.getFullYear() + 1, 0, 1) - 1);\r\n var format = webix.Date.dateToStr(\"%Y.%m.%d\");\r\n\r\n $$(\"thoigian_thang\").disable();\r\n $$(\"thoigian_nam\").disable();\r\n\r\n var loadUrl_HD = app.config.host + \"/Invoice68/DashboardTiles78New?from=\" + format(date) + \"&to=\" + format(lastday);\r\n $$(\"dashline78_new\").load(loadUrl_HD).then(function (data) {\r\n $$(\"thoigian_thang\").enable();\r\n $$(\"thoigian_nam\").enable();\r\n });\r\n\r\n var loadUrl_BL = app.config.host + \"/Invoice68/DashboardTiles_BienLai?from=\" + format(date) + \"&to=\" + format(lastday);\r\n $$(\"dashline_bienlai\").load(loadUrl_BL);\r\n\r\n var loadUrl_CT = app.config.host + \"/Invoice68/DashboardTiles_ChungTu?from=\" + format(date) + \"&to=\" + format(lastday);\r\n $$(\"dashline_chungtu\").load(loadUrl_CT);\r\n },\r\n }\r\n }\r\n ]\r\n }\r\n ]\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var item = {\r\n command: \"NOTYFI_INV_TEMP\",\r\n parameter: {\r\n username: user.getCurrentUser(),\r\n },\r\n };\r\n \r\n if(cookie.is_weak_pass){\r\n var win = webix.ui(changeweakpass.$ui);\r\n win.show();\r\n cookie.is_weak_pass = false;\r\n Cookies.set(\"appCookie\", cookie);\r\n } \r\n\r\n if (noti) {\r\n var winthongbaosso = $scope.ui(thongbaosso.$ui);\r\n winthongbaosso.show();\r\n }\r\n\r\n webix.ui({\r\n container: \"filter_dulieu\",\r\n view: \"layout\",\r\n rows: [\r\n form_filter\r\n ]\r\n });\r\n\r\n $$(\"thoigian_thang\").setValue(new Date());\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/System/ExecuteCommand\", item, function (text) {\r\n var res = JSON.parse(text);\r\n if (res.length > 0 && res != null) {\r\n var mess = \"Thông báo sắp hết hóa đơn :\";\r\n for (var i = 0; i < res.length; i++) {\r\n mess = mess + \"mẫu số: \" + res[i].template_code + \" ký hiệu: \" + res[i].invoice_series;\r\n // + res[i].quantity;\r\n }\r\n webix.message(mess, \"debug\", 5000);\r\n }\r\n });\r\n\r\n var item1 = {\r\n command: \"NOTYFI_INV_TEMP_78\",\r\n parameter: {\r\n username: user.getCurrentUser(),\r\n },\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/System/ExecuteCommand\", item1, function (text) {\r\n var res = JSON.parse(text);\r\n if (res.length > 0 && res != null) {\r\n var mess = \"Thông báo sắp hết hóa đơn 78:
\";\r\n for (var i = 0; i < res.length; i++) {\r\n mess = mess + \" ký hiệu: \" + res[i].ky_hieu + \"
\";\r\n // + res[i].quantity;\r\n }\r\n webix.message(mess, \"debug\", 5000);\r\n }\r\n });\r\n\r\n var item3 = {\r\n command: \"NOTYFI_LICENSE_EXPIRE\",\r\n parameter: {\r\n username: user.getCurrentUser(),\r\n },\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/System/ExecuteCommand\", item3, function (text) {\r\n var res = JSON.parse(text);\r\n if (res.length > 0 && res != null) {\r\n var mess = \"Thông báo sắp hết license: Số lượng license còn lại là: \" + res[0].remaining;\r\n webix.message(mess, \"debug\", 5000);\r\n }\r\n });\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/getHansudungcert?username=\" + user.getCurrentUser(), function (text) {\r\n var res = JSON.parse(text);\r\n var checked = false;\r\n\r\n if (res.length > 0 && res != null) {\r\n var message = \"Thông báo sắp hết hạn CKS:
\";\r\n\r\n for (var i = 0; i < res.length; i++) {\r\n var datecert = new Date(res[i].end_date);\r\n var convertcert = datecert.getFullYear() + \"-\" + (datecert.getMonth() + 1) + \"-\" + datecert.getDate();\r\n var checkdatecert = new Date(convertcert);\r\n var datenow = new Date();\r\n var convernow = datenow.getFullYear() + \"-\" + (datenow.getMonth() + 1) + \"-\" + datenow.getDate();\r\n var checkdatenow = new Date(convernow);\r\n var ngayhethan = parseInt((checkdatecert.getTime() - checkdatenow.getTime()) / (24 * 3600 * 1000));\r\n\r\n if (ngayhethan < 31 && ngayhethan >= 0) {\r\n message += \"Serial: \" + res[i].cer_serial + \" sắp hết hạn
\";\r\n checked = true;\r\n }\r\n }\r\n if (checked) {\r\n webix.message(message, \"debug\", 5000);\r\n }\r\n }\r\n });\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/CheckHSDChungTu\", function (text) {\r\n var res = JSON.parse(text);\r\n var message;\r\n if (res.length > 0 && res.length != null) {\r\n var checkdate = new Date(res[0].lisence_to);\r\n var datenow = new Date();\r\n var convernow = datenow.getFullYear() + \"-\" + (datenow.getMonth() + 1) + \"-\" + datenow.getDate();\r\n var checkdatenow = new Date(convernow);\r\n var ngayhethan = parseInt((checkdate.getTime() - checkdatenow.getTime()) / (24 * 3600 * 1000));\r\n if (ngayhethan < 61 && ngayhethan > 0) {\r\n message = \"Thông báo sắp hết hạn sử dụng gói chứng từ TNCN:
\";\r\n webix.message(message, \"debug\", 5000);\r\n } else if (ngayhethan < 0) {\r\n message = \"Thông báo đã hết hạn sử dụng gói chứng từ TNCN\";\r\n webix.message(message, \"debug\", 5000);\r\n }\r\n }\r\n });\r\n webix.ajax().get(app.config.host + \"/Invoice68/getPromotionNews\", function (text) {\r\n var res = JSON.parse(text);\r\n\r\n if (res.length > 0 && res != null) {\r\n for (var i = 0; i < res.length; i++) {\r\n var message = res[i].content;\r\n webix.message(message, \"success\", 10000);\r\n }\r\n }\r\n });\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/CheckGoiDemo\", function (text) {\r\n var res = JSON.parse(text);\r\n\r\n var now = new Date();\r\n var date = new Date('2024-02-16');\r\n\r\n if (res && now < date) {\r\n message = \"Gói cước của Quý khách sẽ hết hạn vào ngày 15/02/2024, vui lòng liên hệ AM hoặc tổng đài 093.611.0116 để được hỗ trợ.
\";\r\n webix.message(message, \"debug\", 5000);\r\n }\r\n\r\n });\r\n\r\n\r\n //console.log(soluong);\r\n // if (soluong.length > 0 && soluong != null) {\r\n // \tvar mess = \"Thông báo :\"\r\n // \tfor (var i = 0; i < soluong.length; i++) {\r\n // \t\tmess = mess + soluong[i].thongbao;\r\n // \t}\r\n // \twebix.message(mess, \"debug\", 5000);\r\n // }\r\n },\r\n };\r\n});\r\n\ndefine('views/DataStorage/DataHoaDon78',[\"app\"], function (app) {\r\n\r\n var data = {\r\n };\r\n \r\n return {\r\n SetData: function(key, value) {\r\n data[key] = value; \r\n },\r\n GetData: function(key) {\r\n return data[key];\r\n },\r\n ClearData: function(keys) {\r\n if(keys) {\r\n var listKey = keys.split(\";\");\r\n if(listKey && listKey.length > 0) {\r\n listKey.forEach(function(element) {\r\n data[element] = null;\r\n });\r\n }\r\n }\r\n }\r\n }\r\n});\r\n\ndefine('views/forms/dmfield',[\"app\"], function (app) {\r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n id: \"dmfield-win\",\r\n position: \"center\",\r\n head: \"Thông tin Field\",\r\n fullscreen: true,\r\n body: {\r\n view: \"scrollview\",\r\n scroll: \"native-y\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 150 },\r\n view: \"form\",\r\n id: \"dmfield-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n cols: [\r\n { view: \"text\", name: \"ord\", label: \"STT\", id: \"dmfield-id\" },\r\n { view: \"text\", name: \"column_name\", label: \"Column Name\", id: \"dmfield-name\" },\r\n ],\r\n },\r\n {\r\n cols: [\r\n { view: \"text\", name: \"row\", label: \"Row\", id: \"dmfield-row\" },\r\n { view: \"text\", name: \"col\", label: \"Col\", id: \"dmfield-col\" },\r\n ],\r\n },\r\n {\r\n cols: [\r\n { view: \"text\", name: \"width\", label: \"Width\", id: \"dmfield-width\" },\r\n { view: \"text\", name: \"height\", label: \"Height\", id: \"dmfield-height\" },\r\n ],\r\n },\r\n {\r\n cols: [\r\n { view: \"text\", name: \"column_width\", label: \"Column Width\", id: \"dmfield-columnwidth\" },\r\n { view: \"text\", name: \"column_alias\", label: \"Column alias\" },\r\n ],\r\n },\r\n { view: \"text\", name: \"default_value\", label: \"DEFAULT VALUE\" },\r\n {\r\n cols: [\r\n {\r\n view: \"combo\",\r\n name: \"column_type\",\r\n label: \"Column Type\",\r\n id: \"dmfield-columntype\",\r\n suggest: {\r\n body: {\r\n url: app.config.host + \"/System/GetTypeSQL\",\r\n },\r\n },\r\n //options: app.config.host + \"/System/GetTypeSQL\"\r\n },\r\n {\r\n view: \"combo\",\r\n name: \"type_editor\",\r\n label: \"TYPE EDITOR\",\r\n id: \"dmfield-typeeditor\",\r\n suggest: {\r\n body: {\r\n data: [\r\n \"text\",\r\n \"combo\",\r\n \"checkbox\",\r\n \"datepicker\",\r\n \"autonumeric\",\r\n \"treesuggest\",\r\n \"gridsuggest\",\r\n \"gridcombo\",\r\n \"textarea\",\r\n \"multiselect\",\r\n \"select\",\r\n \"ckeditor\",\r\n \"password\",\r\n \"search\",\r\n \"popup\",\r\n ],\r\n },\r\n },\r\n //options: [\"text\", \"combo\", \"checkbox\", \"datepicker\", \"autonumeric\", \"treesuggest\", \"gridsuggest\", \"gridcombo\", \"textarea\", \"multiselect\", \"ckeditor\", \"password\",\"search\"]\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"data_width\",\r\n label: \"Data Width\",\r\n },\r\n {\r\n view: \"text\",\r\n name: \"data_decimal\",\r\n label: \"Data decimal\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n { view: \"text\", name: \"label_width\", label: \"Label Width\", id: \"dmfield-labelwidth\" },\r\n { view: \"combo\", name: \"label_position\", options: [\"left\", \"top\", \"right\", \"bottom\"], label: \"Label Position\", id: \"dmfield-labelposition\" },\r\n ],\r\n },\r\n {\r\n view: \"combo\",\r\n name: \"ref_id\",\r\n label: \"REF ID\",\r\n id: \"dmfield-refid\",\r\n suggest: {\r\n body: {\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00004\",\r\n },\r\n },\r\n //options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00004\"\r\n },\r\n { view: \"text\", name: \"list_column\", label: \"LIST COLUMN\" },\r\n { view: \"text\", name: \"display_field\", label: \"DISPLAY_FIELD\" },\r\n { view: \"text\", name: \"format\", label: \"FORMAT\" },\r\n { view: \"text\", name: \"field_expression\", label: \"FIELD_EXPRESSION\" },\r\n { view: \"text\", name: \"css\", label: \"Css\" },\r\n { view: \"text\", name: \"template\", label: \"Template\" },\r\n { view: \"text\", name: \"styleinput\", label: \"Style Input\" },\r\n {\r\n view: \"combo\",\r\n name: \"space\",\r\n options: [\r\n { id: \"BEFORE\", value: \"Trước\" },\r\n { id: \"AFTER\", value: \"Sau\" },\r\n ],\r\n label: \"SPACE\",\r\n },\r\n { view: \"text\", name: \"caption\", label: \"CAPTION\" },\r\n { view: \"text\", name: \"read_only\", label: \"READONLY\" },\r\n {\r\n view: \"combo\",\r\n name: \"type_filter\",\r\n options: [\"textFilter\", \"serverFilter\", \"numberFilter\", \"datepickerFilter\", \"serverDateRangeFilter\", \"serverSelectFilter\", \"serverMultiSelectFilter\"],\r\n label: \"Type Filter\",\r\n id: \"dmfield-typefilter\",\r\n },\r\n {\r\n view: \"combo\",\r\n name: \"value_filter\",\r\n label: \"VALUE FILTER\",\r\n id: \"dmfield-value_filter\",\r\n suggest: {\r\n body: {\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00004\",\r\n },\r\n },\r\n //options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00004\"\r\n },\r\n { view: \"combo\", name: \"valid_rule\", options: [\"isNotEmpty\", \"isEmail\", \"isSpecialCharacter\", \"isTaxCode\"], label: \"Valid Rule\", id: \"dmfield-validrule\" },\r\n { view: \"text\", name: \"total_column\", label: \"Total Column\", id: \"dmfield-totalcolumn\" },\r\n { view: \"textarea\", height: 160, name: \"value_change\", label: \"VALUE_CHANGE\" },\r\n { view: \"textarea\", height: 160, name: \"value_suggest\", label: \"VALUE_SUGGEST\" },\r\n {\r\n cols: [\r\n { view: \"checkbox\", name: \"hide_in_grid\", label: \"HIDE_IN_GRID\", checkValue: \"true\", uncheckValue: \"false\", id: \"dmfield-hiddeningrid\" },\r\n { view: \"checkbox\", name: \"hidden\", label: \"Hidden\", checkValue: \"true\", uncheckValue: \"false\", id: \"dmfield-hidden\" },\r\n ],\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"dmfield-form\");\r\n var item = form.getValues();\r\n var branch_code = $$(\"branch_code_field\").getValue();\r\n if(item != null) {\r\n item[\"branch_code\"] = branch_code;\r\n }\r\n \r\n var url = \"/WbField/Update\";\r\n\r\n webix.ajax().post(app.config.host + url, item, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n item.id = data.id;\r\n webix.$$(\"dmfield-win\").close();\r\n app.callEvent(\"dataChanged\", [editmode, item]);\r\n } else {\r\n webix.message(data.error);\r\n }\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 140,\r\n click: function () {\r\n webix.$$(\"dmfield-win\").close();\r\n },\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n };\r\n});\r\n\ndefine('views/dmfield',[\r\n\t\"app\",\r\n\t\"views/forms/dmfield\",\r\n\t\"locale\"\r\n], function (app, dmfieldform, _) {\r\n\t\r\n\r\n\t//var windowno = app.path[1].params[0];\r\n\twebix.$$(\"title\").parse({ title: \"Điều khiển > Danh mục field\", details: \"Danh mục field system\" });\r\n\tvar submenu = webix.ui({\r\n\t\tview: \"submenu\",\r\n\t\twidth: 300,\r\n\t\tpadding: 0,\r\n\t\tdata: [\r\n\t\t\t{ id: \"importcolumns\", icon: \"fas fa-angle-right\", value: \"Tải cột\" },\r\n\t\t\t{ id: \"createtable\", icon: \"fas fa-angle-right\", value: \"Tạo bảng dữ liệu\" },\r\n\t\t\t{ id: \"createproccrud\", icon: \"fas fa-angle-right\", value: \"Tạo thủ tục (Thêm - Sửa - Xóa)\" },\r\n\t\t\t{ id: \"processstt\", icon: \"fas fa-angle-right\", value: \"Đánh lại số thứ tự\" }\r\n\t\t],\r\n\t\ton: {\r\n\t\t\tonItemClick: function (id, e, node) {\r\n\t\t\t\tif (id == \"importcolumns\") {\r\n\r\n\t\t\t\t\tvar url = app.config.host + \"/System/InsertFieldsByTabId\";\r\n\t\t\t\t\tvar tabId = webix.$$(\"txtTabId\").getValue();\r\n\r\n\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t.post(url, { id: tabId }, function (text) {\r\n\t\t\t\t\t\t\tvar json = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\tif (!json.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\tloadData();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\twebix.message(json.error);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (id == \"createtable\") {\r\n\r\n\t\t\t\t\tvar url = app.config.host + \"/System/AutoCreateTable\";\r\n\t\t\t\t\tvar tabId = webix.$$(\"txtTabId\").getValue();\r\n\r\n\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t.headers({ 'Content-type': 'application/x-www-form-urlencoded' })\r\n\t\t\t\t\t\t.post(url, \"id=\" + tabId, function (text) {\r\n\t\t\t\t\t\t\tvar json = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\tif (!json.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\tloadData();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\twebix.message(json.error);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (id == \"createproccrud\") {\r\n\r\n\t\t\t\t\tvar url = app.config.host + \"/System/AutoCreateCmd\";\r\n\t\t\t\t\tvar tabId = webix.$$(\"txtTabId\").getValue();\r\n\r\n\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t//.headers({'Content-type':'application/x-www-form-urlencoded'})\r\n\t\t\t\t\t\t.post(url, \"id=\" + tabId, function (text) {\r\n\t\t\t\t\t\t\tvar json = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\tif (!json.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\tloadData();\r\n\t\t\t\t\t\t\t\twebix.message(\"Đã thực hiện xong\");\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\twebix.message(json.error);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (id == \"processstt\") {\r\n\t\t\t\t\tvar table = webix.$$(\"dmfieldData\");\r\n\t\t\t\t\tvar numberRow = table.count();\r\n\r\n\t\t\t\t\tvar url = \"/WbField/Update\";\r\n\r\n\t\t\t\t\tfor (var i = 0; i < numberRow; i++) {\r\n\t\t\t\t\t\tvar id = table.getIdByIndex(i);\r\n\t\t\t\t\t\tvar item = table.getItem(id);\r\n\r\n\t\t\t\t\t\titem.stt = i + 1;\r\n\r\n\t\t\t\t\t\twebix.ajax().post(app.config.host + url, item, function (text) {\r\n\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\twebix.$$(\"dmfieldData\").updateItem(item.id, item);\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\tvar controls = [\r\n\t\t{\r\n\t\t\tview: \"button\", type: \"htmlbutton\", width: 100,\r\n\t\t\tlabel: ' ' +\r\n\t\t\t'' + \"Thêm (F4)\" + '',\r\n\t\t\tid: \"btnPlus\",\r\n\t\t\t// view: \"button\",\r\n\t\t\t// type: \"icon\",\r\n\t\t\t// icon: \"fas fa-plus\",\r\n\t\t\t// label: \"Thêm (F4)\",\r\n\t\t\t// css: \"webix_secondary\",\r\n\t\t\t// width: 90,\r\n\t\t\tshortcut: \"F4\",\r\n\t\t\ton: {\r\n\t\t\t\tonClick: function () {\r\n\t\t\t\t\tvar win = this.$scope.ui(dmfieldform.$ui);\r\n\t\t\t\t\tvar form = webix.$$(\"dmfield-form\");\r\n\r\n\t\t\t\t\tif (webix.$$(\"txtTabId\").getValue() == \"\") {\r\n\t\t\t\t\t\twebix.message(\"Bạn chưa chọn Tab Id\")\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar item = {\r\n\t\t\t\t\t\twb_tab_id: $$(\"txtTabId\").getValue()\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tform.setValues(item);\r\n\r\n\t\t\t\t\tdmfieldform.setEditMode(1);\r\n\t\t\t\t\twin.show();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tclick: function () {\r\n\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t}\r\n\t\t},\r\n\t\t{\r\n\t\t\tview: \"button\", type: \"htmlbutton\", width: 100,\r\n\t\t\tlabel: ' ' +\r\n\t\t\t'' + \"Sửa (F3)\" + '',\r\n\t\t\tid: \"btnEdit\",\r\n\t\t\t// view: \"button\",\r\n\t\t\t// type: \"icon\",\r\n\t\t\t// icon: \"fas fa-edit\",\r\n\t\t\t// label: \"Sửa (F3)\",\r\n\t\t\t// css: \"webix_secondary\",\r\n\t\t\t// width: 60,\r\n\t\t\tshortcut: \"F3\",\r\n\t\t\ton: {\r\n\t\t\t\tonClick: function () {\r\n\t\t\t\t\tvar detailForm = this.$scope.ui(dmfieldform.$ui);\r\n\t\t\t\t\tvar form = webix.$$(\"dmfield-form\");\r\n\r\n\t\t\t\t\tvar table = webix.$$(\"dmfieldData\");\r\n\t\t\t\t\tvar item = table.getSelectedItem();\r\n\r\n\t\t\t\t\tform.setValues(item);\r\n\r\n\t\t\t\t\tdmfieldform.setEditMode(2);\r\n\t\t\t\t\tdetailForm.show();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tclick: function () {\r\n\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t}\r\n\t\t},\r\n\t\t{\r\n\t\t\tview: \"button\", type: \"htmlbutton\", width: 100,\r\n\t\t\tlabel: ' ' +\r\n\t\t\t'' + \"Xóa (F8)\" + '',\r\n\t\t\tid: \"btnDelete\",\r\n\t\t\t// view: \"button\",\r\n\t\t\t// type: \"icon\",\r\n\t\t\t// icon: \"fas fa-trash-o\",\r\n\t\t\t// label: \"Xóa (F8)\",\r\n\t\t\t// css: \"webix_secondary\",\r\n\t\t\t// width: 80,\r\n\t\t\tshortcut: \"F8\",\r\n\t\t\ton: {\r\n\t\t\t\tonClick: function () {\r\n\t\t\t\t\tvar table = webix.$$(\"dmfieldData\");\r\n\t\t\t\t\tvar item = table.getSelectedItem();\r\n\t\t\t\t\tvar branch_code = $$(\"branch_code_field\").getValue();\r\n\t\t\t\t\tif(item != null) {\r\n\t\t\t\t\t\titem[\"branch_code\"] = branch_code;\r\n\t\t\t\t\t}\r\n\t\t\t\t\twebix.confirm({\r\n\t\t\t\t\t\ttext: \"Bạn có muốn xóa \" + item.column_name, ok: \"Có\", cancel: \"Không\",\r\n\t\t\t\t\t\tcallback: function (res) {\r\n\t\t\t\t\t\t\tif (res) {\r\n\t\t\t\t\t\t\t\twebix.ajax().post(app.config.host + \"/WbField/Delete\", item, function (text, xml, xhr) {\r\n\t\t\t\t\t\t\t\t\tif (text.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\twebix.message(text.error);\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\ttable.remove(item.id);\r\n\r\n\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tclick: function () {\r\n\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\t{\r\n\t\t\tview: \"button\", type: \"htmlbutton\", width: 100,\r\n\t\t\tlabel: ' ' +\r\n\t\t\t'' + \"Sao chép\" + '',\r\n\t\t\tid: \"btnCopy\",\r\n\t\t\t// view: \"button\",\r\n\t\t\t// type: \"icon\",\r\n\t\t\t// icon: \"fas fa-files-o\",\r\n\t\t\t// label: \"Sao chép\",\r\n\t\t\t// css: \"webix_secondary\",\r\n\t\t\t// width: 85,\r\n\t\t\ton: {\r\n\t\t\t\tonClick: function () {\r\n\t\t\t\t\tvar detailForm = this.$scope.ui(dmfieldform.$ui);\r\n\t\t\t\t\tvar form = webix.$$(\"dmfield-form\");\r\n\r\n\t\t\t\t\tvar table = webix.$$(\"dmfieldData\");\r\n\t\t\t\t\tvar item = table.getSelectedItem();\r\n\r\n\t\t\t\t\tif (item == null) {\r\n\t\t\t\t\t\twebix.message({ type: \"error\", text: \"Bạn chưa chọn mục field\" });\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\titem.id = null;\r\n\t\t\t\t\tform.setValues(item);\r\n\r\n\t\t\t\t\tdmfieldform.setEditMode(1);\r\n\t\t\t\t\tdetailForm.show();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tclick: function () {\r\n\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t}\r\n\t\t},\r\n\t\t{\r\n\t\t\tview: \"button\", type: \"htmlbutton\", width: 110,\r\n\t\t\tlabel: ' ' +\r\n\t\t\t'' + \"Chức năng\" + '',\r\n\t\t\tid: \"btnChucNang\",\r\n\t\t\t// view: \"button\",\r\n\t\t\t// type: \"icon\",\r\n\t\t\t// icon: \"fas fa-angle-down\",\r\n\t\t\t// label: \"Chức năng\",\r\n\t\t\t// css: \"webix_secondary\",\r\n\t\t\t// width: 100,\r\n\t\t\tclick: function () {\r\n\t\t\t\tsubmenu.show(webix.$$(\"btnChucNang\").$view);\r\n\t\t\t}\r\n\t\t},\r\n\t\t{},\r\n\t\t{\r\n\t\t\tid: \"paramDonvi\",\r\n\t\t\tview: \"toolbar\",\r\n\t\t\tcss: { \"background-color\": \"#f5f5f5 !important\" },\r\n\t\t\tborderless: true,\r\n\t\t\theight: 35,\r\n\t\t\tcols: [\r\n\t\t\t\t{\r\n\t\t\t\t\tid: \"branch_code_field\",\r\n\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\twidth: 600,\r\n\t\t\t\t\tlabel: _(\"Đơn vị\"),\r\n\t\t\t\t\toptions: {\r\n\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\turl: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00195A\",\r\n\t\t\t\t\t\t\tready: function () {\r\n\t\t\t\t\t\t\t\tvar count = this.count();\r\n\r\n\t\t\t\t\t\t\t\tif (count > 0) {\r\n\t\t\t\t\t\t\t\t\tvar combo = webix.$$(\"branch_code_field\");\r\n\t\t\t\t\t\t\t\t\tvar first = this.getFirstId();\r\n\t\t\t\t\t\t\t\t\tcombo.setValue(first);\r\n\t\t\t\t\t\t\t\t\tvar tab = webix.$$(\"txtTabId\").getPopup().getList();\r\n\t\t\t\t\t\t\t\t\tif(tab) {\r\n\t\t\t\t\t\t\t\t\t\ttab.clearAll(); \r\n\t\t\t\t\t\t\t\t\t\ttab.load(app.config.host + \"/WbTab/All?branch_code=\" + first);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t// }\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t\ton: {\r\n\t\t\t\t\t\tonChange: function (newv, oldv) {\r\n\t\t\t\t\t\t\tvar tabCombo = webix.$$(\"txtTabId\");\r\n\t\t\t\t\t\t\tvar tab = tabCombo.getPopup().getList();\r\n\t\t\t\t\t\t\tif(tab && newv != null && newv != '') {\r\n\t\t\t\t\t\t\t\ttab.clearAll(); \r\n\t\t\t\t\t\t\t\ttabCombo.setValue(null);\r\n\t\t\t\t\t\t\t\ttab.load(app.config.host + \"/WbTab/All?branch_code=\" + newv, function() {\r\n var table = webix.$$(\"dmfieldData\");\r\n table.clearAll();\r\n });\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t},\r\n\t\t{},\r\n\t\t{\r\n\t\t\tview: \"combo\",\r\n\t\t\twidth: 400,\r\n\t\t\tlabel: \"Tab ID\",\r\n\t\t\tid: \"txtTabId\",\r\n\t\t\toptions: {\r\n\t\t\t\tview: \"gridsuggest\",\r\n\t\t\t\tid: \"grid_tab\",\r\n\t\t\t\ttemplate: \"#name#\",\r\n\t\t\t\twidth: 550,\r\n\t\t\t\tbody: {\r\n\t\t\t\t\tscroll: true,\r\n\t\t\t\t\tautoheight: false,\r\n\t\t\t\t\tcolumns: [\r\n\t\t\t\t\t\t{ id: \"code\", header: \"Window Id\", editor: \"text\", width: 100 },\r\n\t\t\t\t\t\t{ id: \"name\", header: \"Window Name\", editor: \"text\", width: 400 }\r\n\t\t\t\t\t],\r\n\t\t\t\t\t// url: app.config.host + \"/WbTab/All\"\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\ton: {\r\n\t\t\t\tonChange: function () {\r\n\t\t\t\t\tloadData();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t];\r\n\r\n\tvar grid = {\r\n\t\trows: [\r\n\t\t\t{\r\n\t\t\t\tid: \"dmfieldData\",\r\n\t\t\t\tview: \"datatable\",\r\n\t\t\t\tselect: true,\r\n\t\t\t\tresizeColumn: true,\r\n\t\t\t\tdatafetch: 2,\r\n\t\t\t\tloadahead: 15,\r\n\t\t\t\tdrag: true,\r\n\t\t\t\ton: {\r\n\t\t\t\t\tonItemDblClick: function (id, e, node) {\r\n\t\t\t\t\t\tvar btnEdit = $$(\"btnEdit\");\r\n\t\t\t\t\t\tbtnEdit.callEvent(\"onClick\");\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tcolumns: [\r\n\t\t\t\t\t{ id: \"wb_tab_id\", header: \"Tab Id\", width: 100, hidden: true },\r\n\t\t\t\t\t{ id: \"ord\", header: \"STT\", width: 75 },\r\n\t\t\t\t\t{ id: \"column_name\", header: \"Column Name\", width: 150 },\r\n\t\t\t\t\t{ id: \"row\", header: \"Row\", width: 60 },\r\n\t\t\t\t\t{ id: \"col\", header: \"Col\", width: 60 },\r\n\t\t\t\t\t{ id: \"width\", header: \"Width\", width: 80 },\r\n\t\t\t\t\t{ id: \"column_width\", header: \"Column Width\", width: 150 },\r\n\t\t\t\t\t{ id: \"column_type\", header: \"Column Type\", width: 150 },\r\n\t\t\t\t\t{ id: \"label_width\", header: \"Label Width\", width: 150 },\r\n\t\t\t\t\t{ id: \"label_position\", header: \"Label Position\", width: 150 },\r\n\t\t\t\t\t{ id: \"space\", header: \"SPACE\", width: 150 },\r\n\t\t\t\t\t{ id: \"type_editor\", header: \"TYPE EDITOR\", width: 150 },\r\n\t\t\t\t\t{ id: \"ref_id\", header: \"REF ID\", hidden: true, width: 150 },\r\n\t\t\t\t\t{ id: \"default_value\", header: \"Default Value\", width: 250 },\r\n\t\t\t\t\t{ id: \"hide_in_grid\", header: \"HIDE_IN_GRID\", width: 120, checkValue: true, uncheckValue: false, template: \"{common.rcheckbox()}\" },\r\n\t\t\t\t\t{ id: \"hidden\", header: \"Hidden\", width: 80, checkValue: true, uncheckValue: false, template: \"{common.rcheckbox()}\" }\r\n\t\t\t\t],\r\n\t\t\t\t//columns: columns\r\n\t\t\t\tpager: \"pagerA\",\r\n\t\t\t\ttype: {\r\n\t\t\t\t\trcheckbox: function (obj, common, value, config) {\r\n\t\t\t\t\t\tvar checked = (value == config.checkValue) ? 'checked=\"true\"' : '';\r\n\t\t\t\t\t\treturn \"\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tid: \"pagerA\",\r\n\t\t\t\tview: \"pager\",\r\n\t\t\t\tsize: 50,\r\n\t\t\t\tgroup: 5,\r\n\t\t\t\t// animate: { direction:\"top\" },\r\n\t\t\t\ttemplate: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\"\r\n\t\t\t}\r\n\t\t]\r\n\t}\r\n\r\n\tvar layout = {\r\n\t\tcss: \"frmView\",\r\n\t\trows: [\r\n\t\t\t{\r\n\t\t\t\theight: 39,\r\n\t\t\t\tcss: { \"background-color\": \"#f5f5f5 !important\" },\r\n\t\t\t\ttype: \"toolbar\",\r\n\t\t\t\tmargin: 0,\r\n\t\t\t\tborderless: true,\r\n\t\t\t\tcols: controls\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\trows: [\r\n\t\t\t\t\tgrid\r\n\t\t\t\t]\r\n\t\t\t}\r\n\r\n\r\n\r\n\t\t]\r\n\r\n\t};\r\n\r\n\tfunction loadData() {\r\n\t\tvar tabId = webix.$$(\"txtTabId\").getValue();\r\n\t\tif(tabId != null && tabId != \"\") {\r\n\t\t\tvar branch_code = $$(\"branch_code_field\").getValue(); \r\n\t\t\tvar url = app.config.host + \"/WbField/GetFieldsByTabId?id=\" + tabId + \"&branch_code=\" + branch_code;\r\n\t\r\n\t\t\twebix.ajax().get(url, function (text) {\r\n\t\t\t\tvar json = JSON.parse(text);\r\n\t\r\n\t\t\t\tvar table = webix.$$(\"dmfieldData\");\r\n\t\t\t\ttable.clearAll();\r\n\t\r\n\t\t\t\tfor (var i = 0; i < json.length; i++) {\r\n\t\t\t\t\tvar item = json[i];\r\n\t\r\n\t\t\t\t\t/* if (item.hidden!=null){\r\n\t\t\t\t\t\titem.hidden = item.toString();\r\n\t\t\t\t\t} */\r\n\t\t\t\t}\r\n\t\r\n\t\t\t\ttable.parse(json);\r\n\t\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\treturn {\r\n\t\t$ui: layout,\r\n\t\t$oninit: function (view, $scope) {\r\n\t\t\t$scope.on(app, \"dataChanged\", function (mode, item) {\r\n\r\n\t\t\t\tvar table = webix.$$(\"dmfieldData\");\r\n\r\n\t\t\t\tif (mode == 1) {\r\n\t\t\t\t\ttable.add(item);\r\n\t\t\t\t\t//table.select(item.iddmfield,false);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (mode == 2) {\r\n\t\t\t\t\tvar selectedItem = table.getSelectedItem();\r\n\t\t\t\t\ttable.updateItem(selectedItem.id, item);\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n});\ndefine('views/dmhv',[\"app\", \"views/forms/window\"], function (app, dmhvform) {\r\n \r\n\r\n //var hvno = app.path[1].params[0];\r\n var col = [];\r\n var url = app.config.host + \"/api/System/GetAllByWindowId?id=09a8b24b-52b5-46a6-931d-d6f005da0dd7\";\r\n webix.ajax(url, function (text, xml, xhr) {\r\n var rp = JSON.parse(text);\r\n //console.log(Object.keys(rp).length);\r\n\r\n for (var j = 0; j < Object.keys(rp[\"data\"][0][\"Tabs\"][0][\"Fields\"]).length; j++) {\r\n col.push({ header: \"\" + String(rp[\"data\"][0][\"Tabs\"][0][\"Fields\"][j][\"COLUMN_NAME\"]) + \"\", fillspace: true });\r\n }\r\n $$(\"windowData\").define(\"columns\", col);\r\n $$(\"windowData\").refresh();\r\n\r\n // console.log(col);\r\n // console.log(Object.keys(rp.data).length);\r\n });\r\n\r\n var controls = [\r\n {\r\n id: \"btnPlus\",\r\n view: \"button\",\r\n type: \"iconButton\",\r\n icon: \"plus\",\r\n label: \"Thêm\",\r\n width: 110,\r\n css: \"button_raised\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var win = this.$scope.ui(dmhvform.$ui);\r\n dmhvform.setEditMode(1);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"iconButton\",\r\n icon: \"edit\",\r\n label: \"Sửa\",\r\n width: 100,\r\n css: \"button_raised\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmhvform.$ui);\r\n var form = webix.$$(\"window-form\");\r\n\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n\r\n form.setValues(item);\r\n\r\n dmhvform.setEditMode(2);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnDelete\",\r\n view: \"button\",\r\n type: \"iconButton\",\r\n icon: \"trash-o\",\r\n label: \"Xóa\",\r\n width: 100,\r\n css: \"button_raised\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \" + item.ten_hv,\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.ajax().post(app.config.host + \"/api/Dmhv/Delete\", item, function (text, xml, xhr) {\r\n if (text.hasOwnProperty(\"error\")) {\r\n webix.message(text.error);\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n margin: 10,\r\n rows: [\r\n {\r\n id: \"dmhvData\",\r\n view: \"datatable\",\r\n select: true,\r\n datafetch: 2,\r\n loadahead: 15,\r\n // url: {\r\n // $proxy:true,\r\n // load:function(view, callback, params){\r\n // var url = app.config.host+ \"/api/dmhv/All\";\r\n\r\n // webix.ajax(url, callback, view);\r\n // }\r\n // },\r\n columns: col,\r\n // {id: \"ma_hv\", header: \"Mã hàng\" , width: 100 },\r\n // {id: \"ten_hv\", header: \"Tên hàng\" , fillspace: true },\r\n // {id: \"dvt\", header: \"Đơn vị tính\" , fillspace: true }\r\n // {id: \"quai\", header: \"Quai\", width:80},\r\n // {id: \"mau\", header: \"Màu sắc\", width:80},\r\n // {id: \"doday\", header: \"Độ dày\", width:80},\r\n // {\r\n // id: \"gia_ban\", header: \"Giá bán\", width:80 ,\r\n // format:webix.Number.numToStr({\r\n // groupDelimiter:\",\",\r\n // groupSize:3,\r\n // decimalDelimiter:\".\",\r\n // decimalSize:0\r\n // }),\r\n // css:{'text-align':'right'}\r\n // }\r\n // ],\r\n //columns: columns\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n type: \"space\",\r\n rows: [\r\n {\r\n height: 40,\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmhvData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmhv,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/dmlanguage',[\"app\"], function (app) {\r\n\tvar editmode = 0;\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"dmtab-win\", position: \"center\",\r\n\t\t\thead: \"Thông tin ngôn ngữ\",\r\n\t\t\twidth: 400,\r\n\t\t\theight: 250,\r\n\t\t\tbody: {\r\n\t\t\t\tpaddingY: 20,\r\n\t\t\t\tpaddingX: 30,\r\n\t\t\t\telementsConfig: { labelWidth: 60 },\r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"dmtab-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\tmargin: 0,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{ view: \"text\", name: \"wb_lang_id\", label: \"wb_lang_id\", id: \"wb_lang_id\", hidden: true },\r\n\t\t\t\t\t{ view: \"text\", name: \"key_lang\", label: \"Key\", id: \"dmtab-name\" },\r\n\t\t\t\t\t{ view: \"textarea\", name: \"value_lang\", label: \"Value\", id: \"dmtab-table\" },\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tshortcut: \"F10\", view: \"button\", label: \"Nhận (F10)\", type: \"form\", align: \"center\", width: 120,\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"dmtab-form\");\r\n\t\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\t\t\t//console.log(item);\r\n\t\t\t\t\t\t\t\t\t\tvar url = editmode == 1 ? app.config.host + \"/System/InsertLanguages\" : app.config.host + \"/System/UpdateLanguages\"\r\n\r\n\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t.post(url, item, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.id = data.id;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"dmtab-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tapp.callEvent(\"dataChanged\", [editmode, item]);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(data.error, \"error\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", align: \"center\", type: \"danger\", width: 120,\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\twebix.$$(\"dmtab-win\").close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t]\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tsetEditMode: function (mode) {\r\n\t\t\teditmode = mode;\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/dmlanguage',[\"app\", \"views/forms/dmlanguage\", \"locale\"], function (app, dmtabform, _) {\r\n \r\n\r\n //var windowno = app.path[1].params[0];\r\n\r\n var controls = [\r\n // {\r\n // id: \"btnRefresh\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"refresh\",\r\n // label: _(\"REFRESH\"),\r\n // width: 90,\r\n // // shortcut: \"F4\",\r\n // //css:\"button_raised\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"dmtabData\");\r\n // table.clearAll();\r\n\r\n // table.load(loadData());\r\n // }\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // }\r\n // },\r\n {\r\n id: \"btnPlus\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-plus\",\r\n label: _(\"THEM\") + \" (F4)\",\r\n width: 90,\r\n css: \"webix_secondary\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var win = this.$scope.ui(dmtabform.$ui);\r\n var form = webix.$$(\"dmtab-form\");\r\n\r\n if (webix.$$(\"txtWindowId\").getValue() == \"\") {\r\n webix.message(\"Bạn chưa chọn loại ngôn ngữ !\", \"error\");\r\n return;\r\n }\r\n\r\n var item = {\r\n language_code: $$(\"txtWindowId\").getValue(),\r\n };\r\n\r\n form.setValues(item);\r\n\r\n dmtabform.setEditMode(1);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-edit\",\r\n label: \"Sửa (F3)\",\r\n width: 80,\r\n css: \"webix_secondary\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmtabform.$ui);\r\n var form = webix.$$(\"dmtab-form\");\r\n\r\n var table = webix.$$(\"dmtabData\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa ! \", \"error\");\r\n return;\r\n }\r\n form.setValues(item);\r\n\r\n dmtabform.setEditMode(2);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnDelete\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-trash-o\",\r\n label: \"Xóa (F8)\",\r\n width: 80,\r\n css: \"webix_secondary\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmtabData\");\r\n var item = table.getSelectedItem();\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \" + item.key_lang,\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.ajax().post(app.config.host + \"/System/DeleteLanguages\", item, function (text, xml, xhr) {\r\n if (text.hasOwnProperty(\"error\")) {\r\n webix.message(text.error);\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n {\r\n view: \"combo\",\r\n width: 300,\r\n label: \"Ngôn ngữ\",\r\n id: \"txtWindowId\",\r\n // options: [\"en\", \"vi\"],\r\n suggest: {\r\n // body: {\r\n // url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00012\"\r\n // }\r\n data: [\r\n { id: \"vi\", value: \"Việt Nam\" },\r\n { id: \"en\", value: \"English\" },\r\n { id: \"ko\", value: \"Korea\" },\r\n ],\r\n },\r\n on: {\r\n onChange: function () {\r\n loadData();\r\n },\r\n },\r\n },\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"dmtabData\",\r\n view: \"datatable\",\r\n select: true,\r\n datafetch: 50,\r\n loadahead: 15,\r\n on: {\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n },\r\n columns: [\r\n { id: \"wb_lang_id\", header: \"wb_lang_id\", hidden: true },\r\n { id: \"language_code\", header: \"LANGUAGES\", hidden: true },\r\n { id: \"key_lang\", header: [\"Key\", { content: \"textFilter\" }], width: 200 },\r\n { id: \"value_lang\", header: [\"Value\", { content: \"textFilter\" }], fillspace: true },\r\n ],\r\n //columns: columns\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 35,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var windowId = webix.$$(\"txtWindowId\").getValue();\r\n var url = app.config.host + \"/System/GetLanguagesByMa?lang=\" + windowId;\r\n\r\n webix.ajax().get(url, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n var table = webix.$$(\"dmtabData\");\r\n table.clearAll();\r\n table.parse(json);\r\n });\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmtabData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmtab,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/dmreferences',[\"app\"],function(app){\r\n\tvar editmode = 0;\t\r\n\r\n\treturn {\t\t\r\n\t\t$ui:{ \r\n\t\t\tview:\"window\", modal:true, id:\"dmwindow-win\", position:\"center\",\r\n\t\t\thead:\"Thông tin Window\",\r\n\t\t\tfullscreen:true,\r\n\t\t\tbody:{\r\n paddingY:20, \r\n paddingX:30, \r\n elementsConfig:{labelWidth: 100}, \r\n view:\"form\", \r\n\t\t\t\tid:\"dmwindow-form\", \r\n\t\t\t\tcomplexData:true,\r\n\t\t\t\tmargin:0,\r\n elements:[\r\n\t\t\t\t\t{ view:\"text\", name:\"REFERENCES_ID\", label:\"RF ID\", id:\"dmwindow-rfid\"},\r\n { view:\"text\", name:\"NAME\", label:\"Name\", id:\"dmwindow-name\"},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcols:[\r\n\t\t\t\t\t\t\t{ view:\"text\", name:\"VALUE_FIELD\", label:\"Value Field\", id:\"dmwindow-valuefield\"},\r\n\t\t\t\t\t\t\t{ view:\"text\", name:\"DISPLAY_FIELD\", label:\"Display Field\", id:\"dmwindow-displayfield\"},\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{ view:\"combo\", name:\"TYPE\", label:\"TYPE\", options:[ \"List\", \"SQL\" ], id:\"dmwindow-type\"},\r\n\t\t\t\t\t{ view:\"text\", name:\"SQL\", label:\"SQL\", id:\"dmwindow-sql\"},\r\n\t\t\t\t\t{ view:\"text\", name:\"LIST_VALUE\", label:\"LIST VALUE\", id:\"dmwindow-listvalue\"},\r\n\t\t\t\t\t{ view:\"text\", name:\"LIST_COLUMN\", label:\"LIST COLUMN\", id:\"dmwindow-listcolumn\"},\r\n\t\t\t\t\t{ view:\"text\", name:\"FILTER_VALUE\", label:\"FILTER VALUE\", id:\"dmwindow-filtervalue\"},\r\n\t\t\t\t\t{ view:\"text\", name:\"ORDER_BY\", label:\"ORDER BY\", id:\"dmwindow-orderby\"},\r\n\t\t\t\t\t{ view:\"text\", name:\"GHICHU\", label:\"Ghi chú\", id:\"dmwindow-ghichu\"},\r\n\t\t\t\t\t{ \r\n\t\t\t\t\t\tview:\"combo\", \r\n\t\t\t\t\t\tname:\"WINDOW_ID\", \r\n\t\t\t\t\t\tlabel:\"WINDOW ID\", \r\n\t\t\t\t\t\tid:\"dmwindow-windowid\",\r\n\t\t\t\t\t\toptions: app.config.host + \"/api/System/GetDataByReferencesId?id=76DCF72E-7631-458A-986F-5B6D9BE9B203\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmargin:10,\r\n\t\t\t\t\t\tcols:[\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{ \r\n\t\t\t\t\t\t\t\tshortcut:\"F10\", view:\"button\", label:\"Nhận\", type:\"form\", align:\"center\", width:120, \r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function() {\r\n\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"dmwindow-form\");\r\n\t\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\t\t\tconsole.log(item);\r\n\t\t\t\t\t\t\t\t\t\tif(editmode==1){\r\n\t\t\t\t\t\t\t\t\t\t\twebix.ajax().post( app.config.host + \"/api/System/InsertReferences\", item, function(text){\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\t\t//console.log(data);\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.id = data.id;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"dmwindow-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tapp.callEvent(\"dataChanged\",[editmode,item]);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(data.error);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tif(editmode==2){\r\n\t\t\t\t\t\t\t\t\t\t\twebix.ajax().post( app.config.host + \"/api/System/UpdateReferences\", item, function(text){\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\t\t//console.log(data);\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.id = data.id;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"dmwindow-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tapp.callEvent(\"dataChanged\",[editmode,item]);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(data.error);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick:function(){\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{ view:\"button\", hotkey:\"esc\", label:\"Hủy bỏ\",align:\"center\", width:120, \r\n\t\t\t\t\t\t\t\tclick:function(){\r\n\t\t\t\t\t\t\t\t\twebix.$$(\"dmwindow-win\").close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t]\r\n\t\t\t}\t\t\t\r\n\t\t\t\r\n\t\t},\t\t\r\n\t\tsetEditMode: function(mode) {\r\n\t\t\teditmode = mode;\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/dmreferences',[\"app\", \"views/forms/dmreferences\"], function (app, dmwindowform) {\r\n \r\n\r\n var op = [];\r\n var url = app.config.host + \"/api/System/getAllWindows\";\r\n webix.ajax(url, function (text, xml, xhr) {\r\n var rp = JSON.parse(text);\r\n //console.log(Object.keys(rp).length);\r\n\r\n for (var i = 0; i < Object.keys(rp[\"data\"]).length; i++) {\r\n op.push({ ID: String(rp[\"data\"][i][\"ID\"]), WINDOW_NAME: String(rp[\"data\"][i][\"WINDOW_NAME\"]) });\r\n }\r\n console.log(op[0][\"WINDOW_NAME\"]);\r\n });\r\n\r\n var controls = [\r\n {\r\n id: \"btnPlus\",\r\n view: \"button\",\r\n type: \"iconButton\",\r\n icon: \"plus\",\r\n label: \"Thêm\",\r\n width: 110,\r\n css: \"button_raised\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var win = this.$scope.ui(dmwindowform.$ui);\r\n dmwindowform.setEditMode(1);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"iconButton\",\r\n icon: \"edit\",\r\n label: \"Sửa\",\r\n width: 100,\r\n css: \"button_raised\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmwindowform.$ui);\r\n var form = webix.$$(\"dmwindow-form\");\r\n\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n console.log(item);\r\n form.setValues(item);\r\n\r\n dmwindowform.setEditMode(2);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnDelete\",\r\n view: \"button\",\r\n type: \"iconButton\",\r\n icon: \"trash-o\",\r\n label: \"Xóa\",\r\n width: 100,\r\n css: \"button_raised\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \" + item.WINDOW_NAME,\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.ajax().post(app.config.host + \"/api/System/DeleteReferences?id=\" + item.id, function (text, xml, xhr) {\r\n if (text.hasOwnProperty(\"error\")) {\r\n webix.message(text.error);\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"dmwindowData\",\r\n view: \"datatable\",\r\n select: true,\r\n datafetch: 2,\r\n loadahead: 15,\r\n resizeColumn: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/api/System/GetAllReferences\";\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n columns: [\r\n { id: \"REFERENCES_ID\", header: \"RF ID\", width: 100 },\r\n { id: \"NAME\", header: \"Title\", width: 250 },\r\n { id: \"VALUE_FIELD\", header: \"Value Field\", width: 150 },\r\n { id: \"DISPLAY_FIELD\", header: \"Display Field\", width: 150 },\r\n { id: \"TYPE\", header: \"Type\", width: 100 },\r\n { id: \"SQL\", header: \"SQL\", width: 250 },\r\n { id: \"ORDER_BY\", header: \"ORDER BY\", width: 150 },\r\n { id: \"LIST_VALUE\", header: \"LIST VALUE\", width: 250 },\r\n { id: \"GHICHU\", header: \"GHI CHU\", width: 250 },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 45,\r\n view: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmwindowData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmwindow,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/dmtab',[\"app\"], function (app) {\r\n\tvar editmode = 0;\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"dmtab-win\", position: \"center\",\r\n\t\t\thead: \"Thông tin Tab\",\r\n\t\t\tfullscreen: true,\r\n\t\t\tbody: {\r\n\t\t\t\tview: \"scrollview\",\r\n\t\t\t\tscroll: \"native-y\",\r\n\t\t\t\tbody: {\r\n\t\t\t\t\tpaddingY: 10,\r\n\t\t\t\t\tpaddingX: 10,\r\n\t\t\t\t\telementsConfig: { labelWidth: 100 },\r\n\t\t\t\t\tview: \"form\",\r\n\t\t\t\t\tid: \"dmtab-form\",\r\n\t\t\t\t\tcomplexData: true,\r\n\t\t\t\t\tmargin: 0,\r\n\t\t\t\t\telements: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t\t{ view: \"text\", name: \"code\", label: \"TAB ID\", id: \"dmtab-id\" },\r\n\t\t\t\t\t\t\t\t{ view: \"text\", name: \"ord\", label: \"STT\", id: \"dmtab-stt\" },\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{ view: \"text\", name: \"name\", label: \"Tab Name\", id: \"dmtab-name\" },\r\n\t\t\t\t\t\t{ view: \"text\", name: \"table_name\", label: \"Tab Table\", id: \"dmtab-table\" },\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\t\t\t\tname: \"tab_type\",\r\n\t\t\t\t\t\t\t\t\tlabel: \"TAB TYPE\",\r\n\t\t\t\t\t\t\t\t\toptions: [\"Normal\", \"Detail\", \"Master\"],\r\n\t\t\t\t\t\t\t\t\tid: \"dmtab-type\"\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\t\t\t\tname: \"tab_view\",\r\n\t\t\t\t\t\t\t\t\tlabel: \"TAB VIEW\",\r\n\t\t\t\t\t\t\t\t\toptions: [\"Grid\", \"Tree\"],\r\n\t\t\t\t\t\t\t\t\tid: \"dmtab-view\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{ view: \"text\", name: \"foreign_key\", label: \"FOREIGN KEY\", id: \"dmtab-FOREIGN-KEY\" },\r\n\t\t\t\t\t\t{ view: \"text\", name: \"insert_cmd\", label: \"INSERT CMD\", id: \"dmtab-insert-cmd\" },\r\n\t\t\t\t\t\t{ view: \"text\", name: \"update_cmd\", label: \"UPDATE CMD\", id: \"dmtab-update-cmd\" },\r\n\t\t\t\t\t\t{ view: \"text\", name: \"delete_cmd\", label: \"DELETE CMD\", id: \"dmtab-delete-cmd\" },\r\n\t\t\t\t\t\t{ view: \"textarea\", name: \"select_cmd\", label: \"SELECT CMD\", height: 60, id: \"dmtab-select-cmd\" },\r\n\t\t\t\t\t\t{ view: \"textarea\", name: \"select_change\", label: \"SELECT CHANGE\", height: 150, id: \"dmtab-select-change\" },\r\n\t\t\t\t\t\t{ view: \"textarea\", name: \"cell_editstop\", label: \"CELL EDITSTOP\", height: 150, id: \"dmtab-cell-editstop\" },\r\n\t\t\t\t\t\t{ view: \"textarea\", name: \"after_addrow\", label: \"AFTER ADDROW\", height: 150, id: \"dmtab-afteraddrow\" },\r\n\t\t\t\t\t\t{ view: \"textarea\", name: \"after_delrow\", label: \"AFTER DELROW\", height: 150, id: \"dmtab-afterdelrow\" },\r\n\t\t\t\t\t\t{ view: \"textarea\", name: \"oncheck\", label: \"ON CHECK\", height: 150, id: \"dmtab-oncheck\" },\r\n\t\t\t\t\t\t{ view: \"text\", name: \"prefix\", label: \"PREFIX\", id: \"dmtab-prefix\" },\r\n\t\t\t\t\t\t{ view: \"text\", name: \"order_by\", label: \"ORDER BY\", id: \"dmtab-orderby\" },\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tshortcut: \"F10\", view: \"button\", label: \"Nhận (F10)\", type: \"form\", align: \"center\", width: 140,\r\n\t\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"dmtab-form\");\r\n\t\t\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\t\t\t\tvar branch_code = $$(\"branch_code_tab\").getValue();\r\n if(item != null) {\r\n item[\"branch_code\"] = branch_code;\r\n }\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/WbTab/Update\";\r\n\r\n\t\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t\t.post(url, item, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\titem.id = data.id;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"dmtab-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tapp.callEvent(\"dataChanged\", [editmode, item]);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(data.error);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", type: \"danger\", align: \"center\", width: 140,\r\n\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\twebix.$$(\"dmtab-win\").close();\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t]\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tsetEditMode: function (mode) {\r\n\t\t\teditmode = mode;\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/dmtab',[\"app\", \"views/forms/dmtab\"], function (app, dmtabform) {\r\n \r\n\r\n //var windowno = app.path[1].params[0];\r\n // webix.$$(\"title\").parse({ title: \"Danh mục Tab\", details: \"Danh mục Tab system\" });\r\n webix.$$(\"title\").parse({ title: \"Điều khiển > Danh mục Tab\", details: \"Danh mục Tab system\" });\r\n\r\n var controls = [\r\n {\r\n id: \"btnPlus\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-plus\",\r\n label: \"Thêm (F4)\",\r\n css: \"webix_secondary\",\r\n width: 95,\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var win = this.$scope.ui(dmtabform.$ui);\r\n var form = webix.$$(\"dmtab-form\");\r\n\r\n if (webix.$$(\"txtWindowId\").getValue() == \"\") {\r\n webix.message(\"Bạn chưa chọn Window Id\");\r\n return;\r\n }\r\n\r\n var item = {\r\n wb_window_id: $$(\"txtWindowId\").getValue(),\r\n };\r\n\r\n form.setValues(item);\r\n\r\n dmtabform.setEditMode(1);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-edit\",\r\n label: \"Sửa (F3)\",\r\n width: 85,\r\n css: \"webix_secondary\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmtabform.$ui);\r\n var form = webix.$$(\"dmtab-form\");\r\n\r\n var table = webix.$$(\"dmtabData\");\r\n var item = table.getSelectedItem();\r\n\r\n form.setValues(item);\r\n\r\n dmtabform.setEditMode(2);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnDelete\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-trash-o\",\r\n label: \"Xóa (F8)\",\r\n css: \"webix_secondary\",\r\n width: 85,\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmtabData\");\r\n var item = table.getSelectedItem();\r\n var branch_code = $$(\"branch_code_tab\").getValue();\r\n\t\t\t\t\tif(item != null) {\r\n\t\t\t\t\t\titem[\"branch_code\"] = branch_code;\r\n\t\t\t\t\t}\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \" + item.tab_name,\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.ajax().post(app.config.host + \"/WbTab/Delete\", item, function (text, xml, xhr) {\r\n if (text.hasOwnProperty(\"error\")) {\r\n webix.message(text.error);\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnCopy\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-files-o\",\r\n label: \"Sao chép\",\r\n css: \"webix_secondary\",\r\n width: 85,\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmtabform.$ui);\r\n var form = webix.$$(\"dmtab-form\");\r\n\r\n var table = webix.$$(\"dmtabData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa chọn mục tab\" });\r\n return;\r\n }\r\n\r\n item.id = null;\r\n form.setValues(item);\r\n\r\n dmtabform.setEditMode(1);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n {\r\n\t\t\tid: \"paramDonvi\",\r\n\t\t\tview: \"toolbar\",\r\n\t\t\tcss: { \"background-color\": \"#f5f5f5 !important\" },\r\n\t\t\tborderless: true,\r\n\t\t\theight: 35,\r\n\t\t\tcols: [\r\n\t\t\t\t{\r\n\t\t\t\t\tid: \"branch_code_tab\",\r\n\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\twidth: 600,\r\n\t\t\t\t\tlabel: \"Đơn vị\",\r\n\t\t\t\t\toptions: {\r\n\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\turl: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00195A\",\r\n\t\t\t\t\t\t\tready: function () {\r\n\t\t\t\t\t\t\t\tvar count = this.count();\r\n\r\n\t\t\t\t\t\t\t\tif (count > 0) {\r\n\t\t\t\t\t\t\t\t\tvar combo = webix.$$(\"branch_code_tab\");\r\n\t\t\t\t\t\t\t\t\tvar first = this.getFirstId();\r\n\t\t\t\t\t\t\t\t\tcombo.setValue(first);\r\n\t\t\t\t\t\t\t\t\tvar tab = webix.$$(\"txtWindowId\").getPopup().getList();\r\n\t\t\t\t\t\t\t\t\tif(tab) {\r\n\t\t\t\t\t\t\t\t\t\ttab.clearAll(); \r\n\t\t\t\t\t\t\t\t\t\ttab.load(app.config.host + \"/WbWindow/All?branch_code=\" + first);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t// }\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t\ton: {\r\n\t\t\t\t\t\tonChange: function (newv, oldv) {\r\n var tabCombo = webix.$$(\"txtWindowId\");\r\n\t\t\t\t\t\t\tvar tab = tabCombo.getPopup().getList();\r\n\t\t\t\t\t\t\tif(tab && newv != null && newv != '') {\r\n\t\t\t\t\t\t\t\ttab.clearAll(); \r\n tabCombo.setValue(null);\r\n\t\t\t\t\t\t\t\ttab.load(app.config.host + \"/WbWindow/All?branch_code=\" + newv, function() {\r\n var table = webix.$$(\"dmtabData\");\r\n table.clearAll();\r\n });\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t},\r\n {},\r\n {\r\n view: \"combo\",\r\n width: 450,\r\n label: \"Window ID\",\r\n id: \"txtWindowId\",\r\n options: {\r\n view: \"gridsuggest\",\r\n id: \"grid_window\",\r\n // filter: function (obj, value) {\r\n // var string = \"\";\r\n // if (obj) {\r\n // string += obj.id + \" \";\r\n // string += obj.window_name + \" \";\r\n\r\n // }\r\n // return string.toLowerCase().indexOf(value.toLowerCase()) >= 0;\r\n // },\r\n // template: function (item) {\r\n // return item.name + \" \";\r\n //},\r\n template: \"#name#\",\r\n width: 550,\r\n body: {\r\n scroll: true,\r\n autoheight: false,\r\n columns: [\r\n { id: \"code\", header: \"Window Id\", editor: \"text\", width: 100 },\r\n { id: \"name\", header: \"Window Name\", editor: \"text\", width: 400 },\r\n ],\r\n // url: app.config.host + \"/WbWindow/All\",\r\n },\r\n },\r\n // suggest: {\r\n // \turl: app.config.host + \"/WbWindow/All\",\r\n // \ttemplate: \"#window_name#\",\r\n // \tbody: {\r\n // \t\ttemplate: \"#window_name#\"\r\n // \t}\r\n // },\r\n on: {\r\n onChange: function () {\r\n loadData();\r\n },\r\n },\r\n },\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"dmtabData\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n datafetch: 2,\r\n loadahead: 15,\r\n on: {\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n },\r\n columns: [\r\n { id: \"ord\", header: \"STT\", width: 80 },\r\n { id: \"code\", header: \"Tab Id\", width: 80 },\r\n { id: \"wb_window_id\", header: \"Window Id\", hidden: true },\r\n { id: \"name\", header: \"Tab Name\", width: 250 },\r\n { id: \"table_name\", header: \"Tab Table\", width: 150 },\r\n { id: \"tab_type\", header: \"Tab Type\", width: 100 },\r\n { id: \"tab_view\", header: \"Tab View\", width: 100 },\r\n { id: \"foreign_key\", header: \"FOREIGN KEY\", width: 150 },\r\n { id: \"insert_cmd\", header: \"INSERT CMD\", width: 150 },\r\n { id: \"update_cmd\", header: \"UPDATE CMD\", width: 150 },\r\n { id: \"delete_cmd\", header: \"DELETE CMD\", width: 150 },\r\n { id: \"select_cmd\", header: \"SELECT CMD\", width: 150 },\r\n ],\r\n //columns: columns\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n height: 39,\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n type: \"toolbar\",\r\n margin: 0,\r\n borderless: true,\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var windowId = webix.$$(\"txtWindowId\").getValue();\r\n if(windowId != null && windowId != \"\") {\r\n var branch_code = $$(\"branch_code_tab\").getValue(); \r\n var url = app.config.host + \"/WbTab/GetTabsByWindowId?id=\" + windowId + \"&branch_code=\" + branch_code;\r\n \r\n webix.ajax().get(url, function (text) {\r\n var json = JSON.parse(text);\r\n \r\n var table = webix.$$(\"dmtabData\");\r\n table.clearAll();\r\n table.parse(json);\r\n });\r\n }\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmtabData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmtab,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/dmwindow',[\"app\"], function (app) {\r\n\tvar editmode = 0;\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"dmwindow-win\", position: \"center\",\r\n\t\t\thead: \"Thông tin Window\",\r\n\t\t\tfullscreen: true,\r\n\t\t\tbody: {\r\n\t\t\t\tview: \"scrollview\",\r\n\t\t\t\tscroll: \"native-y\",\r\n\t\t\t\tbody: {\r\n\t\t\t\t\tpaddingY: 10,\r\n\t\t\t\t\tpaddingX: 10,\r\n\t\t\t\t\telementsConfig: { labelWidth: 120 },\r\n\t\t\t\t\tview: \"form\",\r\n\t\t\t\t\tid: \"dmwindow-form\",\r\n\t\t\t\t\tcomplexData: true,\r\n\t\t\t\t\tmargin: 0,\r\n\t\t\t\t\telements: [\r\n\t\t\t\t\t\t{ view: \"text\", name: \"code\", label: \"WINDOW ID\", id: \"dmwindow-id\" },\r\n\t\t\t\t\t\t{ view: \"text\", name: \"name\", label: \"Tittle\", id: \"dmwindow-name\" },\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\t\tname: \"window_type\",\r\n\t\t\t\t\t\t\tlabel: 'Window Type',\r\n\t\t\t\t\t\t\tvalue: \"Grid\",\r\n\t\t\t\t\t\t\toptions: [\"Grid\", \"Detail\", \"MasterDetail\", \"Report\"],\r\n\t\t\t\t\t\t\tid: \"dmwindow-type\"\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t\t{ view: \"text\", name: \"width\", label: \"Width\", id: \"dmwindow-width\" },\r\n\t\t\t\t\t\t\t\t{ view: \"text\", name: \"height\", label: \"Height\", id: \"dmwindow-height\" },\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t\t{ view: \"text\", name: \"fix_left\", label: \"fix_left\", id: \"dmwindow-fix_left\", tooltip: \"Số dòng cố định bên trái\" },\r\n\t\t\t\t\t\t\t\t{ view: \"text\", name: \"fix_right\", label: \"fix_right\", id: \"dmwindow-fix_right\", tooltip: \"Số dòng cố định bên phải\" },\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{ view: \"text\", name: \"max_row\", label: \"Rows max\", id: \"dmwindow-rowsmax\", tooltip: \"Số dòng lớn nhất của form\" },\r\n\t\t\t\t\t\t{ view: \"text\", name: \"tab_row\", label: \"Row tab\", id: \"dmwindow-rowtab\", tooltip: \"Dòng bắt đầu của form chi tiết nếu có\" },\r\n\t\t\t\t\t\t{ view: \"text\", name: \"voucher_code\", label: \"MA_CT\", id: \"dmwindow-mact\" },\r\n\t\t\t\t\t\t{ view: \"text\", name: \"sql_code\", label: \"SQL_CODE\", id: \"dmwindow-sqlcode\" },\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\t\tname: \"wb_infowindow_id\",\r\n\t\t\t\t\t\t\tlabel: \"INFO WINDOW\",\r\n\t\t\t\t\t\t\tid: \"dmwindow-vcinfowindowid\",\r\n\t\t\t\t\t\t\toptions: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00028\"\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{ view: \"textarea\", height: 160, name: \"after_new\", label: \"AFTER_NEW\", tooltip: \"Trước khi UI forms được tạo\" },\r\n\t\t\t\t\t\t{ view: \"textarea\", height: 160, name: \"before_save\", label: \"BEFORE_SAVE\", tooltip: \"Trước khi lưu dữ kiệu TO DO CODE\" },\r\n\t\t\t\t\t\t{ view: \"textarea\", height: 160, name: \"after_save\", label: \"AFTER_SAVE\" },\r\n\t\t\t\t\t\t{ view: \"textarea\", height: 160, name: \"detail_layout\", label: \"Layout Detail\", tooltip: \"Nếu triển khai UI ở đây thì không Auto UI\" },\r\n\t\t\t\t\t\t{ view: \"textarea\", height: 160, name: \"after_edit\", label: \"AFTER_EDIT\" },\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tshortcut: \"F10\", view: \"button\", label: \"Nhận (F10)\", type: \"form\", align: \"center\", width: 140,\r\n\t\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"dmwindow-form\");\r\n\t\t\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\t\t\t\tvar branch_code = $$(\"branch_code_window\").getValue();\r\n if(item != null) {\r\n item[\"branch_code\"] = branch_code;\r\n }\r\n\t\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t\t.post(app.config.host + \"/WbWindow/Update\", item, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t//console.log(data);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\titem.id = data.id;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"dmwindow-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tapp.callEvent(\"dataChanged\", [editmode, item]);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(data.error);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", type: \"danger\", align: \"center\", width: 140,\r\n\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\twebix.$$(\"dmwindow-win\").close();\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t]\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tsetEditMode: function (mode) {\r\n\t\t\teditmode = mode;\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/dmwindow',[\"app\", \"views/forms/dmwindow\", \"locale\"], function (app, dmwindowform, _) {\r\n \r\n\r\n var op = [];\r\n //webix.$$(\"title\").parse({ title: \"Danh mục window\", details: \"Danh mục window system\" });\r\n var controls = [\r\n {\r\n height: 38,\r\n id: \"title\",\r\n css: \"title\",\r\n width: 150,\r\n borderless: true,\r\n //css: { \"box-shadow\": \"0 -2px #3498db inset !important\" , \"background\":\"#ffffff !important\"},\r\n template: \"
#title#
\",\r\n data: { text: \"\", title: \"Danh mục window\", details: \"Danh mục window\" },\r\n },\r\n {\r\n id: \"btnPlus\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-plus\",\r\n label: _(\"THEM\") + \" (F4)\",\r\n width: 95,\r\n css: \"webix_secondary\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var win = this.$scope.ui(dmwindowform.$ui);\r\n dmwindowform.setEditMode(1);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-edit\",\r\n label: _(\"SUA\") + \" (F3)\",\r\n width: 85,\r\n css: \"webix_secondary\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmwindowform.$ui);\r\n var form = webix.$$(\"dmwindow-form\");\r\n\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n //console.log(item);\r\n form.setValues(item);\r\n\r\n dmwindowform.setEditMode(2);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnDelete\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-trash-o\",\r\n label: _(\"XOA\") + \" (F8)\",\r\n width: 85,\r\n css: \"webix_secondary\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n var branch_code = $$(\"branch_code_window\").getValue();\r\n\t\t\t\t\tif(item != null) {\r\n\t\t\t\t\t\titem[\"branch_code\"] = branch_code;\r\n\t\t\t\t\t}\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \" + item.name,\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/WbWindow/Delete\", item, function (text, xml, xhr) {\r\n if (text.hasOwnProperty(\"error\")) {\r\n webix.message(text.error);\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnCopy\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-files-o\",\r\n label: _(\"COPY\"),\r\n width: 85,\r\n css: \"webix_secondary\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dữ liệu\");\r\n return;\r\n }\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn sao chép \" + item.WINDOW_NAME,\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n var query = \"EXECUTE sproc_copy_vcwindow'\" + item.id + \"',null\";\r\n\r\n var url = app.config.host + \"/api/System/ExecuteQuery?sql=\" + query;\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.length > 0) {\r\n webix.message(json[0][\"ERROR\"]);\r\n } else {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n {\r\n\t\t\tid: \"paramDonvi\",\r\n\t\t\tview: \"toolbar\",\r\n\t\t\tcss: { \"background-color\": \"#f5f5f5 !important\" },\r\n\t\t\tborderless: true,\r\n\t\t\theight: 35,\r\n\t\t\tcols: [\r\n\t\t\t\t{\r\n\t\t\t\t\tid: \"branch_code_window\",\r\n\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\twidth: 600,\r\n\t\t\t\t\tlabel: _(\"Đơn vị\"),\r\n\t\t\t\t\toptions: {\r\n\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\turl: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00195A\",\r\n\t\t\t\t\t\t\tready: function () {\r\n\t\t\t\t\t\t\t\tvar count = this.count();\r\n\r\n\t\t\t\t\t\t\t\tif (count > 0) {\r\n\t\t\t\t\t\t\t\t\tvar combo = webix.$$(\"branch_code_window\");\r\n\t\t\t\t\t\t\t\t\tvar first = this.getFirstId();\r\n\t\t\t\t\t\t\t\t\tcombo.setValue(first);\r\n loadDmWindowData(first);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t\ton: {\r\n\t\t\t\t\t\tonChange: function (newv, oldv) {\r\n loadDmWindowData(newv)\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t} \r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"dmwindowData\",\r\n view: \"datatable\",\r\n select: true,\r\n datafetch: 100,\r\n resizeColumn: true,\r\n //loadahead: 15,\r\n // url: {\r\n // $proxy: true,\r\n // load: function (view, callback, params) {\r\n // debugger;\r\n // var url = app.config.host + \"/WbWindow/GetWindows\";\r\n\r\n // if (params == null) {\r\n // url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n // } else {\r\n // url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n // if (params.filter != null) {\r\n // var array = [];\r\n\r\n // for (var property in params.filter) {\r\n // var column = view.getColumnConfig(property);\r\n\r\n // var item = {\r\n // columnName: property,\r\n // columnType: column.columnType,\r\n // value: params.filter[property],\r\n // };\r\n\r\n // array.push(item);\r\n // }\r\n\r\n // //console.log(JSON.stringify(array));\r\n // url = url + \"&filter=\" + JSON.stringify(array);\r\n // }\r\n // }\r\n\r\n // webix.ajax(url, callback, view);\r\n // },\r\n // },\r\n on: {\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n },\r\n columns: [\r\n { id: \"code\", header: [\"No\", { content: \"textFilter\" }], width: 100 },\r\n { id: \"name\", header: [\"Title\", { content: \"textFilter\" }], width: 400 },\r\n { id: \"window_type\", header: \"Window Type\", fillspace: true },\r\n { id: \"width\", header: \"Width\", fillspace: true },\r\n { id: \"height\", header: \"Height\", fillspace: true },\r\n { id: \"max_row\", columnType: \"VC_TIEN\", header: [\"Rows max\", { content: \"textFilter\" }], fillspace: true },\r\n { id: \"tab_row\", header: \"Row tab\", fillspace: true },\r\n { id: \"voucher_code\", header: \"MA_CT\", fillspace: true },\r\n { id: \"sql_code\", header: \"SQL_CODE\", fillspace: true },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n function loadDmWindowData(branch_code) {\r\n var dataTable = $$(\"dmwindowData\");\r\n \r\n // Chỉ gán URL khi cần tải\r\n dataTable.clearAll(); // Xóa dữ liệu cũ nếu cần\r\n dataTable.define(\"url\", {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/WbWindow/GetWindows\";\r\n \r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n \r\n if (params.filter != null) {\r\n var array = [];\r\n \r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n \r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n \r\n array.push(item);\r\n }\r\n \r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n url = url + \"&branch_code=\" + branch_code;\r\n webix.ajax(url, callback, view);\r\n }\r\n });\r\n }\r\n\r\n function loadData() {\r\n var schoolyearcode = webix.$$(\"dmwindow\").getValue();\r\n\r\n var url = app.config.host + \"/api/System/GetWindowById?ID=\" + schoolyearcode;\r\n\r\n webix.ajax().get(url, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n var table = webix.$$(\"dmwindowData\");\r\n table.clearAll();\r\n table.parse(data);\r\n });\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmwindowData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmwindow,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/duyethoadon',[\"app\"], function (app) {\r\n \r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\", modal: true, id: \"duyethoadon-win\", position: \"center\",\r\n head: \"Chi tiết hóa đơn\",\r\n height: 800,\r\n width: 5000,\r\n autoheight: false,\r\n body: {\r\n paddingY: 20,\r\n paddingX: 20,\r\n //elementsConfig:{labelWidth: 120}, \r\n view: \"form\",\r\n id: \"duyethoadon-form\",\r\n complexData: true,\r\n elements: [\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin hóa đơn\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"datepicker\",\r\n label: \"Ngày hóa đơn\",\r\n name: \"invoice_issued_date\",\r\n // name: \"date\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n format: webix.Date.dateToStr(\"%d/%m/%Y\")\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Mã mẫu hóa đơn\",\r\n name: \"template_code\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Ký hiệu\",\r\n name: \"invoice_series\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Số hóa đơn\",\r\n name: \"invoice_number\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n \r\n },\r\n ]\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Trạng thái\",\r\n name: \"status\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Hình thức thanh toán\",\r\n name: \"payment_method_name\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Mã tiền tệ\",\r\n name: \"currency_code\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Tỷ giá\",\r\n name: \"exchange_rate\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n },\r\n ]\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"NH bên mua\",\r\n name: \"buyer_bank_account\",\r\n readonly: true,\r\n width: 600,\r\n labelWidth: 150,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"TK bên mua\",\r\n name: \"buyer_bank_account\",\r\n readonly: true,\r\n width: 600,\r\n labelWidth: 150,\r\n },\r\n ]\r\n }\r\n ]\r\n }\r\n },\r\n\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin khách hàng\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Mã khách hàng\",\r\n name: \"customer_code\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Mã số thuế\",\r\n name: \"buyer_taxcode\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Email\",\r\n name: \"buyer_email\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Điện thoại\",\r\n name: \"buyer_tel\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n },\r\n \r\n ]\r\n },\r\n {\r\n cols: [{\r\n view: \"text\",\r\n label: \"Tên người mua\",\r\n name: \"buyer_display_name\",\r\n readonly: true,\r\n width: 1200,\r\n labelWidth: 150,\r\n }]\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Địa chỉ\",\r\n name: \"buyer_address_line\",\r\n readonly: true,\r\n width: 1200,\r\n labelWidth: 150,\r\n },\r\n ]\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Tên đơn vị\",\r\n name: \"buyer_legal_name\",\r\n readonly: true,\r\n width: 1200,\r\n labelWidth: 150,\r\n },\r\n ]\r\n }\r\n ]\r\n }\r\n },\r\n\r\n // {\r\n // view: \"fieldset\",\r\n // label: \"Chi tiết hóa đơn\",\r\n \r\n // },\r\n\r\n { \r\n borderless:true,\r\n scrollX:true,\r\n tabbar:{ \r\n \"width\":200\r\n },\r\n view:\"datatable\",\r\n id:\"detail\",\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n }\r\n },\r\n columns:[\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n width: 40,\r\n },\r\n {\r\n id: \"item_code\",\r\n name: \"item_code\",\r\n header: \"Mã hàng\",\r\n width: 150,\r\n editor: \"combo\",\r\n },\r\n {\r\n id: \"item_name\",\r\n name: \"item_name\",\r\n header: \"Tên hàng hóa\",\r\n width: 250,\r\n editor: \"text\"\r\n },\r\n {\r\n id: \"unit_code\",\r\n name: \"unit_code\",\r\n header: \"ĐVT\",\r\n width: 150,\r\n editor: \"combo\",\r\n },\r\n {\r\n id: \"quantity\",\r\n name: \"quantity\",\r\n header: \"Số lượng\",\r\n width: 120,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n {\r\n id: \"unit_price\",\r\n name: \"unit_price\",\r\n header: \"Đơn giá\",\r\n width: 120,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n\r\n {\r\n id: \"total_amount_without_vat\",\r\n name: \"total_amount_without_vat\",\r\n header: \"Tiền trước thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n\r\n {\r\n id: \"discount_percentage\",\r\n name: \"discount_percentage\",\r\n header: \"% CK\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n\r\n {\r\n id: \"discount_amount\",\r\n name: \"discount_amount\",\r\n header: \"Tiền CK\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n\r\n {\r\n id: \"tax_type\",\r\n name: \"tax_type\",\r\n header: \"% Thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"combo\",\r\n options: null\r\n },\r\n\r\n {\r\n id: \"vat_amount\",\r\n name: \"vat_amount\",\r\n header: \"Tiền thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n\r\n {\r\n id: \"total_amount\",\r\n name: \"total_amount\",\r\n header: \"Tổng tiền\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n ],\r\n data: [\r\n \r\n ],\r\n\r\n // load:function(view, params){\r\n // var data = webix.ajax().get(app.config.host + \"System/GetInvoiceDetail?id=\" + \"inv_invoiceauth_id\");\r\n // }\r\n },\r\n\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Tổng tiền trước thuế\",\r\n name: \"total_amount_without_vat\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n format: \"1.111\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Tổng tiền CK\",\r\n name: \"discount_percentage\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n format: \"1.111\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Tiền thuế\",\r\n name: \"vat_amount\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n format: \"1.111\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Thành tiền\",\r\n name: \"total_amount\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n format: \"1.111\",\r\n },\r\n ]\r\n },\r\n\r\n {},\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n view: \"button\", hotkey: \"esc\", label: \"Đóng (ESC)\", type: \"danger\", align: \"center\", width: 120,\r\n click: function () {\r\n webix.$$(\"duyethoadon-win\").close();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n\r\n ]\r\n }\r\n\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n }\r\n\r\n };\r\n\r\n});\ndefine('views/duyethoadon',[\"app\", \"views/forms/duyethoadon\", \"locale\", \"views/modules/minvoiceplugin\", \"models/user\"], function (app, dmwindowform, _, plugin, user) {\r\n \r\n var windowno = app.path[1].params[0];\r\n var query = {\r\n command: \"SYS002\",\r\n parameter: {\r\n windowno: windowno,\r\n },\r\n };\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, query, function (text) {\r\n var json = JSON.parse(text);\r\n if (json.length > 0) {\r\n if (webix.$$(\"title\") != undefined) {\r\n webix.$$(\"title\").parse({ title: json[0][\"name\"], details: json[0][\"details\"] });\r\n $$(\"head-title\").show();\r\n }\r\n }\r\n });\r\n\r\n function signOnServerFile(data, cert, server_cert) {\r\n var parameters = {\r\n xml: data[\"InvoiceXmlData\"],\r\n refUri: \"#data\",\r\n certSerial: cert.so_serial,\r\n tokenSerial: cert.tokenSerial,\r\n signId: \"seller\",\r\n signTag: \"Signatures\",\r\n pass: cert.pass,\r\n path: cert.path,\r\n inv_InvoiceAuth_id: data[\"inv_InvoiceAuth_id\"],\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(server_cert + \"/Token/SignXmlByFile\", parameters, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json[\"error\"], \"error\");\r\n } else {\r\n var parameters = {\r\n InvoiceXmlData: json.xml,\r\n inv_InvoiceAuth_id: json.inv_InvoiceAuth_id,\r\n };\r\n //console.log(parameters);\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/SaveXml\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.trang_thai == \"Đã ký\") {\r\n var table = webix.$$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/System/ExecuteCommand\",\r\n {\r\n command: \"CM00025\",\r\n parameter: {},\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n // auto send SMS\r\n if (json[1].gia_tri == \"C\") {\r\n var data = { id: item.inv_InvoiceAuth_id };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Sms/NotifyInvoice\", data, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n } else {\r\n webix.message(data.error, \"error\");\r\n }\r\n });\r\n }\r\n // send email ma = 'AUTO_SEND_EMAIL'\r\n // if (json[0].gia_tri == \"C\") {\r\n // var data = { inv_InvoiceAuth_id: item.inv_InvoiceAuth_id, nguoinhan: item.inv_buyerEmail, tieude: \"Thông báo xuất hóa đơn điện tử\" };\r\n\r\n // webix.ajax()\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .post(app.config.host + \"/Invoice/AutoSendInvoiceByEmail\", data, function (text) {\r\n // var data = JSON.parse(text);\r\n\r\n // if (!data.hasOwnProperty(\"error\")) {\r\n\r\n // }\r\n // else {\r\n // webix.message(data.error, \"error\");\r\n // }\r\n // });\r\n // }\r\n }\r\n );\r\n // webix.modalbox.hide();\r\n // webix.message(\"Ký hóa đơn thành công !\", \"debug\");\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n function signOnServer(data, cert, server_cert) {\r\n var parameters = {\r\n xml: data[\"InvoiceXmlData\"],\r\n refUri: \"#data\",\r\n certSerial: cert.so_serial,\r\n tokenSerial: cert.tokenSerial,\r\n signId: \"seller\",\r\n signTag: \"Signatures\",\r\n pass: cert.pass,\r\n inv_InvoiceAuth_id: data[\"inv_InvoiceAuth_id\"],\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(server_cert + \"/Token/SignXml\", parameters, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json[\"error\"]);\r\n } else {\r\n var parameters = {\r\n InvoiceXmlData: json.xml,\r\n inv_InvoiceAuth_id: json.inv_InvoiceAuth_id,\r\n };\r\n //console.log(parameters);\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/SaveXml\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.trang_thai == \"Đã ký\") {\r\n var table = webix.$$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/System/ExecuteCommand\",\r\n {\r\n command: \"CM00025\",\r\n parameter: {},\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n // auto send SMS\r\n if (json[1].gia_tri == \"C\") {\r\n var data = { id: item.inv_InvoiceAuth_id };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Sms/NotifyInvoice\", data, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n } else {\r\n webix.message(data.error, \"error\");\r\n }\r\n });\r\n }\r\n // send email ma = 'AUTO_SEND_EMAIL'\r\n // if(json[0].gia_tri == \"C\")\r\n // {\r\n // \tvar data = { inv_InvoiceAuth_id: item.inv_InvoiceAuth_id, nguoinhan: item.inv_buyerEmail, tieude: \"Thông báo xuất hóa đơn điện tử\" };\r\n\r\n // \twebix.ajax()\r\n // \t\t.headers({ 'Content-type': 'application/json' })\r\n // \t\t.post(app.config.host + \"/Invoice/AutoSendInvoiceByEmail\", data, function (text) {\r\n // \t\t\tvar data = JSON.parse(text);\r\n\r\n // \t\t\tif (!data.hasOwnProperty(\"error\")) {\r\n\r\n // \t\t\t}\r\n // \t\t\telse {\r\n // \t\t\t\twebix.message(data.error, \"error\");\r\n // \t\t\t}\r\n // \t\t});\r\n // }\r\n }\r\n );\r\n\r\n // webix.modalbox.hide();\r\n // webix.message(\"Ký hóa đơn thành công !\", \"debug\");\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n var op = [];\r\n\r\n // webix.$$(\"title\").parse({ title: \"Duyệt hóa đơn\", details: \"Danh sách hóa đơn chờ duyệt\" });\r\n\r\n var controls = [\r\n {\r\n id: \"showPop\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fa fa-eye\",\r\n css: \"webix_secondary\",\r\n label: \"Chi tiết\",\r\n width: 100,\r\n\r\n //QuyenNH\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmwindowform.$ui);\r\n var form = webix.$$(\"duyethoadon-form\");\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n dmwindowform.setEditMode(2);\r\n\r\n item.invoice_issued_date = new Date(item.invoice_issued_date);\r\n\r\n // item.total_amount_without_vat = item.total_amount_without_vat ? item.total_amount_without_vat : 0;\r\n // item.total_amount_without_vat = webix.Number.format(item.total_amount_without_vat,{\r\n // groupDelimiter:\",\",\r\n // groupSize:3,\r\n // });\r\n\r\n // item.discount_percentage = item.discount_percentage ? item.discount_percentage : 0;\r\n // item.discount_percentage = webix.Number.format(item.discount_percentage,{\r\n // groupDelimiter:\",\",\r\n // groupSize:3,\r\n // });\r\n\r\n // item.vat_amount = item.vat_amount ? item.vat_amount : 0;\r\n // item.vat_amount = webix.Number.format(item.vat_amount,{\r\n // groupDelimiter:\",\",\r\n // groupSize:3,\r\n // });\r\n\r\n // item.total_amount = item.total_amount ? item.total_amount : 0;\r\n // item.total_amount = webix.Number.format(item.total_amount,{\r\n // groupDelimiter:\",\",\r\n // groupSize:3,\r\n // });\r\n\r\n form.setValues(item);\r\n detailForm.show();\r\n\r\n // QuyenNH: đẩy dữ liệu lên modal detail\r\n var tableDetail = $$(\"detail\");\r\n tableDetail.clearAll();\r\n tableDetail.load(app.config.host + \"/System/GetInvoiceDetail?id=\" + item.inv_invoiceauth_id);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-edit\",\r\n css: \"webix_secondary\",\r\n label: _(\"DUYET\") + \" (F10)\",\r\n width: 100,\r\n //css:\"button_raised\",\r\n shortcut: \"F10\",\r\n on: {\r\n onClick: function () {\r\n var type = \"01\";\r\n\r\n if (app.path.length > 0) {\r\n if (typeof app.path[1].params[0] == \"undefined\") {\r\n type = \"01\";\r\n } else {\r\n type = app.path[1].params[0];\r\n }\r\n }\r\n if (type == \"01\") {\r\n webix.confirm({\r\n text: \"Bạn có muốn duyệt hóa đơn không?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n DuyetHoaDon();\r\n }\r\n },\r\n });\r\n } else if (type == \"02\") {\r\n webix.confirm({\r\n text: \"Bạn có muốn sinh số hóa đơn không?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n laySoHoaDon();\r\n }\r\n },\r\n });\r\n } else if (type == \"03\") {\r\n var form = webix.$$(\"dmwindowData\");\r\n var datafrm = form.serialize();\r\n\r\n var data = [];\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i].inv_invoiceauth_id);\r\n }\r\n }\r\n if (data.length > 0) {\r\n webix.confirm({\r\n text: \"Bạn có muốn ký hóa đơn không?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/CheckInvoiceCancel\", JSON.stringify(data), function (text) {\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n KyHoaDon();\r\n }\r\n });\r\n }\r\n },\r\n });\r\n } else webix.message(\"Bạn chưa chọn hóa đơn để ký !\");\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnReject\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-ban\",\r\n css: \"webix_secondary\",\r\n label: _(\"TUCHOI\") + \" (F11)\",\r\n width: 100,\r\n //css:\"button_raised\",\r\n shortcut: \"F11\",\r\n on: {\r\n onClick: function () {\r\n webix.confirm({\r\n text: \"Bạn có chắc chắn từ chối hóa đơn không?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n TuChoiHoaDon();\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnPrint\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-print\",\r\n label: _(\"PRINT\") + \" (F7)\",\r\n width: 80,\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\");\r\n return;\r\n }\r\n\r\n var url = app.config.host + \"/Invoice/Preview?id=\" + item.inv_invoiceauth_id;\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n\r\n webix.modalbox.hide(box);\r\n window.open(fileURL, \"_blank\");\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnExportExcel\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-file-excel-o\",\r\n css: \"webix_secondary\",\r\n label: \"Kết xuất Excel\",\r\n width: 100,\r\n on: {\r\n onClick: function () {\r\n exportExcel();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"dmwindowData\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n datafetch: 100,\r\n url: app.config.host + \"/Invoice/GetHoaDonChoDuyet\",\r\n scheme: {\r\n $init: function (obj) {\r\n //creating fake dates for the sample\r\n obj.date = new Date(obj.ngay_hd);\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"date\",\r\n header: [_(\"NGAY_HDON\"), { content: \"dateRangeFilter\" }],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n { id: \"template_code\", header: [_(\"MAU_HD\"), { content: \"textFilter\" }], width: 150 },\r\n { id: \"invoice_series\", header: [_(\"KY_HIEU\"), { content: \"textFilter\" }], width: 120 },\r\n { id: \"invoice_number\", header: [_(\"SO_HDON\"), { content: \"textFilter\" }], width: 120 },\r\n { id: \"ten_dt\", header: [_(\"TEN_DON_VI\"), { content: \"textFilter\" }], width: 350 },\r\n {\r\n id: \"total_amount_without_vat\",\r\n header: [_(\"TIEN_TRUOC_THUE\"), { content: \"numberFilter\" }],\r\n width: 170,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n },\r\n {\r\n id: \"discount_percentage\",\r\n header: [_(\"TIEN_CK\"), { content: \"numberFilter\" }],\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n },\r\n {\r\n id: \"vat_amount\",\r\n header: [_(\"TIEN_THUE\"), { content: \"numberFilter\" }],\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n },\r\n {\r\n id: \"total_amount\",\r\n header: [_(\"THANH_TIEN\"), { content: \"numberFilter\" }],\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n },\r\n ],\r\n on: {\r\n onItemDblClick: function (id, e, node) {\r\n var showPopup = $$(\"showPop\");\r\n showPopup.callEvent(\"onClick\");\r\n\r\n // var table = webix.$$(\"dmwindowData\");\r\n // var item = table.getSelectedItem();\r\n // var template_code = item.template_code;\r\n },\r\n onItemClick: function (id, e, node) {\r\n var table1 = webix.$$(\"dmwindowData\");\r\n var record = table1.getItem(id.row);\r\n record[\"chon\"] = !record[\"chon\"];\r\n table1.refresh(id.row);\r\n },\r\n },\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 35,\r\n view: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n function exportExcel() {\r\n webix.toExcel($$(\"dmwindowData\"), {\r\n rawValues: true,\r\n columns: [\r\n {\r\n id: \"date\",\r\n exportType: \"date\",\r\n header: _(\"NGAY_HDON\"),\r\n width: 120,\r\n exportFormat: \"dd/MM/yyyy\",\r\n },\r\n { id: \"template_code\", header: _(\"MAU_HD\"), width: 150 },\r\n { id: \"invoice_series\", header: _(\"KY_HIEU\"), width: 120 },\r\n {\r\n id: \"invoice_number\",\r\n header: _(\"SO_HDON\"),\r\n width: 120,\r\n },\r\n { id: \"ten_dt\", header: _(\"TEN_DON_VI\"), width: 350 },\r\n {\r\n id: \"total_amount_without_vat\",\r\n header: _(\"TIEN_TRUOC_THUE\"),\r\n width: 120,\r\n exportType: \"number\",\r\n exportFormat: \"#,##0\",\r\n },\r\n {\r\n id: \"vat_amount\",\r\n header: _(\"TIEN_THUE\"),\r\n width: 120,\r\n exportType: \"number\",\r\n exportFormat: \"#,##0\",\r\n },\r\n {\r\n id: \"total_amount\",\r\n header: _(\"THANH_TIEN\"),\r\n width: 120,\r\n exportType: \"number\",\r\n exportFormat: \"#,##0\",\r\n },\r\n ],\r\n });\r\n }\r\n\r\n function KyHoaDon() {\r\n var table = webix.$$(\"dmwindowData\");\r\n var kytaptrung = table.config.kytaptrung;\r\n var server_cert = table.config.server_cert;\r\n\r\n if (kytaptrung == \"FILE\") {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n // var form = webix.$$(\"dmwindowData\");\r\n // form.enable();\r\n // form.hideProgress();\r\n\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n webix.modalbox.hide();\r\n\r\n var wintable = webix.$$(\"dmwindowData\");\r\n var data = wintable.serialize();\r\n\r\n webix.extend(wintable, webix.ProgressBar);\r\n wintable.disable();\r\n wintable.showProgress();\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n var item = data[i];\r\n if (item.chon != undefined) {\r\n if (item.chon == true) {\r\n var a = webix.ajax(app.config.host + \"/Invoice/ExportXml?id=\" + item.inv_InvoiceAuth_id);\r\n\r\n webix.promise\r\n .all([a])\r\n .then(function (results) {\r\n var a_result = results[0].json();\r\n signOnServerFile(a_result, cert, server_cert);\r\n })\r\n .fail(function (err) {\r\n var form = webix.$$(\"dmwindowData\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n webix.alert({\r\n title: \"Lỗi !\",\r\n text: err,\r\n type: \"alert-error\",\r\n });\r\n });\r\n }\r\n }\r\n }\r\n\r\n var form = webix.$$(\"dmwindowData\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n break;\r\n }\r\n },\r\n });\r\n\r\n var popupText = document.getElementsByClassName(\"webix_popup_text\")[0];\r\n popupText.style.paddingTop = 0;\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n // xmlData: a_result,\r\n server_cert: server_cert,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"so_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subjectname\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"ngaybatdau\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"ngayketthuc\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice/GetListCertificatesFile\",\r\n });\r\n } else {\r\n if (kytaptrung == \"C\") {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n // var form = webix.$$(\"dmwindowData\");\r\n // form.enable();\r\n // form.hideProgress();\r\n\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n webix.modalbox.hide();\r\n\r\n var wintable = webix.$$(\"dmwindowData\");\r\n var data = wintable.serialize();\r\n\r\n webix.extend(wintable, webix.ProgressBar);\r\n wintable.disable();\r\n wintable.showProgress();\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n var item = data[i];\r\n if (item.chon != undefined) {\r\n if (item.chon == true) {\r\n var a = webix.ajax(app.config.host + \"/Invoice/ExportXml?id=\" + item.inv_InvoiceAuth_id);\r\n\r\n webix.promise\r\n .all([a])\r\n .then(function (results) {\r\n var a_result = results[0].json();\r\n signOnServer(a_result, cert, server_cert);\r\n })\r\n .fail(function (err) {\r\n var form = webix.$$(\"dmwindowData\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n webix.alert({\r\n title: \"Lỗi !\",\r\n text: err,\r\n type: \"alert-error\",\r\n });\r\n });\r\n }\r\n }\r\n }\r\n\r\n var form = webix.$$(\"dmwindowData\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n break;\r\n }\r\n },\r\n });\r\n\r\n var popupText = document.getElementsByClassName(\"webix_popup_text\")[0];\r\n popupText.style.paddingTop = 0;\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n // xmlData: a_result,\r\n server_cert: server_cert,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"so_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subjectname\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"ngaybatdau\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"ngayketthuc\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice/GetListCertificates\",\r\n });\r\n } else {\r\n webix.ajax().get(app.config.host + \"/Invoice/GetListCertificates\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n\r\n if (listcerts.length == 0) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chữ ký số\" });\r\n return;\r\n }\r\n\r\n // Ký bằng Chữ ký số mềm\r\n if (listcerts.length == 1) {\r\n var certs = listcerts[0];\r\n\r\n if (certs.cert_type == \"FILE\") {\r\n console.log(\"Token File !\");\r\n var form = webix.$$(\"dmwindowData\");\r\n var datafrm = form.serialize();\r\n\r\n var data = [];\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i].inv_invoiceauth_id);\r\n }\r\n }\r\n\r\n var postData = {\r\n username: user.getCurrentUser(),\r\n invs: data,\r\n so_serial: certs.so_serial,\r\n };\r\n\r\n var url = app.config.host + \"/Invoice/SignListInvoiceCertFile\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, postData, function (text) {\r\n var res = JSON.parse(text);\r\n\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n webix.message(\"Đã thực hiện xong\");\r\n var table = $$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n });\r\n return;\r\n }\r\n }\r\n\r\n // ký bằng USB TOKEN\r\n console.log(\"USB Token !\");\r\n var form = webix.$$(\"dmwindowData\");\r\n var datafrm = form.serialize();\r\n\r\n var data = [];\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i].inv_invoiceauth_id);\r\n }\r\n }\r\n\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n \r\n //lấy time server\r\n var resultTime;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/System/GetDate\", function (text) {\r\n resultTime = JSON.parse(text);\r\n });\r\n\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n var form = webix.$$(\"dmwindowData\");\r\n form.enable();\r\n form.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n } else {\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n //console.log(json);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n\r\n var form = webix.$$(\"dmwindowData\");\r\n form.enable();\r\n form.hideProgress();\r\n } else {\r\n var table = webix.$$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n var form = webix.$$(\"dmwindowData\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n // webix.message(\"Ký thành công !\", \"success\");\r\n }\r\n });\r\n\r\n // hub.off('resNotice');\r\n // hub.on('resNotice', function (result) {\r\n // webix.message(result, \"debug\");\r\n // });\r\n\r\n var token = user.getAccessToken();\r\n var dvcs = user.getDvcsID();\r\n var language = user.getLanguage();\r\n\r\n var bear = token + \";\" + dvcs + \";\" + language;\r\n\r\n var url;\r\n if (window.location.protocol == \"file:\") {\r\n url = \"http://localhost:18374\";\r\n } else {\r\n url = window.location.origin;\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n data: data,\r\n // mst: \"0100686209\",\r\n mst: \"minvoice\", // đang fix cứng.sau này có thể fix\r\n username: user.getCurrentUser(),\r\n idSigner: \"seller\",\r\n tagSign: \"Signatures\",\r\n listcerts: form.config.lstCert,\r\n token: bear,\r\n dateKy: resultTime.dateKy,\r\n url: url,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignListInvoiceV2\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success SignListInvoiceV2!\");\r\n })\r\n .fail(function (error) {\r\n var form = webix.$$(\"dmwindowData\");\r\n form.enable();\r\n form.hideProgress();\r\n webix.message(error, \"error\");\r\n });\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n function DuyetHoaDon() {\r\n var table = webix.$$(\"dmwindowData\");\r\n var data = table.serialize();\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n var item = data[i];\r\n\r\n if (item.chon != undefined) {\r\n if (item.chon == true) {\r\n webix\r\n .ajax()\r\n .bind(item)\r\n .sync()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/DuyetHoaDon\", { inv_InvoiceAuth_id: item.inv_invoiceauth_id }, function (text) {\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n return;\r\n }\r\n\r\n $$(\"dmwindowData\").remove(this.id);\r\n });\r\n }\r\n }\r\n }\r\n\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n function laySoHoaDon() {\r\n var table = webix.$$(\"dmwindowData\");\r\n var data = table.serialize();\r\n var lstTemp = [];\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n var item = data[i];\r\n\r\n if (item.chon != undefined) {\r\n if (item.chon == true) {\r\n var temp = {\r\n inv_invoiceauth_id: item.inv_invoiceauth_id,\r\n };\r\n lstTemp.push(temp);\r\n }\r\n }\r\n }\r\n\r\n if (lstTemp.length == 0) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa chọn hóa đơn\" });\r\n return;\r\n }\r\n\r\n var postData = {\r\n data: lstTemp,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/LaySoHoaDon\", postData, function (text) {\r\n var res = JSON.parse(text);\r\n\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n var table = $$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n });\r\n }\r\n\r\n function TuChoiHoaDon() {\r\n var table = webix.$$(\"dmwindowData\");\r\n var data = table.serialize();\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n var item = data[i];\r\n\r\n if (item.chon != undefined) {\r\n if (item.chon == true) {\r\n webix\r\n .ajax()\r\n .bind(item)\r\n .sync()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/TuChoiHoaDon\", { inv_InvoiceAuth_id: item.inv_invoiceauth_id }, function (text) {\r\n if (text.hasOwnProperty(\"error\")) {\r\n webix.message(text.error);\r\n return;\r\n }\r\n\r\n $$(\"dmwindowData\").remove(this.id);\r\n });\r\n }\r\n }\r\n }\r\n\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var params = app.path[1].params;\r\n var table = webix.$$(\"dmwindowData\");\r\n // Lấy thông tin ký tập trung -----------------------------------------\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/System/ExecuteCommand\",\r\n {\r\n command: \"CM00019\",\r\n parameter: {\r\n ma_dvcs: \"\",\r\n },\r\n },\r\n {\r\n error: function (text, data, XmlHttpRequest) {\r\n //webix.modalbox.hide(box);\r\n webix.alert({\r\n title: \"Lỗi !\",\r\n text: err,\r\n type: \"alert-error\",\r\n });\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var c_result = JSON.parse(text);\r\n\r\n for (var i = 0; i < c_result.length; i++) {\r\n var item = c_result[i];\r\n\r\n if (item.ma == \"KYTAPTRUNG\") {\r\n table.config.kytaptrung = item.gia_tri;\r\n }\r\n\r\n if (item.ma == \"SERVER_CERT\") {\r\n table.config.server_cert = item.gia_tri;\r\n }\r\n }\r\n },\r\n }\r\n );\r\n\r\n // lấy danh sách chữ ký số\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice/GetListCertificates\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n //webix.modalbox.hide(box);\r\n webix.alert({\r\n title: \"Lỗi !\",\r\n text: err,\r\n type: \"alert-error\",\r\n });\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var result = JSON.parse(text);\r\n table.config.lstCert = result;\r\n },\r\n });\r\n\r\n table.define(\"url\", app.config.host + \"/Invoice/GetHoaDonChoDuyet?trangthai=Chờ duyệt\");\r\n\r\n /*webix.$$(\"title\").parse({ title: \"Duyệt hóa đơn\", details: \"Danh sách hóa đơn chờ duyệt\" });\r\n\r\n var btnEdit = webix.$$(\"btnEdit\");\r\n btnEdit.define(\"label\", _(\"DUYET\"));\r\n\r\n if (params[0] != undefined) {\r\n var type = params[0];\r\n\r\n if (type == \"02\") {\r\n webix.$$(\"title\").parse({ title: \"Ký hóa đơn\", details: \"Danh sách hóa đơn chờ ký\" });\r\n table.define(\"url\", app.config.host + \"/Invoice/GetHoaDonChoDuyet?trangthai=Chờ ký\");\r\n btnEdit.define(\"label\", _(\"SIGN\"));\r\n }\r\n }\r\n\r\n table.clearAll();\r\n table.load(table.config.url);\r\n btnEdit.refresh();*/\r\n\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmwindowData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmwindow,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n var params = app.path[1].params;\r\n\r\n var table = webix.$$(\"dmwindowData\");\r\n\r\n var btnEdit = webix.$$(\"btnEdit\");\r\n btnEdit.define(\"label\", _(\"DUYET\"));\r\n\r\n var btnReject = webix.$$(\"btnReject\");\r\n btnReject.show();\r\n //btnEdit.define(\"label\", _(\"DUYET\"));\r\n\r\n //webix.$$(\"title\").parse({ title: \"Duyệt hóa đơn\", details: \"Danh sách hóa đơn chờ duyệt\" });\r\n\r\n if (params[0] != undefined) {\r\n var type = params[0];\r\n\r\n if (type == \"01\") {\r\n //webix.$$(\"title\").parse({ title: \"Ký hóa đơn\", details: \"Danh sách hóa đơn chờ ký\" });\r\n table.define(\"url\", app.config.host + \"/Invoice/GetHoaDonChoDuyet?trangthai=Chờ duyệt\");\r\n btnEdit.define(\"label\", _(\"DUYET\"));\r\n btnReject.hide();\r\n }\r\n if (type == \"02\") {\r\n //webix.$$(\"title\").parse({ title: \"Ký hóa đơn\", details: \"Danh sách hóa đơn chờ ký\" });\r\n table.define(\"url\", app.config.host + \"/Invoice/GetHoaDonChoDuyet?trangthai=Chờ sinh số\");\r\n btnEdit.define(\"label\", _(\"Sinh số\"));\r\n btnReject.hide();\r\n }\r\n if (type == \"03\") {\r\n //webix.$$(\"title\").parse({ title: \"Ký hóa đơn\", details: \"Danh sách hóa đơn chờ ký\" });\r\n table.define(\"url\", app.config.host + \"/Invoice/GetHoaDonChoDuyet?trangthai=Chờ ký\");\r\n btnEdit.define(\"label\", _(\"SIGN\"));\r\n btnReject.hide();\r\n }\r\n }\r\n\r\n table.clearAll();\r\n table.load(table.config.url);\r\n btnEdit.refresh();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/file',[\"app\", \"locale\"], function (app, _) {\r\n var editmode = 0;\r\n // {\r\n // \"paddingY\":3, \"paddingX\":3, \"view\":\"form\", \"id\":\"window-form\", \"complexData\":true, \"margin\":0, \"borderless\":true, \"elements\":\r\n // [{\r\n // \"cols\": [\r\n // {\r\n // \"view\": \"fieldset\", \"label\": \"Thông tin chung\", \"body\": {\r\n // \"rows\": [{\r\n // \"cols\":\r\n // [{ \"id\": \"MA_DT0_DPKT\", \"view\": \"text\", \"label\": \"Mã đối tượng\", \"labelWidth\": 100, \"width\": 200, \"name\": \"MA_DT0\" }, { \"id\": \"TEN_DT0_DPKT\", \"view\": \"text\", \"label\": \"Tên đối tượng\", \"labelWidth\": 110, \"name\": \"TEN_DT0\" }]\r\n // }, { \"id\": \"ONG_BA_DPKT\", \"view\": \"text\", \"label\": \"Ông bà\", \"labelWidth\": 100, \"name\": \"ONG_BA\" }, { \"id\": \"CT_GOC_DPKT\", \"view\": \"text\", \"label\": \"Chứng từ gốc\", \"labelWidth\": 100, \"name\": \"CT_GOC\" }, { \"id\": \"DIA_CHI_DPKT\", \"view\": \"text\", \"label\": \"Địa chỉ\", \"labelWidth\": 100, \"name\": \"DIA_CHI\" }, { \"id\": \"DIEN_GIAI_DPKT\", \"view\": \"text\", \"label\": \"Diễn giải\", \"labelWidth\": 100, \"name\": \"DIEN_GIAI\" }]\r\n // }\r\n // }, \r\n // { \"width\": 10 },\r\n // {\r\n // \"view\": \"fieldset\", \"label\": \"Chứng từ\", \"body\": {\r\n // \"rows\":\r\n // [\r\n // { \"id\": \"NGAY_CT_DPKT\", \"view\": \"datepicker\", \"label\": \"Ngày chứng từ\", \"labelWidth\": 110, \"width\": 300, \"name\": \"NGAY_CT\" }, { \"id\": \"SO_CT_DPKT\", \"view\": \"text\", \"labelWidth\": 110, \"label\": \"Số chứng từ\", \"name\": \"SO_CT\" }, \r\n // { \"cols\": [{ \"id\": \"MA_NT_DPKT\", \"view\": \"text\", \"name\": \"MA_NT\", \"label\": \"Mã ngoại tệ\", \"labelWidth\": 110, \"width\": 170 }, { \"id\": \"TY_GIA_DPKT\", \"view\": \"text\", \"name\": \"TY_GIA\", \"label\": \"Tỷ giá\", \"labelWidth\": 50 }] }, { \"id\": \"MA_HT_DPKT\", \"view\": \"text\", \"labelWidth\": 110, \"label\": \"Mã hạch toán\", \"name\": \"MA_HT\" }, { \"id\": \"MA_BP_DPKT\", \"view\": \"text\", \"labelWidth\": 110, \"label\": \"Mã bộ phận\", \"name\": \"MA_BP\" }]\r\n // }\r\n // }]\r\n // },\r\n // {\r\n // \"view\": \"tabview\", \"id\": \"tab_replace\", \"cells\": [{ \"header\": \"Chi tiết thu\" },\r\n // { \"header\": \"Chi tiết thuế\" }]\r\n // }, {\r\n // \"cols\": [{ \"id\": \"T_TIEN_TT_DPKT\", \"view\": \"text\", \"label\": \"Tổng tiền trước thuế\", \"labelWidth\": 170, \"name\": \"T_TIEN_TT\" },\r\n // { \"id\": \"T_THUE_DPKT\", \"view\": \"text\", \"label\": \"Tổng tiền thuế\", \"labelWidth\": 130, \"name\": \"T_THUE\" }, { \"id\": \"T_TIEN_DPKT\", \"view\": \"text\", \"label\": \"Tổng tiền\", \"labelWidth\": 100, \"name\": \"T_TIEN\" }]\r\n // },\r\n // {\r\n // \"cols\": [{ \"id\": \"T_TIEN_TT_NT_DPKT\", \"view\": \"text\", \"label\": \"Tổng tiền trước thuế NT\", \"labelWidth\": 170, \"name\": \"T_TIEN_TT_NT\" },\r\n // { \"id\": \"T_THUE_NT_DPKT\", \"view\": \"text\", \"label\": \"Tổng tiền thuế NT\", \"labelWidth\": 130, \"name\": \"T_THUE_NT\" },\r\n // { \"id\": \"T_TIEN_NT_DPKT\", \"view\": \"text\", \"label\": \"Tổng tiền NT\", \"labelWidth\": 100, \"name\": \"T_TIEN_NT\" }]\r\n // }]\r\n // }\r\n return {\r\n $ui: {\r\n view: \"window\", modal: true, id: \"window-win\", position: \"center\",\r\n //width:800,\r\n head: \"Nam đại ka\",\r\n fullscreen: true,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n id: \"window-form\",\r\n complexData: true,\r\n keepViews: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n cols: [\r\n {\r\n view: \"fieldset\",\r\n id: \"2\",\r\n label: \"Field Set 1\",\r\n body: {\r\n rows: [\r\n {\r\n column_type: \"datetime\",\r\n css: null,\r\n data_width: null,\r\n fieldExpression: null,\r\n format: \"%d/%m/%Y\",\r\n id: \"inv_invoiceIssuedDate_inv_InvoiceAuth\",\r\n keepViews: true,\r\n label: \"Ngày hóa đơn\",\r\n labelPosition: \"left\",\r\n labelWidth: 100,\r\n name: \"inv_invoiceIssuedDate\",\r\n on: {},\r\n resizeColumn: true,\r\n value_change: null,\r\n view: \"datepicker\",\r\n width: null\r\n },\r\n {\r\n column_type: \"nvarchar\",\r\n css: \"mcls_readonly_text\",\r\n data_width: null,\r\n fieldExpression: null,\r\n format: null,\r\n id: \"inv_invoiceNumber_inv_InvoiceAuth\",\r\n keepViews: true,\r\n label: \"Số hóa đơn\",\r\n labelPosition: \"left\",\r\n labelWidth: 100,\r\n name: \"inv_invoiceNumber\",\r\n on: {},\r\n readonly: true,\r\n resizeColumn: true,\r\n value_change: null,\r\n view: \"text\",\r\n width: null\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n view: \"fieldset\",\r\n id: \"22\",\r\n label: \"Thông tin 2\",\r\n body: {\r\n rows: [\r\n {\r\n column_type: \"datetime\",\r\n css: null,\r\n data_width: null,\r\n fieldExpression: null,\r\n format: \"%d/%m/%Y\",\r\n id: \"inv_invoiceIssuedDate_inv_InvoiceAuth1\",\r\n keepViews: true,\r\n label: \"Ngày hóa đơn\",\r\n labelPosition: \"left\",\r\n labelWidth: 100,\r\n name: \"inv_invoiceIssuedDate4\",\r\n on: {},\r\n resizeColumn: true,\r\n value_change: null,\r\n view: \"datepicker\",\r\n width: null\r\n },\r\n {\r\n column_type: \"nvarchar\",\r\n css: \"mcls_readonly_text\",\r\n data_width: null,\r\n fieldExpression: null,\r\n format: null,\r\n id: \"inv_invoiceNumber_inv_InvoiceAuth1\",\r\n keepViews: true,\r\n label: \"Số hóa đơn\",\r\n labelPosition: \"left\",\r\n labelWidth: 100,\r\n name: \"inv_invoiceNumber5\",\r\n on: {},\r\n readonly: true,\r\n resizeColumn: true,\r\n value_change: null,\r\n view: \"text\",\r\n width: null\r\n }\r\n ]\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n cols: [\r\n { view: \"text\", label: \"Email1\" },\r\n { view: \"text\", label: \"ahihi\", id: \"lala\" }\r\n ]\r\n\r\n }\r\n\r\n ]\r\n }\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n }\r\n };\r\n\r\n});\ndefine('views/file',[\"app\", \"locale\", \"views/forms/file\"], function (app, _, fileform) {\r\n \r\n\r\n var op = [];\r\n\r\n webix.$$(\"title\").parse({ title: \"Danh sách file báo cáo\", details: \"Danh sách file báo cáo\" });\r\n\r\n var controls = [\r\n {\r\n id: \"btnRefresh\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-refresh\",\r\n label: _(\"REFRESH\"),\r\n width: 95,\r\n // shortcut: \"F4\",\r\n css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n table.clearAll();\r\n //console.log(table);\r\n table.load(table.config.url);\r\n //table.refresh();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnDowload\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-download\",\r\n label: _(\"Tải File\"),\r\n width: 90,\r\n // shortcut: \"F4\",\r\n css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn file cần báo cáo !\", \"error\");\r\n return;\r\n }\r\n var box = webix.modalbox({\r\n title: \"Đang tải xuống\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n //.headers({ 'Content-type': 'application/json' })\r\n .get(app.config.host + \"/Invoice/Floder?filename=\" + item.fName, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"text/csv\" });\r\n webix.html.download(file, item.fName + \".repx\");\r\n\r\n webix.modalbox.hide(box);\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // id: \"btnTest\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"refresh\",\r\n // label: _(\"TEst\"),\r\n // width: 90,\r\n // // shortcut: \"F4\",\r\n // //css:\"button_raised\",\r\n // on: {\r\n // onClick: function () {\r\n // var detailForm = this.$scope.ui(fileform.$ui);\r\n // detailForm.show();\r\n\r\n // }\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // }\r\n // },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"dmwindowData\",\r\n view: \"datatable\",\r\n select: true,\r\n datafetch: 100,\r\n resizeColumn: true,\r\n //loadahead: 15,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/Invoice/FloderInfo\";\r\n\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnDowload\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n },\r\n columns: [\r\n { id: \"index\", header: \"\", sort: \"int\", width: 40 },\r\n { id: \"fName\", header: _(\"Tên file\"), width: 300 },\r\n //{ id: \"fExtension\", header: \"Loại\", width: 100 },\r\n {\r\n id: \"fTime\",\r\n header: _(\"Ngày\"),\r\n width: 100,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 35,\r\n view: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmwindowData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmwindow,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_bangdanhsachhanghoagiamtru',[\"app\", \"models/user\"], function (app, user) {\r\n\r\n var button = [\r\n {},\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"hanghoa-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n width:1000,\r\n height:800,\r\n resize: true,\r\n id: \"hanghoa-win\",\r\n position: \"center\",\r\n head: \"Danh sách hàng hóa, dịch vụ không giảm trừ\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n id: \"hanghoa-form\",\r\n complexData: true,\r\n margin: 0,\r\n width:0,\r\n height:0,\r\n elements: [\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_hoadonFrm\",\r\n name: \"danhsach_hoadonFrm\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n width:1000,\r\n height:700,\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n url:{\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetDSHHGiamTru\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"code\",\r\n name: \"code\",\r\n header: [\r\n \"Mã\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"name\",\r\n name: \"name\",\r\n header: [\"Tên\", { content: \"serverFilter\" }],\r\n width: 500,\r\n },\r\n {\r\n id: \"vat_type\",\r\n name: \"vat_type\",\r\n header: [\" thuế\", { content: \"serverFilter\" }],\r\n width: 100,\r\n },\r\n {\r\n id: \"unit_code\",\r\n name: \"unit_code\",\r\n header: [\r\n \"Đơn vị tính\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 100,\r\n },\r\n ],\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n };\r\n});\r\n\ndefine('views/forms/68_chondai',[\"app\", \"locale\", \"models/user\", \"views/commonHD\"], function (app, _, user, commonHD) {\r\n var editmode = 0;\r\n var param;\r\n var branh_code;\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"chuyendai-form\").getValues();\r\n \r\n if ($$(\"kyhieuhoadon_78_id\").getValue() == null || $$(\"kyhieuhoadon_78_id\").getValue() == \"\") {\r\n webix.message(\"Bạn chưa chọn ký hiệu\", \"error\");\r\n return;\r\n }\r\n var kyHieuHoaDon = {\r\n cctbao_id: $$(\"kyhieuhoadon_78_id\").getValue(),\r\n };\r\n commonHD.ExcuteChonInvoice(kyHieuHoaDon,2);\r\n\r\n $$(\"chuyendai-win\").close();\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n var table = $$(\"invoiceViews\").getParentView();\r\n console.log(table);\r\n webix.$$(\"chuyendai-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"chuyendai-win\",\r\n position: \"center\",\r\n head: \"Chọn ký hiệu hóa đơn\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"chuyendai-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n // {\r\n // view: \"text\",\r\n // label: \"Tên mẫu\",\r\n // name: \"ten_mau\",\r\n // required: true,\r\n // invalidMessage: \"Tên mẫu không được bỏ trống\",\r\n // labelWidth: 120\r\n // },\r\n {\r\n view: \"combo\",\r\n name: \"kyhieuhoadon_78_id\",\r\n label: \"Kí hiệu hóa đơn\",\r\n //labelPosition: \"top\",\r\n id: \"kyhieuhoadon_78_id\",\r\n required: true,\r\n labelWidth: 120,\r\n invalidMessage: \"Kí hiệu hóa đơn không được bỏ trống\",\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n initUI: function (item) {\r\n param = item;\r\n // $$(\"kyhieuhoadon_78_id\").define(\"options\", app.config.host + \"/System/GetDataByReferencesId?id=201a2758-6e97-4296-9beb-b627ff73e1a4\");\r\n var khieu = param[\"data\"][0].WinParams.find(function(item) {\r\n return item.value_field == \"kyhieu_id\";\r\n });\r\n\r\n $$(\"kyhieuhoadon_78_id\").define(\"options\", app.config.host + \"/System/GetDataByReferencesId?id=\" + khieu.wb_references_id);\r\n var table = $$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if(item) {\r\n $$(\"kyhieuhoadon_78_id\").setValue(item.cctbao_id);\r\n $$(\"kyhieuhoadon_78_id\").refresh();\r\n }\r\n },\r\n setValues: function (item) {\r\n $$(\"chuyendai-form\").setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_chuyenDaiHoaDon',[\"app\", \"locale\", \"models/user\", \"views/commonHD\"], function (app, _, user, commonHD) {\r\n var editmode = 0;\r\n var param;\r\n var branh_code;\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"chuyendai-form\").getValues();\r\n var kyHieuHoaDon = {\r\n cctbao_id: $$(\"kyhieuhoadon_78_id\").getValue(),\r\n khieu: $$(\"kyhieuhoadon_78_id\").data.text,\r\n };\r\n\r\n switch (item.loaichuyendai_id) {\r\n case \"1\":\r\n commonHD.ExcuteReplaceInvoice(kyHieuHoaDon);\r\n break;\r\n case \"2\":\r\n commonHD.ExcuteIncreaseChangeInvoice(kyHieuHoaDon);\r\n break;\r\n case \"3\":\r\n commonHD.ExcuteReduceChangeInvoice(kyHieuHoaDon);\r\n break;\r\n case \"4\":\r\n commonHD.ExcuteInfoChangeInvoice(kyHieuHoaDon);\r\n break;\r\n default:\r\n break;\r\n }\r\n $$(\"chuyendai-win\").close();\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n var table = $$(\"invoiceViews\").getParentView();\r\n console.log(table);\r\n webix.$$(\"chuyendai-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"chuyendai-win\",\r\n position: \"center\",\r\n head: \"Chuyển dải hoá đơn hóa đơn\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"chuyendai-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n // {\r\n // view: \"text\",\r\n // label: \"Tên mẫu\",\r\n // name: \"ten_mau\",\r\n // required: true,\r\n // invalidMessage: \"Tên mẫu không được bỏ trống\",\r\n // labelWidth: 120\r\n // },\r\n {\r\n view: \"combo\",\r\n name: \"kyhieuhoadon_78_id\",\r\n label: \"Ký hiệu hóa đơn\",\r\n //labelPosition: \"top\",\r\n id: \"kyhieuhoadon_78_id\",\r\n required: true,\r\n labelWidth: 120,\r\n invalidMessage: \"Ký hiệu hóa đơn không được bỏ trống\",\r\n },\r\n {\r\n view: \"combo\",\r\n name: \"loaichuyendai_id\",\r\n label: \"Loại chuyển dải\",\r\n id: \"loaichuyendai_id\",\r\n labelWidth: 120,\r\n value: \"1\",\r\n options: [\r\n { id: 1, value: \"Thay thế\" },\r\n { id: 2, value: \"Điều chỉnh tăng\" },\r\n { id: 3, value: \"Điều chỉnh giảm\" },\r\n { id: 4, value: \"Điều chỉnh thông tin\" },\r\n ],\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n initUI: function (item) {\r\n param = item;\r\n // $$(\"kyhieuhoadon_78_id\").define(\"options\", app.config.host + \"/System/GetDataByReferencesId?id=\" + param[\"data\"][0].WinParams[0].wb_references_id);\r\n $$(\"kyhieuhoadon_78_id\").define(\"options\", app.config.host + \"/System/GetDataByReferencesId?id=8d0468ef-349f-41ce-8d63-499af9073e4a\");\r\n var table = $$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n $$(\"kyhieuhoadon_78_id\").setValue(item.cctbao_id);\r\n $$(\"kyhieuhoadon_78_id\").refresh();\r\n },\r\n setValues: function (item) {\r\n $$(\"chuyendai-form\").setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('callApis/hoadon68',[\"app\"], function (app) {\r\n \r\n var hoadonSaveChangePath = app.config.host + \"/Invoice68/hoadonSaveChange\";\r\n return {\r\n $oninit: function (app, newconfig) {\r\n },\r\n $onurl: function (url) {\r\n },\r\n /**\r\n * Save data invoice\r\n */\r\n hoadonSaveChange: function (obj) {\r\n return webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(hoadonSaveChangePath, obj);\r\n }\r\n };\r\n});\r\n\ndefine('callApis/customer',[\"app\"], function (app) {\r\n \r\n var saveCustomerPath = app.config.host + \"/Customer/SaveCustomer\";\r\n return {\r\n $oninit: function (app, newconfig) {\r\n },\r\n $onurl: function (url) {\r\n },\r\n /**\r\n * Save data customer\r\n */\r\n saveCustomer: function (obj) {\r\n return webix.ajax().post(saveCustomerPath,obj);\r\n }\r\n };\r\n});\r\n\ndefine('views/forms/formhoadon78',[\"app\", \"locale\", \"models/user\", \"models/findjson\", \"views/commonHD\", \"callApis/hoadon68\", \"callApis/customer\", \"views/DataStorage/DataHoaDon78\"], function (app, _, user, findJson, commonHD, hoadon68CallApis, customerCallApis, dataFormHd78) {\r\n var editmode = 0;\r\n var modeChangeView = 1; // 1 - Vào form theo dạng thường; 2 - vào form từ chức năng \"Sao chép chọn dải\"\r\n var tongtienHDonBke = 0;\r\n var tongtienthueHDonBke = 0;\r\n var mau04 = {};\r\n var formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n };\r\n\r\n var el = [];\r\n function renderFormat(val) {\r\n if (val === undefined) val = \"VND\";\r\n var url = app.config.host + \"/Invoice68/GetDecimalPlace?ma_nt=\" + val;\r\n var table_chitiet = webix.$$(\"hoadon68_chitiet\");\r\n\r\n var table_phi = webix.$$(\"hoadon68_phi\");\r\n\r\n var table = $$(\"invoiceForms\");\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var arr = JSON.parse(text);\r\n\r\n webix.storage.local.put(\"dsFieldFormat\", arr[0]);\r\n\r\n var arrayString_chitiet = [\"sluong\", \"dgia\", \"thtien\", \"stckhau\", \"tthue\", \"tgtien\", \"tienphi\", \"tlckhau\"];\r\n\r\n for (var i = 0; i < arrayString_chitiet.length; i++) {\r\n var field_name = \"\";\r\n switch (arrayString_chitiet[i]) {\r\n case \"sluong\":\r\n field_name = \"quantity_decimal\";\r\n break;\r\n case \"dgia\":\r\n field_name = \"price_decimal\";\r\n break;\r\n case \"thtien\":\r\n field_name = \"amount_without_vat_decimal\";\r\n break;\r\n case \"stckhau\":\r\n field_name = \"price_discount\";\r\n break;\r\n case \"tthue\":\r\n field_name = \"tax_price\";\r\n break;\r\n case \"tgtien\":\r\n field_name = \"total_amount_decimal\";\r\n break;\r\n case \"tienphi\":\r\n field_name = \"fee_price\";\r\n break;\r\n case \"tlckhau\":\r\n field_name = \"tlckhau\";\r\n break;\r\n }\r\n\r\n var decimal_place = Array(Number(arr[0][field_name]) + 1).join(\"9\");\r\n var decimal_format = Number(arr[0][field_name]);\r\n var format_numeric = {\r\n //maximumValue: Number(\"999999999999.\" + decimal_place),\r\n //minValue: Number(\"-999999999999.\" + decimal_place),\r\n decimalPlaces: Number(decimal_format),\r\n };\r\n var formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimal_format,\r\n };\r\n var formatSo = webix.Number.numToStr(formatSoDefault);\r\n if (field_name == \"fee_price\") {\r\n var format_config = table_phi.getColumnConfig(\"tienphi\");\r\n\r\n format_config.format = formatSo;\r\n format_config.numericConfig = format_numeric;\r\n } else {\r\n var format_config = table_chitiet.getColumnConfig(arrayString_chitiet[i]);\r\n\r\n format_config.format = formatSo;\r\n format_config.numericConfig = format_numeric;\r\n }\r\n }\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n\r\n table_chitiet.refreshColumns();\r\n table_phi.refreshColumns();\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n $$(arrayString[i]).refresh();\r\n }\r\n });\r\n }\r\n\r\n //FormButton\r\n var cols = [\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnBangKeSave\",\r\n label: \"Lưu (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var tongtienBangKeCT = webix.$$(\"tgtttbso\").getValue();\r\n var tongtienthueBangKeCT = webix.$$(\"tgtthue\").getValue();\r\n var item = $$(\"invoiceForms\").getValues();\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n if (record.length == 0) {\r\n webix.message(\"Bạn chưa bổ sung chi tiết hàng hóa\");\r\n return;\r\n }\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n var tudongtinhtien = item.tudongtinhtien;\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n var isHasDiscount = it[\"tiletienthuegtgtgiam\"] != null && it[\"tiletienthuegtgtgiam\"] != \"\" && it[\"tiletienthuegtgtgiam\"] != 0 && it[\"tiletienthuegtgtgiam\"] != '0';\r\n if (tudongtinhtien == \"0\") {\r\n if (mauso === \"2\" && !isHasDiscount) {\r\n record[i].thtien = record[i].tgtien;\r\n }\r\n }\r\n var it = record[i];\r\n\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai != null && it.kmai.toString() === \"1\") {\r\n //var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n //if (!bool) {\r\n // webix.message(\"Tiền trước thuế + Tiền thuế != tiền sau thuế\");\r\n // return;\r\n //}\r\n if ((it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") && (mauso === \"1\" || mauso === \"5\")) {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (tongtienHDonBke != tongtienBangKeCT) {\r\n webix.message(\"Tổng tiền chi tiết bảng kê khác tổng tiền của hoá đơn!\", \"error\");\r\n return false;\r\n }\r\n\r\n if (tongtienthueHDonBke != tongtienthueBangKeCT) {\r\n webix.message(\"Tổng tiền thuế chi tiết bảng kê khác tổng tiền thuế của hoá đơn!\", \"error\");\r\n return false;\r\n }\r\n\r\n if (table.validate()) {\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: record });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 0;\r\n if (tudongtinhtien == \"0\") {\r\n if (item.tgtttbso === undefined || item.tgtttbso === \"\" || item.tgtttbso === null) {\r\n item.tgtttbso = item.tgtttbso_last;\r\n }\r\n }\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var isSaveCustomerInfo = $$('is_save_customer_info') != null && $$('is_save_customer_info').getValue();\r\n\r\n function hoadonSaveChange() {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonSaveChange\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thông tin hóa đơn thành công!\", \"success\");\r\n\r\n if (isSaveCustomerInfo)\r\n if (!json.hasOwnProperty(\"message_warning\")) {\r\n webix.message(\"Lưu thông tin khách hàng thành công!\", \"success\");\r\n }\r\n\r\n var item = $$(\"invoiceForms\").getValues();\r\n if(item && modeChangeView == 2) {\r\n dataFormHd78.SetData(\"KHID\", item.cctbao_id);\r\n }\r\n webix.$$(\"invoice68\").close();\r\n\r\n if (item.hdon_id_old !== null && item.hdon_id === \"\" && item.tthai_old != \"Đã ký\") {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n }\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n\r\n if ($$('is_save_customer_info') != null && $$('is_save_customer_info').getValue() == 1) {\r\n var mnmuaValue = $$('mnmua').getValue();\r\n var tenValue = $$('ten').getValue();\r\n var mstValue = $$('mst').getValue();\r\n var dchiValue = $$('dchi').getValue();\r\n\r\n var checkMessage = [];\r\n\r\n if (mnmuaValue == \"\") checkMessage.push('\"Mã\" khách hảng là trường bắt buộc nhập\"');\r\n if (tenValue == \"\") checkMessage.push('\"Tên\" khách hảng là trường bắt buộc nhập\"');\r\n if (dchiValue == \"\") checkMessage.push('\"Địa chỉ\" khách hảng là trường bắt buộc nhập\"');\r\n\r\n var showConfirmUI = function () {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"check-customer-modal\",\r\n type: \"modal\",\r\n modal: true,\r\n position: \"center\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-form-check-customer\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
 Tạo mới khách hàng thất bại
\";\r\n },\r\n }\r\n ],\r\n },\r\n body: {\r\n padding: 10,\r\n rows: [\r\n {\r\n rows: checkMessage.map(function (message) {\r\n return {\r\n view: \"template\",\r\n template: \"▶ \" + message,\r\n autoheight: true, width: 350\r\n }\r\n }),\r\n },\r\n {\r\n view: \"template\", template: \"
Chọn \\\"Tạo hóa đơn\\\" để tạo hóa đơn và không tạo mới khách hàng
\"\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"button\", value: \"Tạo hóa đơn\", type: \"form\", click: function () {\r\n $$('check-customer-modal').hide();\r\n hoadonSaveChange();\r\n }\r\n },\r\n {\r\n view: \"button\", value: \"Hủy\", click: function () {\r\n $$('check-customer-modal').hide();\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n }).show()\r\n }\r\n\r\n if (mnmuaValue == \"\" && mstValue == \"\") {\r\n showConfirmUI();\r\n } else {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Customer/CheckExistedCustomerCodeOrTaxCode?code=\" + mnmuaValue + \"&taxcode=\" + mstValue, null, function (res) {\r\n\r\n res = JSON.parse(res);\r\n if (res.length > 0) {\r\n for (var i = 0; i < res.length; i++) {\r\n if (res[i].code == mnmuaValue) {\r\n checkMessage.push('\"Mã\" khách hàng đã tồn tại');\r\n }\r\n if (res[i].tax_code == mstValue) {\r\n checkMessage.push('\"Mã\" số thuế của khách hàng đã tồn tại');\r\n }\r\n }\r\n }\r\n\r\n if (checkMessage.length > 0) {\r\n showConfirmUI();\r\n } else {\r\n hoadonSaveChange();\r\n }\r\n });\r\n }\r\n } else\r\n hoadonSaveChange();\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n id: \"btnBangKeDelete\",\r\n label: \"Xoá\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 80,\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n var url = app.config.host + \"/Invoice68/DeleteBangKeHoaDon?id=\" + item.id;\r\n var table = $$(\"invoiceForms\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, function (result) {\r\n if (result == \"true\") {\r\n webix.message(\"Đã xoá bảng kê !\");\r\n table.enable();\r\n table.hideProgress();\r\n webix.$$(\"invoice68\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n } else {\r\n webix.message(\"Xoá không thành công !\", \"error\");\r\n }\r\n });\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnHoadonSave\",\r\n label: \"Lưu tạm (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n\r\n $$(\"btnHoadonSave\").disable();\r\n setTimeout(function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n if (item.nlap_temp != null) {\r\n var nlap_temp = new Date(item.nlap_temp);\r\n if ($$(\"nlap\").getValue() < nlap_temp) {\r\n webix.message(\"Ngày hoá đơn thay thế hoặc điều chỉnh không được nhỏ hơn hoá đơn gốc!\", \"error\");\r\n return;\r\n }\r\n }\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n if (record.length == 0) {\r\n webix.message(\"Bạn chưa bổ sung chi tiết hàng hóa\");\r\n $$(\"btnHoadonSave\").enable();\r\n return;\r\n }\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n var tudongtinhtien = item.tudongtinhtien;\r\n\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n var isHasDiscount = it[\"tiletienthuegtgtgiam\"] != null && it[\"tiletienthuegtgtgiam\"] != \"\" && it[\"tiletienthuegtgtgiam\"] != 0 && it[\"tiletienthuegtgtgiam\"] != '0';\r\n if (tudongtinhtien == \"0\") {\r\n if (mauso === \"2\" && !isHasDiscount) {\r\n record[i].thtien = record[i].tgtien;\r\n }\r\n }\r\n var it = record[i];\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai != null && it.kmai.toString() === \"1\") {\r\n /*var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + Tiền thuế != tiền sau thuế\");\r\n return;\r\n }*/\r\n if ((it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") && (mauso === \"1\" || mauso === \"5\")) {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n /*if($$(\"lblCanhbao\").type==1){\r\n webix.message( $$(\"lblCanhbao\").getValue()+\". Không thể lưu!\", \"error\");\r\n return;\r\n }*/\r\n\r\n if (table.validate()) {\r\n var TTKhac = [];\r\n Object.keys(item).forEach(function (key) {\r\n if (key.includes(\"TTKhac_\")) {\r\n var test = $$(key);\r\n if (test.config.editor === \"nummeric\" || test.config.editor === \"autonumeric\") {\r\n TTKhac.push({\r\n ttruong: key.replace(\"TTKhac_\", \"\"),\r\n kdlieu: \"decimal\",\r\n dlieu: item[key],\r\n });\r\n }\r\n else if (test.config.view === \"text\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"string\", dlieu: item[key] });\r\n else if (test.config.view === \"datepicker\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"dateTime\", dlieu: item[key] });\r\n }\r\n });\r\n var TTKhacItem = [];\r\n TTKhacItem.push({\r\n data: TTKhac,\r\n });\r\n item[\"hoadon68_khac\"] = TTKhacItem;\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: record });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 0;\r\n if (tudongtinhtien == \"0\") {\r\n if (item.tgtttbso === undefined || item.tgtttbso === \"\" || item.tgtttbso === null) {\r\n item.tgtttbso = item.tgtttbso_last;\r\n }\r\n }\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var isSaveCustomerInfo = $$('is_save_customer_info') != null && $$('is_save_customer_info').getValue();\r\n\r\n function afterSaveInvoiceSuccess(text) {\r\n var json = text.json();\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thông tin hóa đơn thành công!\", \"success\");\r\n\r\n var item = $$(\"invoiceForms\").getValues();\r\n if(item && modeChangeView == 2) {\r\n dataFormHd78.SetData(\"KHID\", item.cctbao_id);\r\n }\r\n webix.$$(\"invoice68\").close();\r\n\r\n if (item.hdon_id_old !== null && item.hdon_id === \"\" && item.tthai_old != \"Đã ký\") {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n }\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n\r\n function afterSaveInvoiceError(text) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text.json() + XmlHttpRequest, \"error\");\r\n }\r\n\r\n if (isSaveCustomerInfo) {\r\n\r\n\r\n var code = $$('mnmua') != null ? $$('mnmua').getValue() : null;\r\n var buyer_name = $$('tnmua') != null ? $$('tnmua').getValue() : null;\r\n var name = $$('ten') != null ? $$('ten').getValue() : null;\r\n var tax_code = $$('mst') != null ? $$('mst').getValue() : null;\r\n var email = $$('email') != null ? $$('email').getValue() : null;\r\n var address = $$('dchi') != null ? $$('dchi').getValue() : null;\r\n var tel = $$('sdtnmua') != null ? $$('sdtnmua').getValue() : null;\r\n var bank_account = $$('stknmua') != null ? $$('stknmua').getValue() : null;\r\n var bank_name = $$('tnhmua') != null ? $$('tnhmua').getValue() : null;\r\n var name_label = $$('ten') != null ? $$('ten').config.label : \"Tên\";\r\n var address_label = $$('dchi') != null ? $$('dchi').config.label : \"Địa chỉ\";\r\n\r\n var obj = {\r\n code: code,\r\n buyer_name: buyer_name,\r\n name: name,\r\n tax_code: tax_code,\r\n email: email,\r\n address: address,\r\n tel: tel,\r\n bank_account: bank_account,\r\n bank_name: bank_name,\r\n };\r\n\r\n var checkMessage = [];\r\n\r\n if (obj.code == \"\") checkMessage.push('\"Mã\" khách hảng là trường bắt buộc nhập\"');\r\n if (obj.name == \"\") checkMessage.push('\"' + name_label + '\" là trường bắt buộc nhập\"');\r\n if (obj.address == \"\") checkMessage.push('\"' + address_label + '\" khách hảng là trường bắt buộc nhập\"');\r\n\r\n var showConfirmUI = function () {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"check-customer-modal\",\r\n type: \"modal\",\r\n modal: true,\r\n position: \"center\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-form-check-customer\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Tạo mới khách hàng thất bại
\";\r\n },\r\n }\r\n ],\r\n },\r\n body: {\r\n padding: 10,\r\n rows: [\r\n {\r\n rows: checkMessage.map(function (message) {\r\n return {\r\n view: \"template\",\r\n template: \"▶ \" + message,\r\n autoheight: true, width: 350\r\n }\r\n }),\r\n },\r\n {\r\n view: \"template\", autoheight: true, template: \"
Chọn \\\"Tạo hóa đơn\\\" để tạo hóa đơn và không tạo mới khách hàng
\"\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Tạo hóa đơn\", type: \"form\", click: function () {\r\n $$('check-customer-modal').hide();\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n },\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Nhập lại\", type: \"danger\", click: function () {\r\n $$('check-customer-modal').hide();\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n }).show()\r\n }\r\n\r\n if (checkMessage.length > 0) {\r\n showConfirmUI();\r\n } else {\r\n customerCallApis.saveCustomer(obj).then(function (res) {\r\n res = res.json();\r\n\r\n if (!res.status) {\r\n checkMessage.push(res.message.replace(\"P0001: \", \"\"));\r\n showConfirmUI();\r\n } else {\r\n webix.message(\"Lưu thông tin khách hàng thành công\", \"success\"); hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n });\r\n }\r\n } else\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);;\r\n\r\n }\r\n $$(\"btnHoadonSave\").enable();\r\n }, 100);\r\n $$(\"btnHoadonSave\").enable();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F11\",\r\n view: \"button\",\r\n id: \"btnHoadonCQT\",\r\n label: \"Ký và gửi CQT (F11)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 150,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n if (item.nlap_temp != null) {\r\n var nlap_temp = new Date(item.nlap_temp);\r\n if ($$(\"nlap\").getValue() < nlap_temp) {\r\n webix.message(\"Ngày hoá đơn thay thế hoặc điều chỉnh không được nhỏ hơn hoá đơn gốc!\", \"error\");\r\n return;\r\n }\r\n }\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n if (record.length == 0) {\r\n webix.message(\"Bạn chưa bổ sung chi tiết hàng hóa\");\r\n return;\r\n }\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n var tudongtinhtien = item.tudongtinhtien;\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n var isHasDiscount = it[\"tiletienthuegtgtgiam\"] != null && it[\"tiletienthuegtgtgiam\"] != \"\" && it[\"tiletienthuegtgtgiam\"] != 0 && it[\"tiletienthuegtgtgiam\"] != '0';\r\n if (tudongtinhtien == \"0\") {\r\n if (mauso === \"2\" && !isHasDiscount) {\r\n record[i].thtien = record[i].tgtien;\r\n }\r\n }\r\n var it = record[i];\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai != null && it.kmai.toString() === \"1\") {\r\n /*var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + Tiền thuế != tiền sau thuế\");\r\n return;\r\n }*/\r\n if ((it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") && (mauso === \"1\" || mauso === \"5\")) {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n /*if($$(\"lblCanhbao\").type==1){\r\n webix.message( $$(\"lblCanhbao\").getValue()+\". Không thể lưu!\", \"error\");\r\n return;\r\n }*/\r\n\r\n if (table.validate()) {\r\n var TTKhac = [];\r\n Object.keys(item).forEach(function (key) {\r\n if (key.includes(\"TTKhac_\")) {\r\n var test = $$(key);\r\n if (test.config.editor === \"nummeric\" || test.config.editor === \"autonumeric\") {\r\n TTKhac.push({\r\n ttruong: key.replace(\"TTKhac_\", \"\"),\r\n kdlieu: \"decimal\",\r\n dlieu: item[key],\r\n });\r\n }\r\n else if (test.config.view === \"text\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"string\", dlieu: item[key] });\r\n else if (test.config.view === \"datepicker\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"dateTime\", dlieu: item[key] });\r\n }\r\n });\r\n var TTKhacItem = [];\r\n TTKhacItem.push({\r\n data: TTKhac,\r\n });\r\n item[\"hoadon68_khac\"] = TTKhacItem;\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: $$(\"hoadon68_chitiet\").serialize() });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 0;\r\n if (tudongtinhtien == \"0\") {\r\n if (item.tgtttbso === undefined || item.tgtttbso === \"\" || item.tgtttbso === null) {\r\n item.tgtttbso = item.tgtttbso_last;\r\n }\r\n }\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var isSaveCustomerInfo = $$('is_save_customer_info') != null && $$('is_save_customer_info').getValue();\r\n\r\n function afterSaveInvoiceSuccess(text) {\r\n var json = text.json();\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thông tin hóa đơn thành công!\", \"success\");\r\n\r\n var item = $$(\"invoiceForms\").getValues();\r\n if(item && modeChangeView == 2) {\r\n dataFormHd78.SetData(\"KHID\", item.cctbao_id);\r\n }\r\n webix.$$(\"invoice68\").close();\r\n\r\n if (item.hdon_id_old !== null && item.hdon_id === \"\" && item.tthai_old != \"Đã ký\") {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n }\r\n var lsthdon_id = [];\r\n lsthdon_id.push(json.data.hdon_id);\r\n commonHD.ExcuteHoaDon(lsthdon_id, true, false);\r\n\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n\r\n function afterSaveInvoiceError(text) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text.json() + XmlHttpRequest, \"error\");\r\n }\r\n\r\n if (isSaveCustomerInfo) {\r\n\r\n var code = $$('mnmua') != null ? $$('mnmua').getValue() : null;\r\n var buyer_name = $$('tnmua') != null ? $$('tnmua').getValue() : null;\r\n var name = $$('ten') != null ? $$('ten').getValue() : null;\r\n var tax_code = $$('mst') != null ? $$('mst').getValue() : null;\r\n var email = $$('email') != null ? $$('email').getValue() : null;\r\n var address = $$('dchi') != null ? $$('dchi').getValue() : null;\r\n var tel = $$('sdtnmua') != null ? $$('sdtnmua').getValue() : null;\r\n var bank_account = $$('stknmua') != null ? $$('stknmua').getValue() : null;\r\n var bank_name = $$('tnhmua') != null ? $$('tnhmua').getValue() : null;\r\n var name_label = $$('ten') != null ? $$('ten').config.label : \"Tên\";\r\n var address_label = $$('dchi') != null ? $$('dchi').config.label : \"Địa chỉ\";\r\n\r\n\r\n var obj = {\r\n code: code,\r\n buyer_name: buyer_name,\r\n name: name,\r\n tax_code: tax_code,\r\n email: email,\r\n address: address,\r\n tel: tel,\r\n bank_account: bank_account,\r\n bank_name: bank_name,\r\n };\r\n\r\n var checkMessage = [];\r\n\r\n if (obj.code == \"\") checkMessage.push('\"Mã\" khách hảng là trường bắt buộc nhập\"');\r\n if (obj.name == \"\") checkMessage.push('\"' + name_label + '\" là trường bắt buộc nhập\"');\r\n if (obj.address == \"\") checkMessage.push('\"' + address_label + '\" khách hảng là trường bắt buộc nhập\"');\r\n\r\n var showConfirmUI = function () {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"check-customer-modal\",\r\n type: \"modal\",\r\n modal: true,\r\n position: \"center\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-form-check-customer\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Tạo mới khách hàng thất bại
\";\r\n },\r\n }\r\n ],\r\n },\r\n body: {\r\n padding: 10,\r\n rows: [\r\n {\r\n rows: checkMessage.map(function (message) {\r\n return {\r\n view: \"template\",\r\n template: \"▶ \" + message,\r\n autoheight: true, width: 350\r\n }\r\n }),\r\n },\r\n {\r\n view: \"template\", autoheight: true, template: \"
Chọn \\\"Tạo hóa đơn\\\" để tạo hóa đơn và không tạo mới khách hàng
\"\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Tạo hóa đơn\", type: \"form\", click: function () {\r\n $$('check-customer-modal').hide();\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n },\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Nhập lại\", type: \"danger\", click: function () {\r\n $$('check-customer-modal').hide();\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n }).show()\r\n }\r\n\r\n if (checkMessage.length > 0) {\r\n showConfirmUI();\r\n } else {\r\n customerCallApis.saveCustomer(obj).then(function (res) {\r\n res = res.json();\r\n if (!res.status) {\r\n checkMessage.push(res.message.replace(\"P0001: \", \"\"));\r\n showConfirmUI();\r\n } else {\r\n\r\n webix.message(\"Lưu thông tin khách hàng thành công\", \"success\"); hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n });\r\n }\r\n } else\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);;\r\n\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n align: \"center\",\r\n type: \"danger\",\r\n width: 120,\r\n click: function () {\r\n this.getTopParentView().close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ];\r\n\r\n //FormDetail Tạo item trên trang from từ tab và data\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n //view: \"toolbar\",\r\n // css: { \"box-shadow\": \"0 -2px #3498db inset !important\", \"background\": \"#ffffff !important\" },\r\n //css: { \"background\": \"#e6f2ff !important\" },\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-iconInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Test Form
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_InvoiceForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n // var form = webix.$$(\"window-form\");\r\n // hint_form(form.config.hint);\r\n },\r\n },\r\n ],\r\n },\r\n id: \"invoice68\",\r\n resize: true,\r\n fullscreen: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () { },\r\n },\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 100 },\r\n view: \"form\",\r\n id: \"invoiceForms\",\r\n width: 800,\r\n height: 500,\r\n complexData: true,\r\n margin: 0,\r\n on: {\r\n // onViewShow: function () {\r\n // }\r\n },\r\n elements: el,\r\n },\r\n },\r\n setValues: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n if (item != null) {\r\n this.editgiatri(item);\r\n\r\n if (item.docngoaitetv) {\r\n item.docngoaitetv = 1;\r\n } else {\r\n item.docngoaitetv = 0;\r\n }\r\n\r\n form.setValues(item);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n tablePhi.clearAll();\r\n tablePhi.load(urlPhi);\r\n var urlKhac = app.config.host + \"/Invoice68/GetDataInvoiceKhac?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlKhac, function (text) {\r\n var data = JSON.parse(text);\r\n for (var i = 0; i < data.length; i++) {\r\n try {\r\n if ($$(\"TTKhac_\" + data[i].ttruong) !== undefined && $$(\"TTKhac_\" + data[i].ttruong) !== null) $$(\"TTKhac_\" + data[i].ttruong).setValue(data[i][\"dlieu\"]);\r\n } catch (e) { }\r\n }\r\n });\r\n }\r\n\r\n if (editmode == 2) {\r\n }\r\n // nếu có mẫu 04 (hóa đơn hủy)\r\n if (winconfig != null) {\r\n mau04 = winconfig;\r\n $$(\"btnHoadonSaveMau04\").show();\r\n $$(\"btnHoadonCQT\").destructor();\r\n $$(\"btnHoadonSave\").destructor();\r\n }\r\n this.getFormat(item[\"dvtte\"], item);\r\n },\r\n setValuesBangKe: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n tongtienHDonBke = item.tgtttbso;\r\n tongtienthueHDonBke = item.tgtthue;\r\n var form = win.getChildViews()[1];\r\n if (item != null) {\r\n this.editgiatri(item);\r\n\r\n form.setValues(item);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = \"\";\r\n if (editmode == 4) {\r\n url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n } else {\r\n url = app.config.host + \"/Invoice68/GetDataInvoiceDetail_BangKe?id=\" + item.id;\r\n }\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n // nếu có mẫu 04 (hóa đơn hủy)\r\n if (winconfig != null) {\r\n mau04 = winconfig;\r\n $$(\"btnHoadonSaveMau04\").show();\r\n $$(\"btnHoadonCQT\").destructor();\r\n $$(\"btnHoadonSave\").destructor();\r\n }\r\n this.getFormat(item[\"dvtte\"]);\r\n },\r\n editgiatri: function (item) {\r\n if (item[\"tdlap\"] !== undefined) item[\"tdlap\"] = removeTimeZoneT(item[\"tdlap\"]);\r\n if (item[\"cqqdbants\"] !== undefined) item[\"cqqdbants\"] = removeTimeZoneT(item[\"cqqdbants\"]);\r\n if (item[\"tgvchdtu\"] !== undefined) item[\"tgvchdtu\"] = removeTimeZoneT(item[\"tgvchdtu\"]);\r\n if (item[\"tgvchdden\"] !== undefined) item[\"tgvchdden\"] = removeTimeZoneT(item[\"tgvchdden\"]);\r\n if (item[\"nqdbants\"] !== undefined) item[\"nqdbants\"] = removeTimeZoneT(item[\"nqdbants\"]);\r\n if (item[\"nbke\"] !== undefined) item[\"nbke\"] = removeTimeZoneT(item[\"nbke\"]);\r\n if (item[\"hdktngay\"] !== undefined) item[\"hdktngay\"] = removeTimeZoneT(item[\"hdktngay\"]);\r\n item[\"giamthuebanhang20\"] = item[\"giamthuebanhang20\"] == true ? 1 : 0;\r\n item[\"hddckptquan\"] = item[\"hddckptquan\"] == true ? 1 : 0;\r\n if (item[\"nbke\"] !== undefined) item[\"nbke\"] = removeTimeZoneT(item[\"nbke\"]);\r\n if (item[\"ngccmnd\"] !== undefined) item[\"ngccmnd\"] = removeTimeZoneT(item[\"ngccmnd\"]);\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n //var form = webix.$$(\"invoiceForms\");\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1 || editmode == 4) {\r\n icon = \"\";\r\n } else {\r\n if (editmode == 2 || editmode == 5) icon = \"\";\r\n else icon = \"\";\r\n }\r\n\r\n webix.$$(\"head-iconInvoice\").setHTML(icon);\r\n webix.$$(\"head-iconInvoice\").refresh();\r\n },\r\n setModeChangeView: function (mode) {\r\n if(mode) {\r\n modeChangeView = mode;\r\n console.log(\"Mode change: \" + modeChangeView);\r\n }\r\n },\r\n setNewInvoice: function () {\r\n var form = webix.$$(\"invoiceForms\");\r\n form.config.newInvoice = true;\r\n },\r\n copyValues: function (item) {\r\n var form = webix.$$(\"invoiceForms\");\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"cthdon_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tableDetail.clearAll();\r\n tableDetail.parse(data);\r\n });\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlPhi, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"phi_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tablePhi.clearAll();\r\n tablePhi.parse(data);\r\n });\r\n var urlKhac = app.config.host + \"/Invoice68/GetDataInvoiceKhac?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlKhac, function (text) {\r\n var data = JSON.parse(text);\r\n for (var i = 0; i < data.length; i++) {\r\n try {\r\n if ($$(\"TTKhac_\" + data[i].ttruong) !== undefined && $$(\"TTKhac_\" + data[i].ttruong) !== null) $$(\"TTKhac_\" + data[i].ttruong).setValue(data[i][\"dlieu\"]);\r\n } catch (e) { }\r\n }\r\n });\r\n // tableDetail.clearAll();\r\n // tableDetail.load(url);\r\n item[\"tthdon\"] = 0;\r\n item[\"tthdon_original\"] = 0;\r\n item[\"tthdon_old\"] = 0;\r\n item[\"hdon_id\"] = null;\r\n item[\"hdon68_id_lk\"] = null;\r\n item[\"nky\"] = null;\r\n item[\"id\"] = webix.uid();\r\n item[\"giamthuebanhang20\"] = item[\"giamthuebanhang20\"] == true ? 1 : 0;\r\n item[\"hddckptquan\"] = item[\"hddckptquan\"] == true ? 1 : 0;\r\n item[\"nbke\"] = null;\r\n\r\n this.editgiatri(item);\r\n form.setValues(item);\r\n\r\n this.getFormat(item[\"dvtte\"]);\r\n },\r\n getFormat: function (val, data) {\r\n commonHD.renderFormat(val, false, data);\r\n },\r\n initUINew: function (cctbao_id) {\r\n $$(\"cctbao_id\").setValue(cctbao_id);\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/getKyhieu?cctbao_id=\" + cctbao_id, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (data.length > 0) {\r\n var form = $$(\"invoiceForms\");\r\n var values = form.getValues();\r\n\r\n values[\"khieu\"] = data[0][\"khhdon\"];\r\n values[\"mcqtcap\"] = data[0][\"mccqthue\"];\r\n values[\"mcqtcap\"] = data[0][\"mccqthue\"];\r\n values[\"msbl_tncn\"] = data[0][\"khmbl\"];\r\n values[\"tudongtinhtien\"] = 1;\r\n form.setValues(values);\r\n }\r\n });\r\n this.getFormat();\r\n },\r\n initUI: function (windowconfig) {\r\n var rp = windowconfig;\r\n var vc_window = rp[\"data\"][0];\r\n var tabs = vc_window.Tabs;\r\n $$(\"head-formInvoice\").define(\"template\", \"
\" + vc_window.name + \"
\");\r\n el = [];\r\n var col = [];\r\n var m = 0;\r\n\r\n if (vc_window.detail_layout != null && vc_window.detail_layout != \"\") {\r\n var layoutdetail = JSON.parse(vc_window.detail_layout);\r\n\r\n var layout_element = JSON.stringify(layoutdetail.elements);\r\n var json_layout = JSON.parse(layout_element);\r\n //console.log(json_layout);\r\n for (var i = 0; i < json_layout.length; i++) {\r\n el.push(json_layout[i]);\r\n }\r\n\r\n var jsonElement = findJson.getObjects(JSON.parse(JSON.stringify(el)), \"id\", \"\");\r\n\r\n for (var i = 0; i < jsonElement.length; i++) {\r\n //var item = jsonElement[i];\r\n //var item = jsonElement[i];\r\n var fields = rp[\"data\"][0][\"Tabs\"][0][\"Fields\"];\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (jsonElement[i].name == field.column_name) {\r\n item = commonHD.CreatItemMaterFromData(field);\r\n jsonElement[i] = item;\r\n\r\n findJson.findAndReplace(el, jsonElement[i].name, item);\r\n }\r\n }\r\n }\r\n if (vc_window.window_type == \"MasterDetail\") {\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Master\") {\r\n continue;\r\n }\r\n\r\n var subCols = [];\r\n\r\n for (var j = 0; j < tab.Fields.length; j++) {\r\n var field = tab.Fields[j];\r\n\r\n subCols.push(commonHD.CreatItemFromData(field, tab));\r\n }\r\n\r\n if (tab.tab_type == \"Detail\" && tab.foreign_key === \"detail_tab\") {\r\n var item = {\r\n id: \"detail_tab\",\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n\r\n body: {\r\n rows: [\r\n {\r\n view: \"toolbar\",\r\n height: 40,\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n var item = {\r\n id: webix.uid(),\r\n };\r\n table.add(item);\r\n table.select(item.id, \"ma\", false);\r\n table.edit({\r\n row: item.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n\r\n var copy = webix.copy(item);\r\n copy.cthdon_id = null;\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, \"ma\", false);\r\n table.edit({\r\n row: copy.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + \" Nhận excel chi tiết\" + \"\",\r\n view: \"button\",\r\n id: \"importRowDetail\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = $$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n \r\n // if(item == null || item == \"\")\r\n // {\r\n // webix.message(\"Bạn chưa chọn hóa đơn cần nhận chi tiết !\", \"error\");\r\n // return;\r\n // }\r\n \r\n // if (item.tthai != \"Chờ ký\") {\r\n // webix.message(\"Hóa đơn phải có trạng thái chờ ký, bạn mới có thể nhập excel chi tiết!\", \"error\");\r\n // return;\r\n // }\r\n \r\n require([\"views/forms/uploadexcelform\"], function(uploadForm){\r\n debugger;\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n if(vc_window.code ===\"WIN00782\"){\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id : \"EX00017\", filename:\"Mẫu import chi tiết HD bán hàng.xlsx\"});\r\n }else if(vc_window.code ===\"WIN00785\" || vc_window.code ===\"WIN00786\"\r\n || vc_window.code ===\"WIN00783\"|| vc_window.code ===\"WIN00784\"){\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id : \"EX00024\", filename:\"Nhan chi tiet mot HD68.xlsx\"});\r\n }else{\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id : \"EX00011\", filename:\"Nhan chi tiet mot HD68.xlsx\"});\r\n }\r\n webix.$$(\"uploader\").hide();\r\n });\r\n\r\n // var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n // table.editStop();\r\n\r\n // var item = table.getSelectedItem();\r\n // if (item == null || item == undefined) {\r\n // webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n // return;\r\n // }\r\n\r\n // var copy = webix.copy(item);\r\n // copy.cthdon_id = null;\r\n // copy.id = webix.uid();\r\n\r\n // table.add(copy);\r\n // table.unselect(item.id);\r\n // table.select(copy.id, \"ma\", false);\r\n // table.edit({\r\n // row: copy.id,\r\n // column: \"ma\",\r\n // });\r\n },\r\n },\r\n }\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_chitiet\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n scroll: true,\r\n columns: subCols,\r\n select_change: tab.select_change,\r\n cell_editstop: tab.cell_editstop,\r\n after_addrow: tab.after_addrow,\r\n after_delrow: tab.after_delrow,\r\n oncheck: tab.oncheck,\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onAfterLoad: function () {\r\n var table = this;\r\n var data = table.serialize();\r\n data.forEach(function (entry) {\r\n if (entry[\"stckhau\"] != undefined || entry[\"tlckhau\"] != undefined) {\r\n if (entry[\"stckhau\"] != 0 || entry[\"tlckhau\"] != 0) {\r\n var ck = $$(\"check_chietkhau\");\r\n if (ck != undefined) {\r\n ck.setValue(1);\r\n return false;\r\n }\r\n }\r\n }\r\n });\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onCheck: function (row, column, state) {\r\n var table = this;\r\n if (column == \"khuyen_mai\") {\r\n if (state == true) {\r\n }\r\n }\r\n },\r\n onAfterAdd: function (id, index) {\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.after_addrow != null) {\r\n var fn = Function(\"id\", \"index\", \"tableId\", this.config.after_addrow);\r\n fn(id, index, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onAfterDelete: function (id) {\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.after_delrow != null) {\r\n var fn = Function(\"id\", \"tableId\", this.config.after_delrow);\r\n fn(id, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n if (state.value === state.old) return;\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n var selectedItem = $$(\"hoadon68_chitiet\").getItem(editor.row);\r\n if (!selectedItem.kmai) selectedItem.kmai = \"1\";\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.cell_editstop != null) {\r\n var fn = Function(\"state\", \"editor\", \"ignore\", \"tableId\", this.config.cell_editstop);\r\n fn(state, editor, ignore, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n\r\n findJson.findAndReplace(el, tab.foreign_key, item);\r\n m++;\r\n //cells.push(item);\r\n }\r\n if (tab.tab_type == \"Detail\" && tab.foreign_key === \"phi_tab\") {\r\n var item = {\r\n id: \"phi_tab\",\r\n header: \"Tiền phí/lệ phí\",\r\n select: \"cell\",\r\n hidden: tab.hidden,\r\n body: {\r\n rows: [\r\n {\r\n view: \"toolbar\",\r\n height: 40,\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n var item = {\r\n id: webix.uid(),\r\n tienphi: 0,\r\n };\r\n table.add(item);\r\n table.select(item.id);\r\n table.edit({\r\n row: item.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n var copy = webix.copy(item);\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, \"tnphi\", false);\r\n table.edit({\r\n row: copy.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_phi\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n scroll: true,\r\n columns: subCols,\r\n select_change: tab.select_change,\r\n cell_editstop: tab.cell_editstop,\r\n after_addrow: tab.after_addrow,\r\n after_delrow: tab.after_delrow,\r\n oncheck: tab.oncheck,\r\n on: {\r\n onAfterAdd: function (id, index) {\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.after_addrow != null) {\r\n var fn = Function(\"id\", \"index\", \"tableId\", this.config.after_addrow);\r\n fn(id, index, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onAfterDelete: function (id) {\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.after_delrow != null) {\r\n var fn = Function(\"id\", \"tableId\", this.config.after_delrow);\r\n fn(id, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n if (state.value === state.old) return;\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.cell_editstop != null) {\r\n var fn = Function(\"state\", \"editor\", \"ignore\", \"tableId\", this.config.cell_editstop);\r\n fn(state, editor, ignore, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n\r\n findJson.findAndReplace(el, \"phi_tab\", item);\r\n m++;\r\n }\r\n }\r\n }\r\n\r\n el.push({\r\n // paddingY:10,\r\n margin: 10,\r\n cols: cols,\r\n });\r\n webix.ui(el, $$(\"invoiceForms\"));\r\n //$$(\"tab_replace\").define(\"tabbar\",{width:150 * m});\r\n //console.log(jsonElement);\r\n var windowno = vc_window.code;\r\n if (windowno == \"WIN00791\" || windowno == \"WIN00792\") {\r\n $$(\"btnHoadonCQT\").hide();\r\n }\r\n\r\n var result = webix.ajax().sync().get(app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00505\").response;\r\n var count = JSON.parse(result)[0].count;\r\n if (count > 0) {\r\n $$(\"btnHoadonCQT\").hide();\r\n }\r\n\r\n this.SetDefaultValue(windowconfig);\r\n }\r\n },\r\n SetDefaultValue: function (winconfig) {\r\n var form = webix.$$(\"invoiceForms\");\r\n var item = form.getValues();\r\n var vc_window = winconfig[\"data\"][0];\r\n\r\n var tabs = vc_window.Tabs;\r\n\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Normal\" || tab.tab_type == \"Master\") {\r\n var fields = tab.Fields;\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (field.column_name == tab.table_name + \"_id\") {\r\n item[field.column_name] = null;\r\n }\r\n\r\n if (field.column_name == \"branch_code\") {\r\n item[field.column_name] = user.getDvcsID();\r\n }\r\n\r\n if (field.default_value != null) {\r\n var defaultValue = field.default_value.toString();\r\n\r\n if (defaultValue.startsWith(\"@Default=\")) {\r\n item[field.column_name] = defaultValue.replace(\"@Default=\", \"\");\r\n }\r\n\r\n if (defaultValue.startsWith(\"@JS=\")) {\r\n var fn = Function(defaultValue.replace(\"@JS=\", \"\"));\r\n item[field.column_name] = fn();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n form.setValues(item);\r\n }\r\n };\r\n});\r\n\ndefine('views/forms/lichsuemail',[\"app\", \"locale\"], function (app, _) {\r\n function initUI(inv_InvoiceAuth_id) {\r\n // var model = { inv_InvoiceAuth_id: inv_InvoiceAuth_id };\r\n // webix.ajax()\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .post(app.config.host + \"/Invoice/history_email\", model, function (text) {\r\n // var data = JSON.parse(text);\r\n // if (!data.hasOwnProperty(\"error\")) {\r\n // $$('email-form').setValue(data);\r\n // }\r\n // else {\r\n // webix.message(data.error, \"error\");\r\n // }\r\n // });\r\n }\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n id: \"email-win\",\r\n position: \"center\",\r\n head: \"Lịch sử gửi Email\",\r\n width: 950,\r\n height: 300,\r\n move: true,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n id: \"email-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"datatable\",\r\n header: \"Lịch sử gửi Email\",\r\n id: \"tbl_email\",\r\n editable: false,\r\n resizeColumn: true,\r\n select: true,\r\n // fixedRowHeight: true,\r\n // rowLineHeight: 25,\r\n // rowHeight: 25,\r\n //autoheight:true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var inv_invoiceauth_id = \"\";\r\n var table = webix.$$(\"windowData\");\r\n if (table === undefined || table === null) {\r\n table = webix.$$(\"invoiceViews\");\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.hdon_id;\r\n } else {\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.inv_invoiceauth_id;\r\n }\r\n var url = app.config.host + \"/Invoice/InvoiceHistorySendEmail?inv_invoiceauth_id=\" + inv_invoiceauth_id;\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n on: {\r\n onresize: webix.once(function () {\r\n this.adjustRowHeight(\"send_type\", true);\r\n }),\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n // var btnEdit = $$(\"btncskh\");\r\n // btnEdit.callEvent(\"onClick\");\r\n //webix.message(\"Click MobiFone Invoice\", \"error\");\r\n },\r\n onBeforeRender: function () {\r\n //$$(\"tbl_email\").refresh();\r\n //$$(\"tbl_email\").define(\"pager\", kk);\r\n },\r\n },\r\n columns: [\r\n { id: \"stt\", header: \"STT\", width: 40 },\r\n { id: \"invoice_number\", name: \"invoice_number\", header: \"Số hóa đơn\", width: 100, editor: \"text\" },\r\n { id: \"template_code\", name: \"template_code\", header: \"Mẫu hóa đơn\", width: 120, editor: \"text\" },\r\n { id: \"invoice_series\", name: \"invoice_series\", header: \"Ký hiệu\", width: 90, editor: \"text\" },\r\n { id: \"user_send\", name: \"user_send\", header: \"Người gửi\", width: 130, editor: \"text\" },\r\n {\r\n id: \"send_date\",\r\n name: \"send_date\",\r\n header: \"Ngày gửi\",\r\n width: 110,\r\n editor: \"date\",\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n sort: \"date\",\r\n },\r\n { id: \"send_to\", name: \"send_to\", header: \"Gửi đến\", width: 150, editor: \"text\" },\r\n { id: \"send_type\", name: \"send_type\", header: \"Loại gửi\", width: 150, editor: \"text\" },\r\n ],\r\n pager: \"pagerB\",\r\n ready: function () {\r\n //this.open(this.getFirstId());\r\n this.sort({ by: \"send_date\", dir: \"desc\" });\r\n },\r\n },\r\n {\r\n id: \"pagerB\",\r\n view: \"pager\",\r\n size: 5,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n align: \"center\",\r\n width: 120,\r\n type: \"danger\",\r\n click: function () {\r\n webix.$$(\"email-win\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n initUI: initUI,\r\n };\r\n});\r\n\ndefine('views/Util',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n return {\r\n $ui: {\r\n },\r\n StringToFunc:function (s){\r\n var funcReg = /^(function)([ ]*)(\\()(\\w*)(\\))([ ]*)(\\{)([^]*)(})$/gm;\r\n var match = funcReg.exec(s);\r\n\r\n if(match) {\r\n return new Function(match[4].split(','), match[8]);\r\n }\r\n else return null;\r\n },\r\n StringToFunc2:function (s){\r\n return new Function(\"return \" + \"s\")()\r\n }\r\n };\r\n});\r\n\ndefine('views/forms/bienbanForm',[\"app\", \"locale\", \"models/user\", \"models/findjson\", \"views/commonHD\"], function (app, _, user, findJson, commonHD) {\r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n head: \"Lập biên bản Hủy/Điều chỉnh/Thay thế của hóa đơn\",\r\n width: 600,\r\n height: 350,\r\n id: \"bienBan\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 60 },\r\n id: \"bienBanForm\",\r\n view: \"form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n id: \"svban\",\r\n view: \"text\",\r\n name: \"svban\",\r\n label: \"Số văn bản\",\r\n labelWidth: 100,\r\n required: true,\r\n invalidMessage: \"Số văn bản không được bỏ trống\"\r\n },\r\n {\r\n id: \"nvban\",\r\n view: \"datepicker\",\r\n name: \"nvban\",\r\n label: \"Ngày văn bản\",\r\n labelWidth: 100,\r\n required: true,\r\n invalidMessage: \"Ngày văn bản không được bỏ trống\"\r\n },\r\n {\r\n id: \"lydo\",\r\n view: \"text\",\r\n name: \"lydo\",\r\n label: \"Lý do\",\r\n labelWidth: 100\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\", view: \"button\", label: \"Nhận (F10)\", type: \"form\", align: \"center\", width: 120,\r\n click: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n var values = $$(\"bienBanForm\").getValues();\r\n\r\n if ($$(\"bienBanForm\").validate() == false) {\r\n return;\r\n }\r\n\r\n var data_post = {\r\n editmode: editmode,\r\n data: {\r\n hdon_id: item.hdon_id,\r\n cctbao_id: item.cctbao_id,\r\n svban: values.svban,\r\n nvban: values.nvban,\r\n lydo: values.lydo\r\n }\r\n }\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveBienBan\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n } else {\r\n webix.message(editmode == 2 ? \"Sửa biên bản thành công !\" : \"Tạo biên bản thành công !\", \"success\");\r\n var win = $$(\"bienBanForm\").getTopParentView();\r\n win.close();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n {\r\n view: \"button\", id: \"btnBienBanDelete\", hotkey: \"delete\", label: \"Xóa (Delete)\", align: \"center\", type: \"danger\", width: 100,\r\n click: function () {\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (result) {\r\n if (result) {\r\n var values = $$(\"bienBanForm\").getValues();\r\n editmode = 3;\r\n\r\n var data_post = {\r\n editmode: editmode,\r\n data: {\r\n hdon_id: values.hdon_id,\r\n cctbao_id: values.cctbao_id\r\n }\r\n }\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveBienBan\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n } else {\r\n webix.message(\"Xóa biên bản thành công !\", \"success\");\r\n var win = $$(\"bienBanForm\").getTopParentView();\r\n win.close();\r\n }\r\n },\r\n });\r\n }\r\n }\r\n });\r\n }\r\n },\r\n {\r\n view: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", align: \"center\", type: \"danger\", width: 120,\r\n click: function () {\r\n var win = this.getTopParentView();\r\n win.close();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n\r\n ],\r\n rules: {\r\n \"svban\": webix.rules.isNotEmpty,\r\n \"nvban\": webix.rules.isNotEmpty\r\n }\r\n }\r\n },\r\n setValuesBienBan: function (data, winconfig) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n form.setValues(data);\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setHideBtnDelete: function () {\r\n $$('btnBienBanDelete').hide();\r\n }\r\n\r\n };\r\n});\ndefine('views/forms/68_hoadon_history_lienquan',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\", \"views/forms/68_bangmotaloiCQT\"], function (app, _, user, invoiceForms, bangmotaloiCQT) {\r\n \r\n\r\n var editmode = 0;\r\n var hdon_id = \"\";\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-icondksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formdksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Hóa đơn điều chỉnh, thay thế
\";\r\n },\r\n },\r\n ],\r\n },\r\n id: \"responseMessageForms\",\r\n resize: true,\r\n width: 1000,\r\n height: 500,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () {},\r\n },\r\n body: {\r\n view: \"form\",\r\n id: \"message\",\r\n // width: 1500,\r\n position: \"center\",\r\n // autowidth:true,\r\n paddingY: 10,\r\n paddingX: 15,\r\n complexData: true,\r\n scroll: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n // id: \"header\",\r\n template: \"
Hóa đơn điều chỉnh, thay thế
\",\r\n borderless: true,\r\n height: 40,\r\n },\r\n { height: 3 },\r\n {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_history\",\r\n resizeColumn: true,\r\n footer: false,\r\n tooltip: true,\r\n editable: true,\r\n select: \"cell\",\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n onClick: {\r\n btnPrint: function (event, cell, target) {\r\n var win = webix.$$(\"danhsach_history\");\r\n var record = win.getItem(cell.row);\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + record.hdon_id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n dowloadXml: function (event, cell, target) {\r\n var win = webix.$$(\"danhsach_history\");\r\n var record = win.getItem(cell.row);\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n if (record.tthai == \"Chờ sinh số\"|| record.tthai == \"Chờ duyệt\"|| record.tthai == \"Chờ ký\" || record.tthai == \"Chờ gửi\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký/chờ gửi không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n var table = webix.$$(\"responseMessageForms\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLHoadon?id=\" + record.hdon_id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], {\r\n type: \"application/xml\"\r\n });\r\n webix.html.download(file, \"XmlInvoice.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }, \r\n },\r\n url:{\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n // var hdon_id = \"87de11a4-0b4e-42d4-a86c-45ba10b80337\";\r\n if(hdon_id != \"\"){\r\n var url = app.config.host + \"/Invoice68/GetInviceLQ?id=\" + hdon_id;\r\n webix.ajax(url, callback, view);\r\n }\r\n }\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n\r\n {\r\n id: \"stt\",\r\n header: [\"
STT
\"],\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"hdon_id\",\r\n header: [\"
Mã hóa đơn
\", { content: \"textFilter\" }],\r\n width: 100,\r\n columnType: \"nvarchar\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"khieu\",\r\n header: [\"
Ký hiệu
\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"nvarchar\",\r\n },\r\n { id: \"shdon\", header: [\"
Số hóa đơn
\", { content: \"textFilter\" }], width: 100, columnType: \"numeric\", css: { \"text-align\": \"center\" } },\r\n { id: \"tthai\", header: [\"
Trạng thái gửi
\", { content: \"textFilter\" }], width: 120, columnType: \"nvarchar\" },\r\n { id: \"ttthdon\", header: [\"
Trạng thái
\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\" },\r\n {\r\n id: \"nlap\",\r\n header: [\r\n \"Ngày lập\"\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"nky\",\r\n header: [\r\n \"Ngày giờ ký\"\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"tgtttbso_last\",\r\n header: [\"
Thành tiền sau thuế
\", { content: \"textFilter\" }],\r\n width: 150,\r\n css: { \"text-align\": \"right\" },\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"btnPrint\",\r\n header: [\"\", \"Xem/In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n return \" \";\r\n },\r\n width: 120,\r\n },\r\n {\r\n id: \"dowloadXml\",\r\n header: [\"\", \"Tải XML\"],\r\n css: { \"text-align\": \"center\" },\r\n width: 120,\r\n template: function (obj) {\r\n return \" \";\r\n\r\n },\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n id: \"btnHuyHDDT\",\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 120,\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n hdon_id = \"\";\r\n webix.$$(\"responseMessageForms\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n setEditMode: function (id) {\r\n hdon_id = id;\r\n var table = $$(\"danhsach_history\");\r\n table.load(table.config.url);\r\n },\r\n };\r\n});\r\n\ndefine('views/windowhoadon78',[\r\n \"app\",\r\n \"locale\",\r\n \"models/user\",\r\n \"views/forms/formhoadon78\",\r\n \"views/forms/68_huyhoadon\",\r\n \"views/forms/68_huyhoadon_1\",\r\n \"views/forms/68_hoadon_history\",\r\n \"views/forms/lichsuemail\",\r\n \"views/commonHD\",\r\n \"views/Util\",\r\n \"views/forms/bienbanForm\",\r\n \"views/forms/68_hoadon_history_lienquan\",\r\n \"views/DataStorage/DataHoaDon78\"\r\n], function (app, _, user, invoiceForms, huyhoadon, huyhoadon_1, hoadonHistory, his_email, commonHD, Util, bienbanForm, hoadonlq, dataFormHd78) {\r\n \r\n var fm = function (number) {\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n });\r\n return k(number);\r\n };\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var item = this.getItem(id);\r\n\r\n this.hide();\r\n\r\n var fn = Function(\"_\", \"user\", item.on_click);\r\n fn(_, user);\r\n },\r\n },\r\n });\r\n\r\n var subBangKe = webix.ui({\r\n view: \"submenu\",\r\n width: 150,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"addBangKeHoaDon\",\r\n value: \"Thêm bảng kê\",\r\n },\r\n {\r\n id: \"EditBangKeHoaDon\",\r\n value: \"Sửa bảng kê\",\r\n },\r\n {\r\n id: \"InBangKeHoaDon\",\r\n value: \"In bảng kê\",\r\n },\r\n {\r\n id: \"ImportBangKeHoaDon\",\r\n value: \"Nhận Excel chi tiết\",\r\n }\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (record.id == \"addBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\") {\r\n webix.message(\"Vui lòng chọn hoá đơn chờ ký !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke != null) {\r\n webix.message(\"Hoá đơn đã có bảng kê không thể thêm !\", \"error\");\r\n return;\r\n }\r\n\r\n var detailForm = table.$scope.ui(invoiceForms.$ui);\r\n item.shdon = null;\r\n\r\n item.nlap = new Date(item.nlap);\r\n\r\n // ẩn tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = true;\r\n }\r\n\r\n invoiceForms.setEditMode(4); // editmode = 4(add bang ke chi tiet) // edit mode =5 (sửa bảng kê chi tiết)\r\n invoiceForms.initUI(windowconfig);\r\n //$$(\"phi_tab\").hide();\r\n $$(\"head-formInvoice\").define(\"template\", \"Bảng kê chi tiết hoá đơn\");\r\n $$(\"head-formInvoice\").refresh();\r\n\r\n webix.$$(\"infohdon\").disable();\r\n webix.$$(\"infokhang\").disable();\r\n\r\n webix.$$(\"shdon\").config.label = \"Số bảng kê\";\r\n //webix.$$(\"infohdon\").disable();\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Hóa đơn điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n invoiceForms.setValuesBangKe(item, null);\r\n detailForm.show();\r\n webix.$$(\"btnBangKeSave\").show();\r\n webix.$$(\"btnHoadonSave\").destructor();\r\n webix.$$(\"btnHoadonCQT\").destructor();\r\n }\r\n\r\n if (record.id == \"EditBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\") {\r\n webix.message(\"Vui lòng chọn hoá đơn chờ ký !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke == null) {\r\n webix.message(\"Hoá đơn chưa có bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n // ẩn tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = true;\r\n }\r\n\r\n //set số bảng kê cho form sửa bảng kê\r\n item.shdon = item.checksobangke;\r\n\r\n item.nlap = new Date(item.nlap);\r\n var detailForm = table.$scope.ui(invoiceForms.$ui);\r\n invoiceForms.setEditMode(5); // editmode = 4(add bang ke chi tiet) // edit mode =5 (sửa bảng kê chi tiết)\r\n invoiceForms.initUI(windowconfig);\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Hóa đơn điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n $$(\"head-formInvoice\").define(\"template\", \"Bảng kê chi tiết hoá đơn\");\r\n $$(\"head-formInvoice\").refresh();\r\n //set lại title số bảng kê\r\n webix.$$(\"shdon\").config.label = \"Số bảng kê\";\r\n\r\n webix.$$(\"infohdon\").disable();\r\n webix.$$(\"infokhang\").disable();\r\n\r\n invoiceForms.setValuesBangKe(item, null);\r\n detailForm.show();\r\n webix.$$(\"btnBangKeSave\").show();\r\n webix.$$(\"btnBangKeDelete\").show();\r\n webix.$$(\"btnHoadonSave\").destructor();\r\n webix.$$(\"btnHoadonCQT\").destructor();\r\n }\r\n\r\n if (record.id == \"InBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke == null) {\r\n webix.message(\"Hoá đơn chưa có bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false&checkBangKe=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n\r\n if (record.id == \"ImportBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\" && item.tthai != \"Chờ duyệt\" && item.tthai != \"Chờ sinh số\") {\r\n webix.message(\"Vui lòng chọn hoá đơn chờ ký !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke == null) {\r\n webix.message(\"Hoá đơn chưa có bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n var windowno = app.path[1].params[0];\r\n var excel_id_param = \"\";\r\n\r\n if (windowno != undefined && windowno == \"WIN00781\") {\r\n excel_id_param = \"EX00018\";\r\n }\r\n else if (windowno != undefined && windowno == \"WIN00782\") {\r\n excel_id_param = \"EX00019\";\r\n }\r\n else {\r\n webix.message(\"Chức năng nhận Excel chi tiết chưa có mẫu excel phù hợp!\", \"error\");\r\n return;\r\n }\r\n\r\n require([\"views/forms/uploadexcel\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id: excel_id_param, filename: \"MobiFone Invoice_nhan chi tiet mot bang ke.xlsx\", hdon_id: item.hdon_id });\r\n webix.$$(\"uploader\").hide();\r\n });\r\n }\r\n },\r\n },\r\n });\r\n\r\n var subBienBan = webix.ui({\r\n view: \"submenu\",\r\n width: 150,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"AddBienBan\",\r\n value: \"Thêm biên bản\",\r\n },\r\n {\r\n id: \"EditBienBan\",\r\n value: \"Sửa biên bản\",\r\n },\r\n {\r\n id: \"InBienBan\",\r\n value: \"In biên bản\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (record.id == \"AddBienBan\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthdon != 19 && item.tthdon != 21 && item.tthdon != 23 && item.tthdon != 5 && item.tthdon != 2 && item.tthdon != 3) {\r\n webix.message(\"Vui lòng chọn hóa đơn ở trạng thái điều chỉnh, thay thế, hoặc hủy\", \"error\");\r\n return;\r\n }\r\n\r\n // if (item.tthai != \"Chờ ký\") {\r\n // webix.message(\"Vui lòng chọn hoá đơn chờ ký !\", \"error\");\r\n // return;\r\n // } \r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/CheckBienBan?id=\" + item.id, {\r\n error: function (text) {\r\n webix.message(text, \"error\");\r\n return;\r\n },\r\n success: function (text) {\r\n var hasBienBan = JSON.parse(text);\r\n if (hasBienBan) {\r\n webix.message(\"Hoá đơn đã có biên bản không thể thêm mới!\", \"error\");\r\n return;\r\n }\r\n\r\n var component = table.$scope.ui(bienbanForm.$ui);\r\n bienbanForm.setEditMode(1);\r\n bienbanForm.setHideBtnDelete();\r\n component.show();\r\n },\r\n });\r\n }\r\n\r\n if (record.id == \"EditBienBan\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthdon != 19 && item.tthdon != 21 && item.tthdon != 23 && item.tthdon != 5 && item.tthdon != 2 && item.tthdon != 3) {\r\n webix.message(\"Vui lòng chọn hóa đơn ở trạng thái điều chỉnh, thay thế, hoặc hủy\", \"error\");\r\n return;\r\n }\r\n var url = app.config.host + \"/Invoice68/GetDataInvoice_BienBan?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var data = (JSON.parse(text))[0];\r\n\r\n if (!data) {\r\n webix.message(\"Hoá đơn không có biên bản không thể sửa!\", \"error\");\r\n return;\r\n }\r\n\r\n data.nvban = removeTimeZoneT(data.nvban);\r\n\r\n var component = table.$scope.ui(bienbanForm.$ui);\r\n bienbanForm.setValuesBienBan(data, null);\r\n bienbanForm.setEditMode(2);\r\n\r\n component.show();\r\n\r\n });\r\n }\r\n\r\n if (record.id == \"InBienBan\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthdon != 19 && item.tthdon != 21 && item.tthdon != 23 && item.tthdon != 5 && item.tthdon != 2 && item.tthdon != 3) {\r\n webix.message(\"Vui lòng chọn hóa đơn ở trạng thái điều chỉnh, thay thế, hoặc hủy\", \"error\");\r\n return;\r\n }\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/CheckBienBan?id=\" + item.id, {\r\n error: function (text) {\r\n webix.message(text, \"error\");\r\n return;\r\n },\r\n success: function (text) {\r\n var hasBienBan = JSON.parse(text);\r\n if (!hasBienBan) {\r\n webix.message(\"Hoá đơn chưa có biên bản không thể in!\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in biên bản ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBienBan?id=\" + item.id + \"&type=PDF&inchuyendoi=false&checkBienBan=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n });\r\n }\r\n },\r\n },\r\n });\r\n\r\n //webix.$$(\"title\").parse({ title: \"Lập hóa đơn -> Hóa đơn giá trị gia tăng\", details: \"Lập hóa đơn -> Hóa đơn giá trị gia tăng\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu78\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n \"Thay thế\",\r\n { $template: \"Separator\" },\r\n \"Điều chỉnh tăng\",\r\n { $template: \"Separator\" },\r\n \"Điều chỉnh giảm\",\r\n { $template: \"Separator\" },\r\n \"Điều chỉnh thông tin\",\r\n { $template: \"Separator\" },\r\n \"Hủy\",\r\n { $template: \"Separator\" },\r\n \"Lịch sử gửi Email\",\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n var self = this;\r\n setTimeout(function () {\r\n var kyHieuHoaDon = {\r\n cctbao_id: $$(\"kyhieu_id\").getValue(),\r\n khieu: $$(\"kyhieu_id\").data.text,\r\n };\r\n\r\n if (self.getItem(id).value == \"Thay thế\") {\r\n commonHD.ExcuteReplaceInvoice(kyHieuHoaDon);\r\n }\r\n if (self.getItem(id).value == \"Điều chỉnh tăng\") {\r\n commonHD.ExcuteIncreaseChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Điều chỉnh giảm\") {\r\n commonHD.ExcuteReduceChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Điều chỉnh thông tin\") {\r\n commonHD.ExcuteInfoChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Hủy\") {\r\n commonHD.ExcuteCancellingInvoice();\r\n }\r\n\r\n if (self.getItem(id).value == \"Lịch sử gửi Email\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n var detailForm = webix.$$(\"invoiceViews\").$scope.ui(his_email.$ui);\r\n his_email.initUI(selectedItem.id);\r\n detailForm.show();\r\n }\r\n }, 100);\r\n },\r\n },\r\n });\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Thêm (F4)\") + \"\",\r\n id: \"btnPlus\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var vc_window = windowconfig[\"data\"][0];\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n var cctbao_id = $$(\"kyhieu_id\").getValue();\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setNewInvoice();\r\n detailForm.show();\r\n if (vc_window.after_new != null) {\r\n var fn = Function(\"app\", vc_window.after_new);\r\n fn(app);\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Sửa (F3)\") + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var vc_window = windowconfig[\"data\"][0];\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n //var detailForm = this.$scope.ui(webix.$$(\"main\"));\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\" && item.tthai != \"Chờ duyệt\" && item.tthai != \"Chờ sinh số\") {\r\n webix.message(\"Hóa đơn đã ký hoặc đã gửi lên cơ quan thuế, không thể sửa !\", \"error\");\r\n return;\r\n }\r\n // main.setEditMode(0);\r\n // main.initUI(windowconfig);\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n item.nlap = new Date(item.nlap);\r\n\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.setEditMode(2);\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Hóa đơn điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n invoiceForms.setValues(item, null);\r\n\r\n detailForm.show();\r\n if (vc_window.after_edit != null) {\r\n var fn = Function(\"app\", vc_window.after_edit);\r\n fn(app);\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Xóa (F8)\") + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var lstDataChoose = commonHD.GetHoaDonChon();\r\n var lstDataChooseSort = lstDataChoose.sort(function (a, b) {\r\n return Number(a.shdon) - Number(b.shdon);\r\n });\r\n if (lstDataChooseSort.length === 0) return;\r\n var strHoaDonSelect = \" \";\r\n for (var i = 0; i < lstDataChooseSort.length; i++) {\r\n if (\r\n commonHD.CheckKhacNull(lstDataChooseSort[i].tthai) &&\r\n lstDataChooseSort[i].tthai != \"Chờ ký\" &&\r\n lstDataChooseSort[i].tthai != \"Chờ sinh số\" &&\r\n lstDataChooseSort[i].tthai != \"Chờ duyệt\"\r\n ) {\r\n webix.message(\"Không thể xóa hóa đơn đã ký,đã gửi !\", \"error\");\r\n return;\r\n }\r\n if (i < lstDataChooseSort.length - 1) {\r\n if (\r\n commonHD.CheckKhacNull(lstDataChooseSort[i].shdon) &&\r\n commonHD.CheckKhacNull(lstDataChooseSort[i + 1].shdon) &&\r\n Number(lstDataChooseSort[i + 1].shdon) - Number(lstDataChooseSort[i].shdon) >= 2\r\n ) {\r\n webix.message(\"Các hóa đơn xóa phải có số hóa đơn liên tiếp nhau\", \"error\");\r\n return;\r\n } else {\r\n strHoaDonSelect += lstDataChooseSort[i].shdon + \",\";\r\n }\r\n } else {\r\n strHoaDonSelect += lstDataChooseSort[i].shdon;\r\n }\r\n }\r\n var url = app.config.host + \"/Invoice68/hoadonXoaNhieu\";\r\n var data_post = { data: lstDataChooseSort };\r\n webix.confirm({\r\n title: \"XÓA HÓA ĐƠN\",\r\n text: \"Bạn có muốn xóa hóa đơn số: \" + strHoaDonSelect + \"\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n table.enable();\r\n table.hideProgress();\r\n return;\r\n } else {\r\n table.enable();\r\n table.clearAll();\r\n table.load(table.config.url);\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"COPY\") + \"\",\r\n id: \"btnCopy\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-files-o\",\r\n // label: _(\"COPY\"),\r\n // width: 85,\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var vc_window = windowconfig[\"data\"][0];\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n // var vc_window = windowconfig[\"data\"][0];\r\n // windowform.$ui.id = vc_window.code;\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n item.shdon = null;\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.copyValues(item);\r\n detailForm.show();\r\n if (vc_window.after_new != null) {\r\n var fn = Function(vc_window.after_new);\r\n fn();\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Bảng kê\") + \"\",\r\n id: \"btnBangKeOption\",\r\n click: function () {\r\n subBangKe.show(webix.$$(\"btnBangKeOption\").$view);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"In chuyển đổi\") + \"\",\r\n id: \"btnPrintConvert\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {},\r\n {},\r\n {},\r\n {},\r\n {},\r\n ];\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n scrollX: true,\r\n //autowidth: true,\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n ShowHistory2: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonlq.$ui);\r\n var hdon_id = cell.row;\r\n hoadonlq.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n item.chon = !item.chon;\r\n table.updateItem(id.row, item);\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n $$(\"cmenu78\").refresh();\r\n $$(\"cmenu78\").sizeToContent();\r\n $$(\"cmenu78\").attachTo($$(\"invoiceViews\"));\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n var donvitien = view[\"dvtte\"];\r\n var urldecimal = app.config.host + \"/Invoice68/GetDecimalPlace?ma_nt=\" + donvitien;\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .sync()\r\n .get(url, function (text) {\r\n var arr = JSON.parse(text);\r\n var arrayString_chitiet = [\"sluong\", \"dgia\", \"thtien\", \"stckhau\", \"tthue\", \"tgtien\", \"tienphi\"];\r\n\r\n for (var i = 0; i < arrayString_chitiet.length; i++) {\r\n var field_name = \"\";\r\n switch (arrayString_chitiet[i]) {\r\n case \"sluong\":\r\n field_name = \"quantity_decimal\";\r\n break;\r\n case \"dgia\":\r\n field_name = \"price_decimal\";\r\n break;\r\n case \"thtien\":\r\n field_name = \"amount_without_vat_decimal\";\r\n break;\r\n case \"stckhau\":\r\n field_name = \"price_discount\";\r\n break;\r\n case \"tthue\":\r\n field_name = \"tax_price\";\r\n break;\r\n case \"tgtien\":\r\n field_name = \"total_amount_decimal\";\r\n break;\r\n case \"tienphi\":\r\n field_name = \"fee_price\";\r\n break;\r\n }\r\n\r\n var decimal_place = Array(Number(arr[0][field_name]) + 1).join(\"9\");\r\n var decimal_format = Number(arr[0][field_name]);\r\n var format_numeric = {\r\n //maximumValue: Number(\"999999999999.\" + decimal_place),\r\n //minValue: Number(\"-999999999999.\" + decimal_place),\r\n decimalPlaces: Number(decimal_format),\r\n };\r\n var formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimal_format,\r\n };\r\n var formatSo = webix.Number.numToStr(formatSoDefault);\r\n\r\n var format_config = tableDetail.getColumnConfig(arrayString_chitiet[i]);\r\n\r\n format_config.format = formatSo;\r\n format_config.numericConfig = format_numeric;\r\n }\r\n });\r\n tableDetail.load(url);\r\n }\r\n },\r\n },\r\n subview: {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n css: \"subInvoice\",\r\n scrollX: true,\r\n // tabbar: {\r\n // width: 200\r\n // },\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n margin: 10,\r\n id: \"hoadon68_chitiet_view\",\r\n height: 200,\r\n columns: [],\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n columns: col,\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv * 1 != $$(\"pagerA\").config.size) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var mini_dashboard = {\r\n type: \"clean\",\r\n borderless: true,\r\n cols: [\r\n {\r\n id: \"khongMa\",\r\n name: \"khongMa\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"khongMaError\",\r\n name: \"khongMaError\",\r\n css: \"\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"doanhthunocode\",\r\n name: \"doanhthunocode\",\r\n view: \"label\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n id: \"main\",\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n rows: [mini_dashboard],\r\n },\r\n {\r\n id: \"tlbMain\",\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n var col = [];\r\n var sub_col = [];\r\n var windowconfig = null;\r\n var kihieuRefId = null;\r\n\r\n var initComponents = function (_windowconfig) {\r\n //console.log(_windowconfig);\r\n var k = Object.keys(_windowconfig[\"data\"][0][\"Tabs\"]).length;\r\n //console.log(k);\r\n var vc_window = _windowconfig[\"data\"][0];\r\n webix.$$(\"title\").parse({\r\n title: vc_window[\"name\"],\r\n details: \"Lập hóa đơn ->\" + vc_window[\"name\"],\r\n width: 1000,\r\n });\r\n var tabs = vc_window.Tabs;\r\n\r\n var windowno = vc_window.window_id;\r\n kihieuRefId = \"RF00054\";\r\n col = [];\r\n sub_col = [];\r\n col.push({\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n });\r\n col.push({\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n });\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n if (tab.tab_type === \"Master\") {\r\n var masterTab = tabs[i];\r\n for (var j = 0; j < tabs[i].Fields.length; j++) {\r\n var field = masterTab.Fields[j];\r\n\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n var item = {\r\n id: field.column_name,\r\n header: _(field.column_name),\r\n columnType: field.column_type,\r\n columnAlias: field.column_alias,\r\n template: field.template,\r\n columnFormat: field.format,\r\n //adjust: true,\r\n };\r\n if (item.template !== undefined && item.template !== null && item.template.includes(\"function\")) item.template = Util.StringToFunc(item.template);\r\n //if(item.format!== undefined && item.format!== null && item.format.includes(\"function\")) item.template = Util.StringToFunc(item.format);\r\n if (field.caption != null) {\r\n item.header = _(field.caption);\r\n }\r\n\r\n if (field.column_type == \"numeric\") {\r\n item.css = { \"text-align\": \"right\" };\r\n item.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: field.data_decimal,\r\n });\r\n }\r\n\r\n if (field.type_filter != null) {\r\n if (field.type_filter != \"\") {\r\n item.header = [_(item.header), { content: field.type_filter }];\r\n }\r\n }\r\n if (field.type_filter == \"serverMultiSelectFilter\") {\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.value_filter;\r\n }\r\n if (field.type_filter == \"serverSelectFilter\") {\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.value_filter;\r\n }\r\n if (field.type_editor == \"combo\") {\r\n item.editor = field.type_editor;\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n item.format = function (text) {\r\n var format = webix.Date.dateToStr(this.columnFormat);\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (field.type_editor == \"checkbox\") {\r\n if (field.column_type == \"boolean\") {\r\n item.checkValue = true;\r\n item.uncheckValue = false;\r\n }\r\n\r\n item.template = function (obj, common, value) {\r\n if (value == true || value == 1) return \"
\";\r\n else return \"
\";\r\n };\r\n }\r\n\r\n if (field.column_width == null) {\r\n //item.fillspace = true;\r\n } else {\r\n item.width = field.column_width;\r\n }\r\n\r\n col.push(item);\r\n }\r\n }\r\n if (tab.tab_type == \"Detail\") {\r\n for (var j = 0; j < tab.Fields.length; j++) {\r\n var field = tab.Fields[j];\r\n\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n\r\n var subCol = {\r\n id: field.column_name,\r\n header: field.caption == null ? _(field.column_name) : _(field.caption),\r\n hidden: field.hide_in_grid,\r\n };\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n subCol.format = function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (field.column_type == \"numeric\") {\r\n subCol.css = { \"text-align\": \"right\" };\r\n }\r\n if (field.column_width == null) {\r\n subCol.fillspace = true;\r\n } else {\r\n subCol.width = field.column_width;\r\n }\r\n\r\n sub_col.push(subCol);\r\n }\r\n }\r\n }\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n var subview = {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n css: \"subInvoice\",\r\n scrollX: true,\r\n // tabbar: {\r\n // width: 200\r\n // },\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n margin: 10,\r\n id: \"hoadon68_chitiet_view\",\r\n height: 200,\r\n columns: sub_col,\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n };\r\n /*var subview = {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 200,\r\n scrollX: true,\r\n cells: sub_col,\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n };*/\r\n table.define(\"subview\", subview);\r\n $$(\"head-title\").show();\r\n $$(\"head-title\").removeView(\"paramKH\");\r\n $$(\"head-title\").addView(\r\n {\r\n id: \"paramKH\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [],\r\n },\r\n 1\r\n );\r\n if (vc_window.WinParams != undefined && vc_window.WinParams != null) {\r\n for (var i = 0; i < vc_window.WinParams.length; i++) {\r\n var item = vc_window.WinParams[i];\r\n var comp = {\r\n id: item.value_field,\r\n view: item.type_editor,\r\n width: item.width,\r\n label: _(item.caption),\r\n value_field: item.value_field,\r\n isDefault: item.has_default,\r\n on: {},\r\n };\r\n\r\n if (comp.view == \"combo\") {\r\n comp.options = {\r\n body: {\r\n comboId: comp.id,\r\n isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + item.wb_references_id,\r\n ready: function () {\r\n if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n if (count > 0) {\r\n var combo = webix.$$(this.config.comboId);\r\n // Xử lý xét giá trị ở đây\r\n combo.setValue(this.getFirstId());\r\n }\r\n }\r\n },\r\n },\r\n };\r\n\r\n comp.on.onChange = function (newv, oldv) {\r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n };\r\n }\r\n \r\n if (comp.view == 'search') {\r\n // Tạm thời fix code cho riêng trường th số hoá đơn này, cơ chế đặt view id này cần xem lại\r\n if(item.value_field == 'shdon') {\r\n comp.id = 'tlbparams_shdon';\r\n comp.placeholder = \"VD: 1-10,21-30,41-50\";\r\n }\r\n var validateFunc = function() {\r\n var value = $$(comp.id).getValue();\r\n if(item.value_field == 'shdon' && value && value != \"\") {\r\n var regex = /^\\d+(-\\d+)?(,\\d+(-\\d+)?)*$/;\r\n return regex.test(value);\r\n }\r\n return true;\r\n }\r\n comp.on.onSearchIconClick = function () {\r\n if(validateFunc()) { \r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(\"Không đúng định dạng: x,x hoặc x-x,x-x (x là số)\", \"error\");\r\n }\r\n };\r\n comp.on.onEnter = function (code, e) {\r\n if(validateFunc()) { \r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(\"Không đúng định dạng: x,x hoặc x-x,x-x (x là số)\", \"error\");\r\n }\r\n };\r\n }\r\n \r\n $$(\"paramKH\").removeView(item.value_field);\r\n $$(\"paramKH\").addView(comp);\r\n }\r\n\r\n // parentToolBar.addView(toolBarParams);\r\n }\r\n\r\n table.config.columns = col;\r\n table.refreshColumns();\r\n table.define(\"url\", loadUrl);\r\n table.getParentView().getParentView().getParentView().enable();\r\n table.getParentView().getParentView().getParentView().hideProgress();\r\n };\r\n\r\n var loadUrl = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n //get count list combo ký hiệu\r\n\r\n var url = app.config.host + \"/Invoice68/GetDataInvoice\";\r\n\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n var table = $$(\"invoiceViews\");\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"params\", params);\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n /*if (item.filterType == \"serverDateRangeFilter\") {\r\n\r\n var startDate = item.value.start;\r\n if (startDate !== null && startDate !== undefined) {\r\n var hoursDiff = startDate.getHours() - startDate.getTimezoneOffset() / 60;\r\n var minutesDiff = (startDate.getHours() - startDate.getTimezoneOffset()) % 60;\r\n startDate.setHours(hoursDiff);\r\n startDate.setMinutes(minutesDiff);\r\n item.value.start = startDate;\r\n }\r\n\r\n var endDate = item.value.end;\r\n if (endDate !== null && endDate !== undefined) {\r\n var hoursDiff = endDate.getHours() - endDate.getTimezoneOffset() / 60;\r\n var minutesDiff = (endDate.getHours() - endDate.getTimezoneOffset()) % 60;\r\n endDate.setHours(hoursDiff);\r\n endDate.setMinutes(minutesDiff);\r\n item.value.end = endDate;\r\n }\r\n\r\n }*/\r\n\r\n if (params.filter[property] != null && params.filter[property] != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n var tlbParams = $$(\"paramKH\");\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n // Xử lý field name \r\n var child = childViews[i];\r\n var valueField = child.config.value_field;\r\n if(valueField == \"kyhieu_id\") {\r\n valueField = \"cctbao_id\"\r\n\r\n if(!child.getValue() || child.getValue() == \"\") {\r\n return;\r\n }\r\n }\r\n\r\n var item = {\r\n columnName: valueField,\r\n value: child.getValue(),\r\n };\r\n if (item.value !== \"\") {\r\n parameters.push(item);\r\n }\r\n //parameters.push(item);\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n var urlMiniDashBoard = url.replace(\"GetDataInvoice\", \"GetDataInvoiceThongTin\");\r\n\r\n var urlMiniDashBoard = url.replace(\"GetDataInvoice\", \"GetDataInvoiceThongTin\");\r\n\r\n webix.ajax().get(urlMiniDashBoard, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"khongMa\").setValue(\"Số hóa đơn đã gửi CQT: \" + json[\"khongma\"]);\r\n $$(\"khongMaError\").setValue(\"Số hóa đơn CQT thông báo lỗi: \" + json[\"khongmaerror\"]);\r\n $$(\"doanhthunocode\").setValue(\"Doanh thu xuất hóa đơn: \" + (fm(json[\"doanhthunocode\"]) ? fm(json[\"doanhthunocode\"]) : 0));\r\n });\r\n\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n var buttons = [];\r\n var initUI = function () {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n url,\r\n {\r\n command: \"CM00002\",\r\n parameter: {\r\n window_id: windowno,\r\n },\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (buttons.length > 0) {\r\n for (var i = 0; i < buttons.length; i++) {\r\n var item = buttons[i];\r\n $$(\"tlbMain\").removeView(item.id);\r\n }\r\n }\r\n\r\n buttons = [];\r\n var menus = [];\r\n\r\n var stt = controls.filter(function (x) {\r\n return x.id !== undefined;\r\n }).length;\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n var item = json[i];\r\n\r\n if (item.is_group_function == \"C\") {\r\n if (item.hidden != 1) {\r\n menus.push({\r\n id: item.name,\r\n value: _(item.caption),\r\n on_click: item.on_click,\r\n });\r\n }\r\n } else {\r\n if (item.hidden != 1) {\r\n var fn = new Function(item.on_click);\r\n\r\n var button = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: item.width,\r\n label: ' ' + '' + _(item.caption) + \"\",\r\n id: item.name,\r\n // label: _(item.caption),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-\" + item.icon,\r\n // width: item.width,\r\n click: fn,\r\n };\r\n\r\n buttons.push(button);\r\n $$(\"tlbMain\").addView(button, stt);\r\n\r\n stt = stt + 1;\r\n }\r\n }\r\n }\r\n $$(\"tlbMain\").removeView(\"btnChucNang\");\r\n if (menus.length > 0) {\r\n subChucNang.clearAll();\r\n subChucNang.parse(menus, \"json\");\r\n var btnChucNang = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"CHUC_NANG\") + \"\",\r\n id: \"btnChucNang\",\r\n // label: _(\"CHUC_NANG\"),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-tasks\",\r\n // width: 100,\r\n click: function () {\r\n subChucNang.show(webix.$$(\"btnChucNang\").$view);\r\n },\r\n };\r\n $$(\"tlbMain\").addView(btnChucNang, stt);\r\n }\r\n }\r\n );\r\n col = [];\r\n sub_col = [];\r\n\r\n var url = app.config.host + \"/System/GetConfigWinByNo?id=\" + windowno;\r\n webix.$$(\"invoiceViews\").getParentView().getParentView().getParentView().disable();\r\n webix.$$(\"invoiceViews\").getParentView().getParentView().getParentView().showProgress();\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n\r\n if (app_cache[windowno] != null) {\r\n windowconfig = app_cache[windowno];\r\n initComponents(windowconfig);\r\n } //không có cache\r\n else {\r\n webix.ajax(url, function (text, xml, xhr) {\r\n var rp = JSON.parse(text);\r\n windowconfig = rp;\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n app_cache[windowno] = windowconfig;\r\n\r\n webix.storage.local.put(\"APP_CACHE\", app_cache);\r\n initComponents(windowconfig);\r\n });\r\n }\r\n };\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.extend(view, webix.ProgressBar);\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n if(dataFormHd78) {\r\n var khID = dataFormHd78.GetData(\"KHID\");\r\n if(khID) {\r\n webix.$$(\"kyhieu_id\").setValue(khID);\r\n dataFormHd78.ClearData(\"KHID\");\r\n } \r\n }\r\n table.clearAll();\r\n table.load(table.config.url);\r\n //if (editmode == 1) {\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n //}\r\n\r\n //if (editmode == 2) {\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n //}\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n $onDestruct: function (ui, name, url, scope) {\r\n $$(\"tlbParams\").Clear();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_chuyenDaiHoaDon32',[\"app\", \"locale\", \"models/user\", \"views/commonHD\", \"views/windowhoadon78\"], function (app, _, user, commonHD, windowhoadon78) {\r\n var editmode = 0;\r\n var param;\r\n var branh_code;\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n setTimeout(function () {\r\n if ($$(\"chuyendai-form\").validate()) {\r\n var item = $$(\"chuyendai-form\").getValues();\r\n\r\n var kyHieuHoaDon = {\r\n cctbao_id: $$(\"kyhieuhoadon_78_id\").getValue(),\r\n khieu: $$(\"kyhieuhoadon_78_id\").data.text,\r\n lhdclquan: $$(\"lhdclquan\").getValue(),\r\n khmshdclquan: $$(\"khmshdclquan\").getValue(),\r\n khhdclquan: $$(\"khhdclquan\").getValue(),\r\n shdclquan: $$(\"shdclquan\").getValue(),\r\n nlhdclquan: $$(\"nlhdclquan\").getValue(),\r\n case: $$(\"loaichuyendai_id\").getValue(),\r\n dvtte: \"VND\",\r\n tgia: \"1\",\r\n htttoan: \"Tiền mặt/Chuyển khoản\",\r\n };\r\n if (kyHieuHoaDon.case == 1) {\r\n kyHieuHoaDon.tthdon = 2;\r\n kyHieuHoaDon.tthdon = 2;\r\n } else if (kyHieuHoaDon.case == 2) {\r\n kyHieuHoaDon.tthdon = 19;\r\n kyHieuHoaDon.tthdon = 19;\r\n } else if (kyHieuHoaDon.case == 3) {\r\n kyHieuHoaDon.tthdon = 21;\r\n kyHieuHoaDon.tthdon = 21;\r\n kyHieuHoaDon.note = \"reduce_change_invoice\";\r\n } else if (kyHieuHoaDon.case == 4) {\r\n kyHieuHoaDon.tthdon = 23;\r\n kyHieuHoaDon.tthdon = 23;\r\n }\r\n switch (item.loaichuyendai_id) {\r\n case \"1\":\r\n commonHD.ExcuteReplaceInvoice_32(kyHieuHoaDon);\r\n break;\r\n case \"2\":\r\n commonHD.ExcuteIncreaseChangeInvoice_32(kyHieuHoaDon);\r\n break;\r\n case \"3\":\r\n commonHD.ExcuteReduceChangeInvoice_32(kyHieuHoaDon);\r\n break;\r\n case \"4\":\r\n commonHD.ExcuteInfoChangeInvoice_32(kyHieuHoaDon);\r\n break;\r\n default:\r\n break;\r\n }\r\n $$(\"chuyendai-win\").close();\r\n }\r\n }, 100);\r\n },\r\n },\r\n\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n var table = $$(\"invoiceViews\").getParentView();\r\n console.log(table);\r\n webix.$$(\"chuyendai-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"chuyendai-win\",\r\n position: \"center\",\r\n head: \"Chuyển dải hoá đơn hóa đơn\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 600,\r\n id: \"chuyendai-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n // {\r\n // view: \"text\",\r\n // label: \"Tên mẫu\",\r\n // name: \"ten_mau\",\r\n // required: true,\r\n // invalidMessage: \"Tên mẫu không được bỏ trống\",\r\n // labelWidth: 120\r\n // },\r\n {\r\n view: \"combo\",\r\n name: \"kyhieuhoadon_78_id\",\r\n label: \"Ký hiệu hóa đơn\",\r\n //labelPosition: \"top\",\r\n id: \"kyhieuhoadon_78_id\",\r\n required: true,\r\n labelWidth: 200,\r\n invalidMessage: \"Ký hiệu hóa đơn không được bỏ trống\",\r\n },\r\n {\r\n view: \"combo\",\r\n name: \"loaichuyendai_id\",\r\n label: \"Loại chuyển dải\",\r\n id: \"loaichuyendai_id\",\r\n required: true,\r\n labelWidth: 200,\r\n value: \"1\",\r\n options: [\r\n { id: 1, value: \"Thay thế\" },\r\n { id: 2, value: \"Điều chỉnh tăng\" },\r\n { id: 3, value: \"Điều chỉnh giảm\" },\r\n { id: 4, value: \"Điều chỉnh thông tin\" },\r\n ],\r\n },\r\n {\r\n view: \"combo\",\r\n name: \"loaihdlq\",\r\n label: \"Loại HĐLQ\",\r\n id: \"lhdclquan\",\r\n labelWidth: 200,\r\n value: \"3\",\r\n options: [\r\n { id: 1, value: \"Hóa đơn điện tử theo Nghị định 123/2020/NĐ-CP\" },\r\n { id: 2, value: \"Hóa đơn điện tử có mã xác thực của cơ quan thuế theo Quyết định số 1209/QĐ-BTC\" },\r\n { id: 3, value: \"Các loại hóa đơn theo Nghị định số 51/2010/NĐ-CP và Nghị định số 04/2014/NĐ-CP\" },\r\n { id: 4, value: \"Hóa đơn đặt in theo Nghị định 123/2020/NĐ-CP\" },\r\n ],\r\n },\r\n {\r\n view: \"text\",\r\n name: \"khmshdclquan\",\r\n label: \"Ký hiệu mẫu số HĐLQ\",\r\n labelWidth: 200,\r\n id: \"khmshdclquan\",\r\n validate: webix.rules.isn,\r\n invalidMessage: \"Ký hiệu mẫu số hóa đơn liên quan không được bỏ trống\",\r\n attributes: { maxlength: 11 },\r\n required: true,\r\n },\r\n {\r\n view: \"text\",\r\n name: \"khhdclquan\",\r\n label: \"Ký hiệu HĐLQ\",\r\n labelWidth: 200,\r\n id: \"khhdclquan\",\r\n invalidMessage: \"Ký hiệu mẫu số hóa đơn liên quan không được bỏ trống\",\r\n attributes: { maxlength: 8 },\r\n required: true,\r\n },\r\n {\r\n view: \"text\",\r\n name: \"shdclquan\",\r\n label: \"Số hóa đơn LQ\",\r\n labelWidth: 200,\r\n id: \"shdclquan\",\r\n invalidMessage: \"Số hóa đơn liên quan không được bỏ trống\",\r\n attributes: { maxlength: 8 },\r\n required: true,\r\n },\r\n {\r\n view: \"datepicker\",\r\n name: \"nlhdclquan\",\r\n label: \"Ngày lập hóa đơn liên quan\",\r\n labelWidth: 200,\r\n id: \"nlhdclquan\",\r\n invalidMessage: \"Ngày lập hóa đơn không được bỏ trống\",\r\n required: true,\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n initUI: function (item) {\r\n param = item;\r\n // $$(\"kyhieuhoadon_78_id\").define(\"options\", app.config.host + \"/System/GetDataByReferencesId?id=201a2758-6e97-4296-9beb-b627ff73e1a4\");\r\n var khieu = param[\"data\"][0].WinParams.find(function(item) {\r\n return item.value_field == \"kyhieu_id\";\r\n });\r\n\r\n $$(\"kyhieuhoadon_78_id\").define(\"options\", app.config.host + \"/System/GetDataByReferencesId?id=\" + khieu.wb_references_id);\r\n var table = $$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n $$(\"kyhieuhoadon_78_id\").setValue($$(\"kyhieu_id\").getValue());\r\n $$(\"kyhieuhoadon_78_id\").refresh();\r\n },\r\n setValues: function (item) {\r\n $$(\"chuyendai-form\").setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_email_hangloat',[\"app\", \"locale\", \"models/user\", \"views/commonHD\"], function (app, _, user, commonHD) {\r\n var editmode = 0;\r\n var hdonids=[];\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n if(!$$(\"email-form\").validate()) return;\r\n \r\n var self = this;\r\n setTimeout(function () {\r\n\r\n var table = $$(\"invoiceViews\")\r\n var item = $$(\"email-form\").getValues();\r\n\r\n var data = {\r\n nguoinhan:item.nguoinhan,\r\n data:hdonids\r\n };\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SendMails\", data, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"email-win\").close();\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n webix.message(\"Gửi email thành công\", \"success\");\r\n } else {\r\n $$(\"email-win\").close();\r\n webix.message(json.error, \"error\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n },\r\n });\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"email-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"email-win\",\r\n position: \"center\",\r\n head: \"Gửi nhiều email\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"email-form\",\r\n complexData: true,\r\n margin: 0,\r\n rules:{\r\n \"nguoinhan\":webix.rules.isEmail,\r\n },\r\n elements: [\r\n // {\r\n // view: \"text\",\r\n // label: \"Tên mẫu\",\r\n // name: \"ten_mau\",\r\n // required: true,\r\n // invalidMessage: \"Tên mẫu không được bỏ trống\",\r\n // labelWidth: 120\r\n // },\r\n {\r\n view: \"text\",\r\n label:\"Người nhận\",\r\n name: \"nguoinhan\",\r\n labelWidth: 100,\r\n required: true,\r\n invalidMessage: \"Email người nhận bị bỏ trống hoặc không đúng định dạng\",\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setValues: function (_hdonids) {\r\n hdonids = _hdonids;\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_email_send_history_result',[\"app\", \"locale\", \"models/user\", \"views/commonHD\"], function (app, _, user, commonHD) {\r\n var editmode = 0;\r\n var countObj={};\r\n var button = [\r\n {},\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"OK (ESC)\",\r\n type: \"success\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"result-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"result-win\",\r\n position: \"center\",\r\n head: \"Kết quả gửi lại mail theo lịch sử\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"result-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n \r\n {\r\n view:\"label\", \r\n inputWidth: 100, \r\n align:\"left\",\r\n id: \"countAll\",\r\n css:{\"color\": \"blue\", \"font-weight\": \"bold\"}\r\n },\r\n {\r\n view:\"label\", \r\n inputWidth: 100, \r\n align:\"left\",\r\n id: \"countSuccess\",\r\n css:{\"color\": \"green\", \"font-weight\": \"bold\"}\r\n },\r\n {\r\n view:\"label\", \r\n inputWidth: 200, \r\n align:\"left\",\r\n id: \"countFailure\",\r\n css:{\"color\": \"red\", \"font-weight\": \"bold\"}\r\n },\r\n {\r\n view:\"label\", \r\n inputWidth: 100, \r\n align:\"left\",\r\n id: \"error\",\r\n css:{\"color\": \"red\", \"font-weight\": \"bold\"}\r\n },\r\n \r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setValues: function (_countObj) {\r\n countObj = _countObj;\r\n \r\n $$(\"countAll\").setValue(\"TỔNG SỐ: \" + countObj.countAll + \" ĐÃ CÓ LỊCH SỬ GỬI MAIL\");\r\n $$(\"countSuccess\").setValue(\"THÀNH CÔNG: \" + countObj.countSuccess );\r\n \r\n if(countObj.hasOwnProperty(\"error\"))\r\n {\r\n $$(\"countFailure\").setValue(\"THẤT BẠI: \" + countObj.countFailure);\r\n $$(\"error\").setValue(\"SỐ HÓA ĐƠN: \" + countObj.error);\r\n }\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_email_send_history',[\"app\", \"locale\", \"models/user\", \"views/commonHD\"], function (app, _, user, commonHD) {\r\n var editmode = 0;\r\n var hdonids=[];\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n //if(!$$(\"email-form\").validate()) return;\r\n \r\n //var self = this;\r\n setTimeout(function () {\r\n\r\n var table = $$(\"invoiceViews\")\r\n //var item = $$(\"email-form\").getValues();\r\n\r\n var data = {\r\n //nguoinhan:item.nguoinhan,\r\n data:hdonids\r\n };\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SendMailHistory\", data, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n table.enable();\r\n table.hideProgress();\r\n $$(\"email-win\").close();\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n require([\"app\", \"views/forms/68_email_send_history_result\"], function (app, winForm) {\r\n var win = tableHdon.$scope.ui(winForm.$ui);\r\n winForm.setValues(json);\r\n win.show();\r\n });\r\n \r\n },\r\n });\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"email-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"email-win\",\r\n position: \"center\",\r\n head: \"Gửi email theo lịch sử đã gửi\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"email-form\",\r\n complexData: true,\r\n margin: 0,\r\n // rules:{\r\n // \"nguoinhan\":webix.rules.isEmail,\r\n // },\r\n elements: [\r\n // {\r\n // view: \"text\",\r\n // label:\"Người nhận\",\r\n // name: \"nguoinhan\",\r\n // labelWidth: 100,\r\n // required: true,\r\n // invalidMessage: \"Email người nhận bị bỏ trống hoặc không đúng định dạng\",\r\n // },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setValues: function (_hdonids) {\r\n hdonids = _hdonids;\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_kyhieu_donvi_bienlai',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n var editmode = 0;\r\n var param;\r\n var branh_code;\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"kyhieu-form\").getValues();\r\n var table = $$(\"kyhieu-form\");\r\n\r\n if (table.validate()) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/kihieudonvi68\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"kyhieu-win\").close();\r\n var table = $$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"kyhieu-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"kyhieu-win\",\r\n position: \"center\",\r\n head: \"Đăng ký ký hiệu\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"kyhieu-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n // {\r\n // view: \"text\",\r\n // label: \"Tên mẫu\",\r\n // name: \"ten_mau\",\r\n // required: true,\r\n // invalidMessage: \"Tên mẫu không được bỏ trống\",\r\n // labelWidth: 120\r\n // },\r\n {\r\n view: \"combo\",\r\n name: \"phanhoadon_78_id\",\r\n label: \"Ký hiệu\",\r\n //labelPosition: \"top\",\r\n id: \"phanhoadon_78_id\",\r\n required: true,\r\n labelWidth: 120,\r\n invalidMessage: \"Ký hiệu không được bỏ trống\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF02004\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var test = newv;\r\n },\r\n },\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n initUI: function (item) {\r\n param = item;\r\n },\r\n setValues: function (item) {\r\n $$(\"kyhieu-form\").setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_phathanh_bienlai',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\"], function (app, _, user, invoiceForms) {\r\n \r\n\r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n //view: \"toolbar\",\r\n // css: { \"box-shadow\": \"0 -2px #3498db inset !important\", \"background\": \"#ffffff !important\" },\r\n //css: { \"background\": \"#e6f2ff !important\" },\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-icondksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formdksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
THÔNG BÁO PHÁT HÀNH BIÊN LAI
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_dksdForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n // var form = webix.$$(\"window-form\");\r\n // hint_form(form.config.hint);\r\n },\r\n },\r\n ],\r\n },\r\n id: \"huyhoadonForms\",\r\n resize: true,\r\n fullscreen: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () {},\r\n },\r\n body: {\r\n view: \"form\",\r\n id: \"huyhoadon\",\r\n // width: 1500,\r\n position: \"center\",\r\n // autowidth:true,\r\n paddingY: 10,\r\n paddingX: 15,\r\n complexData: true,\r\n scroll: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n // id: \"header\",\r\n template: \"
THÔNG BÁO PHÁT HÀNH BIÊN LAI
\",\r\n borderless: true,\r\n height: 40,\r\n },\r\n {\r\n paddingX: 30,\r\n rows: [\r\n {\r\n cols: [\r\n {},\r\n {\r\n label: \"Tên CQT tiếp nhận: \",\r\n id: \"tcqt\",\r\n name: \"tcqt\",\r\n view: \"combo\",\r\n labelWidth: 180,\r\n width: 400,\r\n options: {\r\n view: \"gridsuggest\",\r\n columnName: \"name\",\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00251\";\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n body: {\r\n columns: [{ id: \"name\", width: 500, header: \"name\" }],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n $$(\"mcqt\").setValue(obj[\"code\"]);\r\n $$(\"mcqt\").refresh();\r\n },\r\n },\r\n },\r\n required: true,\r\n invalidMessage: \"Kính gửi không được để trống !\",\r\n },\r\n {},\r\n ],\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Tên đơn vị phát hành biên lai\",\r\n labelWidth: 200,\r\n required: true,\r\n invalidMessage: \"Tên đơn vị phát hành biên lai không được để trống !\",\r\n id: \"tnnt\",\r\n name: \"tnnt\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Mã số thuế (nếu có):\",\r\n id: \"mst\",\r\n name: \"mst\",\r\n labelWidth: 200,\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Địa chỉ\",\r\n id: \"ddanh\",\r\n name: \"ddanh\",\r\n required: true,\r\n invalidMessage: \"Địa labchỉ không được để trống !\",\r\n labelWidth: 200,\r\n attributes:{ \r\n maxlength:400 \r\n }\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Thành phố/Tỉnh\",\r\n id: \"ddtbao\",\r\n name: \"ddtbao\",\r\n labelWidth: 100,\r\n width: 300,\r\n },\r\n ],\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Số điện thoại\",\r\n id: \"sdthoai\",\r\n name: \"sdthoai\",\r\n required: true,\r\n invalidMessage: \"Số điện thoại không được để trống !\",\r\n labelWidth: 200,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Các loại biên lai đã phát hành\",\r\n id: \"bldaphathanh\",\r\n name: \"bldaphathanh\",\r\n labelWidth: 200,\r\n },\r\n /*{\r\n view: \"datepicker\",\r\n label: \"Ngày thông báo\",\r\n id: \"ntbao\",\r\n name: \"ntbao\",\r\n labelWidth: 200,\r\n },*/\r\n ],\r\n },\r\n { height: 3 },\r\n { height: 3 },\r\n {\r\n rows: [\r\n {\r\n id: \"btnHuyhoadon\",\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n label: \" (F9)\",\r\n // width: 60,\r\n autowidth: true,\r\n icon: \"fas fa-plus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_hoadonhuy\");\r\n var item = { id: webix.uid() };\r\n table.add(item);\r\n table.select(item.id, \"khieu\", false);\r\n table.edit({ row: item.id, column: \"khieu\" });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n autowidth: true, label: \" (F8)\",\r\n // width: 60,\r\n icon: \"fas fa-minus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_hoadonhuy\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n var editor = table.getEditState();\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_hoadonhuy\",\r\n // height: 250,\r\n name: \"danhsach_hoadonhuy\",\r\n // select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n tooltip: true,\r\n editable: true,\r\n select: \"cell\",\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onBeforeEditStart: function (id) {\r\n if (id.column == \"stt\") {\r\n return false;\r\n }\r\n if (id.column == \"tenlbl\") {\r\n return false;\r\n }\r\n if (id.column == \"khms\") {\r\n return false;\r\n }\r\n if (id.column == \"tuso\") {\r\n return false;\r\n }\r\n if (id.column == \"denso\") {\r\n return false;\r\n }\r\n return true;\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n var columnId = editor.config.id;\r\n if(columnId == \"soluong\") {\r\n var table = $$(this.config.id);\r\n var selectedItem = table.getSelectedItem();\r\n var maxsoluong = Number(selectedItem[\"tongso\"]) - Number(selectedItem[\"tuso\"]) + 1;\r\n if (Number(selectedItem[\"soluong\"]) > maxsoluong) {\r\n webix.message(\"Vượt quá số lượng cho phép là: \" + maxsoluong);\r\n selectedItem[\"soluong\"] = null;\r\n selectedItem[\"denso\"] = null;\r\n return;\r\n }\r\n selectedItem[\"denso\"] = Number(selectedItem[\"tuso\"]) + Number(selectedItem[\"soluong\"]) - 1;\r\n table.updateItem(selectedItem.id, selectedItem);\r\n }\r\n },\r\n },\r\n columns: [\r\n { editor: \"text\", id: \"hdon_id\", name: \"hdon_id\", hidden: true },\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"khieu\",\r\n header: _(\"Ký hiệu\"),\r\n editor: \"text\",\r\n width: 250,\r\n editable: true,\r\n suggest: {\r\n view: \"gridsuggest\",\r\n // value_suggest: field.value_suggest,\r\n // fieldExpression: field.field_expression,\r\n // displayField: field.display_field,\r\n // tableId: \"edit_inv_InvoiceDetail\",\r\n columnName: \"ky_hieu\",\r\n body: {\r\n columns: [\r\n { id: \"qlkhsdung_id\", hidden: true, header: \"id\" },\r\n { id: \"khhdon\", header: \"ký hiệu\" },\r\n { id: \"tenlbl\", header: \"Tên loại\" },\r\n { id: \"khms\", header: \"Ký hiệu MS\" },\r\n { id: \"tongso\", header: \"Tổng số\" },\r\n { id: \"tuso\", header: \"Từ số\" },\r\n //{ id: \"denso\", header: \"Đến số\" },\r\n ],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF02011\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n var table = $$(\"danhsach_hoadonhuy\");\r\n var items = table.serialize();\r\n var selectedItem = table.getSelectedItem();\r\n var newselectedItem = {};\r\n newselectedItem.id = selectedItem.id\r\n for(var i =0; i 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n };\r\n data_post.sign = postData;\r\n data_post.signMode = 1;\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SavePhatHanhBienLai\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n if ($$(\"mau04_68\")) {\r\n var table = $$(\"mau04_68\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n\r\n // return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"huyhoadon\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n check_HSM: \"1\",\r\n };\r\n data_post.sign = postData;\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SavePhatHanhBienLai\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n if ($$(\"mau04_68\")) {\r\n var table = $$(\"mau04_68\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/Savephathanhbl\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n } else {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlPhatHanhBL?id=\" + json.id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, json]).then(function (results) {\r\n // webix.extend(tblInvoice, webix.ProgressBar);\r\n // tblInvoice.disable();\r\n // tblInvoice.showProgress();\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hoặc Plugin ký chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item.id,\r\n tthdon: 3,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlPhatHanhBienLai\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n\r\n webix.message(\"Thành công !\", \"success\");\r\n if ($$(\"mau04_68\")) {\r\n var table = $$(\"mau04_68\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n webix.$$(\"huyhoadonForms\").close();\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n }\r\n },\r\n });\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 120,\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n webix.$$(\"huyhoadonForms\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1) {\r\n icon = \"\";\r\n var result = webix\r\n .ajax()\r\n .sync()\r\n .get(app.config.host + \"/System/GetDmDvcsByUser\");\r\n var json = JSON.parse(result.response);\r\n\r\n $$(\"tnnt\").setValue(json[0].name);\r\n $$(\"mst\").setValue(json[0].tax_code);\r\n $$(\"tcqt\").setValue(json[0].cqt);\r\n $$(\"ddanh\").setValue(json[0].address);\r\n $$(\"sdthoai\").setValue(json[0].tel);\r\n } else {\r\n if (editmode == 2) icon = \"\";\r\n else icon = \"\";\r\n }\r\n\r\n webix.$$(\"head-icondksd\").setHTML(icon);\r\n webix.$$(\"head-icondksd\").refresh();\r\n },\r\n setValues: function (item, winconfig, params) {\r\n $$(\"danhsach_hoadonhuy\").parse(item);\r\n },\r\n setValuesTongQuat: function (item, winconfig, params) {\r\n var data = $$(\"huyhoadon\").getValues();\r\n data.so = item.so;\r\n data.ntbccqt = item.ntbccqt;\r\n data.loai = item.loai;\r\n $$(\"huyhoadon\").parse(data);\r\n },\r\n setValuesEdit: function (item, winconfig, params) {\r\n $$(\"huyhoadon\").parse(item);\r\n var tableDetail = webix.$$(\"danhsach_hoadonhuy\");\r\n var url = app.config.host + \"/Invoice68/GetDataTBPHDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/createinvoicebangke',[\"app\", \"locale\"], function (app, _) {\r\n\r\n function initUI(item) {\r\n $$('sobangke').setValue(item.list_number);\r\n }\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n id: \"crinvoice\",\r\n head: \"Tạo hóa đơn từ bảng kê\",\r\n modal: true,\r\n width: 400,\r\n position: \"center\",\r\n // css: { \"font-weight\": \"bold\", \"text-transform\": \"uppercase\" },\r\n body: {\r\n view: \"form\", id: \"crinvoiceform\", elements: [\r\n\r\n { view: \"text\", label: _(\"SO_BANG_KE\"), id: \"sobangke\", name: \"list_number\", readonly: true, labelWidth: 90 },\r\n {\r\n view: \"richselect\",\r\n id: \"inv_InvoiceCode_id\",\r\n name: \"inv_InvoiceCode_id\",\r\n label: _(\"MAU_SO\"),\r\n labelWidth: 90,\r\n //options: app.config.host +\"/System/GetAllDmDvcs\",\r\n options: {\r\n view: \"gridsuggest\",\r\n textValue: \"ky_hieu\",\r\n body: {\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00027\",\r\n textValue: \"ky_hieu\",\r\n columns: [\r\n {\r\n id: \"mau_so\",\r\n width: 100,\r\n header: _(\"MAU_SO\")\r\n },\r\n {\r\n id: \"ky_hieu\",\r\n width: 100,\r\n header: _(\"KY_HIEU\")\r\n },\r\n {\r\n id: \"ma_loai\",\r\n width: 100,\r\n header: _(\"MA_LOAI\")\r\n },\r\n {\r\n id: \"ngay_bd_sd\",\r\n width: 150,\r\n header: _(\"NGAY_BD_SD\"),\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n },\r\n {\r\n id: \"tu_so\",\r\n width: 100,\r\n header: _(\"TU_SO\")\r\n },\r\n {\r\n id: \"den_so\",\r\n width: 100,\r\n header: _(\"DEN_SO\")\r\n }\r\n ]\r\n }\r\n }\r\n },\r\n { view: \"datepicker\", label: _(\"NGAY_HDON\"), id: \"ngayhd\", name: \"ngay_hd\", value: new Date(), labelWidth: 90 },\r\n {\r\n cols: [\r\n\r\n {\r\n view: \"button\", value: \"Đồng ý\", type: \"form\", click: function () {\r\n\r\n var item = $$(\"crinvoiceform\").getValues();\r\n console.log(item);\r\n\r\n var url = app.config.host + \"/Invoice/CreateInvoiceFromList\";\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(url, item, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n webix.message(\"Tạo hóa đơn thành công !\");\r\n $$(\"crinvoice\").close();\r\n }\r\n else {\r\n webix.message(data.error, \"error\");\r\n }\r\n });\r\n }\r\n },\r\n {\r\n view: \"button\", hotkey: \"esc\", value: \"Hủy bỏ\", click: function () {\r\n this.getTopParentView().hide();\r\n }\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n },\r\n initUI: initUI\r\n };\r\n\r\n});\ndefine('views/forms/dmhv',[\"app\"],function(app){\r\n\tvar editmode = 0;\r\n\tvar col=[];\r\n\t\t\t\t\t\r\n\tvar el = [];\r\n\tvar head_name=[];\r\n\tvar head;\r\n var url = app.config.host + \"/api/System/GetAllByWindowId?id=09a8b24b-52b5-46a6-931d-d6f005da0dd7\";\r\n webix.ajax(url, function (text, xml, xhr) {\r\n\r\n var rp = JSON.parse(text);\r\n head_name.push(String(rp['data'][0]['Tabs'][0]['TAB_NAME']));\r\n for (var i = 0; i < (rp['data'][0]['ROWS_MAX']); i++) {\r\n\t\t\tvar col1=[];\r\n\t\t\t\r\n\t\t\tfor (var j = 0; j < (Object.keys(rp['data'][0]['Tabs'][0]['Fields']).length); j++) {\r\n\t\t\t\t\r\n\t\t\t\tif(i==(Number(rp['data'][0]['Tabs'][0]['Fields'][j]['ROW'])-1)){\r\n\t\t\t\t\tvar el1=[];\r\n\t\t\t\t\tcol1.push({ view:\"text\", name: '' + String(rp['data'][0]['Tabs'][0]['Fields'][j]['COLUMN_NAME']) + '',label: '' + String(rp['data'][0]['Tabs'][0]['Fields'][j]['COLUMN_NAME']) + '' , \r\n\t\t\t \t\t\tid: 'dmhv-'+ String(rp['data'][0]['Tabs'][0]['Fields'][j]['COLUMN_NAME']) + '',width:Number(rp['data'][0]['Tabs'][0]['Fields'][j]['WIDTH'])});\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t \r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(col1.length>0){\r\n\t\t\t\tel.push({\r\n\t\t\t\tcols:col1\r\n\t\t\t});\r\n\t\t\t}\r\n\t\t\t\r\n }\r\n\t\tcol.push({});\r\n\t\tcol.push({ \r\n\t\t\tshortcut:\"F10\", view:\"button\", label:\"Nhận\", type:\"form\", align:\"center\", \r\n\t\t\ton: {\r\n\t\t\t\tonClick: function() {\r\n\t\t\t\t\tvar form = webix.$$(\"dmhv-form\");\r\n\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\tvar hvData={};\r\n\t\t\t\t\t\thvData.windowno=String(rp['data'][0]['ID']);\r\n\t\t\t\t\t\thvData.editmode=editmode;\r\n\t\t\t\t\t\thvData.data=[];\r\n\t\t\t\t\t\thvData.data.push(item);\r\n\t\t\t\t\t\tconsole.log(item);\r\n\t\t\t\t\t\tconsole.log(hvData);\r\n\t\t\t\t\t\twebix.ajax().post( app.config.host + \"/api/System/Save\", hvData, function(text){\r\n\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")){\r\n\t\t\t\t\t\t\titem.id = data.id;\r\n\t\t\t\t\t\t\twebix.$$(\"dmhv-win\").close();\r\n\t\t\t\t\t\t\tapp.callEvent(\"dataChanged\",[editmode,item]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\twebix.message(data.error);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\tclick:function(){\t\t\t\t\t\t\t\t\r\n\t\t\t\tthis.callEvent(\"onClick\");\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t}\r\n\t\t});\t\r\n\t\tcol.push({ view:\"button\", hotkey:\"esc\", label:\"Hủy bỏ\",align:\"center\", \r\n\t\t\tclick:function(){\r\n\t\t\t\twebix.$$(\"dmhv-win\").close();\r\n\t\t\t}\r\n\t\t});\t\r\n\t\tcol.push({});\t\r\n\t\tel.push({\r\n\t\t\tmargin:10,\r\n\t\t\tcols:col\r\n\t\t});\r\n $$(\"dmhvData\").define(\"elements\",el );;\r\n $$(\"dmhvData\").refresh();\r\n\t\t//console.log(head_name[0]);\r\n });\r\n\t \r\n\treturn {\t\t\r\n\t\t$ui:{\r\n\t\t\tview:\"window\", modal:true, id:\"dmhv-win\", position:\"center\",\r\n\t\t\thead:'' + head + '',\r\n\t\t\t//fullscreen:true,\r\n\t\t\t//width: 350,\r\n\t\t\tbody:{\r\n paddingY:20, \r\n paddingX:30, \r\n elementsConfig:{labelWidth: 80}, \r\n view:\"form\", \r\n\t\t\t\tid:\"dmhv-form\", \r\n\t\t\t\tcomplexData:true,\r\n elements:\r\n el\r\n\t\t\t\t\t// {\r\n\t\t\t\t\t// \tmargin:10,\r\n\t\t\t\t\t// \tcols:[\r\n\t\t\t\t\t// \t\t{},\r\n\t\t\t\t\t// \t\t{ \r\n\t\t\t\t\t// \t\t\tshortcut:\"F10\", view:\"button\", label:\"Nhận\", type:\"form\", align:\"center\", width:120, \r\n\t\t\t\t\t// \t\t\ton: {\r\n\t\t\t\t\t// \t\t\t\tonClick: function() {\r\n\t\t\t\t\t// \t\t\t\t\tvar form = webix.$$(\"dmhv-form\");\r\n\t\t\t\t\t// \t\t\t\t\tvar item = form.getValues();\r\n\r\n\t\t\t\t\t// \t\t\t\t\twebix.ajax().post( app.config.host + \"/api/Dmhv/Update\", item, function(text){\r\n\t\t\t\t\t// \t\t\t\t\t\tvar data = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t// \t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")){\r\n\t\t\t\t\t// \t\t\t\t\t\t\titem.id = data.id;\r\n\t\t\t\t\t// \t\t\t\t\t\t\twebix.$$(\"dmhv-win\").close();\r\n\t\t\t\t\t// \t\t\t\t\t\t\tapp.callEvent(\"dataChanged\",[editmode,item]);\r\n\t\t\t\t\t// \t\t\t\t\t\t}\r\n\t\t\t\t\t// \t\t\t\t\t\telse {\r\n\t\t\t\t\t// \t\t\t\t\t\t\twebix.message(data.error);\r\n\t\t\t\t\t// \t\t\t\t\t\t}\r\n\t\t\t\t\t// \t\t\t\t\t});\r\n\t\t\t\t\t// \t\t\t\t}\r\n\t\t\t\t\t// \t\t\t},\r\n\t\t\t\t\t// \t\t\tclick:function(){\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t// \t\t\t\tthis.callEvent(\"onClick\");\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t// \t\t\t}\r\n\t\t\t\t\t// \t\t},\r\n\t\t\t\t\t// \t\t{ view:\"button\", hotkey:\"esc\", label:\"Hủy bỏ\",align:\"center\", width:120, \r\n\t\t\t\t\t// \t\t\tclick:function(){\r\n\t\t\t\t\t// \t\t\t\twebix.$$(\"dmhv-win\").close();\r\n\t\t\t\t\t// \t\t\t}\r\n\t\t\t\t\t// \t\t}\r\n\t\t\t\t\t// \t]\r\n\t\t\t\t\t// }\r\n\r\n\t\t\t\t\r\n\t\t\t}\t\t\t\r\n\t\t\t\r\n\t\t},\t\t\r\n\t\tsetEditMode: function(mode) {\r\n\t\t\teditmode = mode;\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/forms/formhoadon78bienlai',[\"app\", \"locale\", \"models/user\", \"models/findjson\", \"views/commonHD\", \"callApis/hoadon68\", \"callApis/customer\"], function (app, _, user, findJson, commonHD, hoadon68CallApis, customerCallApis) {\r\n var editmode = 0;\r\n var tongtienHDonBke = 0;\r\n var mau04 = {};\r\n formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n };\r\n\r\n var el = [];\r\n function renderFormat(val) {\r\n if (val === undefined) val = \"VND\";\r\n var url = app.config.host + \"/Invoice68/GetDecimalPlace?ma_nt=\" + val;\r\n var table_chitiet = webix.$$(\"hoadon68_chitiet\");\r\n var table_phi = webix.$$(\"hoadon68_phi\");\r\n var table = $$(\"invoiceForms\");\r\n }\r\n\r\n //FormButton\r\n var cols = [\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnBangKeSave\",\r\n label: \"Lưu (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n\r\n $$(\"btnBangKeSave\").disable();\r\n setTimeout(function () {\r\n var tongtienBangKeCT = webix.$$(\"tgtttbso\").getValue();\r\n var item = $$(\"invoiceForms\").getValues();\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n if (record.length == 0 && item.tlkthu == undefined) {\r\n webix.message(\"Bạn chưa bổ sung chi tiết khoản thu\");\r\n return;\r\n }\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n }\r\n\r\n if (tongtienHDonBke != tongtienBangKeCT) {\r\n webix.message(\"Tổng tiền chi tiết bảng kê khác tổng tiền của hoá đơn!\", \"error\");\r\n return false;\r\n }\r\n\r\n if (table.validate()) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: record });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 0;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var isSaveCustomerInfo = $$('is_save_customer_info') != null && $$('is_save_customer_info').getValue();\r\n\r\n function afterSaveInvoiceSuccess(text) {\r\n var json = text.json();\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thông tin hóa đơn thành công!\", \"success\");\r\n\r\n webix.$$(\"invoice68\").close();\r\n\r\n if (item.hdon_id_old !== null && item.hdon_id === \"\" && item.tthai_old != \"Đã ký\") {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n }\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n\r\n function afterSaveInvoiceError(text) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text.json() + XmlHttpRequest, \"error\");\r\n }\r\n\r\n if (isSaveCustomerInfo) {\r\n\r\n var code = $$('mnmua') != null ? $$('mnmua').getValue() : null;\r\n var buyer_name = $$('tnmua') != null ? $$('tnmua').getValue() : null;\r\n var name = $$('ten') != null ? $$('ten').getValue() : null;\r\n var tax_code = $$('mst') != null ? $$('mst').getValue() : null;\r\n var email = $$('email') != null ? $$('email').getValue() : null;\r\n var address = $$('dchi') != null ? $$('dchi').getValue() : null;\r\n var tel = $$('sdtnmua') != null ? $$('sdtnmua').getValue() : null;\r\n var bank_account = $$('stknmua') != null ? $$('stknmua').getValue() : null;\r\n var bank_name = $$('tnhmua') != null ? $$('tnhmua').getValue() : null;\r\n var name_label = $$('ten') != null ? $$('ten').config.label : \"Tên\";\r\n var address_label = $$('dchi') != null ? $$('dchi').config.label : \"Địa chỉ\";\r\n\r\n var obj = {\r\n code: code,\r\n buyer_name: buyer_name,\r\n name: name,\r\n tax_code: tax_code,\r\n email: email,\r\n address: address,\r\n tel: tel,\r\n bank_account: bank_account,\r\n bank_name: bank_name,\r\n };\r\n\r\n var checkMessage = [];\r\n\r\n if (obj.code == \"\") checkMessage.push('\"Mã\" khách hảng là trường bắt buộc nhập\"');\r\n if (obj.name == \"\") checkMessage.push('\"' + name_label + '\" là trường bắt buộc nhập\"');\r\n if (obj.address == \"\") checkMessage.push('\"' + address_label + '\" khách hảng là trường bắt buộc nhập\"');\r\n\r\n var showConfirmUI = function () {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"check-customer-modal\",\r\n type: \"modal\",\r\n modal: true,\r\n position: \"center\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-form-check-customer\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Tạo mới khách hàng thất bại
\";\r\n },\r\n }\r\n ],\r\n },\r\n body: {\r\n padding: 10,\r\n rows: [\r\n {\r\n rows: checkMessage.map(function (message) {\r\n return {\r\n view: \"template\",\r\n template: \"▶ \" + message,\r\n autoheight: true, width: 350\r\n }\r\n }),\r\n },\r\n {\r\n view: \"template\", autoheight: true, template: \"
Chọn \\\"Tạo hóa đơn\\\" để tạo hóa đơn và không tạo mới khách hàng
\"\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Tạo hóa đơn\", type: \"form\", click: function () {\r\n $$('check-customer-modal').hide();\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n },\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Nhập lại\", type: \"danger\", click: function () {\r\n $$('check-customer-modal').hide();\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n }).show()\r\n }\r\n\r\n if (checkMessage.length > 0) {\r\n showConfirmUI();\r\n } else {\r\n customerCallApis.saveCustomer(obj).then(function (res) {\r\n res = res.json();\r\n\r\n if (!res.status) {\r\n checkMessage.push(res.message.replace(\"P0001: \", \"\"));\r\n showConfirmUI();\r\n } else {\r\n\r\n webix.message(\"Lưu thông tin khách hàng thành công\", \"success\"); hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n });\r\n }\r\n } else\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);;\r\n\r\n }\r\n\r\n $$(\"btnBangKeSave\").enable();\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n id: \"btnBangKeDelete\",\r\n label: \"Xoá\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 80,\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n\r\n setTimeout(function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n var url = app.config.host + \"/Invoice68/DeleteBangKeHoaDon?id=\" + item.id;\r\n var table = $$(\"invoiceForms\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, function (result) {\r\n if (result == \"true\") {\r\n webix.message(\"Đã xoá bảng kê !\");\r\n table.enable();\r\n table.hideProgress();\r\n webix.$$(\"invoice68\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n } else {\r\n webix.message(\"Xoá không thành công !\", \"error\");\r\n }\r\n });\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnHoadonSave\",\r\n label: \"Lưu tạm (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n $$(\"btnHoadonSave\").disable();\r\n setTimeout(function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n if (item.nlap_temp != null) {\r\n var nlap_temp = new Date(item.nlap_temp);\r\n if ($$(\"nlap\").getValue() < nlap_temp) {\r\n webix.message(\"Ngày hoá đơn thay thế hoặc điều chỉnh không được nhỏ hơn hoá đơn gốc!\", \"error\");\r\n return;\r\n }\r\n }\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n if (record.length == 0 && item.tlkthu == undefined) {\r\n webix.message(\"Bạn chưa bổ sung chi tiết khoản thu\");\r\n return;\r\n }\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n }\r\n if (table.validate()) {\r\n var TTKhac = [];\r\n Object.keys(item).forEach(function (key) {\r\n if (key.includes(\"TTKhac_\")) {\r\n var test = $$(key);\r\n if (test.config.editor === \"nummeric\" || test.config.editor === \"autonumeric\") {\r\n TTKhac.push({\r\n ttruong: key.replace(\"TTKhac_\", \"\"),\r\n kdlieu: \"decimal\",\r\n dlieu: item[key],\r\n });\r\n }\r\n else if (test.config.view === \"text\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"string\", dlieu: item[key] });\r\n else if (test.config.view === \"datepicker\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"dateTime\", dlieu: item[key] });\r\n }\r\n });\r\n var TTKhacItem = [];\r\n TTKhacItem.push({\r\n data: TTKhac,\r\n });\r\n item[\"hoadon68_khac\"] = TTKhacItem;\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: record });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 0;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n var isSaveCustomerInfo = $$('is_save_customer_info') != null && $$('is_save_customer_info').getValue();\r\n\r\n function afterSaveInvoiceSuccess(text) {\r\n var json = text.json();\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thông tin hóa đơn thành công!\", \"success\");\r\n\r\n webix.$$(\"invoice68\").close();\r\n\r\n if (item.hdon_id_old !== null && item.hdon_id === \"\" && item.tthai_old != \"Đã ký\") {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n }\r\n\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n\r\n function afterSaveInvoiceError(text) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text.json() + XmlHttpRequest, \"error\");\r\n }\r\n\r\n if (isSaveCustomerInfo) {\r\n\r\n var code = $$('mnmua') != null ? $$('mnmua').getValue() : null;\r\n var buyer_name = $$('tnmua') != null ? $$('tnmua').getValue() : null;\r\n var name = $$('ten') != null ? $$('ten').getValue() : null;\r\n var tax_code = $$('mst') != null ? $$('mst').getValue() : null;\r\n var email = $$('email') != null ? $$('email').getValue() : null;\r\n var address = $$('dchi') != null ? $$('dchi').getValue() : null;\r\n var tel = $$('sdtnmua') != null ? $$('sdtnmua').getValue() : null;\r\n var bank_account = $$('stknmua') != null ? $$('stknmua').getValue() : null;\r\n var bank_name = $$('tnhmua') != null ? $$('tnhmua').getValue() : null;\r\n var name_label = $$('ten') != null ? $$('ten').config.label : \"Tên\";\r\n var address_label = $$('dchi') != null ? $$('dchi').config.label : \"Địa chỉ\";\r\n\r\n var obj = {\r\n code: code,\r\n buyer_name: buyer_name,\r\n name: name,\r\n tax_code: tax_code,\r\n email: email,\r\n address: address,\r\n tel: tel,\r\n bank_account: bank_account,\r\n bank_name: bank_name,\r\n };\r\n\r\n var checkMessage = [];\r\n\r\n if (obj.code == \"\") checkMessage.push('\"Mã\" khách hảng là trường bắt buộc nhập\"');\r\n if (obj.name == \"\") checkMessage.push('\"' + name_label + '\" là trường bắt buộc nhập\"');\r\n if (obj.address == \"\") checkMessage.push('\"' + address_label + '\" khách hảng là trường bắt buộc nhập\"');\r\n\r\n var showConfirmUI = function () {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"check-customer-modal\",\r\n type: \"modal\",\r\n modal: true,\r\n position: \"center\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-form-check-customer\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Tạo mới khách hàng thất bại
\";\r\n },\r\n }\r\n ],\r\n },\r\n body: {\r\n padding: 10,\r\n rows: [\r\n {\r\n rows: checkMessage.map(function (message) {\r\n return {\r\n view: \"template\",\r\n template: \"▶ \" + message,\r\n autoheight: true, width: 350\r\n }\r\n }),\r\n },\r\n {\r\n view: \"template\", autoheight: true, template: \"
Chọn \\\"Tạo hóa đơn\\\" để tạo hóa đơn và không tạo mới khách hàng
\"\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Tạo hóa đơn\", type: \"form\", click: function () {\r\n $$('check-customer-modal').hide();\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n },\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Nhập lại\", type: \"danger\", click: function () {\r\n $$('check-customer-modal').hide();\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n }).show()\r\n }\r\n\r\n if (checkMessage.length > 0) {\r\n showConfirmUI();\r\n } else {\r\n customerCallApis.saveCustomer(obj).then(function (res) {\r\n res = res.json();\r\n\r\n if (!res.status) {\r\n checkMessage.push(res.message.replace(\"P0001: \", \"\"));\r\n showConfirmUI();\r\n } else {\r\n\r\n webix.message(\"Lưu thông tin khách hàng thành công\", \"success\"); hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n });\r\n }\r\n } else\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);;\r\n\r\n }\r\n $$(\"btnHoadonSave\").enable();\r\n }, 100);\r\n $$(\"btnHoadonSave\").enable();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n align: \"center\",\r\n type: \"danger\",\r\n width: 120,\r\n click: function () {\r\n this.getTopParentView().close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ];\r\n //FormDetail Tạo item trên trang from từ tab và data\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n //view: \"toolbar\",\r\n // css: { \"box-shadow\": \"0 -2px #3498db inset !important\", \"background\": \"#ffffff !important\" },\r\n //css: { \"background\": \"#e6f2ff !important\" },\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-iconInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Test Form
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_InvoiceForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n // var form = webix.$$(\"window-form\");\r\n // hint_form(form.config.hint);\r\n },\r\n },\r\n ],\r\n },\r\n id: \"invoice68\",\r\n resize: true,\r\n fullscreen: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () { },\r\n },\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 100 },\r\n view: \"form\",\r\n id: \"invoiceForms\",\r\n width: 800,\r\n height: 500,\r\n complexData: true,\r\n margin: 0,\r\n on: {\r\n // onViewShow: function () {\r\n // }\r\n },\r\n elements: el,\r\n },\r\n },\r\n setValues: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n if (item != null) {\r\n this.editgiatri(item);\r\n form.setValues(item);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n tablePhi.clearAll();\r\n tablePhi.load(urlPhi);\r\n var urlKhac = app.config.host + \"/Invoice68/GetDataInvoiceKhac?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlKhac, function (text) {\r\n var data = JSON.parse(text);\r\n for (var i = 0; i < data.length; i++) {\r\n try {\r\n if ($$(\"TTKhac_\" + data[i].ttruong) !== undefined && $$(\"TTKhac_\" + data[i].ttruong) !== null) $$(\"TTKhac_\" + data[i].ttruong).setValue(data[i][\"dlieu\"]);\r\n } catch (e) { }\r\n }\r\n });\r\n }\r\n\r\n if (editmode == 2) {\r\n }\r\n // nếu có mẫu 04 (hóa đơn hủy)\r\n if (winconfig != null) {\r\n mau04 = winconfig;\r\n $$(\"btnHoadonSaveMau04\").show();\r\n //$$(\"btnHoadonCQT\").destructor();\r\n $$(\"btnHoadonSave\").destructor();\r\n }\r\n this.getFormat(item[\"dvtte\"]);\r\n },\r\n setValuesBangKe: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n tongtienHDonBke = item.tgtttbso;\r\n var form = win.getChildViews()[1];\r\n if (item != null) {\r\n this.editgiatri(item);\r\n form.setValues(item);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = \"\";\r\n if (editmode == 4) {\r\n url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n } else {\r\n url = app.config.host + \"/Invoice68/GetDataInvoiceDetail_BangKe?id=\" + item.id;\r\n }\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n // nếu có mẫu 04 (hóa đơn hủy)\r\n if (winconfig != null) {\r\n mau04 = winconfig;\r\n $$(\"btnHoadonSaveMau04\").show();\r\n //$$(\"btnHoadonCQT\").destructor();\r\n $$(\"btnHoadonSave\").destructor();\r\n }\r\n this.getFormat(item[\"dvtte\"]);\r\n },\r\n editgiatri: function (item) {\r\n if (item[\"tdlap\"] !== undefined) item[\"tdlap\"] = removeTimeZoneT(item[\"tdlap\"]);\r\n if (item[\"cqqdbants\"] !== undefined) item[\"cqqdbants\"] = removeTimeZoneT(item[\"cqqdbants\"]);\r\n if (item[\"tgvchdtu\"] !== undefined) item[\"tgvchdtu\"] = removeTimeZoneT(item[\"tgvchdtu\"]);\r\n if (item[\"tgvchdden\"] !== undefined) item[\"tgvchdden\"] = removeTimeZoneT(item[\"tgvchdden\"]);\r\n if (item[\"nqdbants\"] !== undefined) item[\"nqdbants\"] = removeTimeZoneT(item[\"nqdbants\"]);\r\n if (item[\"nbke\"] !== undefined) item[\"nbke\"] = removeTimeZoneT(item[\"nbke\"]);\r\n if (item[\"hdktngay\"] !== undefined) item[\"hdktngay\"] = removeTimeZoneT(item[\"hdktngay\"]);\r\n item[\"giamthuebanhang20\"] = item[\"giamthuebanhang20\"] == true ? 1 : 0;\r\n if (item[\"nbke\"] !== undefined) item[\"nbke\"] = removeTimeZoneT(item[\"nbke\"]);\r\n if (item[\"ngccmnd\"] !== undefined) item[\"ngccmnd\"] = removeTimeZoneT(item[\"ngccmnd\"]);\r\n },\r\n setcompany: function (item) {\r\n var url = app.config.host + \"/System/GetInfoCompany\";\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var data = JSON.parse(text);\r\n $$(\"ten_tc\").setValue(data.name);\r\n $$(\"mst_tc\").setValue(data.tax_code);\r\n $$(\"dchi_tc\").setValue(data.address);\r\n //$$(\"tel_tc\").setValue(data.tel);\r\n if ($$(\"tinh_tc\") != undefined) $$(\"tinh_tc\").setValue(data.city);\r\n });\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n //var form = webix.$$(\"invoiceForms\");\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1 || editmode == 4) {\r\n icon = \"\";\r\n } else {\r\n if (editmode == 2 || editmode == 5) icon = \"\";\r\n else icon = \"\";\r\n }\r\n\r\n webix.$$(\"head-iconInvoice\").setHTML(icon);\r\n webix.$$(\"head-iconInvoice\").refresh();\r\n this.setcompany();\r\n },\r\n copyValues: function (item) {\r\n var form = webix.$$(\"invoiceForms\");\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"cthdon_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tableDetail.clearAll();\r\n tableDetail.parse(data);\r\n });\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlPhi, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"phi_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tablePhi.clearAll();\r\n tablePhi.parse(data);\r\n });\r\n var urlKhac = app.config.host + \"/Invoice68/GetDataInvoiceKhac?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlKhac, function (text) {\r\n var data = JSON.parse(text);\r\n for (var i = 0; i < data.length; i++) {\r\n try {\r\n if ($$(\"TTKhac_\" + data[i].ttruong) !== undefined && $$(\"TTKhac_\" + data[i].ttruong) !== null) $$(\"TTKhac_\" + data[i].ttruong).setValue(data[i][\"dlieu\"]);\r\n } catch (e) { }\r\n }\r\n });\r\n // tableDetail.clearAll();\r\n // tableDetail.load(url);\r\n item[\"tthdon\"] = 0;\r\n item[\"tthdon_original\"] = 0;\r\n item[\"tthdon_old\"] = 0;\r\n item[\"hdon_id\"] = null;\r\n item[\"hdon68_id_lk\"] = null;\r\n item[\"nky\"] = null;\r\n item[\"id\"] = webix.uid();\r\n item[\"giamthuebanhang20\"] = item[\"giamthuebanhang20\"] == true ? 1 : 0;\r\n item[\"nbke\"] = null;\r\n\r\n this.editgiatri(item);\r\n form.setValues(item);\r\n\r\n this.getFormat();\r\n },\r\n getFormat: function (val) {\r\n renderFormat(val);\r\n },\r\n initUINew: function (cctbao_id) {\r\n $$(\"cctbao_id\").setValue(cctbao_id);\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/getKyhieu?cctbao_id=\" + cctbao_id, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (data.length > 0) {\r\n var form = $$(\"invoiceForms\");\r\n var values = form.getValues();\r\n\r\n values[\"khieu\"] = data[0][\"khhdon\"];\r\n values[\"mcqtcap\"] = data[0][\"mccqthue\"];\r\n values[\"mcqtcap\"] = data[0][\"mccqthue\"];\r\n values[\"msbl_tncn\"] = data[0][\"khmbl\"];\r\n\r\n form.setValues(values);\r\n }\r\n });\r\n this.getFormat();\r\n },\r\n initUI: function (windowconfig) {\r\n var rp = windowconfig;\r\n var vc_window = rp[\"data\"][0];\r\n var tabs = vc_window.Tabs;\r\n var windowno = vc_window.code;\r\n $$(\"head-formInvoice\").define(\"template\", \"
\" + vc_window.name + \"
\");\r\n el = [];\r\n col = [];\r\n var m = 0;\r\n\r\n if (vc_window.detail_layout != null && vc_window.detail_layout != \"\") {\r\n var layoutdetail = JSON.parse(vc_window.detail_layout);\r\n\r\n var layout_element = JSON.stringify(layoutdetail.elements);\r\n var json_layout = JSON.parse(layout_element);\r\n //console.log(json_layout);\r\n for (var i = 0; i < json_layout.length; i++) {\r\n el.push(json_layout[i]);\r\n }\r\n\r\n var jsonElement = findJson.getObjects(JSON.parse(JSON.stringify(el)), \"id\", \"\");\r\n\r\n for (var i = 0; i < jsonElement.length; i++) {\r\n //var item = jsonElement[i];\r\n //var item = jsonElement[i];\r\n var fields = rp[\"data\"][0][\"Tabs\"][0][\"Fields\"];\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (jsonElement[i].name == field.column_name) {\r\n item = commonHD.CreatItemMaterFromData(field, windowno);\r\n jsonElement[i] = item;\r\n\r\n findJson.findAndReplace(el, jsonElement[i].name, item);\r\n }\r\n }\r\n }\r\n if (vc_window.window_type == \"MasterDetail\") {\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Master\") {\r\n continue;\r\n }\r\n\r\n var subCols = [];\r\n\r\n for (var j = 0; j < tab.Fields.length; j++) {\r\n var field = tab.Fields[j];\r\n\r\n subCols.push(commonHD.CreatItemFromData(field, tab));\r\n }\r\n\r\n if (tab.tab_type == \"Detail\" && tab.foreign_key === \"detail_tab\") {\r\n var item = {\r\n id: \"detail_tab\",\r\n header: \"Chi tiết các khoản thu\",\r\n select: \"cell\",\r\n\r\n body: {\r\n rows: [\r\n {\r\n view: \"toolbar\",\r\n height: 40,\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n var item = {\r\n id: webix.uid(),\r\n };\r\n table.add(item);\r\n table.select(item.id, \"ma\", false);\r\n table.edit({\r\n row: item.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n\r\n var copy = webix.copy(item);\r\n copy.cthdon_id = null;\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, \"ma\", false);\r\n table.edit({\r\n row: copy.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_chitiet\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n scroll: true,\r\n columns: subCols,\r\n select_change: tab.select_change,\r\n cell_editstop: tab.cell_editstop,\r\n after_addrow: tab.after_addrow,\r\n after_delrow: tab.after_delrow,\r\n oncheck: tab.oncheck,\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onAfterLoad: function () {\r\n var table = this;\r\n var data = table.serialize();\r\n data.forEach(function (entry) {\r\n if (entry[\"stckhau\"] != undefined || entry[\"tlckhau\"] != undefined) {\r\n if (entry[\"stckhau\"] != 0 || entry[\"tlckhau\"] != 0) {\r\n var ck = $$(\"check_chietkhau\");\r\n if (ck != undefined) {\r\n ck.setValue(1);\r\n return false;\r\n }\r\n }\r\n }\r\n });\r\n },\r\n onCheck: function (row, column, state) {\r\n var table = this;\r\n if (column == \"khuyen_mai\") {\r\n if (state == true) {\r\n }\r\n }\r\n },\r\n onAfterAdd: function (id, index) {\r\n if (this.config.after_addrow != null) {\r\n var fn = Function(\"id\", \"index\", \"tableId\", this.config.after_addrow);\r\n fn(id, index, this.config.id);\r\n }\r\n },\r\n onAfterDelete: function (id) {\r\n if (this.config.after_delrow != null) {\r\n var fn = Function(\"id\", \"tableId\", this.config.after_delrow);\r\n fn(id, this.config.id);\r\n }\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n if (state.value === state.old) return;\r\n\r\n if (this.config.cell_editstop != null) {\r\n var fn = Function(\"state\", \"editor\", \"ignore\", \"tableId\", this.config.cell_editstop);\r\n fn(state, editor, ignore, this.config.id);\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n\r\n findJson.findAndReplace(el, tab.foreign_key, item);\r\n m++;\r\n //cells.push(item);\r\n }\r\n if (tab.tab_type == \"Detail\" && tab.foreign_key === \"phi_tab\") {\r\n var item = {\r\n id: \"phi_tab\",\r\n header: \"Tiền phí/lệ phí\",\r\n select: \"cell\",\r\n hidden: tab.hidden,\r\n body: {\r\n rows: [\r\n {\r\n view: \"toolbar\",\r\n height: 40,\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n var item = {\r\n id: webix.uid(),\r\n tienphi: 0,\r\n };\r\n table.add(item);\r\n table.select(item.id);\r\n table.edit({\r\n row: item.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n var copy = webix.copy(item);\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, \"tnphi\", false);\r\n table.edit({\r\n row: copy.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_phi\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n scroll: true,\r\n columns: subCols,\r\n select_change: tab.select_change,\r\n cell_editstop: tab.cell_editstop,\r\n after_addrow: tab.after_addrow,\r\n after_delrow: tab.after_delrow,\r\n oncheck: tab.oncheck,\r\n on: {\r\n onAfterAdd: function (id, index) {\r\n if (this.config.after_addrow != null) {\r\n var fn = Function(\"id\", \"index\", \"tableId\", this.config.after_addrow);\r\n fn(id, index, this.config.id);\r\n }\r\n },\r\n onAfterDelete: function (id) {\r\n if (this.config.after_delrow != null) {\r\n var fn = Function(\"id\", \"tableId\", this.config.after_delrow);\r\n fn(id, this.config.id);\r\n }\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n if (state.value === state.old) return;\r\n\r\n if (this.config.cell_editstop != null) {\r\n var fn = Function(\"state\", \"editor\", \"ignore\", \"tableId\", this.config.cell_editstop);\r\n fn(state, editor, ignore, this.config.id);\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n\r\n findJson.findAndReplace(el, \"phi_tab\", item);\r\n m++;\r\n }\r\n }\r\n }\r\n\r\n el.push({\r\n // paddingY:10,\r\n margin: 10,\r\n cols: cols,\r\n });\r\n webix.ui(el, $$(\"invoiceForms\"));\r\n //$$(\"tab_replace\").define(\"tabbar\",{width:150 * m});\r\n //console.log(jsonElement);\r\n\r\n if (windowno == \"WIN00791\" || windowno == \"WIN00792\" || windowno == \"WIN00793\") {\r\n //$$(\"btnHoadonCQT\").hide();\r\n }\r\n this.SetDefaultValue(windowconfig);\r\n }\r\n },\r\n SetDefaultValue: function (winconfig) {\r\n var form = webix.$$(\"invoiceForms\");\r\n var item = form.getValues();\r\n var vc_window = winconfig[\"data\"][0];\r\n\r\n var tabs = vc_window.Tabs;\r\n\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Normal\" || tab.tab_type == \"Master\") {\r\n var fields = tab.Fields;\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (field.column_name == tab.table_name + \"_id\") {\r\n item[field.column_name] = null;\r\n }\r\n\r\n if (field.column_name == \"branch_code\") {\r\n item[field.column_name] = user.getDvcsID();\r\n }\r\n\r\n if (field.default_value != null) {\r\n var defaultValue = field.default_value.toString();\r\n\r\n if (defaultValue.startsWith(\"@Default=\")) {\r\n item[field.column_name] = defaultValue.replace(\"@Default=\", \"\");\r\n }\r\n\r\n if (defaultValue.startsWith(\"@JS=\")) {\r\n var fn = Function(defaultValue.replace(\"@JS=\", \"\"));\r\n item[field.column_name] = fn();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n form.setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/formhoadon78tncn',[\"app\", \"locale\", \"models/user\", \"models/findjson\", \"views/commonHD\", \"callApis/hoadon68\", \"callApis/customer\"], function (app, _, user, findJson, commonHD, hoadon68CallApis, customerCallApis) {\r\n var editmode = 0;\r\n var tongtienHDonBke = 0;\r\n var mau04 = {};\r\n formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n };\r\n\r\n var el = [];\r\n function renderFormat(val) {\r\n if (val === undefined) val = \"VND\";\r\n var url = app.config.host + \"/Invoice68/GetDecimalPlace?ma_nt=\" + val;\r\n var table_chitiet = webix.$$(\"hoadon68_chitiet\");\r\n var table_phi = webix.$$(\"hoadon68_phi\");\r\n var table = $$(\"invoiceForms\");\r\n }\r\n\r\n //FormButton\r\n var cols = [\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnBangKeSave\",\r\n label: \"Lưu (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var tongtienBangKeCT = webix.$$(\"tgtttbso\").getValue();\r\n var item = $$(\"invoiceForms\").getValues();\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai != null && it.kmai.toString() === \"1\") {\r\n //var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n //if (!bool) {\r\n // webix.message(\"Tiền trước thuế + Tiền thuế != tiền sau thuế\");\r\n // return;\r\n //}\r\n if ((it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") && (mauso === \"1\" || mauso === \"5\")) {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (tongtienHDonBke != tongtienBangKeCT) {\r\n webix.message(\"Tổng tiền chi tiết bảng kê khác tổng tiền của hoá đơn!\", \"error\");\r\n return false;\r\n }\r\n\r\n if (table.validate()) {\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: record });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 0;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var isSaveCustomerInfo = $$('is_save_customer_info') != null && $$('is_save_customer_info').getValue();\r\n\r\n function hoadonSaveChange() {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonSaveChange\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thông tin hóa đơn thành công!\", \"success\");\r\n\r\n if (isSaveCustomerInfo)\r\n if (!json.hasOwnProperty(\"message_warning\")) {\r\n webix.message(\"Lưu thông tin khách hàng thành công!\", \"success\");\r\n }\r\n\r\n webix.$$(\"invoice68\").close();\r\n\r\n if (item.hdon_id_old !== null && item.hdon_id === \"\" && item.tthai_old != \"Đã ký\") {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n }\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n\r\n if ($$('is_save_customer_info') != null && $$('is_save_customer_info').getValue() == 1) {\r\n var mnmuaValue = $$('mnmua').getValue();\r\n var tenValue = $$('ten').getValue();\r\n var mstValue = $$('mst').getValue();\r\n var dchiValue = $$('dchi').getValue();\r\n\r\n var checkMessage = [];\r\n\r\n if (mnmuaValue == \"\") checkMessage.push('\"Mã\" khách hảng là trường bắt buộc nhập\"');\r\n if (tenValue == \"\") checkMessage.push('\"Tên\" khách hảng là trường bắt buộc nhập\"');\r\n if (dchiValue == \"\") checkMessage.push('\"Địa chỉ\" khách hảng là trường bắt buộc nhập\"');\r\n\r\n var showConfirmUI = function () {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"check-customer-modal\",\r\n type: \"modal\",\r\n modal: true,\r\n position: \"center\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-form-check-customer\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
 Tạo mới khách hàng thất bại
\";\r\n },\r\n }\r\n ],\r\n },\r\n body: {\r\n padding: 10,\r\n rows: [\r\n {\r\n rows: checkMessage.map(function (message) {\r\n return {\r\n view: \"template\",\r\n template: \"▶ \" + message,\r\n autoheight: true, width: 350\r\n }\r\n }),\r\n },\r\n {\r\n view: \"template\", autoheight: true, template: \"
Chọn \\\"Tạo hóa đơn\\\" để tạo hóa đơn và không tạo mới khách hàng
\"\r\n },\r\n {\r\n cols: [\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Tạo hóa đơn\", type: \"form\", click: function () {\r\n $$('check-customer-modal').hide();\r\n hoadonSaveChange();\r\n }\r\n },\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Hủy\", click: function () {\r\n $$('check-customer-modal').hide();\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n }).show()\r\n }\r\n\r\n if (mnmuaValue == \"\" && mstValue == \"\") {\r\n showConfirmUI();\r\n } else {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Customer/CheckExistedCustomerCodeOrTaxCode?code=\" + mnmuaValue + \"&taxcode=\" + mstValue, null, function (res) {\r\n\r\n res = JSON.parse(res);\r\n if (res.length > 0) {\r\n for (var i = 0; i < res.length; i++) {\r\n if (res[i].code == mnmuaValue) {\r\n checkMessage.push('\"Mã\" khách hàng đã tồn tại');\r\n }\r\n if (res[i].tax_code == mstValue) {\r\n checkMessage.push('\"Mã\" số thuế của khách hàng đã tồn tại');\r\n }\r\n }\r\n }\r\n\r\n if (checkMessage.length > 0) {\r\n showConfirmUI();\r\n } else {\r\n hoadonSaveChange();\r\n }\r\n });\r\n }\r\n } else\r\n hoadonSaveChange();\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n id: \"btnBangKeDelete\",\r\n label: \"Xoá\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 80,\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n var url = app.config.host + \"/Invoice68/DeleteBangKeHoaDon?id=\" + item.id;\r\n var table = $$(\"invoiceForms\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, function (result) {\r\n if (result == \"true\") {\r\n webix.message(\"Đã xoá bảng kê !\");\r\n table.enable();\r\n table.hideProgress();\r\n webix.$$(\"invoice68\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n } else {\r\n webix.message(\"Xoá không thành công !\", \"error\");\r\n }\r\n });\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnHoadonSave\",\r\n label: \"Lưu tạm (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n $$(\"btnHoadonSave\").disable();\r\n setTimeout(function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n if (item.nlap_temp != null) {\r\n var nlap_temp = new Date(item.nlap_temp);\r\n if ($$(\"nlap\").getValue() < nlap_temp) {\r\n webix.message(\"Ngày hoá đơn thay thế hoặc điều chỉnh không được nhỏ hơn hoá đơn gốc!\", \"error\");\r\n return;\r\n }\r\n }\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai != null && it.kmai.toString() === \"1\") {\r\n /*var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + Tiền thuế != tiền sau thuế\");\r\n return;\r\n }*/\r\n if ((it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") && (mauso === \"1\" || mauso === \"5\")) {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n if (table.validate()) {\r\n var TTKhac = [];\r\n Object.keys(item).forEach(function (key) {\r\n if (key.includes(\"TTKhac_\")) {\r\n var test = $$(key);\r\n if (test.config.editor === \"nummeric\" || test.config.editor === \"autonumeric\") {\r\n TTKhac.push({\r\n ttruong: key.replace(\"TTKhac_\", \"\"),\r\n kdlieu: \"decimal\",\r\n dlieu: item[key],\r\n });\r\n }\r\n else if (test.config.view === \"text\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"string\", dlieu: item[key] });\r\n else if (test.config.view === \"datepicker\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"dateTime\", dlieu: item[key] });\r\n }\r\n });\r\n var TTKhacItem = [];\r\n TTKhacItem.push({\r\n data: TTKhac,\r\n });\r\n item[\"hoadon68_khac\"] = TTKhacItem;\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: record });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 0;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var isSaveCustomerInfo = $$('is_save_customer_info') != null && $$('is_save_customer_info').getValue();\r\n\r\n function afterSaveInvoiceSuccess(text) {\r\n var json = text.json();\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thông tin hóa đơn thành công!\", \"success\");\r\n\r\n webix.$$(\"invoice68\").close();\r\n\r\n if (item.hdon_id_old !== null && item.hdon_id === \"\" && item.tthai_old != \"Đã ký\") {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n }\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n\r\n function afterSaveInvoiceError(text) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text.json() + XmlHttpRequest, \"error\");\r\n }\r\n\r\n if (isSaveCustomerInfo) {\r\n\r\n\r\n var code = $$('mnmua') != null ? $$('mnmua').getValue() : null;\r\n var buyer_name = $$('tnmua') != null ? $$('tnmua').getValue() : null;\r\n var name = $$('ten') != null ? $$('ten').getValue() : null;\r\n var tax_code = $$('mst') != null ? $$('mst').getValue() : null;\r\n var email = $$('email') != null ? $$('email').getValue() : null;\r\n var address = $$('dchi') != null ? $$('dchi').getValue() : null;\r\n var tel = $$('sdtnmua') != null ? $$('sdtnmua').getValue() : null;\r\n var bank_account = $$('stknmua') != null ? $$('stknmua').getValue() : null;\r\n var bank_name = $$('tnhmua') != null ? $$('tnhmua').getValue() : null;\r\n var name_label = $$('ten') != null ? $$('ten').config.label : \"Tên\";\r\n var address_label = $$('dchi') != null ? $$('dchi').config.label : \"Địa chỉ\";\r\n\r\n var obj = {\r\n code: code,\r\n buyer_name: buyer_name,\r\n name: name,\r\n tax_code: tax_code,\r\n email: email,\r\n address: address,\r\n tel: tel,\r\n bank_account: bank_account,\r\n bank_name: bank_name,\r\n };\r\n\r\n var checkMessage = [];\r\n\r\n if (obj.code == \"\") checkMessage.push('\"Mã\" khách hảng là trường bắt buộc nhập\"');\r\n if (obj.name == \"\") checkMessage.push('\"' + name_label + '\" là trường bắt buộc nhập\"');\r\n if (obj.address == \"\") checkMessage.push('\"' + address_label + '\" khách hảng là trường bắt buộc nhập\"');\r\n\r\n var showConfirmUI = function () {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"check-customer-modal\",\r\n type: \"modal\",\r\n modal: true,\r\n position: \"center\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-form-check-customer\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Tạo mới khách hàng thất bại
\";\r\n },\r\n }\r\n ],\r\n },\r\n body: {\r\n padding: 10,\r\n rows: [\r\n {\r\n rows: checkMessage.map(function (message) {\r\n return {\r\n view: \"template\",\r\n template: \"▶ \" + message,\r\n autoheight: true, width: 350\r\n }\r\n }),\r\n },\r\n {\r\n view: \"template\", autoheight: true, template: \"
Chọn \\\"Tạo hóa đơn\\\" để tạo hóa đơn và không tạo mới khách hàng
\"\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Tạo hóa đơn\", type: \"form\", click: function () {\r\n $$('check-customer-modal').hide();\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n },\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Nhập lại\", type: \"danger\", click: function () {\r\n $$('check-customer-modal').hide();\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n }).show()\r\n }\r\n\r\n if (checkMessage.length > 0) {\r\n showConfirmUI();\r\n } else {\r\n customerCallApis.saveCustomer(obj).then(function (res) {\r\n res = res.json();\r\n\r\n if (!res.status) {\r\n checkMessage.push(res.message.replace(\"P0001: \", \"\"));\r\n showConfirmUI();\r\n } else {\r\n\r\n webix.message(\"Lưu thông tin khách hàng thành công\", \"success\"); hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n });\r\n }\r\n } else\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);;\r\n\r\n }\r\n $$(\"btnHoadonSave\").enable();\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F11\",\r\n view: \"button\",\r\n id: \"btnHoadonCQT\",\r\n label: \"Ký và gửi CQT (F11)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 150,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n\r\n $$(\"btnHoadonCQT\").disable();\r\n setTimeout(function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n if (item.nlap_temp != null) {\r\n var nlap_temp = new Date(item.nlap_temp);\r\n if ($$(\"nlap\").getValue() < nlap_temp) {\r\n webix.message(\"Ngày hoá đơn thay thế hoặc điều chỉnh không được nhỏ hơn hoá đơn gốc!\", \"error\");\r\n return;\r\n }\r\n }\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai != null && it.kmai.toString() === \"1\") {\r\n /*var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + Tiền thuế != tiền sau thuế\");\r\n return;\r\n }*/\r\n if ((it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") && (mauso === \"1\" || mauso === \"5\")) {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n if (table.validate()) {\r\n var TTKhac = [];\r\n Object.keys(item).forEach(function (key) {\r\n if (key.includes(\"TTKhac_\")) {\r\n var test = $$(key);\r\n if (test.config.editor === \"nummeric\" || test.config.editor === \"autonumeric\") {\r\n TTKhac.push({\r\n ttruong: key.replace(\"TTKhac_\", \"\"),\r\n kdlieu: \"decimal\",\r\n dlieu: item[key],\r\n });\r\n }\r\n else if (test.config.view === \"text\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"string\", dlieu: item[key] });\r\n else if (test.config.view === \"datepicker\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"dateTime\", dlieu: item[key] });\r\n }\r\n });\r\n var TTKhacItem = [];\r\n TTKhacItem.push({\r\n data: TTKhac,\r\n });\r\n item[\"hoadon68_khac\"] = TTKhacItem;\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: $$(\"hoadon68_chitiet\").serialize() });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 0;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var isSaveCustomerInfo = $$('is_save_customer_info') != null && $$('is_save_customer_info').getValue();\r\n\r\n function afterSaveInvoiceSuccess(text) {\r\n var json = text.json();\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thông tin hóa đơn thành công!\", \"success\");\r\n\r\n webix.$$(\"invoice68\").close();\r\n\r\n if (item.hdon_id_old !== null && item.hdon_id === \"\" && item.tthai_old != \"Đã ký\") {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n }\r\n var lsthdon_id = [];\r\n lsthdon_id.push(json.data.hdon_id);\r\n commonHD.ExcuteHoaDon(lsthdon_id, true, false);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n\r\n function afterSaveInvoiceError(text) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text.json() + XmlHttpRequest, \"error\");\r\n }\r\n\r\n if (isSaveCustomerInfo) {\r\n\r\n\r\n var code = $$('mnmua') != null ? $$('mnmua').getValue() : null;\r\n var buyer_name = $$('tnmua') != null ? $$('tnmua').getValue() : null;\r\n var name = $$('ten') != null ? $$('ten').getValue() : null;\r\n var tax_code = $$('mst') != null ? $$('mst').getValue() : null;\r\n var email = $$('email') != null ? $$('email').getValue() : null;\r\n var address = $$('dchi') != null ? $$('dchi').getValue() : null;\r\n var tel = $$('sdtnmua') != null ? $$('sdtnmua').getValue() : null;\r\n var bank_account = $$('stknmua') != null ? $$('stknmua').getValue() : null;\r\n var bank_name = $$('tnhmua') != null ? $$('tnhmua').getValue() : null;\r\n var name_label = $$('ten') != null ? $$('ten').config.label : \"Tên\";\r\n var address_label = $$('dchi') != null ? $$('dchi').config.label : \"Địa chỉ\";\r\n\r\n var obj = {\r\n code: code,\r\n buyer_name: buyer_name,\r\n name: name,\r\n tax_code: tax_code,\r\n email: email,\r\n address: address,\r\n tel: tel,\r\n bank_account: bank_account,\r\n bank_name: bank_name,\r\n };\r\n\r\n var checkMessage = [];\r\n\r\n if (obj.code == \"\") checkMessage.push('\"Mã\" khách hảng là trường bắt buộc nhập\"');\r\n if (obj.name == \"\") checkMessage.push('\"' + name_label + '\" là trường bắt buộc nhập\"');\r\n if (obj.address == \"\") checkMessage.push('\"' + address_label + '\" khách hảng là trường bắt buộc nhập\"');\r\n\r\n var showConfirmUI = function () {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"check-customer-modal\",\r\n type: \"modal\",\r\n modal: true,\r\n position: \"center\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-form-check-customer\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Tạo mới khách hàng thất bại
\";\r\n },\r\n }\r\n ],\r\n },\r\n body: {\r\n padding: 10,\r\n rows: [\r\n {\r\n rows: checkMessage.map(function (message) {\r\n return {\r\n view: \"template\",\r\n template: \"▶ \" + message,\r\n autoheight: true, width: 350\r\n }\r\n }),\r\n },\r\n {\r\n view: \"template\", autoheight: true, template: \"
Chọn \\\"Tạo hóa đơn\\\" để tạo hóa đơn và không tạo mới khách hàng
\"\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Tạo hóa đơn\", type: \"form\", click: function () {\r\n $$('check-customer-modal').hide();\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n },\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Nhập lại\", type: \"danger\", click: function () {\r\n $$('check-customer-modal').hide();\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n }).show()\r\n }\r\n\r\n if (checkMessage.length > 0) {\r\n showConfirmUI();\r\n } else {\r\n customerCallApis.saveCustomer(obj).then(function (res) {\r\n res = res.json();\r\n\r\n if (!res.status) {\r\n checkMessage.push(res.message.replace(\"P0001: \", \"\"));\r\n showConfirmUI();\r\n } else {\r\n\r\n webix.message(\"Lưu thông tin khách hàng thành công\", \"success\"); hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n });\r\n }\r\n } else\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);;\r\n\r\n }\r\n $$(\"btnHoadonCQT\").enable();\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n align: \"center\",\r\n type: \"danger\",\r\n width: 120,\r\n click: function () {\r\n this.getTopParentView().close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ];\r\n //FormDetail Tạo item trên trang from từ tab và data\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n //view: \"toolbar\",\r\n // css: { \"box-shadow\": \"0 -2px #3498db inset !important\", \"background\": \"#ffffff !important\" },\r\n //css: { \"background\": \"#e6f2ff !important\" },\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-iconInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Test Form
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_InvoiceForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n // var form = webix.$$(\"window-form\");\r\n // hint_form(form.config.hint);\r\n },\r\n },\r\n ],\r\n },\r\n id: \"invoice68\",\r\n resize: true,\r\n fullscreen: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () { },\r\n },\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 100 },\r\n view: \"form\",\r\n id: \"invoiceForms\",\r\n width: 800,\r\n height: 500,\r\n complexData: true,\r\n margin: 0,\r\n on: {\r\n // onViewShow: function () {\r\n // }\r\n },\r\n elements: el,\r\n },\r\n },\r\n setValues: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n if (item != null) {\r\n this.editgiatri(item);\r\n form.setValues(item);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n tablePhi.clearAll();\r\n tablePhi.load(urlPhi);\r\n var urlKhac = app.config.host + \"/Invoice68/GetDataInvoiceKhac?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlKhac, function (text) {\r\n var data = JSON.parse(text);\r\n for (var i = 0; i < data.length; i++) {\r\n try {\r\n if ($$(\"TTKhac_\" + data[i].ttruong) !== undefined && $$(\"TTKhac_\" + data[i].ttruong) !== null) $$(\"TTKhac_\" + data[i].ttruong).setValue(data[i][\"dlieu\"]);\r\n } catch (e) { }\r\n }\r\n });\r\n }\r\n\r\n if (editmode == 2) {\r\n }\r\n // nếu có mẫu 04 (hóa đơn hủy)\r\n if (winconfig != null) {\r\n mau04 = winconfig;\r\n $$(\"btnHoadonSaveMau04\").show();\r\n $$(\"btnHoadonCQT\").destructor();\r\n $$(\"btnHoadonSave\").destructor();\r\n }\r\n this.getFormat(item[\"dvtte\"]);\r\n },\r\n setValuesBangKe: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n tongtienHDonBke = item.tgtttbso;\r\n var form = win.getChildViews()[1];\r\n if (item != null) {\r\n this.editgiatri(item);\r\n form.setValues(item);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = \"\";\r\n if (editmode == 4) {\r\n url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n } else {\r\n url = app.config.host + \"/Invoice68/GetDataInvoiceDetail_BangKe?id=\" + item.id;\r\n }\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n // nếu có mẫu 04 (hóa đơn hủy)\r\n if (winconfig != null) {\r\n mau04 = winconfig;\r\n $$(\"btnHoadonSaveMau04\").show();\r\n $$(\"btnHoadonCQT\").destructor();\r\n $$(\"btnHoadonSave\").destructor();\r\n }\r\n this.getFormat(item[\"dvtte\"]);\r\n },\r\n editgiatri: function (item) {\r\n if (item[\"tdlap\"] !== undefined) item[\"tdlap\"] = removeTimeZoneT(item[\"tdlap\"]);\r\n if (item[\"cqqdbants\"] !== undefined) item[\"cqqdbants\"] = removeTimeZoneT(item[\"cqqdbants\"]);\r\n if (item[\"tgvchdtu\"] !== undefined) item[\"tgvchdtu\"] = removeTimeZoneT(item[\"tgvchdtu\"]);\r\n if (item[\"tgvchdden\"] !== undefined) item[\"tgvchdden\"] = removeTimeZoneT(item[\"tgvchdden\"]);\r\n if (item[\"nqdbants\"] !== undefined) item[\"nqdbants\"] = removeTimeZoneT(item[\"nqdbants\"]);\r\n if (item[\"nbke\"] !== undefined) item[\"nbke\"] = removeTimeZoneT(item[\"nbke\"]);\r\n if (item[\"hdktngay\"] !== undefined) item[\"hdktngay\"] = removeTimeZoneT(item[\"hdktngay\"]);\r\n item[\"giamthuebanhang20\"] = item[\"giamthuebanhang20\"] == true ? 1 : 0;\r\n if (item[\"nbke\"] !== undefined) item[\"nbke\"] = removeTimeZoneT(item[\"nbke\"]);\r\n if (item[\"ngccmnd\"] !== undefined) item[\"ngccmnd\"] = removeTimeZoneT(item[\"ngccmnd\"]);\r\n },\r\n setcompany: function (item) {\r\n var url = app.config.host + \"/invoice68/GetInfoCompany\";\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var data = JSON.parse(text);\r\n $$(\"ten_tc\").setValue(data.name);\r\n $$(\"mst_tc\").setValue(data.tax_code);\r\n $$(\"dchi_tc\").setValue(data.address);\r\n $$(\"tel_tc\").setValue(data.tel);\r\n $$(\"tinh_tc\").setValue(data.city);\r\n });\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n //var form = webix.$$(\"invoiceForms\");\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1 || editmode == 4) {\r\n icon = \"\";\r\n } else {\r\n if (editmode == 2 || editmode == 5) icon = \"\";\r\n else icon = \"\";\r\n }\r\n\r\n webix.$$(\"head-iconInvoice\").setHTML(icon);\r\n webix.$$(\"head-iconInvoice\").refresh();\r\n this.setcompany();\r\n },\r\n copyValues: function (item) {\r\n var form = webix.$$(\"invoiceForms\");\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"cthdon_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tableDetail.clearAll();\r\n tableDetail.parse(data);\r\n });\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlPhi, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"phi_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tablePhi.clearAll();\r\n tablePhi.parse(data);\r\n });\r\n var urlKhac = app.config.host + \"/Invoice68/GetDataInvoiceKhac?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlKhac, function (text) {\r\n var data = JSON.parse(text);\r\n for (var i = 0; i < data.length; i++) {\r\n try {\r\n if ($$(\"TTKhac_\" + data[i].ttruong) !== undefined && $$(\"TTKhac_\" + data[i].ttruong) !== null) $$(\"TTKhac_\" + data[i].ttruong).setValue(data[i][\"dlieu\"]);\r\n } catch (e) { }\r\n }\r\n });\r\n // tableDetail.clearAll();\r\n // tableDetail.load(url);\r\n item[\"tthdon\"] = 0;\r\n item[\"tthdon_original\"] = 0;\r\n item[\"tthdon_old\"] = 0;\r\n item[\"hdon_id\"] = null;\r\n item[\"hdon68_id_lk\"] = null;\r\n item[\"nky\"] = null;\r\n item[\"id\"] = webix.uid();\r\n item[\"giamthuebanhang20\"] = item[\"giamthuebanhang20\"] == true ? 1 : 0;\r\n item[\"nbke\"] = null;\r\n\r\n this.editgiatri(item);\r\n form.setValues(item);\r\n\r\n this.getFormat();\r\n },\r\n getFormat: function (val) {\r\n //commonHD.renderFormat(val);\r\n },\r\n initUINew: function (cctbao_id) {\r\n $$(\"cctbao_id\").setValue(cctbao_id);\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/getKyhieu?cctbao_id=\" + cctbao_id, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (data.length > 0) {\r\n var form = $$(\"invoiceForms\");\r\n var values = form.getValues();\r\n\r\n values[\"khieu\"] = data[0][\"khhdon\"];\r\n values[\"mcqtcap\"] = data[0][\"mccqthue\"];\r\n values[\"mcqtcap\"] = data[0][\"mccqthue\"];\r\n values[\"msbl_tncn\"] = data[0][\"khmbl\"];\r\n\r\n form.setValues(values);\r\n }\r\n });\r\n this.getFormat();\r\n },\r\n initUI: function (windowconfig) {\r\n var rp = windowconfig;\r\n var vc_window = rp[\"data\"][0];\r\n var tabs = vc_window.Tabs;\r\n var windowno = vc_window.code;\r\n $$(\"head-formInvoice\").define(\"template\", \"
\" + vc_window.name + \"
\");\r\n el = [];\r\n col = [];\r\n var m = 0;\r\n\r\n if (vc_window.detail_layout != null && vc_window.detail_layout != \"\") {\r\n var layoutdetail = JSON.parse(vc_window.detail_layout);\r\n\r\n var layout_element = JSON.stringify(layoutdetail.elements);\r\n var json_layout = JSON.parse(layout_element);\r\n //console.log(json_layout);\r\n for (var i = 0; i < json_layout.length; i++) {\r\n el.push(json_layout[i]);\r\n }\r\n\r\n var jsonElement = findJson.getObjects(JSON.parse(JSON.stringify(el)), \"id\", \"\");\r\n\r\n for (var i = 0; i < jsonElement.length; i++) {\r\n //var item = jsonElement[i];\r\n //var item = jsonElement[i];\r\n var fields = rp[\"data\"][0][\"Tabs\"][0][\"Fields\"];\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (jsonElement[i].name == field.column_name) {\r\n item = commonHD.CreatItemMaterFromData(field, windowno);\r\n jsonElement[i] = item;\r\n\r\n findJson.findAndReplace(el, jsonElement[i].name, item);\r\n }\r\n }\r\n }\r\n if (vc_window.window_type == \"MasterDetail\") {\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Master\") {\r\n continue;\r\n }\r\n\r\n var subCols = [];\r\n\r\n for (var j = 0; j < tab.Fields.length; j++) {\r\n var field = tab.Fields[j];\r\n\r\n subCols.push(commonHD.CreatItemFromData(field, tab));\r\n }\r\n\r\n if (tab.tab_type == \"Detail\" && tab.foreign_key === \"detail_tab\") {\r\n var item = {\r\n id: \"detail_tab\",\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n\r\n body: {\r\n rows: [\r\n {\r\n view: \"toolbar\",\r\n height: 40,\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n var item = {\r\n id: webix.uid(),\r\n };\r\n table.add(item);\r\n table.select(item.id, \"ma\", false);\r\n table.edit({\r\n row: item.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n\r\n var copy = webix.copy(item);\r\n copy.cthdon_id = null;\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, \"ma\", false);\r\n table.edit({\r\n row: copy.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_chitiet\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n scroll: true,\r\n columns: subCols,\r\n select_change: tab.select_change,\r\n cell_editstop: tab.cell_editstop,\r\n after_addrow: tab.after_addrow,\r\n after_delrow: tab.after_delrow,\r\n oncheck: tab.oncheck,\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onAfterLoad: function () {\r\n var table = this;\r\n var data = table.serialize();\r\n data.forEach(function (entry) {\r\n if (entry[\"stckhau\"] != undefined || entry[\"tlckhau\"] != undefined) {\r\n if (entry[\"stckhau\"] != 0 || entry[\"tlckhau\"] != 0) {\r\n var ck = $$(\"check_chietkhau\");\r\n if (ck != undefined) {\r\n ck.setValue(1);\r\n return false;\r\n }\r\n }\r\n }\r\n });\r\n },\r\n onCheck: function (row, column, state) {\r\n var table = this;\r\n if (column == \"khuyen_mai\") {\r\n if (state == true) {\r\n }\r\n }\r\n },\r\n onAfterAdd: function (id, index) {\r\n if (this.config.after_addrow != null) {\r\n var fn = Function(\"id\", \"index\", \"tableId\", this.config.after_addrow);\r\n fn(id, index, this.config.id);\r\n }\r\n },\r\n onAfterDelete: function (id) {\r\n if (this.config.after_delrow != null) {\r\n var fn = Function(\"id\", \"tableId\", this.config.after_delrow);\r\n fn(id, this.config.id);\r\n }\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n if (state.value === state.old) return;\r\n\r\n if (this.config.cell_editstop != null) {\r\n var fn = Function(\"state\", \"editor\", \"ignore\", \"tableId\", this.config.cell_editstop);\r\n fn(state, editor, ignore, this.config.id);\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n\r\n findJson.findAndReplace(el, tab.foreign_key, item);\r\n m++;\r\n //cells.push(item);\r\n }\r\n if (tab.tab_type == \"Detail\" && tab.foreign_key === \"phi_tab\") {\r\n var item = {\r\n id: \"phi_tab\",\r\n header: \"Tiền phí/lệ phí\",\r\n select: \"cell\",\r\n hidden: tab.hidden,\r\n body: {\r\n rows: [\r\n {\r\n view: \"toolbar\",\r\n height: 40,\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n var item = {\r\n id: webix.uid(),\r\n tienphi: 0,\r\n };\r\n table.add(item);\r\n table.select(item.id);\r\n table.edit({\r\n row: item.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n var copy = webix.copy(item);\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, \"tnphi\", false);\r\n table.edit({\r\n row: copy.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_phi\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n scroll: true,\r\n columns: subCols,\r\n select_change: tab.select_change,\r\n cell_editstop: tab.cell_editstop,\r\n after_addrow: tab.after_addrow,\r\n after_delrow: tab.after_delrow,\r\n oncheck: tab.oncheck,\r\n on: {\r\n onAfterAdd: function (id, index) {\r\n if (this.config.after_addrow != null) {\r\n var fn = Function(\"id\", \"index\", \"tableId\", this.config.after_addrow);\r\n fn(id, index, this.config.id);\r\n }\r\n },\r\n onAfterDelete: function (id) {\r\n if (this.config.after_delrow != null) {\r\n var fn = Function(\"id\", \"tableId\", this.config.after_delrow);\r\n fn(id, this.config.id);\r\n }\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n if (state.value === state.old) return;\r\n\r\n if (this.config.cell_editstop != null) {\r\n var fn = Function(\"state\", \"editor\", \"ignore\", \"tableId\", this.config.cell_editstop);\r\n fn(state, editor, ignore, this.config.id);\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n\r\n findJson.findAndReplace(el, \"phi_tab\", item);\r\n m++;\r\n }\r\n }\r\n }\r\n\r\n el.push({\r\n // paddingY:10,\r\n margin: 10,\r\n cols: cols,\r\n });\r\n webix.ui(el, $$(\"invoiceForms\"));\r\n //$$(\"tab_replace\").define(\"tabbar\",{width:150 * m});\r\n //console.log(jsonElement);\r\n\r\n if (windowno == \"WIN00791\" || windowno == \"WIN00792\") {\r\n $$(\"btnHoadonCQT\").hide();\r\n }\r\n this.SetDefaultValue(windowconfig);\r\n }\r\n },\r\n SetDefaultValue: function (winconfig) {\r\n var form = webix.$$(\"invoiceForms\");\r\n var item = form.getValues();\r\n var vc_window = winconfig[\"data\"][0];\r\n\r\n var tabs = vc_window.Tabs;\r\n\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Normal\" || tab.tab_type == \"Master\") {\r\n var fields = tab.Fields;\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (field.column_name == tab.table_name + \"_id\") {\r\n item[field.column_name] = null;\r\n }\r\n\r\n if (field.column_name == \"branch_code\") {\r\n item[field.column_name] = user.getDvcsID();\r\n }\r\n\r\n if (field.default_value != null) {\r\n var defaultValue = field.default_value.toString();\r\n\r\n if (defaultValue.startsWith(\"@Default=\")) {\r\n item[field.column_name] = defaultValue.replace(\"@Default=\", \"\");\r\n }\r\n\r\n if (defaultValue.startsWith(\"@JS=\")) {\r\n var fn = Function(defaultValue.replace(\"@JS=\", \"\"));\r\n item[field.column_name] = fn();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n form.setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/formhoadoncode78_mtt',[\r\n \"app\", \r\n \"locale\", \r\n \"models/user\", \r\n \"models/findjson\", \r\n \"views/commonHD\", \r\n \"callApis/hoadon68\", \r\n \"callApis/customer\",\r\n \"views/DataStorage/DataHoaDon78\"], function (app, _, user, findJson, commonHD, hoadon68CallApis, customerCallApis, dataFormHd78) {\r\n var editmode = 0;\r\n var tongtienHDonBke = 0;\r\n var mau04 = {};\r\n var modeChangeView = 1; // 1 - Vào form theo dạng thường; 2 - vào form từ chức năng \"Sao chép chọn dải\"\r\n\r\n var el = [];\r\n function renderFormat(val) {\r\n if (typeof val == \"undefined\" || val == null || val == \"\" || val == 0) val = \"VND\";\r\n var url = app.config.host + \"/Invoice68/GetDecimalPlace?ma_nt=\" + val;\r\n var table_chitiet = webix.$$(\"hoadon68_chitiet\");\r\n var table_phi = webix.$$(\"hoadon68_phi\");\r\n var table = $$(\"invoiceForms\");\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var arr = JSON.parse(text);\r\n\r\n webix.storage.local.put(\"dsFieldFormat\", arr[0]);\r\n\r\n var arrayString_chitiet = [\"sluong\", \"dgia\", \"thtien\", \"stckhau\", \"tthue\", \"tgtien\", \"tienphi\", \"tlckhau\"];\r\n\r\n for (var i = 0; i < arrayString_chitiet.length; i++) {\r\n var field_name = \"\";\r\n switch (arrayString_chitiet[i]) {\r\n case \"sluong\":\r\n field_name = \"quantity_decimal\";\r\n break;\r\n case \"dgia\":\r\n field_name = \"price_decimal\";\r\n break;\r\n case \"thtien\":\r\n field_name = \"amount_without_vat_decimal\";\r\n break;\r\n case \"stckhau\":\r\n field_name = \"price_discount\";\r\n break;\r\n case \"tthue\":\r\n field_name = \"tax_price\";\r\n break;\r\n case \"tgtien\":\r\n field_name = \"total_amount_decimal\";\r\n break;\r\n case \"tienphi\":\r\n field_name = \"fee_price\";\r\n break;\r\n case \"tlckhau\":\r\n field_name = \"tlckhau\";\r\n break;\r\n }\r\n\r\n var decimal_place = Array(Number(arr[0][field_name]) + 1).join(\"9\");\r\n var decimal_format = Number(arr[0][field_name]);\r\n var format_numeric = {\r\n maximumValue: Number(\"999999999999.\" + decimal_place),\r\n minValue: Number(\"-999999999999.\" + decimal_place),\r\n decimalPlaces: Number(decimal_format),\r\n };\r\n var formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimal_format,\r\n };\r\n var formatSo = webix.Number.numToStr(formatSoDefault);\r\n if (field_name == \"fee_price\") {\r\n var format_config = table_phi.getColumnConfig(\"tienphi\");\r\n\r\n format_config.format = formatSo;\r\n format_config.numericConfig = format_numeric;\r\n } else {\r\n var format_config = table_chitiet.getColumnConfig(arrayString_chitiet[i]);\r\n\r\n format_config.format = formatSo;\r\n format_config.numericConfig = format_numeric;\r\n }\r\n }\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n\r\n table_chitiet.refreshColumns();\r\n table_phi.refreshColumns();\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n $$(arrayString[i]).refresh();\r\n }\r\n });\r\n }\r\n\r\n //FormButton\r\n var cols = [\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnBangKeSave\",\r\n label: \"Lưu (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var tongtienBangKeCT = webix.$$(\"tgtttbso\").getValue();\r\n var item = $$(\"invoiceForms\").getValues();\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n if (record.length == 0) {\r\n webix.message(\"Bạn chưa bổ sung chi tiết hàng hóa\");\r\n return;\r\n }\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n var tudongtinhtien = item.tudongtinhtien;\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n var windowno;\r\n if (app_cache[windowno] != null) {\r\n windowno = app_cache[\"data\"][0].code;\r\n }\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n var isHasDiscount = it[\"tiletienthuegtgtgiam\"] != null && it[\"tiletienthuegtgtgiam\"] != \"\" && it[\"tiletienthuegtgtgiam\"] != 0 && it[\"tiletienthuegtgtgiam\"] != '0';\r\n if (tudongtinhtien == \"0\") {\r\n if (mauso === \"2\" && !isHasDiscount) {\r\n record[i].thtien = record[i].tgtien;\r\n }\r\n }\r\n var it = record[i];\r\n\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (windowno == \"WIN00788C\") {\r\n it.phanloaihd = 1;\r\n }\r\n if (it.kmai.toString() === \"1\") {\r\n var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + Tiền thuế != tiền sau thuế\");\r\n return;\r\n }\r\n if ((it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") && (mauso === \"1\" || mauso === \"5\")) {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (tongtienHDonBke != tongtienBangKeCT) {\r\n webix.message(\"Tổng tiền chi tiết bảng kê khác tổng tiền của hoá đơn!\", \"error\");\r\n return false;\r\n }\r\n\r\n var record_phi = $$(\"hoadon68_phi\").serialize();\r\n for (var i = 0; i < record_phi.length; i++) {\r\n var it = record_phi[i];\r\n\r\n if (it[\"tnphi\"] == null || it[\"tnphi\"] == \"\") {\r\n webix.message(\"Chưa nhập tên phí/lệ phí\");\r\n return;\r\n }\r\n }\r\n\r\n if (table.validate()) {\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: record });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: record_phi,\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 1;\r\n if (tudongtinhtien == \"0\") {\r\n if (item.tgtttbso === undefined || item.tgtttbso === \"\" || item.tgtttbso === null) {\r\n item.tgtttbso = item.tgtttbso_last;\r\n }\r\n }\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var isSaveCustomerInfo = $$('is_save_customer_info') != null && $$('is_save_customer_info').getValue();\r\n\r\n function afterSaveInvoiceSuccess(text) {\r\n var json = text.json();\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thông tin hóa đơn thành công!\", \"success\");\r\n \r\n var item = $$(\"invoiceForms\").getValues();\r\n if(item && modeChangeView == 2) {\r\n dataFormHd78.SetData(\"KHID\", item.cctbao_id);\r\n }\r\n webix.$$(\"invoice68\").close();\r\n\r\n if (item.hdon_id_old !== null && item.hdon_id === \"\" && item.tthai_old != \"Đã ký\") {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n }\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n\r\n function afterSaveInvoiceError(text) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text.json() + XmlHttpRequest, \"error\");\r\n }\r\n\r\n if (isSaveCustomerInfo) {\r\n\r\n \r\n var code = $$('mnmua') != null ? $$('mnmua').getValue() : null;\r\n var buyer_name = $$('tnmua') != null ? $$('tnmua').getValue() : null;\r\n var name = $$('ten') != null ? $$('ten').getValue() : null;\r\n var tax_code = $$('mst') != null ? $$('mst').getValue() : null;\r\n var email = $$('email') != null ? $$('email').getValue() : null;\r\n var address = $$('dchi') != null ? $$('dchi').getValue() : null;\r\n var tel = $$('sdtnmua') != null ? $$('sdtnmua').getValue() : null;\r\n var bank_account = $$('stknmua') != null ? $$('stknmua').getValue() : null;\r\n var bank_name = $$('tnhmua') != null ? $$('tnhmua').getValue() : null;\r\nvar name_label = $$('ten') != null ? $$('ten').config.label : \"Tên\";\r\n var address_label = $$('dchi') != null ? $$('dchi').config.label : \"Địa chỉ\";\r\n\r\n var obj = {\r\n code: code,\r\n buyer_name: buyer_name,\r\n name: name,\r\n tax_code: tax_code,\r\n email: email,\r\n address: address,\r\n tel: tel,\r\n bank_account: bank_account,\r\n bank_name: bank_name,\r\n };\r\n\r\n var checkMessage = [];\r\n\r\n if (obj.code == \"\") checkMessage.push('\"Mã\" khách hảng là trường bắt buộc nhập\"');\r\n if (obj.name == \"\") checkMessage.push('\"' + name_label + '\" là trường bắt buộc nhập\"');\r\n if (obj.address == \"\") checkMessage.push('\"' + address_label + '\" khách hảng là trường bắt buộc nhập\"');\r\n\r\n var showConfirmUI = function () {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"check-customer-modal\",\r\n type: \"modal\",\r\n modal: true,\r\n position: \"center\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-form-check-customer\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Tạo mới khách hàng thất bại
\";\r\n },\r\n }\r\n ],\r\n },\r\n body: {\r\n padding: 10,\r\n rows: [\r\n {\r\n rows: checkMessage.map(function (message) {\r\n return {\r\n view: \"template\",\r\n template: \"▶ \"+message,\r\n autoheight: true, width: 350\r\n }\r\n }),\r\n },\r\n {\r\n view: \"template\", autoheight: true, template: \"
Chọn \\\"Tạo hóa đơn\\\" để tạo hóa đơn và không tạo mới khách hàng
\"\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Tạo hóa đơn\", type: \"form\", click: function () {\r\n $$('check-customer-modal').hide();\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n },\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Nhập lại\", type: \"danger\", click: function () {\r\n $$('check-customer-modal').hide();\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n }).show()\r\n }\r\n\r\n if (checkMessage.length > 0) {\r\n showConfirmUI();\r\n } else {\r\n customerCallApis.saveCustomer(obj).then(function (res) {\r\n res = res.json();\r\n \r\n if (!res.status) {\r\n checkMessage.push(res.message.replace(\"P0001: \", \"\"));\r\n showConfirmUI();\r\n } else {\r\n \r\n webix.message(\"Lưu thông tin khách hàng thành công\",\"success\") ; hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n });\r\n }\r\n } else\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);;\r\n\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n id: \"btnBangKeDelete\",\r\n label: \"Xoá\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 80,\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n var url = app.config.host + \"/Invoice68/DeleteBangKeHoaDon?id=\" + item.id;\r\n var table = $$(\"invoiceForms\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, function (result) {\r\n if (result == \"true\") {\r\n webix.message(\"Đã xoá bảng kê !\");\r\n table.enable();\r\n table.hideProgress();\r\n webix.$$(\"invoice68\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n } else {\r\n webix.message(\"Xoá không thành công !\", \"error\");\r\n }\r\n });\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnHoadonSave\",\r\n label: \"Lưu tạm (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n if (item.nlap_temp != null) {\r\n var nlap_temp = new Date(item.nlap_temp);\r\n if ($$(\"nlap\").getValue() < nlap_temp) {\r\n webix.message(\"Ngày hoá đơn thay thế hoặc điều chỉnh không được nhỏ hơn hoá đơn gốc!\", \"error\");\r\n return;\r\n }\r\n }\r\n\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n\r\n if (record.length == 0) {\r\n webix.message(\"Bạn chưa bổ sung chi tiết hàng hóa\");\r\n return;\r\n }\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n var tudongtinhtien = item.tudongtinhtien;\r\n\r\n var windowno = app.path[1].params[0];\r\n\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n var isHasDiscount = it[\"tiletienthuegtgtgiam\"] != null && it[\"tiletienthuegtgtgiam\"] != \"\" && it[\"tiletienthuegtgtgiam\"] != 0 && it[\"tiletienthuegtgtgiam\"] != '0';\r\n if (tudongtinhtien == \"0\") {\r\n if (mauso === \"2\" && !isHasDiscount) {\r\n record[i].thtien = record[i].tgtien;\r\n }\r\n }\r\n var it = record[i];\r\n if (windowno == \"WIN00788C\") {\r\n it.phanloaihd = 1;\r\n }\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai.toString() === \"1\") {\r\n /*var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + Tiền thuế != tiền sau thuế\");\r\n return;\r\n }*/\r\n if ((it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") && (mauso === \"1\" || mauso === \"5\")) {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n var record_phi = $$(\"hoadon68_phi\").serialize();\r\n for (var i = 0; i < record_phi.length; i++) {\r\n var it = record_phi[i];\r\n\r\n if (it[\"tnphi\"] == null || it[\"tnphi\"] == \"\") {\r\n webix.message(\"Chưa nhập tên phí/lệ phí\");\r\n return;\r\n }\r\n }\r\n\r\n /*if($$(\"tnmua\").getValue() !=\"\" && $$(\"ten\").getValue() !=\"\"){\r\n item[\"TTKhac_tendonvi\"] = $$(\"tnmua\").getValue();\r\n }\r\n else{\r\n delete item[\"TTKhac_tendonvi\"];\r\n }\r\n \r\n if($$(\"dchi\").getValue() !=\"\"){\r\n item[\"TTKhac_dchi\"] = $$(\"dchi\").getValue();\r\n }else{\r\n delete item[\"TTKhac_dchi\"];\r\n }*/\r\n delete item[\"TTKhac_tendonvi\"];\r\n delete item[\"TTKhac_dchi\"];\r\n /*if($$(\"lblCanhbao\").type==1){\r\n webix.message( $$(\"lblCanhbao\").getValue()+\". Không thể lưu!\", \"error\");\r\n return;\r\n }*/\r\n if (table.validate()) {\r\n var TTKhac = [];\r\n Object.keys(item).forEach(function (key) {\r\n if (key.includes(\"TTKhac_\")) {\r\n var test = $$(key);\r\n if (test.config.editor === \"nummeric\" || test.config.editor === \"autonumeric\") {\r\n TTKhac.push({\r\n ttruong: key.replace(\"TTKhac_\", \"\"),\r\n kdlieu: \"decimal\",\r\n dlieu: item[key],\r\n });\r\n }\r\n else if (test.config.view === \"text\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"string\", dlieu: item[key] });\r\n else if (test.config.view === \"datepicker\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"dateTime\", dlieu: item[key] });\r\n }\r\n });\r\n var TTKhacItem = [];\r\n TTKhacItem.push({\r\n data: TTKhac,\r\n });\r\n item[\"hoadon68_khac\"] = TTKhacItem;\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: record });\r\n\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: record_phi,\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 1;\r\n if (tudongtinhtien == \"0\") {\r\n if (item.tgtttbso === undefined || item.tgtttbso === \"\" || item.tgtttbso === null) {\r\n item.tgtttbso = item.tgtttbso_last;\r\n }\r\n }\r\n var item1 = [];\r\n item1.push(item);\r\n\r\n var data_post = { editmode: editmode, data: item1 };\r\n var isSaveCustomerInfo = $$('is_save_customer_info') != null && $$('is_save_customer_info').getValue();\r\n\r\n function afterSaveInvoiceSuccess(text) {\r\n var json = text.json();\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thông tin hóa đơn thành công!\", \"success\");\r\n\r\n var item = $$(\"invoiceForms\").getValues();\r\n if(item && modeChangeView == 2) {\r\n dataFormHd78.SetData(\"KHID\", item.cctbao_id);\r\n }\r\n webix.$$(\"invoice68\").close();\r\n\r\n if (item.hdon_id_old !== null && item.hdon_id === \"\" && item.tthai_old != \"Đã ký\") {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n }\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n\r\n function afterSaveInvoiceError(text) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text.json() + XmlHttpRequest, \"error\");\r\n }\r\n\r\n if (isSaveCustomerInfo) {\r\n\r\n \r\n var code = $$('mnmua') != null ? $$('mnmua').getValue() : null;\r\n var buyer_name = $$('tnmua') != null ? $$('tnmua').getValue() : null;\r\n var name = $$('ten') != null ? $$('ten').getValue() : null;\r\n var tax_code = $$('mst') != null ? $$('mst').getValue() : null;\r\n var email = $$('email') != null ? $$('email').getValue() : null;\r\n var address = $$('dchi') != null ? $$('dchi').getValue() : null;\r\n var tel = $$('sdtnmua') != null ? $$('sdtnmua').getValue() : null;\r\n var bank_account = $$('stknmua') != null ? $$('stknmua').getValue() : null;\r\n var bank_name = $$('tnhmua') != null ? $$('tnhmua').getValue() : null;\r\nvar name_label = $$('ten') != null ? $$('ten').config.label : \"Tên\";\r\n var address_label = $$('dchi') != null ? $$('dchi').config.label : \"Địa chỉ\";\r\n\r\n var obj = {\r\n code: code,\r\n buyer_name: buyer_name,\r\n name: name,\r\n tax_code: tax_code,\r\n email: email,\r\n address: address,\r\n tel: tel,\r\n bank_account: bank_account,\r\n bank_name: bank_name,\r\n };\r\n\r\n var checkMessage = [];\r\n\r\n if (obj.code == \"\") checkMessage.push('\"Mã\" khách hảng là trường bắt buộc nhập\"');\r\n if (obj.name == \"\") checkMessage.push('\"' + name_label + '\" là trường bắt buộc nhập\"');\r\n if (obj.address == \"\") checkMessage.push('\"' + address_label + '\" khách hảng là trường bắt buộc nhập\"');\r\n\r\n var showConfirmUI = function () {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"check-customer-modal\",\r\n type: \"modal\",\r\n modal: true,\r\n position: \"center\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-form-check-customer\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Tạo mới khách hàng thất bại
\";\r\n },\r\n }\r\n ],\r\n },\r\n body: {\r\n padding: 10,\r\n rows: [\r\n {\r\n rows: checkMessage.map(function (message) {\r\n return {\r\n view: \"template\",\r\n template: \"▶ \"+message,\r\n autoheight: true, width: 350\r\n }\r\n }),\r\n },\r\n {\r\n view: \"template\", autoheight: true, template: \"
Chọn \\\"Tạo hóa đơn\\\" để tạo hóa đơn và không tạo mới khách hàng
\"\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Tạo hóa đơn\", type: \"form\", click: function () {\r\n $$('check-customer-modal').hide();\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n },\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Nhập lại\", type: \"danger\", click: function () {\r\n $$('check-customer-modal').hide();\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n }).show()\r\n }\r\n\r\n if (checkMessage.length > 0) {\r\n showConfirmUI();\r\n } else {\r\n customerCallApis.saveCustomer(obj).then(function (res) {\r\n res = res.json();\r\n \r\n if (!res.status) {\r\n checkMessage.push(res.message.replace(\"P0001: \", \"\"));\r\n showConfirmUI();\r\n } else {\r\n \r\n webix.message(\"Lưu thông tin khách hàng thành công\",\"success\") ; hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n });\r\n }\r\n } else\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);;\r\n\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F11\",\r\n view: \"button\",\r\n id: \"btnHoadonCQT\",\r\n label: \"Ký và gửi CQT (F11)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 150,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n if (item.nlap_temp != null) {\r\n var nlap_temp = new Date(item.nlap_temp);\r\n if ($$(\"nlap\").getValue() < nlap_temp) {\r\n webix.message(\"Ngày hoá đơn thay thế hoặc điều chỉnh không được nhỏ hơn hoá đơn gốc!\", \"error\");\r\n return;\r\n }\r\n }\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n if (record.length == 0) {\r\n webix.message(\"Bạn chưa bổ sung chi tiết hàng hóa\");\r\n return;\r\n }\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n var checkmtt = $$(\"khieu\").getValue().substring(4, 5);\r\n var tudongtinhtien = item.tudongtinhtien;\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n var windowno;\r\n if (app_cache[windowno] != null) {\r\n windowno = app_cache[\"data\"][0].code;\r\n }\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n var isHasDiscount = it[\"tiletienthuegtgtgiam\"] != null && it[\"tiletienthuegtgtgiam\"] != \"\" && it[\"tiletienthuegtgtgiam\"] != 0 && it[\"tiletienthuegtgtgiam\"] != '0';\r\n if (tudongtinhtien == \"0\") {\r\n if (mauso === \"2\" && !isHasDiscount) {\r\n record[i].thtien = record[i].tgtien;\r\n }\r\n }\r\n var it = record[i];\r\n if (windowno == \"WIN00788C\") {\r\n it.phanloaihd = 1;\r\n }\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai.toString() === \"1\") {\r\n /*var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + Tiền thuế != tiền sau thuế\");\r\n return;\r\n }*/\r\n if ((it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") && (mauso === \"1\" || mauso === \"5\")) {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n /*if($$(\"tnmua\").getValue() !=\"\" && $$(\"ten\").getValue() !=\"\"){\r\n item[\"TTKhac_tendonvi\"] = $$(\"tnmua\").getValue();\r\n }\r\n else{\r\n delete item[\"TTKhac_tendonvi\"];\r\n }\r\n \r\n if($$(\"dchi\").getValue() !=\"\"){\r\n item[\"TTKhac_dchi\"] = $$(\"dchi\").getValue();\r\n }else{\r\n delete item[\"TTKhac_dchi\"];\r\n }*/\r\n delete item[\"TTKhac_tendonvi\"];\r\n delete item[\"TTKhac_dchi\"];\r\n /*if($$(\"lblCanhbao\").type==1){\r\n webix.message( $$(\"lblCanhbao\").getValue()+\". Không thể lưu!\", \"error\");\r\n return;\r\n }*/\r\n if (table.validate()) {\r\n var TTKhac = [];\r\n Object.keys(item).forEach(function (key) {\r\n if (key.includes(\"TTKhac_\")) {\r\n var test = $$(key);\r\n if (test.config.editor === \"nummeric\" || test.config.editor === \"autonumeric\") {\r\n TTKhac.push({\r\n ttruong: key.replace(\"TTKhac_\", \"\"),\r\n kdlieu: \"decimal\",\r\n dlieu: item[key],\r\n });\r\n }\r\n else if (test.config.view === \"text\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"string\", dlieu: item[key] });\r\n else if (test.config.view === \"datepicker\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"dateTime\", dlieu: item[key] });\r\n }\r\n });\r\n var TTKhacItem = [];\r\n TTKhacItem.push({\r\n data: TTKhac,\r\n });\r\n item[\"hoadon68_khac\"] = TTKhacItem;\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: $$(\"hoadon68_chitiet\").serialize() });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 1;\r\n if (tudongtinhtien == \"0\") {\r\n if (item.tgtttbso === undefined || item.tgtttbso === \"\" || item.tgtttbso === null) {\r\n item.tgtttbso = item.tgtttbso_last;\r\n }\r\n }\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var isSaveCustomerInfo = $$('is_save_customer_info') != null && $$('is_save_customer_info').getValue();\r\n\r\n function afterSaveInvoiceSuccess(text) {\r\n var json = text.json();\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thông tin hóa đơn thành công!\", \"success\");\r\n\r\n var item = $$(\"invoiceForms\").getValues();\r\n if(item && modeChangeView == 2) {\r\n dataFormHd78.SetData(\"KHID\", item.cctbao_id);\r\n }\r\n \r\n webix.$$(\"invoice68\").close();\r\n\r\n if (item.hdon_id_old !== null && item.hdon_id === \"\" && item.tthai_old != \"Đã ký\") {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n }\r\n var lsthdon_id = [];\r\n lsthdon_id.push(json.data.hdon_id);\r\n if(checkmtt === \"M\") {\r\n commonHD.ExcuteHoaDonMTT(lsthdon_id);\r\n }\r\n else{\r\n commonHD.ExcuteHoaDon(lsthdon_id, true, true);\r\n }\r\n\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n\r\n function afterSaveInvoiceError(text) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text.json() + XmlHttpRequest, \"error\");\r\n }\r\n\r\n if (isSaveCustomerInfo) {\r\n\r\n \r\n var code = $$('mnmua') != null ? $$('mnmua').getValue() : null;\r\n var buyer_name = $$('tnmua') != null ? $$('tnmua').getValue() : null;\r\n var name = $$('ten') != null ? $$('ten').getValue() : null;\r\n var tax_code = $$('mst') != null ? $$('mst').getValue() : null;\r\n var email = $$('email') != null ? $$('email').getValue() : null;\r\n var address = $$('dchi') != null ? $$('dchi').getValue() : null;\r\n var tel = $$('sdtnmua') != null ? $$('sdtnmua').getValue() : null;\r\n var bank_account = $$('stknmua') != null ? $$('stknmua').getValue() : null;\r\n var bank_name = $$('tnhmua') != null ? $$('tnhmua').getValue() : null;\r\nvar name_label = $$('ten') != null ? $$('ten').config.label : \"Tên\";\r\n var address_label = $$('dchi') != null ? $$('dchi').config.label : \"Địa chỉ\";\r\n\r\n var obj = {\r\n code: code,\r\n buyer_name: buyer_name,\r\n name: name,\r\n tax_code: tax_code,\r\n email: email,\r\n address: address,\r\n tel: tel,\r\n bank_account: bank_account,\r\n bank_name: bank_name,\r\n };\r\n var checkMessage = [];\r\n\r\n if (obj.code == \"\") checkMessage.push('\"Mã\" khách hảng là trường bắt buộc nhập\"');\r\n if (obj.name == \"\") checkMessage.push('\"' + name_label + '\" là trường bắt buộc nhập\"');\r\n if (obj.address == \"\") checkMessage.push('\"' + address_label + '\" khách hảng là trường bắt buộc nhập\"');\r\n\r\n var showConfirmUI = function () {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"check-customer-modal\",\r\n type: \"modal\",\r\n modal: true,\r\n position: \"center\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-form-check-customer\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Tạo mới khách hàng thất bại
\";\r\n },\r\n }\r\n ],\r\n },\r\n body: {\r\n padding: 10,\r\n rows: [\r\n {\r\n rows: checkMessage.map(function (message) {\r\n return {\r\n view: \"template\",\r\n template: \"▶ \"+message,\r\n autoheight: true, width: 350\r\n }\r\n }),\r\n },\r\n {\r\n view: \"template\", autoheight: true, template: \"
Chọn \\\"Tạo hóa đơn\\\" để tạo hóa đơn và không tạo mới khách hàng
\"\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Tạo hóa đơn\", type: \"form\", click: function () {\r\n $$('check-customer-modal').hide();\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n },\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Nhập lại\", type: \"danger\", click: function () {\r\n $$('check-customer-modal').hide();\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n }).show()\r\n }\r\n\r\n if (checkMessage.length > 0) {\r\n showConfirmUI();\r\n } else {\r\n customerCallApis.saveCustomer(obj).then(function (res) {\r\n res = res.json();\r\n \r\n if (!res.status) {\r\n checkMessage.push(res.message.replace(\"P0001: \", \"\"));\r\n showConfirmUI();\r\n } else {\r\n \r\n webix.message(\"Lưu thông tin khách hàng thành công\",\"success\") ; hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n });\r\n }\r\n } else\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);;\r\n\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n align: \"center\",\r\n type: \"danger\",\r\n width: 120,\r\n click: function () {\r\n this.getTopParentView().close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ];\r\n //FormDetail Tạo item trên trang from từ tab và data\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n //view: \"toolbar\",\r\n // css: { \"box-shadow\": \"0 -2px #3498db inset !important\", \"background\": \"#ffffff !important\" },\r\n //css: { \"background\": \"#e6f2ff !important\" },\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-iconInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Test Form
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_InvoiceForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n // var form = webix.$$(\"window-form\");\r\n // hint_form(form.config.hint);\r\n },\r\n },\r\n ],\r\n },\r\n id: \"invoice68\",\r\n resize: true,\r\n fullscreen: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () { },\r\n },\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 100 },\r\n view: \"form\",\r\n id: \"invoiceForms\",\r\n width: 800,\r\n height: 500,\r\n complexData: true,\r\n margin: 0,\r\n on: {\r\n // onViewShow: function () {\r\n // }\r\n },\r\n elements: el,\r\n },\r\n },\r\n setValues: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n if (item != null) {\r\n this.editgiatri(item);\r\n\r\n if (item.docngoaitetv) {\r\n item.docngoaitetv = 1;\r\n } else {\r\n item.docngoaitetv = 0;\r\n }\r\n\r\n form.setValues(item);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n tablePhi.clearAll();\r\n tablePhi.load(urlPhi);\r\n var urlKhac = app.config.host + \"/Invoice68/GetDataInvoiceKhac?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlKhac, function (text) {\r\n var data = JSON.parse(text);\r\n for (var i = 0; i < data.length; i++) {\r\n try {\r\n if ($$(\"TTKhac_\" + data[i].ttruong) !== undefined && $$(\"TTKhac_\" + data[i].ttruong) !== null) $$(\"TTKhac_\" + data[i].ttruong).setValue(data[i][\"dlieu\"]);\r\n } catch (e) { }\r\n }\r\n });\r\n }\r\n\r\n if (editmode == 2) {\r\n }\r\n // nếu có mẫu 04 (hóa đơn hủy)\r\n if (winconfig != null) {\r\n mau04 = winconfig;\r\n $$(\"btnHoadonSaveMau04\").show();\r\n $$(\"btnHoadonCQT\").destructor();\r\n $$(\"btnHoadonSave\").destructor();\r\n }\r\n this.getFormat(item[\"dvtte\"], item);\r\n },\r\n setValuesBangKe: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n tongtienHDonBke = item.tgtttbso;\r\n var form = win.getChildViews()[1];\r\n if (item != null) {\r\n this.editgiatri(item);\r\n\r\n form.setValues(item);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = \"\";\r\n if (editmode == 4) {\r\n url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n } else {\r\n url = app.config.host + \"/Invoice68/GetDataInvoiceDetail_BangKe?id=\" + item.id;\r\n }\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n // nếu có mẫu 04 (hóa đơn hủy)\r\n if (winconfig != null) {\r\n mau04 = winconfig;\r\n $$(\"btnHoadonSaveMau04\").show();\r\n $$(\"btnHoadonCQT\").destructor();\r\n $$(\"btnHoadonSave\").destructor();\r\n }\r\n this.getFormat(item[\"dvtte\"]);\r\n },\r\n editgiatri: function (item) {\r\n if (item[\"tdlap\"] !== undefined) item[\"tdlap\"] = removeTimeZoneT(item[\"tdlap\"]);\r\n if (item[\"cqqdbants\"] !== undefined) item[\"cqqdbants\"] = removeTimeZoneT(item[\"cqqdbants\"]);\r\n if (item[\"tgvchdtu\"] !== undefined) item[\"tgvchdtu\"] = removeTimeZoneT(item[\"tgvchdtu\"]);\r\n if (item[\"tgvchdden\"] !== undefined) item[\"tgvchdden\"] = removeTimeZoneT(item[\"tgvchdden\"]);\r\n if (item[\"nqdbants\"] !== undefined) item[\"nqdbants\"] = removeTimeZoneT(item[\"nqdbants\"]);\r\n if (item[\"nbke\"] !== undefined) item[\"nbke\"] = removeTimeZoneT(item[\"nbke\"]);\r\n if (item[\"hdktngay\"] !== undefined) item[\"hdktngay\"] = removeTimeZoneT(item[\"hdktngay\"]);\r\n item[\"giamthuebanhang20\"] = item[\"giamthuebanhang20\"] == true ? 1 : 0;\r\n if (item[\"nbke\"] !== undefined) item[\"nbke\"] = removeTimeZoneT(item[\"nbke\"]);\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n //var form = webix.$$(\"invoiceForms\");\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1 || editmode == 4) {\r\n icon = \"\";\r\n } else {\r\n if (editmode == 2 || editmode == 5) icon = \"\";\r\n else icon = \"\";\r\n }\r\n\r\n webix.$$(\"head-iconInvoice\").setHTML(icon);\r\n webix.$$(\"head-iconInvoice\").refresh();\r\n },\r\n setModeChangeView: function (mode) {\r\n if(mode) {\r\n modeChangeView = mode;\r\n }\r\n },\r\n setNewInvoice: function () {\r\n var form = webix.$$(\"invoiceForms\");\r\n form.config.newInvoice = true;\r\n },\r\n copyValues: function (item) {\r\n var form = webix.$$(\"invoiceForms\");\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"cthdon_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tableDetail.clearAll();\r\n tableDetail.parse(data);\r\n });\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlPhi, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"phi_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tablePhi.clearAll();\r\n tablePhi.parse(data);\r\n });\r\n var urlKhac = app.config.host + \"/Invoice68/GetDataInvoiceKhac?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlKhac, function (text) {\r\n var data = JSON.parse(text);\r\n for (var i = 0; i < data.length; i++) {\r\n try {\r\n if ($$(\"TTKhac_\" + data[i].ttruong) !== undefined && $$(\"TTKhac_\" + data[i].ttruong) !== null) $$(\"TTKhac_\" + data[i].ttruong).setValue(data[i][\"dlieu\"]);\r\n } catch (e) { }\r\n }\r\n });\r\n // tableDetail.clearAll();\r\n // tableDetail.load(url);\r\n item[\"tthdon\"] = 0;\r\n item[\"tthdon_original\"] = 0;\r\n item[\"tthdon_old\"] = 0;\r\n item[\"hdon_id\"] = null;\r\n item[\"hdon68_id_lk\"] = null;\r\n item[\"nky\"] = null;\r\n item[\"id\"] = webix.uid();\r\n item[\"giamthuebanhang20\"] = item[\"giamthuebanhang20\"] == true ? 1 : 0;\r\n item[\"nbke\"] = null;\r\n this.editgiatri(item);\r\n form.setValues(item);\r\n this.getFormat(item[\"dvtte\"]);\r\n },\r\n getFormat: function (val, data) {\r\n commonHD.renderFormat(val, false, data);\r\n },\r\n initUINew: function (cctbao_id) {\r\n $$(\"cctbao_id\").setValue(cctbao_id);\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/getKyhieu?cctbao_id=\" + cctbao_id, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (data.length > 0) {\r\n var form = $$(\"invoiceForms\");\r\n var values = form.getValues();\r\n values[\"khieu\"] = data[0][\"khhdon\"];\r\n values[\"mcqtcap\"] = data[0][\"mccqthue\"];\r\n values[\"tudongtinhtien\"] = 1;\r\n form.setValues(values);\r\n }\r\n });\r\n this.getFormat();\r\n },\r\n initUI: function (windowconfig) {\r\n var rp = windowconfig;\r\n var vc_window = rp[\"data\"][0];\r\n var tabs = vc_window.Tabs;\r\n $$(\"head-formInvoice\").define(\"template\", \"
\" + vc_window.name + \"
\");\r\n el = [];\r\n var col = [];\r\n var m = 0;\r\n\r\n if (vc_window.detail_layout != null && vc_window.detail_layout != \"\") {\r\n var layoutdetail = JSON.parse(vc_window.detail_layout);\r\n\r\n var layout_element = JSON.stringify(layoutdetail.elements);\r\n var json_layout = JSON.parse(layout_element);\r\n //console.log(json_layout);\r\n for (var i = 0; i < json_layout.length; i++) {\r\n el.push(json_layout[i]);\r\n }\r\n\r\n var jsonElement = findJson.getObjects(JSON.parse(JSON.stringify(el)), \"id\", \"\");\r\n\r\n for (var i = 0; i < jsonElement.length; i++) {\r\n //var item = jsonElement[i];\r\n //var item = jsonElement[i];\r\n var fields = rp[\"data\"][0][\"Tabs\"][0][\"Fields\"];\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (jsonElement[i].name == field.column_name) {\r\n item = commonHD.CreatItemMaterFromData(field);\r\n jsonElement[i] = item;\r\n\r\n findJson.findAndReplace(el, jsonElement[i].name, item);\r\n }\r\n }\r\n }\r\n if (vc_window.window_type == \"MasterDetail\") {\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Master\") {\r\n continue;\r\n }\r\n\r\n var subCols = [];\r\n\r\n for (var j = 0; j < tab.Fields.length; j++) {\r\n var field = tab.Fields[j];\r\n\r\n subCols.push(commonHD.CreatItemFromData(field, tab));\r\n }\r\n\r\n if (tab.tab_type == \"Detail\" && tab.foreign_key === \"detail_tab\") {\r\n var item = {\r\n id: \"detail_tab\",\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n\r\n body: {\r\n rows: [\r\n {\r\n view: \"toolbar\",\r\n height: 40,\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n var item = {\r\n id: webix.uid(),\r\n };\r\n table.add(item);\r\n table.select(item.id, \"ma\", false);\r\n table.edit({\r\n row: item.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n var copy = webix.copy(item);\r\n copy.cthdon_id = null;\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, \"ma\", false);\r\n table.edit({\r\n row: copy.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + \" Nhận excel chi tiết\" + \"\",\r\n view: \"button\",\r\n id: \"importRowDetail\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = $$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n \r\n // if(item == null || item == \"\")\r\n // {\r\n // webix.message(\"Bạn chưa chọn hóa đơn cần nhận chi tiết !\", \"error\");\r\n // return;\r\n // }\r\n \r\n // if (item.tthai != \"Chờ ký\") {\r\n // webix.message(\"Hóa đơn phải có trạng thái chờ ký, bạn mới có thể nhập excel chi tiết!\", \"error\");\r\n // return;\r\n // }\r\n \r\n require([\"views/forms/uploadexcelform\"], function(uploadForm){\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n if(vc_window.code ===\"WIN00782CM\"){\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id : \"EX00017\", filename:\"Mẫu import chi tiết HD bán hàng.xlsx\"});\r\n }else{\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id : \"EX00011\", filename:\"Nhan chi tiet mot HD68.xlsx\"});\r\n }\r\n webix.$$(\"uploader\").hide();\r\n });\r\n\r\n // var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n // table.editStop();\r\n\r\n // var item = table.getSelectedItem();\r\n // if (item == null || item == undefined) {\r\n // webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n // return;\r\n // }\r\n\r\n // var copy = webix.copy(item);\r\n // copy.cthdon_id = null;\r\n // copy.id = webix.uid();\r\n\r\n // table.add(copy);\r\n // table.unselect(item.id);\r\n // table.select(copy.id, \"ma\", false);\r\n // table.edit({\r\n // row: copy.id,\r\n // column: \"ma\",\r\n // });\r\n },\r\n },\r\n }\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_chitiet\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n scroll: true,\r\n columns: subCols,\r\n select_change: tab.select_change,\r\n cell_editstop: tab.cell_editstop,\r\n after_addrow: tab.after_addrow,\r\n after_delrow: tab.after_delrow,\r\n oncheck: tab.oncheck,\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onAfterLoad: function () {\r\n var table = this;\r\n var data = table.serialize();\r\n data.forEach(function (entry) {\r\n if (entry[\"stckhau\"] != undefined || entry[\"tlckhau\"] != undefined) {\r\n if (entry[\"stckhau\"] != 0 || entry[\"tlckhau\"] != 0) {\r\n var ck = $$(\"check_chietkhau\");\r\n\r\n if (ck != undefined) {\r\n ck.setValue(1);\r\n return false;\r\n }\r\n }\r\n }\r\n if (entry[\"loaive\"] == \"Vé trẻ em\") {\r\n entry[\"loaive\"] = \"1\";\r\n } else {\r\n entry[\"loaive\"] = \"2\";\r\n }\r\n });\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onCheck: function (row, column, state) {\r\n var table = this;\r\n if (column == \"khuyen_mai\") {\r\n if (state == true) {\r\n }\r\n }\r\n },\r\n onAfterAdd: function (id, index) {\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.after_addrow != null) {\r\n var fn = Function(\"id\", \"index\", \"tableId\", this.config.after_addrow);\r\n fn(id, index, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onAfterDelete: function (id) {\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.after_delrow != null) {\r\n var fn = Function(\"id\", \"tableId\", this.config.after_delrow);\r\n fn(id, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n if (state.value === state.old) return;\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n var selectedItem = $$(\"hoadon68_chitiet\").getItem(editor.row);\r\n if (!selectedItem.kmai) selectedItem.kmai = \"1\";\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.cell_editstop != null) {\r\n var fn = Function(\"state\", \"editor\", \"ignore\", \"tableId\", this.config.cell_editstop);\r\n fn(state, editor, ignore, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n\r\n findJson.findAndReplace(el, tab.foreign_key, item);\r\n m++;\r\n //cells.push(item);\r\n }\r\n if (tab.tab_type == \"Detail\" && tab.foreign_key === \"phi_tab\") {\r\n var item = {\r\n id: \"phi_tab\",\r\n header: \"Tiền phí/lệ phí\",\r\n select: \"cell\",\r\n hidden: tab.hidden,\r\n body: {\r\n rows: [\r\n {\r\n view: \"toolbar\",\r\n height: 40,\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n var item = {\r\n id: webix.uid(),\r\n tienphi: 0,\r\n };\r\n table.add(item);\r\n table.select(item.id);\r\n table.edit({\r\n row: item.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n var copy = webix.copy(item);\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, \"tnphi\", false);\r\n table.edit({\r\n row: copy.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_phi\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n scroll: true,\r\n columns: subCols,\r\n select_change: tab.select_change,\r\n cell_editstop: tab.cell_editstop,\r\n after_addrow: tab.after_addrow,\r\n after_delrow: tab.after_delrow,\r\n oncheck: tab.oncheck,\r\n on: {\r\n onAfterAdd: function (id, index) {\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.after_addrow != null) {\r\n var fn = Function(\"id\", \"index\", \"tableId\", this.config.after_addrow);\r\n fn(id, index, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onAfterDelete: function (id) {\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.after_delrow != null) {\r\n var fn = Function(\"id\", \"tableId\", this.config.after_delrow);\r\n fn(id, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n if (state.value === state.old) return;\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.cell_editstop != null) {\r\n var fn = Function(\"state\", \"editor\", \"ignore\", \"tableId\", this.config.cell_editstop);\r\n fn(state, editor, ignore, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n\r\n findJson.findAndReplace(el, \"phi_tab\", item);\r\n m++;\r\n }\r\n }\r\n }\r\n\r\n el.push({\r\n // paddingY:10,\r\n margin: 10,\r\n cols: cols,\r\n });\r\n webix.ui(el, $$(\"invoiceForms\"));\r\n //$$(\"tab_replace\").define(\"tabbar\",{width:150 * m});\r\n //console.log(jsonElement);\r\n\r\n var result = webix\r\n .ajax()\r\n .sync()\r\n .get(app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00505\").response;\r\n var count = JSON.parse(result)[0].count;\r\n if (count > 0) {\r\n $$(\"btnHoadonCQT\").hide();\r\n }\r\n\r\n this.SetDefaultValue(windowconfig);\r\n }\r\n },\r\n SetDefaultValue: function (winconfig) {\r\n var form = webix.$$(\"invoiceForms\");\r\n var item = form.getValues();\r\n var vc_window = winconfig[\"data\"][0];\r\n\r\n var tabs = vc_window.Tabs;\r\n\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Normal\" || tab.tab_type == \"Master\") {\r\n var fields = tab.Fields;\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (field.column_name == tab.table_name + \"_id\") {\r\n item[field.column_name] = null;\r\n }\r\n\r\n if (field.column_name == \"branch_code\") {\r\n item[field.column_name] = user.getDvcsID();\r\n }\r\n\r\n if (field.default_value != null) {\r\n var defaultValue = field.default_value.toString();\r\n\r\n if (defaultValue.startsWith(\"@Default=\")) {\r\n item[field.column_name] = defaultValue.replace(\"@Default=\", \"\");\r\n }\r\n\r\n if (defaultValue.startsWith(\"@JS=\")) {\r\n var fn = Function(defaultValue.replace(\"@JS=\", \"\"));\r\n item[field.column_name] = fn();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n form.setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/formhoadoncode78',[\r\n \"app\", \r\n \"locale\", \r\n \"models/user\", \r\n \"models/findjson\", \r\n \"views/commonHD\", \r\n \"callApis/hoadon68\", \r\n \"callApis/customer\",\r\n \"views/DataStorage/DataHoaDon78\"], function (app, _, user, findJson, commonHD, hoadon68CallApis, customerCallApis, dataFormHd78) {\r\n var editmode = 0;\r\n var tongtienHDonBke = 0;\r\n var mau04 = {};\r\n var modeChangeView = 1; // 1 - Vào form theo dạng thường; 2 - vào form từ chức năng \"Sao chép chọn dải\"\r\n var el = [];\r\n\r\n function renderFormat(val) {\r\n if (typeof val == \"undefined\" || val == null || val == \"\" || val == 0) val = \"VND\";\r\n var url = app.config.host + \"/Invoice68/GetDecimalPlace?ma_nt=\" + val;\r\n var table_chitiet = webix.$$(\"hoadon68_chitiet\");\r\n var table_phi = webix.$$(\"hoadon68_phi\");\r\n var table = $$(\"invoiceForms\");\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var arr = JSON.parse(text);\r\n\r\n webix.storage.local.put(\"dsFieldFormat\", arr[0]);\r\n\r\n var arrayString_chitiet = [\"sluong\", \"dgia\", \"thtien\", \"stckhau\", \"tthue\", \"tgtien\", \"tienphi\", \"tlckhau\"];\r\n\r\n for (var i = 0; i < arrayString_chitiet.length; i++) {\r\n var field_name = \"\";\r\n switch (arrayString_chitiet[i]) {\r\n case \"sluong\":\r\n field_name = \"quantity_decimal\";\r\n break;\r\n case \"dgia\":\r\n field_name = \"price_decimal\";\r\n break;\r\n case \"thtien\":\r\n field_name = \"amount_without_vat_decimal\";\r\n break;\r\n case \"stckhau\":\r\n field_name = \"price_discount\";\r\n break;\r\n case \"tthue\":\r\n field_name = \"tax_price\";\r\n break;\r\n case \"tgtien\":\r\n field_name = \"total_amount_decimal\";\r\n break;\r\n case \"tienphi\":\r\n field_name = \"fee_price\";\r\n break;\r\n case \"tlckhau\":\r\n field_name = \"tlckhau\";\r\n break;\r\n }\r\n\r\n var decimal_place = Array(Number(arr[0][field_name]) + 1).join(\"9\");\r\n var decimal_format = Number(arr[0][field_name]);\r\n var format_numeric = {\r\n //maximumValue: Number(\"999999999999.\" + decimal_place),\r\n //minValue: Number(\"-999999999999.\" + decimal_place),\r\n decimalPlaces: Number(decimal_format),\r\n };\r\n var formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimal_format,\r\n };\r\n var formatSo = webix.Number.numToStr(formatSoDefault);\r\n if (field_name == \"fee_price\") {\r\n var format_config = table_phi.getColumnConfig(\"tienphi\");\r\n\r\n format_config.format = formatSo;\r\n format_config.numericConfig = format_numeric;\r\n } else {\r\n var format_config = table_chitiet.getColumnConfig(arrayString_chitiet[i]);\r\n\r\n format_config.format = formatSo;\r\n format_config.numericConfig = format_numeric;\r\n }\r\n }\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n\r\n table_chitiet.refreshColumns();\r\n table_phi.refreshColumns();\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n $$(arrayString[i]).refresh();\r\n }\r\n });\r\n }\r\n\r\n //FormButton\r\n var cols = [\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnBangKeSave\",\r\n label: \"Lưu (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var tongtienBangKeCT = webix.$$(\"tgtttbso\").getValue();\r\n var item = $$(\"invoiceForms\").getValues();\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n if (record.length == 0) {\r\n webix.message(\"Bạn chưa bổ sung chi tiết hàng hóa\");\r\n return;\r\n }\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n var tudongtinhtien = item.tudongtinhtien;\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n var windowno;\r\n if (app_cache[windowno] != null) {\r\n windowno = app_cache[\"data\"][0].code;\r\n }\r\n\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n\r\n var isHasDiscount = it[\"tiletienthuegtgtgiam\"] != null && it[\"tiletienthuegtgtgiam\"] != \"\" && it[\"tiletienthuegtgtgiam\"] != 0 && it[\"tiletienthuegtgtgiam\"] != '0';\r\n if (tudongtinhtien == \"0\") {\r\n if (mauso === \"2\" && !isHasDiscount) {\r\n record[i].thtien = record[i].tgtien;\r\n }\r\n }\r\n var it = record[i];\r\n\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (windowno == \"WIN00788C\") {\r\n it.phanloaihd = 1;\r\n }\r\n if (it.kmai.toString() === \"1\") {\r\n var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + Tiền thuế != tiền sau thuế\");\r\n return;\r\n }\r\n if ((it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") && (mauso === \"1\" || mauso === \"5\")) {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (tongtienHDonBke != tongtienBangKeCT) {\r\n webix.message(\"Tổng tiền chi tiết bảng kê khác tổng tiền của hoá đơn!\", \"error\");\r\n return false;\r\n }\r\n\r\n var record_phi = $$(\"hoadon68_phi\").serialize();\r\n for (var i = 0; i < record_phi.length; i++) {\r\n var it = record_phi[i];\r\n\r\n if (it[\"tnphi\"] == null || it[\"tnphi\"] == \"\") {\r\n webix.message(\"Chưa nhập tên phí/lệ phí\");\r\n return;\r\n }\r\n }\r\n\r\n if (table.validate()) {\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: record });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: record_phi,\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 1;\r\n if (tudongtinhtien == \"0\") {\r\n if (item.tgtttbso === undefined || item.tgtttbso === \"\" || item.tgtttbso === null) {\r\n item.tgtttbso = item.tgtttbso_last;\r\n }\r\n }\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonSaveChange\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n commonHD.showWarningMessage(json);\r\n webix.message(\"Thêm bảng kê thành công !\", \"success\");\r\n var item = $$(\"invoiceForms\").getValues();\r\n if(item && modeChangeView == 2) {\r\n dataFormHd78.SetData(\"KHID\", item.cctbao_id);\r\n }\r\n webix.$$(\"invoice68\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n id: \"btnBangKeDelete\",\r\n label: \"Xoá\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 80,\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n var url = app.config.host + \"/Invoice68/DeleteBangKeHoaDon?id=\" + item.id;\r\n var table = $$(\"invoiceForms\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, function (result) {\r\n if (result == \"true\") {\r\n webix.message(\"Đã xoá bảng kê !\");\r\n table.enable();\r\n table.hideProgress();\r\n webix.$$(\"invoice68\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n } else {\r\n webix.message(\"Xoá không thành công !\", \"error\");\r\n }\r\n });\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnHoadonSave\",\r\n label: \"Lưu tạm (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n $$(\"btnHoadonSave\").disable();\r\n setTimeout(function () {\r\n\r\n var item = $$(\"invoiceForms\").getValues();\r\n if (item.nlap_temp != null) {\r\n var nlap_temp = new Date(item.nlap_temp);\r\n if ($$(\"nlap\").getValue() < nlap_temp) {\r\n webix.message(\"Ngày hoá đơn thay thế hoặc điều chỉnh không được nhỏ hơn hoá đơn gốc!\", \"error\");\r\n return;\r\n }\r\n }\r\n\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n\r\n if (record.length == 0) {\r\n webix.message(\"Bạn chưa bổ sung chi tiết hàng hóa\");\r\n $$(\"btnHoadonSave\").enable();\r\n return;\r\n }\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n var tudongtinhtien = item.tudongtinhtien;\r\n\r\n var windowno = app.path[1].params[0];\r\n\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n var isHasDiscount = it[\"tiletienthuegtgtgiam\"] != null && it[\"tiletienthuegtgtgiam\"] != \"\" && it[\"tiletienthuegtgtgiam\"] != 0 && it[\"tiletienthuegtgtgiam\"] != '0';\r\n if (tudongtinhtien == \"0\") {\r\n if (mauso === \"2\" && !isHasDiscount) {\r\n record[i].thtien = record[i].tgtien;\r\n }\r\n }\r\n var it = record[i];\r\n if (windowno == \"WIN00788C\") {\r\n it.phanloaihd = 1;\r\n }\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai != null && it.kmai.toString() === \"1\") { // Kiểm tra it.kmai != null\r\n if ((it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") && (mauso === \"1\" || mauso === \"5\")) {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n var record_phi = $$(\"hoadon68_phi\").serialize();\r\n for (var i = 0; i < record_phi.length; i++) {\r\n var it = record_phi[i];\r\n\r\n if (it[\"tnphi\"] == null || it[\"tnphi\"] == \"\") {\r\n webix.message(\"Chưa nhập tên phí/lệ phí\");\r\n return;\r\n }\r\n }\r\n /*if($$(\"lblCanhbao\").type==1){\r\n webix.message( $$(\"lblCanhbao\").getValue()+\". Không thể lưu!\", \"error\");\r\n return;\r\n }*/\r\n\r\n if (table.validate()) {\r\n var TTKhac = [];\r\n Object.keys(item).forEach(function (key) {\r\n if (key.includes(\"TTKhac_\")) {\r\n var test = $$(key);\r\n if (test.config.editor === \"nummeric\" || test.config.editor === \"autonumeric\") {\r\n TTKhac.push({\r\n ttruong: key.replace(\"TTKhac_\", \"\"),\r\n kdlieu: \"decimal\",\r\n dlieu: item[key],\r\n });\r\n }\r\n else if (test.config.view === \"text\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"string\", dlieu: item[key] });\r\n else if (test.config.view === \"datepicker\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"dateTime\", dlieu: item[key] });\r\n }\r\n });\r\n var TTKhacItem = [];\r\n TTKhacItem.push({\r\n data: TTKhac,\r\n });\r\n item[\"hoadon68_khac\"] = TTKhacItem;\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: record });\r\n\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: record_phi,\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 1;\r\n if (tudongtinhtien == \"0\") {\r\n if (item.tgtttbso === undefined || item.tgtttbso === \"\" || item.tgtttbso === null) {\r\n item.tgtttbso = item.tgtttbso_last;\r\n }\r\n }\r\n var item1 = [];\r\n item1.push(item);\r\n\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var isSaveCustomerInfo = $$('is_save_customer_info') != null && $$('is_save_customer_info').getValue();\r\n\r\n function afterSaveInvoiceSuccess(text) {\r\n var json = text.json();\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thông tin hóa đơn thành công!\", \"success\");\r\n var item = $$(\"invoiceForms\").getValues();\r\n if(item && modeChangeView == 2) {\r\n dataFormHd78.SetData(\"KHID\", item.cctbao_id);\r\n }\r\n webix.$$(\"invoice68\").close();\r\n\r\n if (item.hdon_id_old !== null && item.hdon_id === \"\" && item.tthai_old != \"Đã ký\") {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n }\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n\r\n function afterSaveInvoiceError(text) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text.json() + XmlHttpRequest, \"error\");\r\n }\r\n\r\n if (isSaveCustomerInfo) {\r\n\r\n \r\n var code = $$('mnmua') != null ? $$('mnmua').getValue() : null;\r\n var buyer_name = $$('tnmua') != null ? $$('tnmua').getValue() : null;\r\n var name = $$('ten') != null ? $$('ten').getValue() : null;\r\n var tax_code = $$('mst') != null ? $$('mst').getValue() : null;\r\n var email = $$('email') != null ? $$('email').getValue() : null;\r\n var address = $$('dchi') != null ? $$('dchi').getValue() : null;\r\n var tel = $$('sdtnmua') != null ? $$('sdtnmua').getValue() : null;\r\n var bank_account = $$('stknmua') != null ? $$('stknmua').getValue() : null;\r\n var bank_name = $$('tnhmua') != null ? $$('tnhmua').getValue() : null;\r\nvar name_label = $$('ten') != null ? $$('ten').config.label : \"Tên\";\r\n var address_label = $$('dchi') != null ? $$('dchi').config.label : \"Địa chỉ\";\r\n\r\n var obj = {\r\n code: code,\r\n buyer_name: buyer_name,\r\n name: name,\r\n tax_code: tax_code,\r\n email: email,\r\n address: address,\r\n tel: tel,\r\n bank_account: bank_account,\r\n bank_name: bank_name,\r\n };\r\n var checkMessage = [];\r\n\r\n if (obj.code == \"\") checkMessage.push('\"Mã\" khách hảng là trường bắt buộc nhập\"');\r\n if (obj.name == \"\") checkMessage.push('\"' + name_label + '\" là trường bắt buộc nhập\"');\r\n if (obj.address == \"\") checkMessage.push('\"' + address_label + '\" khách hảng là trường bắt buộc nhập\"');\r\n\r\n var showConfirmUI = function () {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"check-customer-modal\",\r\n type: \"modal\",\r\n modal: true,\r\n position: \"center\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-form-check-customer\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Tạo mới khách hàng thất bại
\";\r\n },\r\n }\r\n ],\r\n },\r\n body: {\r\n padding: 10,\r\n rows: [\r\n {\r\n rows: checkMessage.map(function (message) {\r\n return {\r\n view: \"template\",\r\n template: \"▶ \" + message,\r\n autoheight: true, width: 350\r\n }\r\n }),\r\n },\r\n {\r\n view: \"template\", autoheight: true, template: \"
Chọn \\\"Tạo hóa đơn\\\" để tạo hóa đơn và không tạo mới khách hàng
\"\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Tạo hóa đơn\", type: \"form\", click: function () {\r\n $$('check-customer-modal').hide();\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n },\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Nhập lại\", type: \"danger\", click: function () {\r\n $$('check-customer-modal').hide();\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n }).show()\r\n }\r\n\r\n if (checkMessage.length > 0) {\r\n showConfirmUI();\r\n } else {\r\n customerCallApis.saveCustomer(obj).then(function (res) {\r\n res = res.json();\r\n\r\n if (!res.status) {\r\n checkMessage.push(res.message.replace(\"P0001: \", \"\"));\r\n showConfirmUI();\r\n } else {\r\n\r\n webix.message(\"Lưu thông tin khách hàng thành công\", \"success\"); hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n });\r\n }\r\n } else\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);;\r\n\r\n }\r\n }, 100);\r\n $$(\"btnHoadonSave\").enable();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F11\",\r\n view: \"button\",\r\n id: \"btnHoadonCQT\",\r\n label: \"Ký và gửi CQT (F11)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 150,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n $$(\"btnHoadonCQT\").disable();\r\n setTimeout(function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n if (item.nlap_temp != null) {\r\n var nlap_temp = new Date(item.nlap_temp);\r\n if ($$(\"nlap\").getValue() < nlap_temp) {\r\n webix.message(\"Ngày hoá đơn thay thế hoặc điều chỉnh không được nhỏ hơn hoá đơn gốc!\", \"error\");\r\n return;\r\n }\r\n }\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n if (record.length == 0) {\r\n webix.message(\"Bạn chưa bổ sung chi tiết hàng hóa\");\r\n return;\r\n }\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n var tudongtinhtien = item.tudongtinhtien;\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n var windowno;\r\n if (app_cache[windowno] != null) {\r\n windowno = app_cache[\"data\"][0].code;\r\n }\r\n\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n var isHasDiscount = it[\"tiletienthuegtgtgiam\"] != null && it[\"tiletienthuegtgtgiam\"] != \"\" && it[\"tiletienthuegtgtgiam\"] != 0 && it[\"tiletienthuegtgtgiam\"] != '0';\r\n if (tudongtinhtien == \"0\") {\r\n if (mauso === \"2\" && !isHasDiscount) {\r\n record[i].thtien = record[i].tgtien;\r\n }\r\n }\r\n var it = record[i];\r\n if (windowno == \"WIN00788C\") {\r\n it.phanloaihd = 1;\r\n }\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n $$(\"btnHoadonCQT\").enable();\r\n return;\r\n }\r\n if (it.kmai.toString() === \"1\") {\r\n /*var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + Tiền thuế != tiền sau thuế\");\r\n return;\r\n }*/\r\n if ((it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") && (mauso === \"1\" || mauso === \"5\")) {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n /*if($$(\"lblCanhbao\").type==1){\r\n webix.message( $$(\"lblCanhbao\").getValue()+\". Không thể lưu!\", \"error\");\r\n return;\r\n }*/\r\n\r\n if (table.validate()) {\r\n var TTKhac = [];\r\n Object.keys(item).forEach(function (key) {\r\n if (key.includes(\"TTKhac_\")) {\r\n var test = $$(key);\r\n if (test.config.editor === \"nummeric\" || test.config.editor === \"autonumeric\") {\r\n TTKhac.push({\r\n ttruong: key.replace(\"TTKhac_\", \"\"),\r\n kdlieu: \"decimal\",\r\n dlieu: item[key],\r\n });\r\n }\r\n else if (test.config.view === \"text\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"string\", dlieu: item[key] });\r\n else if (test.config.view === \"datepicker\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"dateTime\", dlieu: item[key] });\r\n }\r\n });\r\n var TTKhacItem = [];\r\n TTKhacItem.push({\r\n data: TTKhac,\r\n });\r\n item[\"hoadon68_khac\"] = TTKhacItem;\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: $$(\"hoadon68_chitiet\").serialize() });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 1;\r\n if (tudongtinhtien == \"0\") {\r\n if (item.tgtttbso === undefined || item.tgtttbso === \"\" || item.tgtttbso === null) {\r\n item.tgtttbso = item.tgtttbso_last;\r\n }\r\n }\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var isSaveCustomerInfo = $$('is_save_customer_info') != null && $$('is_save_customer_info').getValue();\r\n\r\n function afterSaveInvoiceSuccess(text) {\r\n var json = text.json();\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thông tin hóa đơn thành công!\", \"success\");\r\n \r\n var item = $$(\"invoiceForms\").getValues();\r\n if(item && modeChangeView == 2) {\r\n dataFormHd78.SetData(\"KHID\", item.cctbao_id);\r\n }\r\n webix.$$(\"invoice68\").close();\r\n\r\n if (item.hdon_id_old !== null && item.hdon_id === \"\" && item.tthai_old != \"Đã ký\") {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n }\r\n\r\n var lsthdon_id = [];\r\n lsthdon_id.push(json.data.hdon_id);\r\n commonHD.ExcuteHoaDon(lsthdon_id, true, true);\r\n\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n\r\n function afterSaveInvoiceError(text) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text.json() + XmlHttpRequest, \"error\");\r\n }\r\n\r\n if (isSaveCustomerInfo) {\r\n\r\n \r\n var code = $$('mnmua') != null ? $$('mnmua').getValue() : null;\r\n var buyer_name = $$('tnmua') != null ? $$('tnmua').getValue() : null;\r\n var name = $$('ten') != null ? $$('ten').getValue() : null;\r\n var tax_code = $$('mst') != null ? $$('mst').getValue() : null;\r\n var email = $$('email') != null ? $$('email').getValue() : null;\r\n var address = $$('dchi') != null ? $$('dchi').getValue() : null;\r\n var tel = $$('sdtnmua') != null ? $$('sdtnmua').getValue() : null;\r\n var bank_account = $$('stknmua') != null ? $$('stknmua').getValue() : null;\r\n var bank_name = $$('tnhmua') != null ? $$('tnhmua').getValue() : null;\r\nvar name_label = $$('ten') != null ? $$('ten').config.label : \"Tên\";\r\n var address_label = $$('dchi') != null ? $$('dchi').config.label : \"Địa chỉ\";\r\n\r\n var obj = {\r\n code: code,\r\n buyer_name: buyer_name,\r\n name: name,\r\n tax_code: tax_code,\r\n email: email,\r\n address: address,\r\n tel: tel,\r\n bank_account: bank_account,\r\n bank_name: bank_name,\r\n };\r\n\r\n var checkMessage = [];\r\n\r\n if (obj.code == \"\") checkMessage.push('\"Mã\" khách hảng là trường bắt buộc nhập\"');\r\n if (obj.name == \"\") checkMessage.push('\"' + name_label + '\" là trường bắt buộc nhập\"');\r\n if (obj.address == \"\") checkMessage.push('\"' + address_label + '\" khách hảng là trường bắt buộc nhập\"');\r\n\r\n var showConfirmUI = function () {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"check-customer-modal\",\r\n type: \"modal\",\r\n modal: true,\r\n position: \"center\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-form-check-customer\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Tạo mới khách hàng thất bại
\";\r\n },\r\n }\r\n ],\r\n },\r\n body: {\r\n padding: 10,\r\n rows: [\r\n {\r\n rows: checkMessage.map(function (message) {\r\n return {\r\n view: \"template\",\r\n template: \"▶ \" + message,\r\n autoheight: true, width: 350\r\n }\r\n }),\r\n },\r\n {\r\n view: \"template\", autoheight: true, template: \"
Chọn \\\"Tạo hóa đơn\\\" để tạo hóa đơn và không tạo mới khách hàng
\"\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Tạo hóa đơn\", type: \"form\", click: function () {\r\n $$('check-customer-modal').hide();\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n },\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Nhập lại\", type: \"danger\", click: function () {\r\n $$('check-customer-modal').hide();\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n }).show()\r\n }\r\n\r\n if (checkMessage.length > 0) {\r\n showConfirmUI();\r\n } else {\r\n customerCallApis.saveCustomer(obj).then(function (res) {\r\n res = res.json();\r\n\r\n if (!res.status) {\r\n checkMessage.push(res.message.replace(\"P0001: \", \"\"));\r\n showConfirmUI();\r\n } else {\r\n\r\n webix.message(\"Lưu thông tin khách hàng thành công\", \"success\"); hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n });\r\n }\r\n } else\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);;\r\n\r\n }\r\n $$(\"btnHoadonCQT\").enable();\r\n }, 100);\r\n $$(\"btnHoadonCQT\").enable();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n align: \"center\",\r\n type: \"danger\",\r\n width: 120,\r\n click: function () {\r\n this.getTopParentView().close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ];\r\n //FormDetail Tạo item trên trang from từ tab và data\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n //view: \"toolbar\",\r\n // css: { \"box-shadow\": \"0 -2px #3498db inset !important\", \"background\": \"#ffffff !important\" },\r\n //css: { \"background\": \"#e6f2ff !important\" },\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-iconInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Test Form
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_InvoiceForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n // var form = webix.$$(\"window-form\");\r\n // hint_form(form.config.hint);\r\n },\r\n },\r\n ],\r\n },\r\n id: \"invoice68\",\r\n resize: true,\r\n fullscreen: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () { },\r\n },\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 100 },\r\n view: \"form\",\r\n id: \"invoiceForms\",\r\n width: 800,\r\n height: 500,\r\n complexData: true,\r\n margin: 0,\r\n on: {\r\n // onViewShow: function () {\r\n // }\r\n },\r\n elements: el,\r\n },\r\n },\r\n setValues: function (item, winconfig, params) {\r\n\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n if (item != null) {\r\n this.editgiatri(item);\r\n\r\n if (item.docngoaitetv) {\r\n item.docngoaitetv = 1;\r\n } else {\r\n item.docngoaitetv = 0;\r\n }\r\n\r\n form.setValues(item);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n tablePhi.clearAll();\r\n tablePhi.load(urlPhi);\r\n var urlKhac = app.config.host + \"/Invoice68/GetDataInvoiceKhac?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlKhac, function (text) {\r\n var data = JSON.parse(text);\r\n for (var i = 0; i < data.length; i++) {\r\n try {\r\n if ($$(\"TTKhac_\" + data[i].ttruong) !== undefined && $$(\"TTKhac_\" + data[i].ttruong) !== null) $$(\"TTKhac_\" + data[i].ttruong).setValue(data[i][\"dlieu\"]);\r\n } catch (e) { }\r\n }\r\n });\r\n }\r\n\r\n if (editmode == 2) {\r\n }\r\n // nếu có mẫu 04 (hóa đơn hủy)\r\n if (winconfig != null) {\r\n mau04 = winconfig;\r\n $$(\"btnHoadonSaveMau04\").show();\r\n $$(\"btnHoadonCQT\").destructor();\r\n $$(\"btnHoadonSave\").destructor();\r\n }\r\n this.getFormat(item[\"dvtte\"], item);\r\n },\r\n setValuesBangKe: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n tongtienHDonBke = item.tgtttbso;\r\n var form = win.getChildViews()[1];\r\n if (item != null) {\r\n this.editgiatri(item);\r\n\r\n form.setValues(item);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = \"\";\r\n if (editmode == 4) {\r\n url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n } else {\r\n url = app.config.host + \"/Invoice68/GetDataInvoiceDetail_BangKe?id=\" + item.id;\r\n }\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n // nếu có mẫu 04 (hóa đơn hủy)\r\n if (winconfig != null) {\r\n mau04 = winconfig;\r\n $$(\"btnHoadonSaveMau04\").show();\r\n $$(\"btnHoadonCQT\").destructor();\r\n $$(\"btnHoadonSave\").destructor();\r\n }\r\n this.getFormat(item[\"dvtte\"]);\r\n },\r\n editgiatri: function (item) {\r\n if (item[\"tdlap\"] !== undefined) item[\"tdlap\"] = removeTimeZoneT(item[\"tdlap\"]);\r\n if (item[\"cqqdbants\"] !== undefined) item[\"cqqdbants\"] = removeTimeZoneT(item[\"cqqdbants\"]);\r\n if (item[\"tgvchdtu\"] !== undefined) item[\"tgvchdtu\"] = removeTimeZoneT(item[\"tgvchdtu\"]);\r\n if (item[\"tgvchdden\"] !== undefined) item[\"tgvchdden\"] = removeTimeZoneT(item[\"tgvchdden\"]);\r\n if (item[\"nqdbants\"] !== undefined) item[\"nqdbants\"] = removeTimeZoneT(item[\"nqdbants\"]);\r\n if (item[\"nbke\"] !== undefined) item[\"nbke\"] = removeTimeZoneT(item[\"nbke\"]);\r\n if (item[\"hdktngay\"] !== undefined) item[\"hdktngay\"] = removeTimeZoneT(item[\"hdktngay\"]);\r\n item[\"hddckptquan\"] = item[\"hddckptquan\"] == true ? 1 : 0;\r\n item[\"giamthuebanhang20\"] = item[\"giamthuebanhang20\"] == true ? 1 : 0;\r\n if (item[\"nbke\"] !== undefined) item[\"nbke\"] = removeTimeZoneT(item[\"nbke\"]);\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n //var form = webix.$$(\"invoiceForms\");\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1 || editmode == 4) {\r\n icon = \"\";\r\n } else {\r\n if (editmode == 2 || editmode == 5) icon = \"\";\r\n else icon = \"\";\r\n }\r\n\r\n webix.$$(\"head-iconInvoice\").setHTML(icon);\r\n webix.$$(\"head-iconInvoice\").refresh();\r\n },\r\n setModeChangeView: function (mode) {\r\n if(mode) {\r\n modeChangeView = mode;\r\n }\r\n },\r\n setNewInvoice: function () {\r\n var form = webix.$$(\"invoiceForms\");\r\n form.config.newInvoice = true;\r\n },\r\n copyValues: function (item) {\r\n var form = webix.$$(\"invoiceForms\");\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"cthdon_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tableDetail.clearAll();\r\n tableDetail.parse(data);\r\n });\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlPhi, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"phi_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tablePhi.clearAll();\r\n tablePhi.parse(data);\r\n });\r\n var urlKhac = app.config.host + \"/Invoice68/GetDataInvoiceKhac?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlKhac, function (text) {\r\n var data = JSON.parse(text);\r\n for (var i = 0; i < data.length; i++) {\r\n try {\r\n if ($$(\"TTKhac_\" + data[i].ttruong) !== undefined && $$(\"TTKhac_\" + data[i].ttruong) !== null) $$(\"TTKhac_\" + data[i].ttruong).setValue(data[i][\"dlieu\"]);\r\n } catch (e) { }\r\n }\r\n });\r\n // tableDetail.clearAll();\r\n // tableDetail.load(url);\r\n item[\"tthdon\"] = 0;\r\n item[\"tthdon_original\"] = 0;\r\n item[\"tthdon_old\"] = 0;\r\n item[\"hdon_id\"] = null;\r\n item[\"hdon68_id_lk\"] = null;\r\n item[\"nky\"] = null;\r\n item[\"id\"] = webix.uid();\r\n item[\"giamthuebanhang20\"] = item[\"giamthuebanhang20\"] == true ? 1 : 0;\r\n item[\"hddckptquan\"] = item[\"hddckptquan\"] == true ? 1 : 0;\r\n item[\"nbke\"] = null;\r\n this.editgiatri(item);\r\n form.setValues(item);\r\n this.getFormat(item[\"dvtte\"]);\r\n },\r\n getFormat: function (val, data) {\r\n commonHD.renderFormat(val, false, data);\r\n },\r\n initUINew: function (cctbao_id) {\r\n $$(\"cctbao_id\").setValue(cctbao_id);\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/getKyhieu?cctbao_id=\" + cctbao_id, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (data.length > 0) {\r\n var form = $$(\"invoiceForms\");\r\n var values = form.getValues();\r\n values[\"khieu\"] = data[0][\"khhdon\"];\r\n values[\"mcqtcap\"] = data[0][\"mccqthue\"];\r\n values[\"tudongtinhtien\"] = 1;\r\n form.setValues(values);\r\n }\r\n });\r\n this.getFormat();\r\n },\r\n initUI: function (windowconfig) {\r\n var rp = windowconfig;\r\n var vc_window = rp[\"data\"][0];\r\n var tabs = vc_window.Tabs;\r\n $$(\"head-formInvoice\").define(\"template\", \"
\" + vc_window.name + \"
\");\r\n el = [];\r\n var col = [];\r\n var m = 0;\r\n\r\n if (vc_window.detail_layout != null && vc_window.detail_layout != \"\") {\r\n var layoutdetail = JSON.parse(vc_window.detail_layout);\r\n\r\n var layout_element = JSON.stringify(layoutdetail.elements);\r\n var json_layout = JSON.parse(layout_element);\r\n //console.log(json_layout);\r\n for (var i = 0; i < json_layout.length; i++) {\r\n el.push(json_layout[i]);\r\n }\r\n\r\n var jsonElement = findJson.getObjects(JSON.parse(JSON.stringify(el)), \"id\", \"\");\r\n\r\n for (var i = 0; i < jsonElement.length; i++) {\r\n //var item = jsonElement[i];\r\n //var item = jsonElement[i];\r\n var fields = rp[\"data\"][0][\"Tabs\"][0][\"Fields\"];\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (jsonElement[i].name == field.column_name) {\r\n item = commonHD.CreatItemMaterFromData(field);\r\n jsonElement[i] = item;\r\n\r\n findJson.findAndReplace(el, jsonElement[i].name, item);\r\n }\r\n }\r\n }\r\n if (vc_window.window_type == \"MasterDetail\") {\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Master\") {\r\n continue;\r\n }\r\n\r\n var subCols = [];\r\n\r\n for (var j = 0; j < tab.Fields.length; j++) {\r\n var field = tab.Fields[j];\r\n\r\n subCols.push(commonHD.CreatItemFromData(field, tab));\r\n }\r\n\r\n if (tab.tab_type == \"Detail\" && tab.foreign_key === \"detail_tab\") {\r\n var item = {\r\n id: \"detail_tab\",\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n\r\n body: {\r\n rows: [\r\n {\r\n view: \"toolbar\",\r\n height: 40,\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n var item = {\r\n id: webix.uid(),\r\n };\r\n table.add(item);\r\n table.select(item.id, \"ma\", false);\r\n table.edit({\r\n row: item.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n var copy = webix.copy(item);\r\n copy.cthdon_id = null;\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, \"ma\", false);\r\n table.edit({\r\n row: copy.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + \" Nhận excel chi tiết\" + \"\",\r\n view: \"button\",\r\n id: \"importRowDetail\",\r\n css: \"btnForm\",\r\n hidden: vc_window.code === \"WIN00788C\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = $$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n // if(item == null || item == \"\")\r\n // {\r\n // webix.message(\"Bạn chưa chọn hóa đơn cần nhận chi tiết !\", \"error\");\r\n // return;\r\n // }\r\n \r\n // if (item.tthai != \"Chờ ký\") {\r\n // webix.message(\"Hóa đơn phải có trạng thái chờ ký, bạn mới có thể nhập excel chi tiết!\", \"error\");\r\n // return;\r\n // }\r\n \r\n require([\"views/forms/uploadexcelform\"], function(uploadForm){\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n debugger\r\n if(vc_window.code ===\"WIN00782C\"){\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id : \"EX00017\", filename:\"Mẫu import chi tiết HD bán hàng.xlsx\"});\r\n }else if(vc_window.code ===\"WIN00785C\" || vc_window.code ===\"WIN00786C\"\r\n || vc_window.code ===\"WIN00783C\"|| vc_window.code ===\"WIN00784C\"\r\n ){\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id : \"EX00024\", filename:\"Nhan chi tiet mot HD68.xlsx\"});\r\n }\r\n else{\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id : \"EX00011\", filename:\"Nhan chi tiet mot HD68.xlsx\"});\r\n\r\n }\r\n webix.$$(\"uploader\").hide();\r\n });\r\n\r\n // var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n // table.editStop();\r\n\r\n // var item = table.getSelectedItem();\r\n // if (item == null || item == undefined) {\r\n // webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n // return;\r\n // }\r\n\r\n // var copy = webix.copy(item);\r\n // copy.cthdon_id = null;\r\n // copy.id = webix.uid();\r\n\r\n // table.add(copy);\r\n // table.unselect(item.id);\r\n // table.select(copy.id, \"ma\", false);\r\n // table.edit({\r\n // row: copy.id,\r\n // column: \"ma\",\r\n // });\r\n },\r\n },\r\n }\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_chitiet\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n scroll: true,\r\n columns: subCols,\r\n select_change: tab.select_change,\r\n cell_editstop: tab.cell_editstop,\r\n after_addrow: tab.after_addrow,\r\n after_delrow: tab.after_delrow,\r\n oncheck: tab.oncheck,\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onAfterLoad: function () {\r\n var table = this;\r\n var data = table.serialize();\r\n data.forEach(function (entry) {\r\n if (entry[\"stckhau\"] != undefined || entry[\"tlckhau\"] != undefined) {\r\n if (entry[\"stckhau\"] != 0 || entry[\"tlckhau\"] != 0) {\r\n var ck = $$(\"check_chietkhau\");\r\n\r\n if (ck != undefined) {\r\n ck.setValue(1);\r\n return false;\r\n }\r\n }\r\n }\r\n });\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onCheck: function (row, column, state) {\r\n var table = this;\r\n if (column == \"khuyen_mai\") {\r\n if (state == true) {\r\n }\r\n }\r\n },\r\n onAfterAdd: function (id, index) {\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.after_addrow != null) {\r\n var fn = Function(\"id\", \"index\", \"tableId\", this.config.after_addrow);\r\n fn(id, index, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onAfterDelete: function (id) {\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.after_delrow != null) {\r\n var fn = Function(\"id\", \"tableId\", this.config.after_delrow);\r\n fn(id, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n if (state.value === state.old) return;\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n var selectedItem = $$(\"hoadon68_chitiet\").getItem(editor.row);\r\n if (!selectedItem.kmai) selectedItem.kmai = \"1\";\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.cell_editstop != null) {\r\n var fn = Function(\"state\", \"editor\", \"ignore\", \"tableId\", this.config.cell_editstop);\r\n fn(state, editor, ignore, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n\r\n findJson.findAndReplace(el, tab.foreign_key, item);\r\n m++;\r\n //cells.push(item);\r\n }\r\n if (tab.tab_type == \"Detail\" && tab.foreign_key === \"phi_tab\") {\r\n var item = {\r\n id: \"phi_tab\",\r\n header: \"Tiền phí/lệ phí\",\r\n select: \"cell\",\r\n hidden: tab.hidden,\r\n body: {\r\n rows: [\r\n {\r\n view: \"toolbar\",\r\n height: 40,\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n var item = {\r\n id: webix.uid(),\r\n tienphi: 0,\r\n };\r\n table.add(item);\r\n table.select(item.id);\r\n table.edit({\r\n row: item.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n var copy = webix.copy(item);\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, \"tnphi\", false);\r\n table.edit({\r\n row: copy.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_phi\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n scroll: true,\r\n columns: subCols,\r\n select_change: tab.select_change,\r\n cell_editstop: tab.cell_editstop,\r\n after_addrow: tab.after_addrow,\r\n after_delrow: tab.after_delrow,\r\n oncheck: tab.oncheck,\r\n on: {\r\n onAfterAdd: function (id, index) {\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.after_addrow != null) {\r\n var fn = Function(\"id\", \"index\", \"tableId\", this.config.after_addrow);\r\n fn(id, index, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onAfterDelete: function (id) {\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.after_delrow != null) {\r\n var fn = Function(\"id\", \"tableId\", this.config.after_delrow);\r\n fn(id, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n if (state.value === state.old) return;\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.cell_editstop != null) {\r\n var fn = Function(\"state\", \"editor\", \"ignore\", \"tableId\", this.config.cell_editstop);\r\n fn(state, editor, ignore, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n\r\n findJson.findAndReplace(el, \"phi_tab\", item);\r\n m++;\r\n }\r\n }\r\n }\r\n\r\n el.push({\r\n // paddingY:10,\r\n margin: 10,\r\n cols: cols,\r\n });\r\n webix.ui(el, $$(\"invoiceForms\"));\r\n //$$(\"tab_replace\").define(\"tabbar\",{width:150 * m});\r\n //console.log(jsonElement);\r\n\r\n var result = webix\r\n .ajax()\r\n .sync()\r\n .get(app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00505\").response;\r\n var count = JSON.parse(result)[0].count;\r\n if (count > 0) {\r\n $$(\"btnHoadonCQT\").hide();\r\n }\r\n\r\n this.SetDefaultValue(windowconfig);\r\n }\r\n },\r\n SetDefaultValue: function (winconfig) {\r\n\r\n var form = webix.$$(\"invoiceForms\");\r\n var item = form.getValues();\r\n var vc_window = winconfig[\"data\"][0];\r\n\r\n var tabs = vc_window.Tabs;\r\n\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Normal\" || tab.tab_type == \"Master\") {\r\n var fields = tab.Fields;\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (field.column_name == tab.table_name + \"_id\") {\r\n item[field.column_name] = null;\r\n }\r\n\r\n if (field.column_name == \"branch_code\") {\r\n item[field.column_name] = user.getDvcsID();\r\n }\r\n\r\n if (field.default_value != null) {\r\n var defaultValue = field.default_value.toString();\r\n\r\n if (defaultValue.startsWith(\"@Default=\")) {\r\n item[field.column_name] = defaultValue.replace(\"@Default=\", \"\");\r\n }\r\n\r\n if (defaultValue.startsWith(\"@JS=\")) {\r\n var fn = Function(defaultValue.replace(\"@JS=\", \"\"));\r\n item[field.column_name] = fn();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n form.setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/kyhoadon',[\r\n \"app\",\r\n \"locale\",\r\n \"models/user\",\r\n \"views/modules/minvoiceplugin\"\r\n], function (app, _, user, plugin) {\r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\", modal: true, id: \"chukyso-win\", position: \"center\",\r\n head: \"Ký hóa đơn chờ ký\",\r\n //fullscreen: true,\r\n width: 600,\r\n height: 600,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n id: \"chukyso-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n cols: [\r\n {\r\n view: \"datepicker\",\r\n name: \"tu_ngay\",\r\n format: \"%d/%m/%Y\",\r\n label: \"Từ ngày\",\r\n width: 290,\r\n labelPosition: \"top\"\r\n },\r\n {\r\n view: \"datepicker\",\r\n name: \"den_ngay\",\r\n format: \"%d/%m/%Y\",\r\n label: \"Đến ngày\",\r\n width: 290,\r\n labelPosition: \"top\"\r\n },\r\n ]\r\n },\r\n {\r\n view: \"combo\",\r\n name: \"inv_InvoiceCode_id\",\r\n label: \"Ký hiệu\",\r\n width: 600,\r\n labelPosition: \"top\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00029\"\r\n },\r\n {\r\n view: \"combo\",\r\n width: 600,\r\n name: \"cerSerial\",\r\n label: \"Chứng thư số\",\r\n labelPosition: \"top\",\r\n id: \"txtCerSerial\",\r\n options: {\r\n view: \"gridsuggest\",\r\n url: app.config.host + \"/Invoice/GetListCertificates\",\r\n body: {\r\n columns: [\r\n {\r\n id: \"so_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150\r\n },\r\n {\r\n id: \"subjectname\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 550\r\n },\r\n {\r\n id: \"ngaybatdau\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n },\r\n {\r\n id: \"ngayketthuc\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n }\r\n ]\r\n }\r\n\r\n }\r\n },\r\n {\r\n view: \"template\",\r\n template: \"Danh sách hóa đơn chờ ký\",\r\n type: \"section\"\r\n },\r\n {\r\n\r\n view: \"datatable\",\r\n select: \"row\",\r\n id: \"tblHoadon\",\r\n resizeColumn: true,\r\n datafetch: 50,\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n })\r\n }\r\n // onKeyPress: function (code, e) {\r\n // var table = this;\r\n\r\n // if (e.key == \"Enter\") {\r\n // var win = this.getTopParentView();\r\n // var toolbar = win.getChildViews()[1].getChildViews()[0];\r\n\r\n // var btnChon = toolbar.getChildViews()[0];\r\n // btnChon.callEvent(\"onClick\");\r\n // }\r\n // }\r\n },\r\n columns: [\r\n {\r\n id: \"chon1\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 55,\r\n checkValue: 'C',\r\n uncheckValue: 'K',\r\n template: \"{common.checkbox()}\"\r\n },\r\n { id: \"index\", sort: \"int\", header: \"STT\", width: 50 },\r\n { id: \"inv_InvoiceAuth_id\", header: \"ID hóa đơn\", width: 250, hidden: true },\r\n {\r\n id: \"invoice_issued_date\", header: \"Ngày hóa đơn\", width: 150, format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n },\r\n { id: \"inv_invoiceNumber\", header: \"Số hóa đơn\" },\r\n {\r\n id: \"total_amount\", header: \"Tổng tiền\", width: 150, format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0\r\n })\r\n }\r\n ],\r\n pager: \"selectPagerA\"\r\n },\r\n {\r\n id: \"selectPagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\"\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F9\", view: \"button\", label: \"Tải dữ liệu (F9)\", type: \"form\", align: \"center\", width: 120,\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"chukyso-form\");\r\n\r\n var item = form.getValues();\r\n\r\n var parameter = {\r\n command: \"CM00020\",\r\n parameter: {\r\n ma_dvcs: user.getDvcsID(),\r\n tu_ngay: item.tu_ngay,\r\n den_ngay: item.den_ngay,\r\n inv_InvoiceCode_id: item.inv_InvoiceCode_id\r\n }\r\n };\r\n\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n webix.extend(form, webix.ProgressBar);\r\n //form.disable();\r\n form.showProgress();\r\n\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(url, parameter, function (text) {\r\n\r\n var json = JSON.parse(text);\r\n \r\n if (!json.hasOwnProperty(\"error\")) {\r\n\r\n if (json.length == 0) {\r\n webix.message(\"Không có dữ liệu\", \"error\");\r\n var table = $$(\"tblHoadon\");\r\n //table.load(table.config.url);\r\n table.clearAll();\r\n form.hideProgress();\r\n return;\r\n }\r\n else {\r\n form.hideProgress();\r\n $$(\"btnNhan\").enable();\r\n var table = $$(\"tblHoadon\");\r\n //table.load(table.config.url);\r\n table.clearAll();\r\n var table = $$(\"tblHoadon\");\r\n table.parse(json);\r\n }\r\n }\r\n });\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n shortcut: \"F10\", id: \"btnNhan\", name: \"btnNhan\", view: \"button\", label: \"Nhận (F10)\", align: \"center\", width: 80,\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"chukyso-form\");\r\n\r\n // var item = form.getValues();\r\n\r\n // var parameter = {\r\n // command: \"CM00020\",\r\n // parameter: {\r\n // ma_dvcs: user.getDvcsID(),\r\n // tu_ngay: item.tu_ngay,\r\n // den_ngay: item.den_ngay,\r\n // inv_InvoiceCode_id: item.inv_InvoiceCode_id\r\n // }\r\n // };\r\n\r\n // var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n var json = $$(\"tblHoadon\").serialize();\r\n if (json.length == 0) {\r\n webix.message(\"Không có dữ liệu !\", \"error\");\r\n form.enable();\r\n form.hideProgress();\r\n return;\r\n }\r\n //console.log(json);\r\n\r\n // webix.ajax()\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .post(url, parameter, function (text) {\r\n\r\n // var json = JSON.parse(text);\r\n\r\n // if (!json.hasOwnProperty(\"error\")) {\r\n\r\n // if (json.length == 0) {\r\n // webix.message(\"Không có dữ liệu\");\r\n // return;\r\n // }\r\n\r\n // console.log(json);\r\n // console.log(json.data);\r\n\r\n // var dshoadon = this.$scope.ui(dshoadon.$ui);\r\n // dshoadon.$ui.show();\r\n\r\n var resultTime;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/System/GetDate\", function (text) {\r\n resultTime = JSON.parse(text);\r\n });\r\n \r\n var win = $$(\"chukyso-win\");\r\n var server_cert = win.config.server_cert;\r\n\r\n if (server_cert == null) {\r\n var hub = plugin.hub();\r\n hub.off('resCommand');\r\n\r\n hub.on('resCommand', function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: 'error', text: json.error });\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n }\r\n else {\r\n var promises = [];\r\n\r\n var array = json.data;\r\n\r\n for (var i = 0; i < array.length; i++) {\r\n var item = array[i];\r\n\r\n var parameters = {\r\n InvoiceXmlData: item.InvoiceXmlData,\r\n inv_InvoiceAuth_id: item.inv_InvoiceAuth_id\r\n };\r\n\r\n var a = webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/SaveXml\", parameters);\r\n\r\n promises.push(a);\r\n }\r\n\r\n webix.promise.all(promises).then(function (results) {\r\n var table = webix.$$(\"windowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n var win = $$(\"chukyso-win\");\r\n win.close();\r\n });\r\n\r\n\r\n }\r\n });\r\n\r\n var promises = [];\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n if (json[i].chon1 != null && json[i].chon1 != \"\") {\r\n if (json[i].chon1 == \"C\") {\r\n //console.log(json[i]);\r\n var a = webix.ajax().get(app.config.host + \"/Invoice/ExportXml?id=\" + json[i].inv_InvoiceAuth_id);\r\n promises.push(a);\r\n }\r\n }\r\n\r\n }\r\n\r\n webix.promise.all(promises).then(function (results) {\r\n var arrays = [];\r\n\r\n for (var i = 0; i < results.length; i++) {\r\n arrays.push(results[i].json());\r\n }\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n var item = form.getValues();\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n data: arrays,\r\n idSigner: \"seller\",\r\n tagSign: \"Signatures\",\r\n dateKy: resultTime.dateKy,\r\n listcerts: [\r\n {\r\n so_serial: item.cerSerial\r\n }\r\n ]\r\n };\r\n\r\n hub.invoke('execCommand', 'SignListInvoices', JSON.stringify(arg));\r\n });\r\n }\r\n else {\r\n\r\n var promises = [];\r\n\r\n // for (var i = 0; i < json.length; i++) {\r\n // if (json[i].chon1 != null && json[i].chon1 != \"\") {\r\n // if (json[i].chon1 == \"C\") {\r\n\r\n // var a = webix.ajax().get(app.config.host + \"/Invoice/ExportXml?id=\" + json[i].inv_InvoiceAuth_id);\r\n // promises.push(a);\r\n // }\r\n // }\r\n\r\n // }\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n // console.log(json[i]);\r\n if (json[i].chon1 == null && json[i].chon1 == \"\") {\r\n continue;\r\n }\r\n else {\r\n if (json[i].chon1 == \"C\") {\r\n //console.log(json[i]);\r\n var a = webix.ajax().get(app.config.host + \"/Invoice/ExportXml?id=\" + json[i].inv_InvoiceAuth_id);\r\n\r\n //var text = xhr.responseText;\r\n // var b = JSON.parse(a.responseText);\r\n //console.log(a);\r\n promises.push(a);\r\n\r\n }\r\n }\r\n\r\n }\r\n\r\n webix.promise.all(promises).then(function (results) {\r\n var promises = [];\r\n console.log(results);\r\n var server_cert = win.config.server_cert;\r\n\r\n\r\n var txtCer = $$(\"txtCerSerial\");\r\n var cert = txtCer.getList().getSelectedItem();\r\n\r\n for (var i = 0; i < results.length; i++) {\r\n var json = results[i].json();\r\n\r\n var parameters = {\r\n xml: json[\"InvoiceXmlData\"],\r\n refUri: \"#data\",\r\n certSerial: cert.so_serial,\r\n tokenSerial: cert.tokenSerial,\r\n signId: \"seller\",\r\n signTag: \"Signatures\",\r\n pass: cert.pass,\r\n inv_InvoiceAuth_id: json[\"inv_InvoiceAuth_id\"]\r\n };\r\n\r\n var a = webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(server_cert + \"/Token/SignXml\", parameters, function (text) {\r\n //console.log(text);\r\n });\r\n\r\n promises.push(a);\r\n }\r\n\r\n webix.promise.all(promises).then(function (results) {\r\n var promises = [];\r\n\r\n for (var i = 0; i < results.length; i++) {\r\n var json = results[i].json();\r\n\r\n var parameters = {\r\n InvoiceXmlData: json.xml,\r\n inv_InvoiceAuth_id: json.inv_InvoiceAuth_id\r\n };\r\n\r\n var a = webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(server_cert + \"/Invoice/SaveXml\", parameters, function (text) {\r\n //console.log(text);\r\n });\r\n\r\n promises.push(a);\r\n }\r\n webix.promise.all(promises).then(function (results) {\r\n var table = webix.$$(\"windowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n var win = $$(\"chukyso-win\");\r\n win.close();\r\n }).fail(function (err) {\r\n alert(err);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n });\r\n\r\n\r\n }).fail(function (err) {\r\n alert(err);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n });\r\n\r\n }).fail(function (err) {\r\n alert(err);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n });\r\n\r\n }\r\n }\r\n // else {\r\n // webix.message(json.error);\r\n\r\n // var form = webix.$$(\"chukyso-form\");\r\n // form.enable();\r\n // form.hideProgress();\r\n\r\n // }\r\n\r\n //});\r\n // }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n\r\n }\r\n },\r\n {\r\n view: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", type: \"danger\", align: \"center\", width: 100,\r\n click: function () {\r\n webix.$$(\"chukyso-win\").close();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n\r\n ]\r\n }\r\n // onBeforeShow: function()\r\n // {\r\n // webix.$$(\"btnNhan\").define(\"disabled\", true);\r\n // webix.$$('btnNhan').disable();\r\n // }\r\n\r\n },\r\n // $oninit: function (view, $scope) {\r\n // webix.$$(\"btnNhan\").disable();\r\n // },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n }\r\n };\r\n\r\n});\ndefine('views/forms/kynhieuhoadon',[\"app\", \"locale\", \"models/user\", \"views/modules/minvoiceplugin\"], function (app, _, user, plugin) {\r\n var editmode = 0;\r\n\r\n function signOnServerFile(data, cert, server_cert) {\r\n\r\n var parameters = {\r\n xml: data[\"InvoiceXmlData\"],\r\n refUri: \"#data\",\r\n certSerial: cert.so_serial,\r\n tokenSerial: cert.tokenSerial,\r\n signId: \"seller\",\r\n signTag: \"Signatures\",\r\n pass: cert.pass,\r\n path: cert.path,\r\n inv_InvoiceAuth_id: data[\"inv_InvoiceAuth_id\"]\r\n };\r\n\r\n webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(server_cert + \"/Token/SignXmlByFile\", parameters, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json[\"error\"], \"error\");\r\n }\r\n else {\r\n var parameters = {\r\n InvoiceXmlData: json.xml,\r\n inv_InvoiceAuth_id: json.inv_InvoiceAuth_id\r\n };\r\n //console.log(parameters);\r\n\r\n webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/SaveXml\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.trang_thai == \"Đã ký\") {\r\n\r\n // var table = webix.$$(\"dmwindowData\");\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/System/ExecuteCommand\",\r\n {\r\n command: \"CM00025\",\r\n parameter: {\r\n\r\n }\r\n }, function (text) {\r\n var json = JSON.parse(text);\r\n // auto send SMS \r\n if (json[1].gia_tri == \"C\") {\r\n var data = { id: item.inv_InvoiceAuth_id };\r\n\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/Sms/NotifyInvoice\", data, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n\r\n\r\n }\r\n else {\r\n webix.message(data.error, \"error\");\r\n }\r\n });\r\n }\r\n // send email ma = 'AUTO_SEND_EMAIL'\r\n // if (json[0].gia_tri == \"C\") {\r\n // var data = { inv_InvoiceAuth_id: item.inv_InvoiceAuth_id, nguoinhan: item.inv_buyerEmail, tieude: \"Thông báo xuất hóa đơn điện tử\" };\r\n\r\n // webix.ajax()\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .post(app.config.host + \"/Invoice/AutoSendInvoiceByEmail\", data, function (text) {\r\n // var data = JSON.parse(text);\r\n\r\n // if (!data.hasOwnProperty(\"error\")) {\r\n\r\n\r\n // }\r\n // else {\r\n // webix.message(data.error, \"error\");\r\n // }\r\n // });\r\n // }\r\n\r\n\r\n });\r\n // webix.modalbox.hide();\r\n // webix.message(\"Ký hóa đơn thành công !\", \"debug\");\r\n }\r\n\r\n });\r\n }\r\n });\r\n }\r\n\r\n function signCertFile() {\r\n var json = $$(\"tblHoadon\").serialize();\r\n var data = [];\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n var item = json[i];\r\n\r\n if (item.chon1 != null && item.chon1 != undefined) {\r\n if (item.chon1 == \"C\") {\r\n var inv = {\r\n inv_invoiceauth_id: item.inv_InvoiceAuth_id\r\n };\r\n\r\n data.push(inv);\r\n }\r\n }\r\n }\r\n\r\n var txtCer = $$(\"txtCerSerial\");\r\n var cert = txtCer.getList().getSelectedItem();\r\n\r\n var postData = {\r\n invs: data,\r\n so_serial: cert.so_serial\r\n };\r\n\r\n var url = app.config.host + \"/Invoice/SignListInvoiceCertFile\";\r\n\r\n webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, postData, function (text) {\r\n var res = JSON.parse(text);\r\n\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n }\r\n else {\r\n webix.message(\"Đã thực hiện xong\");\r\n }\r\n });\r\n }\r\n\r\n var layout = {\r\n view: \"window\", modal: true, id: \"chukyso-win\", position: \"center\",\r\n head: \"Ký hóa đơn chờ ký\",\r\n width: 600,\r\n height: 600,\r\n on: {\r\n onBeforeShow: function () {\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/System/ExecuteCommand\", {\r\n command: \"CM00019\",\r\n parameter: {\r\n ma_dvcs: \"\"\r\n }\r\n }, {\r\n error: function (text, data, XmlHttpRequest) {\r\n //webix.modalbox.hide(box);\r\n webix.alert({\r\n title: \"Lỗi !\",\r\n text: err,\r\n type: \"alert-error\"\r\n });\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var c_result = JSON.parse(text);\r\n\r\n for (var i = 0; i < c_result.length; i++) {\r\n var item = c_result[i];\r\n\r\n if (item.ma == \"KYTAPTRUNG\") {\r\n $$(\"chukyso-win\").config.kytaptrung = item.gia_tri;\r\n }\r\n if (item.ma == \"SERVER_CERT\") {\r\n $$(\"chukyso-win\").config.server_cert = item.gia_tri;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n },\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n id: \"chukyso-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n cols: [\r\n {\r\n view: \"datepicker\",\r\n name: \"tu_ngay\",\r\n format: \"%d/%m/%Y\",\r\n label: \"Từ ngày\",\r\n labelPosition: \"top\",\r\n value: new Date()\r\n },\r\n {\r\n view: \"datepicker\",\r\n name: \"den_ngay\",\r\n format: \"%d/%m/%Y\",\r\n label: \"Đến ngày\",\r\n labelPosition: \"top\",\r\n value: new Date()\r\n },\r\n ]\r\n },\r\n {\r\n view: \"combo\",\r\n name: \"inv_InvoiceCode_id\",\r\n label: \"Ký hiệu\",\r\n labelPosition: \"top\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00029\",\r\n required: true,\r\n invalidMessage: \"Ký hiệu hóa đơn không được để trống !\"\r\n // validate: webix.rules.isEmpty\r\n },\r\n {\r\n view: \"combo\",\r\n name: \"cerSerial\",\r\n label: \"Chứng thư số\",\r\n labelPosition: \"top\",\r\n id: \"txtCerSerial\",\r\n required: true,\r\n invalidMessage: \"Chứng thư số không được để trống !\",\r\n options: {\r\n view: \"gridsuggest\",\r\n url: app.config.host + \"/Invoice/GetListCertificates\",\r\n body: {\r\n columns: [\r\n {\r\n id: \"so_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 550\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n }\r\n ]\r\n }\r\n\r\n }\r\n },\r\n {\r\n view: \"template\",\r\n template: \"Danh sách hóa đơn chờ ký\",\r\n type: \"section\"\r\n },\r\n {\r\n\r\n view: \"datatable\",\r\n select: \"row\",\r\n id: \"tblHoadon\",\r\n resizeColumn: true,\r\n datafetch: 50,\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n })\r\n }\r\n // onKeyPress: function (code, e) {\r\n // var table = this;\r\n\r\n // if (e.key == \"Enter\") {\r\n // var win = this.getTopParentView();\r\n // var toolbar = win.getChildViews()[1].getChildViews()[0];\r\n\r\n // var btnChon = toolbar.getChildViews()[0];\r\n // btnChon.callEvent(\"onClick\");\r\n // }\r\n // }\r\n },\r\n columns: [\r\n {\r\n id: \"chon1\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 55,\r\n checkValue: 'C',\r\n uncheckValue: 'K',\r\n template: \"{common.checkbox()}\"\r\n },\r\n { id: \"index\", sort: \"int\", header: \"STT\", width: 50 },\r\n { id: \"inv_InvoiceAuth_id\", header: \"ID hóa đơn\", width: 250, hidden: true },\r\n {\r\n id: \"invoice_issued_date\", header: \"Ngày hóa đơn\", width: 150, format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n },\r\n { id: \"inv_invoiceNumber\", header: \"Số hóa đơn\" },\r\n {\r\n id: \"total_amount\", header: \"Tổng tiền\", width: 150, format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0\r\n })\r\n }\r\n ],\r\n pager: \"selectPagerA\"\r\n },\r\n {\r\n id: \"selectPagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\"\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F9\", view: \"button\", label: \"Tải dữ liệu (F9)\", type: \"form\", align: \"center\", width: 120,\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"chukyso-form\");\r\n if (form.validate()) {\r\n var item = form.getValues();\r\n\r\n var parameter = {\r\n command: \"CM00020\",\r\n parameter: {\r\n ma_dvcs: user.getDvcsID(),\r\n tu_ngay: item.tu_ngay,\r\n den_ngay: item.den_ngay,\r\n inv_InvoiceCode_id: item.inv_InvoiceCode_id\r\n }\r\n };\r\n\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n webix.extend(form, webix.ProgressBar);\r\n //form.disable();\r\n form.showProgress();\r\n\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(url, parameter, function (text) {\r\n\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n\r\n if (json.length == 0) {\r\n webix.message(\"Không có dữ liệu\", \"error\");\r\n var table = $$(\"tblHoadon\");\r\n //table.load(table.config.url);\r\n table.clearAll();\r\n form.hideProgress();\r\n return;\r\n }\r\n else {\r\n form.hideProgress();\r\n $$(\"btnNhan\").enable();\r\n var table = $$(\"tblHoadon\");\r\n //table.load(table.config.url);\r\n table.clearAll();\r\n var table = $$(\"tblHoadon\");\r\n table.parse(json);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n shortcut: \"F10\", view: \"button\", id: \"btnNhan\", name: \"btnNhan\", type: \"form\", label: \"Nhận (F10)\", align: \"center\",\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"chukyso-form\");\r\n\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n var json = $$(\"tblHoadon\").serialize();\r\n\r\n if (json.length == 0) {\r\n\r\n webix.message(\"Không có dữ liệu !\", \"error\");\r\n form.enable();\r\n form.hideProgress();\r\n return;\r\n }\r\n var win = $$(\"chukyso-win\");\r\n\r\n var kytaptrung = win.config.kytaptrung;\r\n var server_cert = win.config.server_cert;\r\n\r\n if (kytaptrung == \"FILE\") {\r\n var box = webix.modalbox({\r\n title: \"Đang ký hóa đơn .... \",\r\n buttons: [\"Hủy bỏ\"],\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"0\":\r\n //clearTimeout(interVal);\r\n webix.modalbox.hide(box);\r\n break;\r\n }\r\n }\r\n });\r\n var txtCer = $$(\"txtCerSerial\");\r\n var cert = txtCer.getList().getSelectedItem();\r\n var d = 0;\r\n var d1 = 0;\r\n for (var i = 0; i < json.length; i++) {\r\n var item = json[i];\r\n\r\n if (item.chon1 != undefined) {\r\n if (item.chon1 == \"C\") {\r\n d1 = d1 + 1;\r\n console.log(d1);\r\n var a = webix.ajax(app.config.host + \"/Invoice/ExportXml?id=\" + item.inv_InvoiceAuth_id);\r\n\r\n webix.promise.all([a]).then(function (results) {\r\n var a_result = results[0].json();\r\n\r\n signOnServerFile(a_result, cert, server_cert);\r\n d = d + 1;\r\n console.log(d);\r\n\r\n if (d == d1) {\r\n webix.modalbox.hide(box);\r\n }\r\n form.enable();\r\n form.hideProgress();\r\n //webix.modalbox.hide(box);\r\n //clearTimeout(interVal);\r\n\r\n }).fail(function (err) {\r\n\r\n form.enable();\r\n form.hideProgress();\r\n\r\n webix.alert({\r\n title: \"Lỗi !\",\r\n text: err,\r\n type: \"alert-error\"\r\n });\r\n });\r\n }\r\n }\r\n }\r\n //console.log(d);\r\n\r\n // var interVal = setTimeout(function () {\r\n\r\n // var txtCer = $$(\"txtCerSerial\");\r\n // var cert = txtCer.getList().getSelectedItem();\r\n\r\n // clearTimeout(interVal);\r\n // webix.modalbox.hide(box);\r\n\r\n // }, 500);\r\n\r\n var tableHD = webix.$$(\"tblHoadon\");\r\n tableHD.clearAll();\r\n form.enable();\r\n form.hideProgress();\r\n\r\n //tableHD.load(tableHD.config.url);\r\n\r\n // var table = webix.$$(\"windowData\");\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n }\r\n else {\r\n if (kytaptrung == \"C\") {\r\n var promises = [];\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n\r\n if (json[i][\"chon1\"] != null && json[i][\"chon1\"] == \"C\") {\r\n var a = webix.ajax().get(app.config.host + \"/Invoice/ExportXml?id=\" + json[i].inv_InvoiceAuth_id);\r\n promises.push(a);\r\n }\r\n }\r\n\r\n webix.promise.all(promises).then(function (results) {\r\n var promises = [];\r\n\r\n var server_cert = win.config.server_cert;\r\n\r\n var txtCer = $$(\"txtCerSerial\");\r\n var cert = txtCer.getList().getSelectedItem();\r\n\r\n for (var i = 0; i < results.length; i++) {\r\n var json = results[i].json();\r\n\r\n var parameters = {\r\n xml: json[\"InvoiceXmlData\"],\r\n refUri: \"#data\",\r\n certSerial: cert.so_serial,\r\n tokenSerial: cert.tokenSerial,\r\n signId: \"seller\",\r\n signTag: \"Signatures\",\r\n pass: cert.pass,\r\n inv_InvoiceAuth_id: json[\"inv_InvoiceAuth_id\"]\r\n };\r\n\r\n var a = webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(server_cert + \"/Token/SignXml\", parameters, function (text) {\r\n });\r\n\r\n promises.push(a);\r\n }\r\n\r\n webix.promise.all(promises).then(function (results) {\r\n var promises = [];\r\n\r\n for (var i = 0; i < results.length; i++) {\r\n var json = results[i].json();\r\n\r\n var parameters = {\r\n InvoiceXmlData: json.xml,\r\n inv_InvoiceAuth_id: json.inv_InvoiceAuth_id\r\n };\r\n\r\n var a = webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(server_cert + \"/Invoice/SaveXml\", parameters, function (text) {\r\n });\r\n\r\n promises.push(a);\r\n }\r\n\r\n webix.promise.all(promises).then(function (results) {\r\n var table = webix.$$(\"windowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n var win = $$(\"chukyso-win\");\r\n win.close();\r\n }).fail(function (err) {\r\n alert(err);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n });\r\n\r\n\r\n }).fail(function (err) {\r\n alert(err);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n });\r\n\r\n }).fail(function (err) {\r\n alert(err);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n });\r\n }\r\n else {\r\n var txtCer = $$(\"txtCerSerial\");\r\n var cert = txtCer.getList().getSelectedItem();\r\n\r\n if (cert.cert_type == \"FILE\") {\r\n signCertFile();\r\n return;\r\n }\r\n\r\n var data = [];\r\n for (var i = 0; i < json.length; i++) {\r\n if (json[i][\"chon1\"] != null && json[i][\"chon1\"] == \"C\") {\r\n data.push(json[i].inv_InvoiceAuth_id);\r\n }\r\n }\r\n //var url = app.config.host + \"/Invoice/GetXmlSignInvoices\";\r\n // var url = app.config.host + \"/Invoice/GetXmlSignInvoices?inv_InvoiceCode_id=\" + item.inv_InvoiceCode_id\r\n // + \"&tu_ngay=\" + moment(item.tu_ngay).format(\"DD/MM/YYYY\") + \"&den_ngay=\" + moment(item.den_ngay).format(\"DD/MM/YYYY\") + \"&inv_invoiceAuth_id=\" + promises_auth_base;\r\n\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n\r\n var resultTime;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/System/GetDate\", function (text) {\r\n resultTime = JSON.parse(text);\r\n });\r\n\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n else {\r\n\r\n hub.off('resCommand');\r\n hub.on('resCommand', function (result) {\r\n\r\n var json = JSON.parse(result);\r\n //console.log(json);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: 'error', text: json.error });\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n }\r\n else {\r\n var table = webix.$$(\"windowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n var win = $$(\"chukyso-win\");\r\n win.close();\r\n\r\n // webix.message(\"Ký thành công !\", \"success\");\r\n }\r\n });\r\n\r\n // hub.off('resNotice');\r\n // hub.on('resNotice', function (result) {\r\n // webix.message(result, \"debug\");\r\n // });\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n var item = form.getValues();\r\n\r\n var token = user.getAccessToken();\r\n var dvcs = user.getDvcsID();\r\n var language = user.getLanguage();\r\n\r\n var bear = token + \";\" + dvcs + \";\" + language;\r\n var url;\r\n if (window.location.protocol == \"file:\") {\r\n url = \"http://localhost:18374\";\r\n }\r\n else {\r\n url = window.location.origin;\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n data: data,\r\n // mst: \"0100686209\",\r\n mst: \"minvoice\", // đang fix cứng.sau này có thể fix\r\n username: user.getCurrentUser(),\r\n idSigner: \"seller\",\r\n tagSign: \"Signatures\",\r\n token: bear,\r\n url: url,\r\n dateKy: resultTime.dateKy,\r\n listcerts: [\r\n {\r\n so_serial: item.cerSerial\r\n }\r\n ]\r\n };\r\n\r\n hub.invoke('execCommand', 'SignListInvoiceV2', JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success SignListInvoiceV2!\")\r\n })\r\n .fail(function (error) {\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n webix.message(error, \"error\");\r\n });\r\n }\r\n\r\n\r\n }\r\n }\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n view: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", type: \"danger\", align: \"center\", width: 100,\r\n click: function () {\r\n webix.$$(\"chukyso-win\").close();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n };\r\n return {\r\n $ui: layout,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n }\r\n };\r\n\r\n});\ndefine('views/forms/license',[\"app\", \"locale\"], function (app, _) {\r\n\tvar editmode = 0;\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"dmtab-win\", position: \"center\",\r\n\t\t\thead: \"Thông tin bản quyền\",\r\n\t\t\tbody: {\r\n\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\telementsConfig: {\r\n\t\t\t\t\tlabelWidth: 60,\r\n\t\t\t\t\tlabelPosition: \"top\"\r\n\t\t\t\t},\r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"license-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\tmargin: 0,\r\n\t\t\t\tborderless: true,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"ms_thue\",\r\n\t\t\t\t\t\tlabel: _(\"MS_THUE\"),\r\n\t\t\t\t\t\twidth: 450,\r\n\t\t\t\t\t\treadonly: true,\r\n\t\t\t\t\t\tcss: \"mcls_readonly_text\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"ten_dvcs\",\r\n\t\t\t\t\t\tlabel: _(\"TEN_DON_VI\"),\r\n\t\t\t\t\t\treadonly: true,\r\n\t\t\t\t\t\tcss: \"mcls_readonly_text\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"autonumeric\",\r\n\t\t\t\t\t\tname: \"sl_hd\",\r\n\t\t\t\t\t\tlabel: _(\"SL_HD_DK\"),\r\n\t\t\t\t\t\treadonly: true,\r\n\t\t\t\t\t\tcss: \"mcls_readonly_text\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"autonumeric\",\r\n\t\t\t\t\t\tname: \"sl_dk_them\",\r\n\t\t\t\t\t\tlabel: _(\"SL_HD_THEM\"),\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tinvalidMessage: \"Số lượng đăng ký thêm không được bằng 0 !\",\r\n\t\t\t\t\t\tvalidate: webix.rules.isNotEmpty\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"key_license\",\r\n\t\t\t\t\t\tlabel: _(\"KEY_LICENSE\"),\r\n\t\t\t\t\t\treadonly: true,\r\n\t\t\t\t\t\tinputAlign: \"center\",\r\n\t\t\t\t\t\tcss: \"mcls_license_text\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tshortcut: \"F10\", id: \"btnSave\", view: \"button\", label: \"Nhận (F10)\", type: \"form\", align: \"center\", width: 120,\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"license-form\");\r\n\t\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\t\t\tif (item.sl_dk_them == 0 || item.sl_dk_them == \"\" || item.sl_dk_them == null) {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.message(\"Số lượng đăng ký thêm không được để trống hoặc bằng 0 !\", \"error\");\r\n\t\t\t\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/License/Register\";\r\n\r\n\t\t\t\t\t\t\t\t\t\twebix.extend(form, webix.ProgressBar);\r\n\t\t\t\t\t\t\t\t\t\tform.disable();\r\n\t\t\t\t\t\t\t\t\t\tform.showProgress();\r\n\r\n\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t.bind(this)\r\n\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t.post(url, item, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar result = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!result.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar interVal = setInterval(function () {\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/License/CheckLicense?id=\" + result.id;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.ajax(url, {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\terror: function (text, data, XmlHttpRequest) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(text);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"license-form\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tform.enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tform.hideProgress();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclearInterval(interVal);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsuccess: function (text, data, XmlHttpRequest) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar result = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (!result.hasOwnProperty(\"error\")) {\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"license-form\");\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar values = form.getValues();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalues.key_license = result.key_license;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalues.sl_dk_them = 0;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalues.sl_hd = result.sl_hd;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tform.setValues(values);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tform.enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tform.hideProgress();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclearInterval(interVal);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}, 3000);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(result.error);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"license-form\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tform.enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tform.hideProgress();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\",type: \"danger\", align: \"center\", width: 120,\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\twebix.$$(\"dmtab-win\").close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t]\r\n\t\t\t}\r\n\t\t},\r\n\t\tsetEditMode: function (mode) {\r\n\t\t\teditmode = mode;\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/forms/lichsuemail_bienlai',[\"app\", \"locale\"], function (app, _) {\r\n function initUI(inv_InvoiceAuth_id) {\r\n // var model = { inv_InvoiceAuth_id: inv_InvoiceAuth_id };\r\n // webix.ajax()\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .post(app.config.host + \"/Invoice/history_email\", model, function (text) {\r\n // var data = JSON.parse(text);\r\n // if (!data.hasOwnProperty(\"error\")) {\r\n // $$('email-form').setValue(data);\r\n // }\r\n // else {\r\n // webix.message(data.error, \"error\");\r\n // }\r\n // });\r\n }\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n id: \"email-win\",\r\n position: \"center\",\r\n head: \"Lịch sử gửi Email\",\r\n width: 950,\r\n height: 300,\r\n move: true,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n id: \"email-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"datatable\",\r\n header: \"Lịch sử gửi Email\",\r\n id: \"tbl_email\",\r\n editable: false,\r\n resizeColumn: true,\r\n select: true,\r\n // fixedRowHeight: true,\r\n // rowLineHeight: 25,\r\n // rowHeight: 25,\r\n //autoheight:true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var inv_invoiceauth_id = \"\";\r\n var table = webix.$$(\"windowData\");\r\n if (table === undefined || table === null) {\r\n table = webix.$$(\"invoiceViews\");\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.hdon_id;\r\n } else {\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.inv_invoiceauth_id;\r\n }\r\n var url = app.config.host + \"/Invoice/InvoiceHistorySendEmail?inv_invoiceauth_id=\" + inv_invoiceauth_id;\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n on: {\r\n onresize: webix.once(function () {\r\n this.adjustRowHeight(\"send_type\", true);\r\n }),\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n // var btnEdit = $$(\"btncskh\");\r\n // btnEdit.callEvent(\"onClick\");\r\n //webix.message(\"Click MobiFone Invoice\", \"error\");\r\n },\r\n onBeforeRender: function () {\r\n //$$(\"tbl_email\").refresh();\r\n //$$(\"tbl_email\").define(\"pager\", kk);\r\n },\r\n },\r\n columns: [\r\n { id: \"stt\", header: \"STT\", width: 40 },\r\n { id: \"invoice_number\", name: \"invoice_number\", header: \"Số biên lai\", width: 100, editor: \"text\" },\r\n { id: \"series_invoice\", header: \"Ký hiệu\", width: 90, editor: \"text\" },\r\n { id: \"user_send\", name: \"user_send\", header: \"Người gửi\", width: 130, editor: \"text\" },\r\n {\r\n id: \"send_date\",\r\n name: \"send_date\",\r\n header: \"Ngày gửi\",\r\n width: 110,\r\n editor: \"date\",\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n sort: \"date\",\r\n },\r\n { id: \"send_to\", name: \"send_to\", header: \"Gửi đến\", width: 150, editor: \"text\" },\r\n { id: \"send_type\", name: \"send_type\", header: \"Loại gửi\", width: 150, editor: \"text\" },\r\n ],\r\n pager: \"pagerB\",\r\n ready: function () {\r\n //this.open(this.getFirstId());\r\n this.sort({ by: \"stt\", dir: \"desc\" });\r\n },\r\n },\r\n {\r\n id: \"pagerB\",\r\n view: \"pager\",\r\n size: 5,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n align: \"center\",\r\n width: 120,\r\n type: \"danger\",\r\n click: function () {\r\n webix.$$(\"email-win\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n initUI: initUI,\r\n };\r\n});\r\n\ndefine('views/forms/lichsuemailtncn',[\"app\", \"locale\"], function (app, _) {\r\n function initUI(inv_InvoiceAuth_id) {\r\n // var model = { inv_InvoiceAuth_id: inv_InvoiceAuth_id };\r\n // webix.ajax()\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .post(app.config.host + \"/Invoice/history_email\", model, function (text) {\r\n // var data = JSON.parse(text);\r\n // if (!data.hasOwnProperty(\"error\")) {\r\n // $$('email-form').setValue(data);\r\n // }\r\n // else {\r\n // webix.message(data.error, \"error\");\r\n // }\r\n // });\r\n }\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n id: \"email-win\",\r\n position: \"center\",\r\n head: \"Lịch sử gửi Email\",\r\n width: 950,\r\n height: 300,\r\n move: true,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n id: \"email-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"datatable\",\r\n header: \"Lịch sử gửi Email\",\r\n id: \"tbl_email\",\r\n editable: false,\r\n resizeColumn: true,\r\n select: true,\r\n // fixedRowHeight: true,\r\n // rowLineHeight: 25,\r\n // rowHeight: 25,\r\n //autoheight:true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var inv_invoiceauth_id = \"\";\r\n var table = webix.$$(\"windowData\");\r\n if (table === undefined || table === null) {\r\n table = webix.$$(\"invoiceViews\");\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.hdon_id;\r\n } else {\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.inv_invoiceauth_id;\r\n }\r\n var url = app.config.host + \"/Invoice/InvoiceHistorySendEmail?inv_invoiceauth_id=\" + inv_invoiceauth_id;\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n on: {\r\n onresize: webix.once(function () {\r\n this.adjustRowHeight(\"send_type\", true);\r\n }),\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n // var btnEdit = $$(\"btncskh\");\r\n // btnEdit.callEvent(\"onClick\");\r\n //webix.message(\"Click MobiFone Invoice\", \"error\");\r\n },\r\n onBeforeRender: function () {\r\n //$$(\"tbl_email\").refresh();\r\n //$$(\"tbl_email\").define(\"pager\", kk);\r\n },\r\n },\r\n columns: [\r\n { id: \"stt\", header: \"STT\", width: 40 },\r\n { id: \"invoice_number\", name: \"invoice_number\", header: \"Số chứng từ\", width: 100, editor: \"text\" },\r\n { id: \"series_invoice\", header: \"Ký hiệu\", width: 90, editor: \"text\" },\r\n { id: \"user_send\", name: \"user_send\", header: \"Người gửi\", width: 130, editor: \"text\" },\r\n {\r\n id: \"send_date\",\r\n name: \"send_date\",\r\n header: \"Ngày gửi\",\r\n width: 110,\r\n editor: \"date\",\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n sort: \"date\",\r\n },\r\n { id: \"send_to\", name: \"send_to\", header: \"Gửi đến\", width: 150, editor: \"text\" },\r\n { id: \"send_type\", name: \"send_type\", header: \"Loại gửi\", width: 150, editor: \"text\" },\r\n ],\r\n pager: \"pagerB\",\r\n ready: function () {\r\n //this.open(this.getFirstId());\r\n this.sort({ by: \"stt\", dir: \"desc\" });\r\n },\r\n },\r\n {\r\n id: \"pagerB\",\r\n view: \"pager\",\r\n size: 5,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n align: \"center\",\r\n width: 120,\r\n type: \"danger\",\r\n click: function () {\r\n webix.$$(\"email-win\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n initUI: initUI,\r\n };\r\n});\r\n\ndefine('views/forms/link_sso_nologin',[\"app\"], function (app) {\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"listuser-win\", position: \"center\",\r\n\t\t\thead: \"Liên kết tài khoản SSO\",\r\n\t\t\tbody: {\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\t//elementsConfig:{labelWidth: 120}, \r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"listuser-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{ view: \"text\", id: \"username1\", name: \"username\", label: \"Tên truy cập\", required: true, css: \"mcls_uppercase\", invalidMessage: \"Tên truy cập để trống!\", labelPosition: \"top\" },\r\n\t\t\t\t\t{ view: \"text\", id: \"password1\", name: \"password\", type: \"password\", label: \"Mật khẩu\", invalidMessage: \"Mật khẩu không được để trống\", required: true, labelPosition: \"top\" },\r\n\t\t\t\t\t{ view: \"text\", id: \"email_sso\", name: \"email_sso\", placeholder: \"Nhập địa chỉ Email SSO\", label: \"Email\", required: true, invalidMessage: \"Email để trống hoặc nhập không đúng định dạng!\", validate: webix.rules.isEmail, labelPosition: \"top\" },\r\n\t\t\t\t\t{ view: \"text\", id: \"otp\", disabled: true, name: \"otp\", label: \"Mã OTP\", labelPosition: \"top\" },\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", id: \"btn-sendOtp\", label: \"Gửi OTP\", type: \"form\", align: \"center\", width: 120, click: function () {\r\n\r\n\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"listuser-form\");\r\n\r\n\t\t\t\t\t\t\t\t\tif (form.validate() == false) {\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\t\tif ($$(\"password\").isVisible()) {\r\n\t\t\t\t\t\t\t\t\t\twebix\r\n\t\t\t\t\t\t\t\t\t\t\t.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t.post(\r\n\t\t\t\t\t\t\t\t\t\t\t\tapp.config.host + \"/Account/VerifyPasswordAndGenOTPSSO\", item,\r\n\t\t\t\t\t\t\t\t\t\t\t\tfunction (text, data) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar result = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (result.error != null) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(result.error, \"error\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"confirm-link-btn\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"otp\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"email_sso\").disable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"btn-sendOtp\").setValue(\"Gửi lại OTP\");\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"email_sso\").define(\"readonly\", \"true\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"email_sso\").define(\"css\", \"mcls_readonly_text\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"email_sso\").refresh();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"username1\").define(\"readonly\", \"true\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"username1\").define(\"css\", \"mcls_readonly_text\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"username1\").refresh();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"password1\").define(\"readonly\", \"true\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"password1\").define(\"css\", \"mcls_readonly_text\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"password1\").refresh();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(\"Gửi yêu cầu thành công!\", \"success\");\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", id: \"confirm-link-btn\", label: \"Xác nhận liên kết\", type: \"success\", align: \"center\", disabled: true, width: 120, click: function () {\r\n\r\n\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"listuser-form\");\r\n\r\n\t\t\t\t\t\t\t\t\tif (form.validate() == false) {\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\r\n\t\t\t\t\t\t\t\t\tif (item.otp == null||item.otp == \"\") {\r\n\t\t\t\t\t\t\t\t\t\twebix.message(\"Mã OTP không được để trống!\", \"error\");\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\twebix.extend(form, webix.ProgressBar);\r\n\t\t\t\t\t\t\t\t\tform.disable();\r\n\t\t\t\t\t\t\t\t\tform.showProgress();\r\n\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t.post(app.config.host + \"/Account/VerifyOtpSsoNoLogin\", item, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"listuser-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"notisso\").hide();\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.message(\"Liên kết thành công!\", \"success\");\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.modalbox({\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: \"LIÊN KẾT THÀNH CÔNG!\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttext: \"Quý khách vui lòng đăng nhập bằng tài khoản SSO để tiếp tục sử dụng dịch vụ.\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbuttons: [\"OK\"],\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcallback: function() {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdocument.location.reload();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.message(data.error, \"error\");\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tform.enable();\r\n\t\t\t\t\t\t\t\t\t\t\tform.hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t} \r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", label: \"Hủy bỏ (ESC)\", hotkey: \"esc\", type: \"danger\", align: \"center\", width: 120, click: function () {\r\n\t\t\t\t\t\t\t\t\twebix.$$(\"listuser-win\").close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t]\r\n\t\t\t}\r\n\t\t},\r\n\t\t$oninit: function () {\r\n // Load data from API and fill the form\r\n\t\t\t\r\n\t\t\tvar apiUrl = app.config.sso + \"/partner/getInfo\";\r\n\t\t\twebix.ajax().get(apiUrl, function (text) {\r\n\t\t\t\tvar userData = JSON.parse(text);\r\n\t\t\t\tvar userInfo = userData.result.userInfo;\r\n\t\t\t\tvar form = $$(\"listuser-form\");\r\n\t\t\t\tform.setValues(userInfo);\r\n });\r\n }\r\n\t};\r\n\r\n});\ndefine('views/forms/loadDataReport',[\r\n\t\"app\",\r\n\t\"locale\",\r\n\t\"models/user\"\r\n], function (app, _, user) {\r\n\tvar editmode = 0;\r\n\tvar _date = new Date();\r\n\tvar _month = _date.getMonth() + 1;\r\n\tfunction subviewT() {\r\n\t\t$$('cbQuy').define('label', \"Tháng\");\r\n\t\t$$('cbQuy').refresh();\r\n\t\t$$('cbQuy').define('options', [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"]);\r\n\t}\r\n\r\n\tfunction subviewQ() {\r\n\r\n\t\t$$('cbQuy').define('label', \"Quý\");\r\n\t\t$$('cbQuy').refresh();\r\n\t\t$$('cbQuy').define('options', [\"1\", \"2\", \"3\", \"4\"]);\r\n\t}\r\n\r\n\tfunction checkHasComp(el, comp) {\r\n\t\tvar rs = false;\r\n\t\tif(comp == null) {\r\n\t\t\treturn rs;\r\n\t\t}\r\n\r\n\t\tfor(var i = 0; i < el.length; i++) {\r\n\t\t\tvar element = el[i];\r\n\t\t\tif(element != null && element.cols != null) {\r\n\t\t\t\tfor(var j = 0; j < element.cols.length; j++) {\r\n\t\t\t\t\tif(element.cols[j] != null && element.cols[j].id == comp.id) {\r\n\t\t\t\t\t\trs = true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn rs;\r\n\t}\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tid: \"loadDataReportWin\",\r\n\t\t\tview: \"window\",\r\n\t\t\tmodal: true,\r\n\t\t\tposition: \"center\",\r\n\t\t\thead: \"Thông tin Tab\",\r\n\t\t\tresize: true,\r\n\t\t\tbody: {\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\telementsConfig: { labelWidth: 60 },\r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"loadDataReportForm\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\tmargin: 0,\r\n\t\t\t\tscroll: \"y\", // Add vertical scroll\r\n\t\t\t\telements: []\r\n\t\t\t},\r\n\t\t\twidth: 600, // Set a fixed width\r\n\t\t\theight: 500 // Set a maximum height\r\n\t\t},\r\n\t\tinitUI: function (infoWindowId) {\r\n\t\t\tvar url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n\t\t\tvar parameters = {\r\n\t\t\t\tcommand: \"CM00013\",\r\n\t\t\t\tparameter: {\r\n\t\t\t\t\twb_infowindow_id: infoWindowId\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\treturn webix.ajax().headers({ \"Content-Type\": \"application/json\" })\r\n\t\t\t\t.post(url, parameters, function (response) {\r\n\t\t\t\t\tvar result = JSON.parse(response);\r\n\r\n\t\t\t\t\tvar win = webix.$$(infoWindowId);\r\n\r\n\t\t\t\t\twin.define(\"width\", result[0].window_width || 600);\r\n\t\t\t\t\twin.define(\"height\", result[0].window_height || 500);\r\n\r\n\t\t\t\t\tvar form = win.getChildViews()[1];\r\n\t\t\t\t\tform.clear();\r\n\r\n\t\t\t\t\tvar view_extension = {\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"radio\",\r\n\t\t\t\t\t\t\t\tid: \"head_extension\",\r\n\t\t\t\t\t\t\t\tvalue: 1,\r\n\t\t\t\t\t\t\t\toptions: [\r\n\t\t\t\t\t\t\t\t\t{ \"id\": 1, \"value\": \"Tháng\" }, // the initially selected item\r\n\t\t\t\t\t\t\t\t\t{ \"id\": 2, \"value\": \"Quý\" }\r\n\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonChange: function (newv, oldv) {\r\n\t\t\t\t\t\t\t\t\t\tvar d = new Date();\r\n\t\t\t\t\t\t\t\t\t\tvar quarter = Math.floor((d.getMonth() / 3));\r\n\t\t\t\t\t\t\t\t\t\tvar quarter1 = quarter + 1;\r\n\t\t\t\t\t\t\t\t\t\tif (newv == 2) {\r\n\t\t\t\t\t\t\t\t\t\t\tsubviewQ();\r\n\t\t\t\t\t\t\t\t\t\t\t$$(\"cbQuy\").setValue(quarter1);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tif (newv == 1) {\r\n\t\t\t\t\t\t\t\t\t\t\tsubviewT();\r\n\t\t\t\t\t\t\t\t\t\t\t$$(\"cbQuy\").setValue(d.getMonth() + 1);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tid: \"cbQuy\",\r\n\t\t\t\t\t\t\t\tname: \"quy\",\r\n\t\t\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\t\t\tlabel: \"Tháng\",\r\n\t\t\t\t\t\t\t\t//height: 30,\r\n\t\t\t\t\t\t\t\tvalue: _month,\r\n\t\t\t\t\t\t\t\toptions: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"],\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonChange: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar d = new Date();\r\n\t\t\t\t\t\t\t\t\t\tvar quarter = Math.floor((d.getMonth() / 3));\r\n\t\t\t\t\t\t\t\t\t\tvar quarter1 = quarter + 1;\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar option = $$('head_extension').getValue();\r\n\t\t\t\t\t\t\t\t\t\tif (option == 2) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar nam = d.getFullYear();\r\n\t\t\t\t\t\t\t\t\t\t\tvar thang;\r\n\t\t\t\t\t\t\t\t\t\t\tvar quy = $$(\"cbQuy\").getValue();\r\n\t\t\t\t\t\t\t\t\t\t\tif (quy == 1) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tthang = 0;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tif (quy == 2) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tthang = 3;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tif (quy == 3) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tthang = 6\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tif (quy == 4) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tthang = 9\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tvar firstDate = new Date(nam, thang, 1);\r\n\t\t\t\t\t\t\t\t\t\t\tvar lastDate = new Date(nam, thang + 3, 0);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_tu_ngay\").setValue(firstDate);\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_tu_ngay\").refresh();\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_den_ngay\").setValue(lastDate);\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_den_ngay\").refresh();\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tif (option == 1) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar year = d.getFullYear();\r\n\t\t\t\t\t\t\t\t\t\t\tvar month = $$(\"cbQuy\").getValue();\r\n\t\t\t\t\t\t\t\t\t\t\tvar date1 = month + \"/01\" + \"/\" + year;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tvar date = new Date(date1);\r\n\t\t\t\t\t\t\t\t\t\t\tvar firstDay1 = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tvar lastDay1 = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_tu_ngay\").setValue(firstDay1);\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_tu_ngay\").refresh();\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_den_ngay\").setValue(lastDay1);\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_den_ngay\").refresh();\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tvar multiComboBranch = null;\r\n\t\t\t\t\tvar multiComboKH = null;\r\n\r\n\t\t\t\t\tvar formValues = {};\r\n\r\n\t\t\t\t\tvar rows_max = result[0].rows_max;\r\n\r\n\t\t\t\t\tvar el = [];\r\n\r\n\t\t\t\t\tfor (var i = 1; i <= rows_max; i++) {\r\n\t\t\t\t\t\tel.push({ cols: [] });\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfor (var i = 0; i < result.length; i++) {\r\n\r\n\t\t\t\t\t\tvar field = result[i];\r\n\r\n\t\t\t\t\t\tvar row = field.row;\r\n\r\n\t\t\t\t\t\tvar item = {\r\n\t\t\t\t\t\t\tview: field.type_editor,\r\n\t\t\t\t\t\t\tname: field.name,\r\n\t\t\t\t\t\t\tlabel: _(field.caption),\r\n\t\t\t\t\t\t\twidth: field.width,\r\n\t\t\t\t\t\t\tlabelPosition: field.label_position,\r\n\t\t\t\t\t\t\tlabelWidth: field.label_width,\r\n\t\t\t\t\t\t\tformat: field.format,\r\n\t\t\t\t\t\t\thidden: field.hidden == \"C\" ? true : false,\r\n\t\t\t\t\t\t\tid: win.config.id + \"_\" + field.name,\r\n\t\t\t\t\t\t\trequired: field.required,\r\n\t\t\t\t\t\t\tinvalidMessage: field.required ? _(field.caption) + \" không được bỏ trống\" : null,\r\n\t\t\t\t\t\t\tvalidate: field.required ? webix.rules.isNotEmpty : null\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\tif (field.default_value != null) {\r\n\t\t\t\t\t\t\tvar defaultValue = field.default_value;\r\n\r\n\t\t\t\t\t\t\tvar date = new Date();\r\n\t\t\t\t\t\t\tvar firstDay = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\t\t\t\t\t\t\tvar lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n\r\n\t\t\t\t\t\t\tif (defaultValue.startsWith(\"@Default=\")) {\r\n\t\t\t\t\t\t\t\tdefaultValue = defaultValue.replace(\"@Default=\", \"\");\r\n\t\t\t\t\t\t\t\tif (defaultValue == \"MA_DVCS\" || defaultValue == \"BRANCH_CODE\") {\r\n\t\t\t\t\t\t\t\t\titem.value = user.getDvcsID();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse if (defaultValue == \"USER\") {\r\n\t\t\t\t\t\t\t\t\titem.value = user.getCurrentUser();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse if (defaultValue == \"MA_CT\") {\r\n\t\t\t\t\t\t\t\t\titem.value = \"MA_CT\";\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse if (defaultValue == \"FIRST_DATE\") {\r\n\t\t\t\t\t\t\t\t\titem.value = firstDay;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse if (defaultValue == \"LAST_DATE\") {\r\n\t\t\t\t\t\t\t\t\titem.value = lastDay;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\titem.value = defaultValue;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.hidden == true) {\r\n\t\t\t\t\t\t\tformValues[item.name] = item.value;\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.view == \"combo\" || item.view == \"multiselect\") {\r\n\t\t\t\t\t\t\titem.options = {\r\n\t\t\t\t\t\t\t\tfilter: function (item, value) {\r\n\t\t\t\t\t\t\t\t\treturn item.value.toLowerCase().includes(value)\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\tview: \"list\",\r\n\t\t\t\t\t\t\t\t\tdata: [],\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\twebix.ajax().get(app.config.host + \"/System/GetDataByReferencesId?id=\" + field.wb_references_id).then(function (data) {\r\n\t\t\t\t\t\t\t\t$$(item.id).getList().parse(data.json());\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Vẽ multi combo\r\n\t\t\t\t\t\tif (item.view == \"multicombo\") {\r\n\t\t\t\t\t\t\titem.suggest = {\r\n\t\t\t\t\t\t\t\tselectAll: true,\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\turl: app.config.host + \"/System/GetDataByReferencesId?id=\" + field.wb_references_id\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\tif(item.name == \"lst_branch_code\") {\r\n\t\t\t\t\t\t\t\tmultiComboBranch = item;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif(item.name == \"invoice_series\") {\r\n\t\t\t\t\t\t\t\tmultiComboKH = item;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.view == \"radio\") {\r\n\t\t\t\t\t\t\tvar ajax = webix.ajax();\r\n\t\t\t\t\t\t\tajax.master = {\r\n\t\t\t\t\t\t\t\tradio_id: item.id,\r\n\t\t\t\t\t\t\t\twin_id: win.config.id\r\n\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\tajax.get(app.config.host + \"/System/GetDataByReferencesId?id=\" + field.wb_references_id, function (text) {\r\n\t\t\t\t\t\t\t\tvar json = JSON.parse(text);\r\n\t\t\t\t\t\t\t\tvar radio = $$(this.radio_id);\r\n\t\t\t\t\t\t\t\tradio.define(\"options\", json);\r\n\t\t\t\t\t\t\t\tradio.refresh();\r\n\r\n\t\t\t\t\t\t\t\t$$(this.win_id).resize();\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.view == \"treesuggest\") {\r\n\r\n\t\t\t\t\t\t\t//item.REF_ID = field.REF_ID.toString();\r\n\t\t\t\t\t\t\tvar listColumns = JSON.parse(field.list_column);\r\n\r\n\t\t\t\t\t\t\tfor (var v = 0; v < listColumns.length; v++) {\r\n\t\t\t\t\t\t\t\tlistColumns[v].header = _(listColumns[v].id);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\titem.view = \"combo\";\r\n\t\t\t\t\t\t\titem.options = {\r\n\t\t\t\t\t\t\t\tview: \"treesuggest\",\r\n\t\t\t\t\t\t\t\turl: {\r\n\t\t\t\t\t\t\t\t\t$proxy: true,\r\n\t\t\t\t\t\t\t\t\tload: function (view, callback, params) {\r\n\t\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/System/GetDataByReferencesId?id=\" + view.config.refid;\r\n\r\n\t\t\t\t\t\t\t\t\t\twebix.ajax(url, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar json = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\tvar data = listToTree(json);\r\n\t\t\t\t\t\t\t\t\t\t\tview.parse(data, \"json\");\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\tcolumns: listColumns,\r\n\t\t\t\t\t\t\t\t\trefid: field.wb_references_id,\r\n\t\t\t\t\t\t\t\t\tfilterMode: {\r\n\t\t\t\t\t\t\t\t\t\tlevel: false,\r\n\t\t\t\t\t\t\t\t\t\tshowSubItems: false\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.view == \"gridcombo\") {\r\n\r\n\t\t\t\t\t\t\tvar listColumns = JSON.parse(field.list_column);\r\n\r\n\t\t\t\t\t\t\tfor (var v = 0; v < listColumns.length; v++) {\r\n\t\t\t\t\t\t\t\tlistColumns[v].header = _(listColumns[v].id);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\titem.view = \"combo\";\r\n\t\t\t\t\t\t\titem.options = {\r\n\t\t\t\t\t\t\t\tview: \"gridsuggest\",\r\n\t\t\t\t\t\t\t\turl: app.config.host + \"/api/System/GetDataByReferencesId?id=\" + field.wb_references_id,\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\tcolumns: listColumns,\r\n\t\t\t\t\t\t\t\t\trefid: field.wb_references_id\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.view == \"gridsuggest\") {\r\n\t\t\t\t\t\t\tvar listColumns = JSON.parse(field.list_column);\r\n\r\n\t\t\t\t\t\t\tfor (var v = 0; v < listColumns.length; v++) {\r\n\t\t\t\t\t\t\t\tlistColumns[v].header = _(listColumns[v].id);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\titem.view = \"text\";\r\n\t\t\t\t\t\t\titem.suggest = {\r\n\t\t\t\t\t\t\t\tview: \"gridsuggest\",\r\n\t\t\t\t\t\t\t\tvalue_suggest: field.value_suggest,\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\tcolumns: listColumns,\r\n\t\t\t\t\t\t\t\t\trefid: field.wb_references_id,\r\n\t\t\t\t\t\t\t\t\tdatatype: \"json\",\r\n\t\t\t\t\t\t\t\t\tdataFeed: function (filtervalue, filter) {\r\n\t\t\t\t\t\t\t\t\t\tif (filtervalue.length < 3) return;\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar refid = this.config.refid;\r\n\t\t\t\t\t\t\t\t\t\tvar pathUrl = app.config.host + \"/System/GetDataByReferencesId?id=\" + refid;\r\n\t\t\t\t\t\t\t\t\t\tvar urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n\t\t\t\t\t\t\t\t\t\tthis.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n\t\t\t\t\t\t\t\t\t},\r\n\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonValueSuggest: function (obj) {\r\n\t\t\t\t\t\t\t\t\t\tif (this.config.value_suggest != null) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar fn = Function(\"obj\", \"id\", this.config.value_suggest);\r\n\t\t\t\t\t\t\t\t\t\t\tfn(obj, this.config.id);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.name == \"tu_ngay\") {\r\n\t\t\t\t\t\t\titem.value = firstDay;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.name == \"den_ngay\") {\r\n\t\t\t\t\t\t\titem.value = lastDay;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tformValues[item.name] = item.value;\r\n\t\t\t\t\t\tel[row - 1].cols.push(item);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(el != null && checkHasComp(el, multiComboBranch) && checkHasComp(el, multiComboKH)) {\r\n\t\t\t\t\t\tfor(var i = 0; i < el.length; i++) {\r\n\t\t\t\t\t\t\tvar element = el[i];\r\n\t\t\t\t\t\t\tif(element != null && element.cols != null) {\r\n\t\t\t\t\t\t\t\tfor(var j = 0; j < element.cols.length; j++) {\r\n\t\t\t\t\t\t\t\t\tif(element.cols[j] != null && element.cols[j].id == multiComboBranch.id) {\r\n\t\t\t\t\t\t\t\t\t\telement.cols[i].on = {\r\n\t\t\t\t\t\t\t\t\t\t\tonChange: function(newValue, oldValue) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar urlLoad = app.config.host + \"/System/GetDataReferencesByRefIdAndBranchs?refId=RF003001&branchs=\" + newValue;\r\n \r\n\t\t\t\t\t\t\t\t\t\t\t\tvar comp = $$(multiComboKH.id).getPopup().getList();\r\n\t\t\t\t\t\t\t\t\t\t\t\tif(comp != null) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcomp.clearAll();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcomp.load(urlLoad);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tif(element.cols[j] != null && element.cols[j].id == multiComboKH.id) {\r\n\t\t\t\t\t\t\t\t\t\telement.cols[j].suggest.body = {};\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tform.setValues(formValues);\r\n\r\n\t\t\t\t\tvar buttons = {\r\n\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tshortcut: \"F10\", view: \"button\", label: \"Tải (F10)\",\r\n\t\t\t\t\t\t\t\twidth: 120,\r\n\t\t\t\t\t\t\t\ttype: \"form\", align: \"center\",\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar form = this.getParentView().getParentView();\r\n\t\t\t\t\t\t\t\t\t\tvar win = this.getTopParentView();\r\n\t\t\t\t\t\t\t\t\t\tif (form.validate() == false) {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.message(\"Chưa nhập đủ thông tin!\", \"error\");\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\t\t\t// xóa header ngày tháng trong sproc ko cần\r\n\t\t\t\t\t\t\t\t\t\tdelete item.quy;\r\n\t\t\t\t\t\t\t\t\t\tvar load_event = win.config.load_event == null ? \"loadReport\" : win.config.load_event;\r\n\r\n\t\t\t\t\t\t\t\t\t\tapp.callEvent(load_event, [win.config.report_id, win.config.id, item, win.config.menuitem]);\r\n\r\n\t\t\t\t\t\t\t\t\t\twin.close();\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\",\r\n\t\t\t\t\t\t\t\twidth: 120,\r\n\t\t\t\t\t\t\t\talign: \"center\", type: \"danger\",\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.getTopParentView().close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tel.push(buttons);\r\n\r\n\t\t\t\t\twebix.ui(el, form);\r\n\t\t\t\t\tif ($$(win.config.id + \"_tu_ngay\") != undefined && $$(win.config.id + \"_den_ngay\") != undefined) {\r\n\t\t\t\t\t\tform.addView(view_extension, 0);\r\n\t\t\t\t\t}\r\n\t\t\t\t\twin.getHead().setHTML(result[0][\"window_name\"]);\r\n\t\t\t\t\t\r\n\t\t\t\t\t// Tạm thời cmt lại đoạn xet dữ liệu popup\r\n\t\t\t\t\t// if (win.config.editmode != null) {\r\n\t\t\t\t\t// \tif (win.config.editmode == 1) {\r\n\t\t\t\t\t// \t\tform.setValues(win.config.formvalues);\r\n\t\t\t\t\t// \t}\r\n\t\t\t\t\t// }\r\n\r\n\t\t\t\t\t//win.resize();\r\n\r\n\t\t\t\t});\r\n\t\t},\r\n\t\tsetEditMode: function (mode) {\r\n\t\t\teditmode = mode;\r\n\t\t},\r\n\t\tsetValues: function (item) {\r\n\t\t\tvar win = $$(this.$ui.id);\r\n\t\t\tvar form = win.getChildViews()[1];\r\n\r\n\t\t\tform.setValues(item);\r\n\t\t}\r\n\t};\r\n\r\n});\r\n\ndefine('views/forms/main',[\r\n \"app\",\r\n \"locale\",\r\n \"models/user\"\r\n], function (app, _, user) {\r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n head: \"Thêm mới hóa đơn đầu vào\",\r\n id: \"main\",\r\n resize: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () {\r\n $$(\"uploader\").files.attachEvent(\"onAfterDelete\", function () {\r\n $$(\"inv_Invoice_fileName\").setValue(null);\r\n $$(\"inv_Invoice_fileData\").setValue(null);\r\n $$(\"inv_Invoice_fileType\").setValue(null);\r\n $$(\"inv_Invoice_fileSize\").setValue(null);\r\n });\r\n }\r\n },\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 100 },\r\n view: \"form\",\r\n id: \"main-form\",\r\n width: 800,\r\n height: 500,\r\n complexData: true,\r\n margin: 0,\r\n on: {\r\n // onViewShow: function () {\r\n\r\n // }\r\n },\r\n elements: [\r\n {\r\n view: \"combo\",\r\n name: \"inv_ncc_id\",\r\n label: \"Nhà cung cấp\",\r\n //labelPosition: \"top\",\r\n id: \"inv_Invoice_inv_ncc_id\",\r\n required: true,\r\n invalidMessage: \"Nhà cung cấp không thể bỏ trống !\",\r\n options: {\r\n view: \"gridsuggest\",\r\n template: \"#ten_ncc#\",\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00300\",\r\n body: {\r\n columns: [\r\n { id: \"mst\", header: _(\"MS_THUE\"), width: 150 },\r\n { id: \"ten_ncc\", header: _(\"Tên nhà cung cấp\"), width: 550 }\r\n ]\r\n }\r\n\r\n }\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"button\", type: \"icon\", icon: \"fas fa-folder-open\", label: \"Chọn file\", width: 110,css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n webix.$$(\"uploader\").fileDialog();\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n rows: [\r\n // {view:\"text\",id:\"df\",label:\"errr\"},\r\n {\r\n id: \"uploader\",\r\n view: \"uploader\",\r\n value: 'Chọn file',\r\n hide: true,\r\n name: \"uploader\",\r\n accept: \"image/png, image/jpeg, application/vnd.ms-excel,text/XML,text/plain,application/octet-stream,application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\r\n //accept: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\r\n link: \"mylist\",\r\n autosend: false,\r\n //borderless: true,\r\n multiple: false,\r\n //upload: app.config.host + \"/Invoice/SaveInv\",\r\n on: {\r\n onBeforeFileAdd: function (file) {\r\n\r\n var size = file.size;\r\n if (size > 1024000) {\r\n webix.message(\"Bạn chỉ được đính kèm File <= 1 Mb\", \"error\");\r\n return false;\r\n }\r\n var typeList = [\"txt\", \"xml\", \"xls\", \"docx\", \"xlsx\", \"repx\", \"png\", \"pdf\", \"jpg\"];\r\n if (typeList.indexOf(file.type) < 0) {\r\n webix.message('Định dạng: txt, xml, xls, docx, xlsx, repx, png, pdf, jpg !', \"error\");\r\n return false;\r\n }\r\n },\r\n onAfterRender: function () {\r\n //console.log('called once after first rendering:');\r\n this.hide();\r\n },\r\n onAfterFileAdd: function (upload) {\r\n var file = new Blob([upload.file]);\r\n\r\n var reader = new FileReader();\r\n var type = upload.type;\r\n if (type == \"txt\") { type = \"text/plain\"; }\r\n if (type == \"xml\") { type = \"text/XML\"; }\r\n if (type == \"xls\") { type = \"application/vnd.ms-excel\"; }\r\n if (type == \"docx\") { type = \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"; }\r\n if (type == \"xlsx\") { type = \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"; }\r\n if (type == \"repx\" || type == \"rar\") { type = \"application/octet-stream\"; }\r\n if (type == \"jpg\") { type = \"image/jpeg\"; }\r\n if (type == \"png\") { type = \"image/png\"; }\r\n if (type == \"pdf\") { type = \"application/pdf\"; }\r\n\r\n reader.onload = function () {\r\n\r\n var arrayBuffer = this.result,\r\n array = new Uint8Array(arrayBuffer);\r\n\r\n var array1 = Array.from(array)\r\n // console.log(array1);\r\n //var data_btoa = btoa(array1);\r\n var data = {\r\n ten_file: upload.name,\r\n file_data: array1,\r\n loai_file: type\r\n }\r\n\r\n $$(\"inv_Invoice_fileName\").setValue(upload.name);\r\n $$(\"inv_Invoice_fileData\").setValue(array1);\r\n $$(\"inv_Invoice_fileType\").setValue(type);\r\n $$(\"inv_Invoice_fileSize\").setValue(upload.size / 1024);\r\n }\r\n reader.readAsArrayBuffer(upload.file);\r\n\r\n },\r\n onUploadComplete: function (response) {\r\n // var topParentView = this.getTopParentView();\r\n\r\n // if (topParentView.config.tableId !== undefined) {\r\n // \tvar table = $$(topParentView.config.tableId);\r\n\r\n // \tif (table != null) {\r\n // \t\ttable.clearAll();\r\n // \t\ttable.load(table.config.url);\r\n // \t}\r\n // }\r\n // webix.message(\"Upload File thành công !\", \"debug\");\r\n // webix.$$(\"uploadfile-win\").close();\r\n },\r\n onFileUploadError: function (file, response) {\r\n $$(\"mylist\").clearAll();\r\n $$(\"mylist\").refresh();\r\n //console.log(file);\r\n //console.log(response);\r\n var table = $$(\"main-form\");\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(response.error, \"error\");\r\n }\r\n },\r\n apiOnly: true,\r\n },\r\n {\r\n view: \"list\",\r\n id: \"mylist\",\r\n type: \"uploader\",\r\n //css:{\"border-bottom\": \"none !important\", \"border-color\":\"white !important\"},\r\n //height: 100,\r\n //autoheight: true\r\n borderless: true,\r\n on: {\r\n onAfterDelete: function (id) {\r\n webix.message(\"aaaaaaaaaaa\");\r\n }\r\n }\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n view: \"combo\",\r\n name: \"dmloaihd_id\",\r\n label: \"Loại hóa đơn\",\r\n //labelPosition: \"top\",\r\n id: \"inv_Invoice_dmloaihd_id\",\r\n required: true,\r\n invalidMessage: \"Loại hóa đơn không thể bỏ trống !\",\r\n options: {\r\n view: \"gridsuggest\",\r\n template: \"#ten_loai#\",\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00301\",\r\n body: {\r\n columns: [\r\n { id: \"ma_loai\", header: _(\"Mã loại\"), width: 80 },\r\n { id: \"ten_loai\", header: _(\"Tên loại hóa đơn\"), width: 700 }\r\n ]\r\n }\r\n }\r\n },\r\n {\r\n cols: [\r\n { view: \"text\", label: _(\"Số hóa đơn\"), name: \"invoiceNumber\", id: \"inv_Invoice_invoiceNumber\", attributes: { maxlength: 7 } },\r\n { view: \"datepicker\", label: _(\"Ngày hóa đơn\"), name: \"invoiceDate\", value: new Date(), id: \"inv_Invoice_invoiceDate\" }\r\n ]\r\n\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Mẫu số\",\r\n name: \"mauhd\",\r\n id: \"inv_Invoice_mauhd\",\r\n //labelWidth: 90,\r\n required: true,\r\n invalidMessage: \"Mẫu số không được bỏ trống\",\r\n attributes: {\r\n maxlength: 11\r\n },\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == undefined) return;\r\n if (newv == \"\") return;\r\n\r\n if (newv.length != 11) {\r\n webix.message({ type: \"error\", text: \"Độ dài mẫu số phải là 11 ký tự\" });\r\n this.focus();\r\n return;\r\n }\r\n\r\n var txtHinhThuc = \"E\";\r\n // var txtLoaihd = $$(\"dmloaihd_id_dmmauhoadon\");\r\n\r\n if (txtHinhThuc == \"\") {\r\n webix.message({ type: \"error\", text: \"Bạn chưa chọn hình thức hóa đơn\" });\r\n return;\r\n }\r\n\r\n // if (txtLoaihd.getValue() == \"\") {\r\n // webix.message({ type: \"error\", text: \"Bạn chưa chọn loại hóa đơn\" });\r\n // return;\r\n // }\r\n\r\n // var hinhthuc = \"E\";\r\n // var list = txtLoaihd.getList();\r\n\r\n // var selectedItem = list.getItem(txtLoaihd.getValue());\r\n\r\n // if (selectedItem == undefined) return;\r\n\r\n // var ma_loai = selectedItem.ma_loai;\r\n\r\n // var so_lien = hinhthuc == \"E\" ? 0 : \"\";\r\n // var mau_so = ma_loai + so_lien + \"/\";\r\n\r\n // if (newv.startsWith(mau_so) == false) {\r\n // webix.message({ type: \"error\", text: \"Mẫu số không đúng\" });\r\n // this.focus();\r\n // return;\r\n // }\r\n\r\n var sttMau = newv.substring(newv.length - 3, newv.length);\r\n var patt = /^[0-9][0-9][0-9]$/;\r\n\r\n if (patt.test(sttMau) == false) {\r\n webix.message({ type: \"error\", text: \"3 ký tự cuối phải là số\" });\r\n this.focus();\r\n }\r\n }\r\n }\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Ký hiệu\",\r\n name: \"invoiceSeries\",\r\n id: \"inv_Invoice_invoiceSeries\",\r\n // labelWidth: 110,\r\n required: true,\r\n invalidMessage: \"Ký hiệu không được bỏ trống\",\r\n attributes: { maxlength: 6 },\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == undefined) return;\r\n if (newv == \"\") return;\r\n\r\n if (newv.length != 6) {\r\n webix.message({ type: \"error\", text: \"Độ dài ký hiệu phải là 6 ký tự\" });\r\n this.focus();\r\n return;\r\n }\r\n\r\n var patt = /^[A,B,C,D,E,G,H,K,L,M,N,P,Q,R,S,T,U,V,X,Y][A,B,C,D,E,G,H,K,L,M,N,P,Q,R,S,T,U,V,X,Y][/]$/;\r\n\r\n if (patt.test(newv.substring(0, 3)) == false) {\r\n webix.message({ type: \"error\", text: \"3 ký tự đầu của ký hiệu không đúng\" });\r\n this.focus();\r\n return;\r\n }\r\n\r\n patt = /^[1-9][1-9]$/;\r\n\r\n var nam = newv.substring(3, 5);\r\n\r\n if (patt.test(nam) == false) {\r\n webix.message({ type: \"error\", text: \"2 ký tự năm của ký hiệu không đúng\" });\r\n this.focus();\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var year = now.getFullYear();\r\n\r\n nam = Number(\"20\" + nam);\r\n\r\n if (nam < (year - 1) || nam > year) {\r\n webix.message({ type: \"error\", text: \"Năm ký hiệu không đúng\" });\r\n this.focus();\r\n return;\r\n }\r\n\r\n if (newv.substring(5, 6) != \"E\") {\r\n webix.message({ type: \"error\", text: \"Ký tự cuối phải là E\" });\r\n this.focus();\r\n return;\r\n }\r\n\r\n }\r\n }\r\n },\r\n ]\r\n },\r\n {\r\n id: \"inv_Invoice_sellerTaxCode\",\r\n name: \"sellerTaxCode\",\r\n view: \"search\",\r\n label: \"MST người bán\",\r\n //align: \"center\",\r\n placeholder: _(\"SEARCH\") + \"...\",\r\n // width: 300,\r\n on: {\r\n onTimedKeyPress: function () {\r\n // var table = $$(\"tblSearch\");\r\n\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n },\r\n onSearchIconClick: function (e) {\r\n var text = this.getValue();\r\n var datapost = { \"masothue\": text };\r\n var table = $$(\"main-form\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/System/GetInfoByMST\", datapost, function (text) {\r\n\r\n var json = JSON.parse(text);\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"inv_Invoice_sellerName\").setValue(json.ten_cty);\r\n $$(\"inv_Invoice_sellerAdress\").setValue(json.dia_chi);\r\n }\r\n else {\r\n // nếu không tồn tại mã số thuế phải xóa địa chỉ + tên cty ở đây \r\n webix.message(json.error, \"error\", 1500);\r\n }\r\n\r\n });\r\n }\r\n }\r\n },\r\n { view: \"text\", label: _(\"Tên người bán\"), name: \"sellerName\", id: \"inv_Invoice_sellerName\" },\r\n { view: \"text\", label: _(\"Địa chỉ\"), name: \"sellerAdress\", id: \"inv_Invoice_sellerAdress\" },\r\n { view: \"text\", label: _(\"Tên mặt hàng tiêu biểu\"), name: \"itemName\", id: \"inv_Invoice_itemName\" },\r\n { view: \"text\", label: _(\"Tiền trước thuế\"), name: \"totalAmountWithoutVat\", id: \"inv_Invoice_totalAmountWithoutVat\", inputAlign: \"right\", type: \"number\" },\r\n { view: \"text\", label: _(\"Tiền thuế\"), name: \"vatAmount\", id: \"inv_Invoice_vatAmount\", inputAlign: \"right\", type: \"number\" },\r\n { view: \"textarea\", label: _(\"GHI_CHU\"), name: \"ghi_chu\", id: \"inv_Invoice_ghi_chu\" },\r\n { view: \"text\", label: _(\"Tên File\"), name: \"fileName\", id: \"inv_Invoice_fileName\", hidden: true },\r\n { view: \"text\", label: _(\"File Data\"), name: \"fileData\", id: \"inv_Invoice_fileData\", hidden: true },\r\n { view: \"text\", label: _(\"Mime Type\"), name: \"fileType\", id: \"inv_Invoice_fileType\", hidden: true },\r\n { view: \"text\", label: _(\"File Size\"), name: \"fileSize\", id: \"inv_Invoice_fileSize\", hidden: true },\r\n { view: \"text\", label: _(\"File Url\"), name: \"fileUrl\", id: \"inv_Invoice_fileUrl\", hidden: true },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\", view: \"button\", label: \"Nhận (F10)\", type: \"form\", align: \"center\",\r\n on: {\r\n onClick: function () {\r\n var item = $$(\"main-form\").getValues();\r\n var table = $$(\"main-form\");\r\n\r\n if (table.validate()) {\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n var file = $$(\"uploader\").files.getFirstId();\r\n // if (file == undefined || file == null) {\r\n // webix.message(\"Bạn chưa chọn File hóa đơn đính kèm !\", \"error\");\r\n // table.enable();\r\n // table.hideProgress();\r\n // return;\r\n // }\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/ManageInvoice/SaveInv\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n\r\n }, success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.$$(\"main\").close();\r\n app.callEvent(\"dataChangedMain\", [editmode, json.data]);\r\n }\r\n else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n });\r\n }\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n\r\n }\r\n },\r\n {\r\n view: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", align: \"center\", type: \"danger\",\r\n click: function () {\r\n $$(\"mylist\").clearAll();\r\n $$(\"mylist\").unbind();\r\n var id = $$(\"uploader\").files.getFirstId();\r\n if (id != undefined) {\r\n $$(\"uploader\").stopUpload(id);\r\n }\r\n this.getTopParentView().close();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n },\r\n setValues: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n\r\n var form = win.getChildViews()[1];\r\n\r\n item[\"invoiceDate\"] = removeTimeZoneT(item[\"invoiceDate\"]);\r\n form.setValues(item);\r\n\r\n if (editmode == 2) {\r\n $$(\"uploader\").files.parse([\r\n { name: item.fileName == null ? \"\" : item.fileName, sizetext: item.fileSize == null ? \"\" : item.fileSize, status: \"server\" }\r\n ]);\r\n }\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n\r\n //var form = webix.$$(\"main-form\");\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n }\r\n };\r\n\r\n});\r\n\ndefine('views/forms/mauhoadon',[\"app\"], function (app) {\r\n\tvar editmode = 0;\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"mauhoadon-win\", position: \"center\",\r\n\t\t\thead: \"Mẫu hóa đơn\",\r\n\t\t\theight: 250,\r\n\t\t\tbody: {\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\t//elementsConfig:{labelWidth: 120}, \r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"mauhoadon-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\tmargin: 0,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tlabel: \"Tên mẫu\",\r\n\t\t\t\t\t\tname: \"name\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tinvalidMessage: \"Tên mẫu không được bỏ trống\",\r\n\t\t\t\t\t\twidth: 600,\r\n\t\t\t\t\t\tlabelWidth: 90\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\tlabel: \"Hình thức\",\r\n\t\t\t\t\t\tname: \"invoice_type\",\r\n\t\t\t\t\t\tid: \"hinhthuc_dmmauhoadon\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tinvalidMessage: \"Hình thức không được bỏ trống\",\r\n\t\t\t\t\t\tlabelWidth: 90,\r\n\t\t\t\t\t\toptions: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00009\",\r\n\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\tonChange: function (newv, oldv) {\r\n\t\t\t\t\t\t\t\tvar txtSolien = $$(\"so_lien_dmmauhoadon\");\r\n\r\n\t\t\t\t\t\t\t\tif (newv == \"E\") {\r\n\t\t\t\t\t\t\t\t\ttxtSolien.setValue(0);\r\n\t\t\t\t\t\t\t\t\ttxtSolien.define(\"readonly\", true);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\ttxtSolien.define(\"readonly\", false);\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\ttxtSolien.refresh();\r\n\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\tlabel: \"Loại hóa đơn\",\r\n\t\t\t\t\t\tname: \"sl_invoice_type_id\",\r\n\t\t\t\t\t\tid: \"dmloaihd_id_dmmauhoadon\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tinvalidMessage: \"Loại hóa đơn không được bỏ trống\",\r\n\t\t\t\t\t\tlabelWidth: 90,\r\n\t\t\t\t\t\t//options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00008\",\r\n\t\t\t\t\t\toptions: {\r\n\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\turl: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00008\",\r\n\t\t\t\t\t\t\t\tready: function () {\r\n\t\t\t\t\t\t\t\t\tvar form = $$(\"mauhoadon-form\");\r\n\t\t\t\t\t\t\t\t\tvar values = form.getValues();\r\n\r\n\t\t\t\t\t\t\t\t\tif (values.sl_invoice_type_id == null || values.sl_invoice_type_id == undefined || values.sl_invoice_type_id == \"\") {\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar data = this.serialize();\r\n\r\n\t\t\t\t\t\t\t\t\t\tfor (var i = 0; i < data.length; i++) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar item = data[i];\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tif (item.code == \"01GTKT\") {\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"dmloaihd_id_dmmauhoadon\").setValue(item.id);\r\n\t\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\tonChange: function (newv, oldv) {\r\n\t\t\t\t\t\t\t\tvar list = this.getPopup().getList();\r\n\t\t\t\t\t\t\t\tvar item = list.getItem(newv);\r\n\r\n\t\t\t\t\t\t\t\tif (item === undefined) {\r\n\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tvar txtMauso = $$(\"mau_so_dmmauhoadon\");\r\n\r\n\t\t\t\t\t\t\t\tvar txtSolien = $$(\"so_lien_dmmauhoadon\");\r\n\t\t\t\t\t\t\t\tvar so_lien = txtSolien.getValue();\r\n\t\t\t\t\t\t\t\tvar mau_so = item.code + so_lien + \"/001\";\r\n\r\n\t\t\t\t\t\t\t\ttxtMauso.setValue(mau_so);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\t\t\tlabel: \"Mẫu số\",\r\n\t\t\t\t\t\t\t\tname: \"template_code\",\r\n\t\t\t\t\t\t\t\tid: \"mau_so_dmmauhoadon\",\r\n\t\t\t\t\t\t\t\tlabelWidth: 90,\r\n\t\t\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\t\t\tinvalidMessage: \"Mẫu số không được bỏ trống\",\r\n\t\t\t\t\t\t\t\tattributes: {\r\n\t\t\t\t\t\t\t\t\tmaxlength: 11\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonChange: function (newv, oldv) {\r\n\t\t\t\t\t\t\t\t\t\tif (newv == undefined) return;\r\n\t\t\t\t\t\t\t\t\t\tif (newv == \"\") return;\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (newv.length != 11) {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: \"Độ dài mẫu số phải là 11 ký tự\" });\r\n\t\t\t\t\t\t\t\t\t\t\tthis.focus();\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar txtHinhThuc = $$(\"hinhthuc_dmmauhoadon\");\r\n\t\t\t\t\t\t\t\t\t\tvar txtLoaihd = $$(\"dmloaihd_id_dmmauhoadon\");\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (txtHinhThuc.getValue() == \"\") {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: \"Bạn chưa chọn hình thức hóa đơn\" });\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (txtLoaihd.getValue() == \"\") {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: \"Bạn chưa chọn loại hóa đơn\" });\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar hinhthuc = txtHinhThuc.getValue();\r\n\t\t\t\t\t\t\t\t\t\tvar list = txtLoaihd.getList();\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar selectedItem = list.getItem(txtLoaihd.getValue());\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (selectedItem == undefined) return;\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar ma_loai = selectedItem.code;\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar so_lien = hinhthuc == \"E\" ? 0 : \"\";\r\n\t\t\t\t\t\t\t\t\t\tvar mau_so = ma_loai + so_lien + \"/\";\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (newv.startsWith(mau_so) == false) {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: \"Mẫu số không đúng\" });\r\n\t\t\t\t\t\t\t\t\t\t\tthis.focus();\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar sttMau = newv.substring(newv.length - 3, newv.length);\r\n\t\t\t\t\t\t\t\t\t\tvar patt = /^[0-9][0-9][0-9]$/;\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (patt.test(sttMau) == false) {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: \"3 ký tự cuối phải là số\" });\r\n\t\t\t\t\t\t\t\t\t\t\tthis.focus();\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\t\t\tlabel: \"Ký hiệu\",\r\n\t\t\t\t\t\t\t\tname: \"invoice_series\",\r\n\t\t\t\t\t\t\t\tlabelWidth: 110,\r\n\t\t\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\t\t\tinvalidMessage: \"Ký hiệu không được bỏ trống\",\r\n\t\t\t\t\t\t\t\tattributes: {\r\n\t\t\t\t\t\t\t\t\tmaxlength: 6\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonChange: function (newv, oldv) {\r\n\t\t\t\t\t\t\t\t\t\tif (newv == undefined) return;\r\n\t\t\t\t\t\t\t\t\t\tif (newv == \"\") return;\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (newv.length != 6) {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: \"Độ dài ký hiệu phải là 6 ký tự\" });\r\n\t\t\t\t\t\t\t\t\t\t\tthis.focus();\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar patt = /^[A,B,C,D,E,G,H,K,L,M,N,P,Q,R,S,T,U,V,X,Y][A,B,C,D,E,G,H,K,L,M,N,P,Q,R,S,T,U,V,X,Y][/]$/;\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (patt.test(newv.substring(0, 3)) == false) {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: \"3 ký tự đầu không đúng\" });\r\n\t\t\t\t\t\t\t\t\t\t\tthis.focus();\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tpatt = /^[0-9][0-9]$/;\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar nam = newv.substring(3, 5);\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (patt.test(nam) == false) {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: \"2 ký tự năm không đúng\" });\r\n\t\t\t\t\t\t\t\t\t\t\tthis.focus();\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\t\t\t\t\t\tvar year = now.getFullYear();\r\n\r\n\t\t\t\t\t\t\t\t\t\tnam = Number(\"20\" + nam);\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (nam < (year - 1) || nam > year) {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: \"Năm ký hiệu không đúng\" });\r\n\t\t\t\t\t\t\t\t\t\t\tthis.focus();\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (newv.substring(5, 6) != \"E\") {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: \"Ký tự cuối phải là E\" });\r\n\t\t\t\t\t\t\t\t\t\t\tthis.focus();\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\t\t\tlabel: \"Số liên\",\r\n\t\t\t\t\t\t\t\tname: \"copy_number\",\r\n\t\t\t\t\t\t\t\tid: \"so_lien_dmmauhoadon\",\r\n\t\t\t\t\t\t\t\tlabelWidth: 90,\r\n\t\t\t\t\t\t\t\thidden: true,\r\n\t\t\t\t\t\t\t\tvalue: 0\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\t\t\tlabel: \"Số dòng in mẫu\",\r\n\t\t\t\t\t\t\t\tname: \"row_print_template\",\r\n\t\t\t\t\t\t\t\tlabelWidth: 110,\r\n\t\t\t\t\t\t\t\thidden: true,\r\n\t\t\t\t\t\t\t\tvalue: 10\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t/* {\r\n\t\t\t\t\t\tborderless: true,\r\n\t\t\t\t\t\tview: \"tabview\",\r\n\t\t\t\t\t\tscrollX: true,\r\n\t\t\t\t\t\tcells: [\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\theader: \"Thông tin mẫu hóa đơn\",\r\n\t\t\t\t\t\t\t\tselect: \"cell\",\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\trows: [\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\theader: \"Tiêu đề liên\",\r\n\t\t\t\t\t\t\t\tselect: \"cell\",\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\trows: [\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tview: \"text\", label: \"Liên 1\", name: \"copy1\", width: 300\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tview: \"text\", label: \"Liên 2\", name: \"copy2\", width: 300\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t]\r\n\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tview: \"text\", label: \"Liên 3\", name: \"copy3\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tview: \"text\", label: \"Liên 4\", name: \"copy4\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t]\r\n\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tview: \"text\", label: \"Liên 5\", name: \"copy5\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tview: \"text\", label: \"Liên 6\", name: \"copy6\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t]\r\n\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tview: \"text\", label: \"Liên 7\", name: \"copy7\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tview: \"text\", label: \"Liên 8\", name: \"copy8\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t]\r\n\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tview: \"text\", label: \"Liên 9\", name: \"copy9\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t{}\r\n\t\t\t\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t]\t\t\t\t\t\t\r\n\t\t\t\t\t}, */\r\n\t\t\t\t\t{},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tshortcut: \"F10\", view: \"button\", label: \"Lưu (F10)\", type: \"form\", align: \"center\", width: 120,\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"mauhoadon-form\");\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (form.validate() == false) return;\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar khData = {};\r\n\r\n\t\t\t\t\t\t\t\t\t\tkhData.windowid = app.path[1].params[0];\r\n\t\t\t\t\t\t\t\t\t\tkhData.editmode = editmode;\r\n\t\t\t\t\t\t\t\t\t\tkhData.data = [];\r\n\r\n\t\t\t\t\t\t\t\t\t\tkhData.data.push(item);\r\n\r\n\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t.post(app.config.host + \"/System/Save\", khData, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar json = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!json.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"mauhoadon-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tapp.callEvent(\"dataChanged\", [editmode, json.data]);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif(json.hasOwnProperty(\"ok\") && editmode == 1 && json.ok == \"true\")\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(\"Thêm mới mẫu hóa đơn thành công!\", \"success\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(json.error);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", type: \"danger\", align: \"center\", width: 120,\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\twebix.$$(\"mauhoadon-win\").close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t]\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tsetEditMode: function (mode) {\r\n\t\t\teditmode = mode;\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/forms/phanquyen',[\"app\",\"locale\"],function(app,_){\r\n\t\r\n\tfunction initUI(item){\r\n\t\t\r\n\t\tvar url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n\t\twebix.ajax()\r\n\t\t\t.headers({'Content-type':'application/json'})\r\n\t\t\t.post(url,\r\n\t\t\t\t{\r\n\t\t\t\t\tcommand:\"CM00003\",\r\n\t\t\t\t\tparameter:{\r\n\t\t\t\t\t\twb_nhomquyen_id: item.id\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t,function(text){\r\n var json = JSON.parse(text);\r\n\t\t\tvar data = listToTree(json, { idKey: \"id\", parentId: \"parent_id\" });\r\n\t\t\t\r\n\t\t\tvar trtChucNang = $$(\"trtChucNang\");\r\n\r\n\t\t\ttrtChucNang.parse(data,\"json\");\r\n\t\t\ttrtChucNang.openAll();\r\n\r\n\t\t\tfor(var i=0;i\" + _(\"TEN_CHUC_NANG\"),\r\n\t\t\t\t\t\t\t\t\t\t\ttemplate : \"{common.space()} {common.icon()} {common.treecheckbox()} #name#\",\r\n\t\t\t\t\t\t\t\t\t\t\tfillspace:true\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid:\"them\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: [ {text:\"\", content:\"masterCheckbox\" }, _(\"THEM\")],\r\n\t\t\t\t\t\t\t\t\t\t\twidth:55,\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue:'C', \r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue:'K', \r\n\t\t\t\t\t\t\t\t\t\t\ttemplate: function(obj,common,value, config) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (obj.$count>0){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn \"\";\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn common.checkbox(obj, common,value, config);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid:\"sua\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: [ {text:\"\", content:\"masterCheckbox\" }, _(\"SUA\")],\r\n\t\t\t\t\t\t\t\t\t\t\twidth:55,\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue:'C', \r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue:'K', \r\n\t\t\t\t\t\t\t\t\t\t\ttemplate: function(obj,common,value, config) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (obj.$count>0){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn \"\";\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn common.checkbox(obj, common,value, config);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid:\"xoa\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: [ {text:\"\", content:\"masterCheckbox\" }, _(\"XOA\")],\r\n\t\t\t\t\t\t\t\t\t\t\twidth:55,\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue:'C', \r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue:'K', \r\n\t\t\t\t\t\t\t\t\t\t\ttemplate: function(obj,common,value, config) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (obj.$count>0){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn \"\";\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn common.checkbox(obj, common,value, config);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t\t\ton:{\r\n\t\t\t\t\t\t\t\t\t\tonHeaderClick:function(id, e, node){\r\n\t\t\t\t\t\t\t\t\t\t\tif (e.target.className == \"chkBox\"){\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar chk=document.getElementById(\"chkBox\").checked;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar trtChucNang = $$(\"trtChucNang\");\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\ttrtChucNang.openAll();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar json = trtChucNang.serialize();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tfor(var i=0;i\" +_(\"CHON_BOCHON\"),\r\n\t\t\t\t\t\t\t\t\t\t\ttemplate : \"{common.space()} {common.icon()} {common.treecheckbox()} #name#\",\r\n\t\t\t\t\t\t\t\t\t\t\tfillspace:true\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t}\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t\t\ton:{\r\n\t\t\t\t\t\t\t\t\t\tonHeaderClick:function(id, e, node){\r\n\t\t\t\t\t\t\t\t\t\t\tif (e.target.className == \"chkBox\"){\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar chk=document.getElementById(\"chkBox\").checked;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar trtBaoCao = $$(\"trtBaoCao\");\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\ttrtBaoCao.openAll();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar json = trtBaoCao.serialize();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tfor(var i=0;iBiên lai chưa gửi cho khách hàng !\";\r\n return (\r\n \"Biên lai đã được gửi \" +\r\n obj.value +\r\n \" lần ! Lịch sử gửi email \"\r\n );\r\n },\r\n on: {\r\n onItemClick: function () {\r\n var inv_invoiceauth_id = \"\";\r\n var table = webix.$$(\"windowData\");\r\n if (table === undefined || table === null) {\r\n table = webix.$$(\"invoiceViews\");\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.hdon_id;\r\n } else {\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.inv_invoiceauth_id;\r\n }\r\n\r\n var detailForm = $$(\"dmtab-win\").$scope.ui(his_email.$ui);\r\n his_email.initUI(inv_invoiceauth_id);\r\n detailForm.show();\r\n },\r\n },\r\n },\r\n {\r\n name: \"noidung\",\r\n view: \"ckeditor\",\r\n keepViews: true,\r\n label: _(\"NOI_DUNG\"),\r\n labelPosition: \"top\",\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Gửi (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"dmtab-form\");\r\n var item = form.getValues();\r\n var url = app.config.host + \"/Invoice/SendInvoiceByEmail\";\r\n console.log(itemdoc);\r\n if (itemdoc.hdon68 == 1) {\r\n url = app.config.host + \"/Invoice68/SendInvoiceByEmail\";\r\n }\r\n\r\n if ($$(\"dmtab-form\").validate()) {\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, item, function (text) {\r\n var form = webix.$$(\"dmtab-form\");\r\n\r\n form.enable();\r\n form.hideProgress();\r\n\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi Email thành công !\", \"debug\");\r\n\r\n var item = form.getValues();\r\n var topParentView = form.getTopParentView();\r\n\r\n if (topParentView.config.tableId != undefined) {\r\n var table = $$(topParentView.config.tableId);\r\n\r\n var item = table.getSelectedItem();\r\n item.trang_thai = \"Chờ người mua ký\";\r\n table.updateItem(item.id, item);\r\n }\r\n\r\n webix.$$(\"dmtab-win\").close();\r\n } else {\r\n webix.message(data.error);\r\n }\r\n });\r\n } else {\r\n $$(\"nguoinhan\").focus();\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"dmtab-win\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setValues: function (values) {\r\n itemdoc = values;\r\n $$(\"dmtab-form\").setValues(values);\r\n // var k = [{ \"id\": \"hungkq@minvoice.vn\", \"value\": \"hungkq@minvoice.vn\" }, { \"id\": \"khieuhung.kt@gmail.com\", \"value\": \"khieuhung.kt@gmail.com\" }, { \"id\": \"abc@gmail.com\", \"value\": \"abc@gmail.com\" }, { \"id\": \"xyz@gmail.com\", \"value\": \"xyz@gmail.com\" }];\r\n // $$(\"nguoinhan_suggest\").define(\"data\", k);\r\n if (values.nguoinhan != null && values.nguoinhan != \"\") {\r\n var k = [{ id: values.nguoinhan, value: values.nguoinhan }];\r\n $$(\"nguoinhan_suggest\").define(\"data\", k);\r\n }\r\n if (values.hasOwnProperty(\"lst_email\")) {\r\n $$(\"nguoinhan_suggest\").define(\"data\", values.lst_email);\r\n }\r\n\r\n // $$(\"dmtab-form\").setValues(values);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/sendemail',[\"app\", \"locale\", \"views/forms/lichsuemail\"], function (app, _, his_email) {\r\n var editmode = 0;\r\n var itemdoc;\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n id: \"dmtab-win\",\r\n position: \"center\",\r\n head: \"Gửi hóa đơn cho khách hàng qua email\",\r\n fullscreen: true,\r\n //height: 700,\r\n //width: 1000,\r\n keepViews: true,\r\n move: true,\r\n body: {\r\n paddingY: 5,\r\n paddingX: 5,\r\n view: \"form\",\r\n id: \"dmtab-form\",\r\n // on: {\r\n // \tonItemClick: function (id) {\r\n // \t\tif (id == \"his_email\") {\r\n // \t\t\tvar detailForm = $$(\"dmtab-win\").$scope.ui(his_email.$ui);\r\n // \t\t\tdetailForm.show();\r\n // \t\t}\r\n // \t}\r\n // },\r\n elements: [\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin gửi mail\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"nguoi_gui\",\r\n label: _(\"NGUOI_GUI\"),\r\n labelPosition: \"top\",\r\n required: true,\r\n validate: webix.rules.isNotEmpty,\r\n invalidMessage: \"Người gửi không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n name: \"alias\",\r\n label: _(\"Bí Danh\"),\r\n labelPosition: \"top\",\r\n // required: true,\r\n validate: webix.rules.isNotEmpty,\r\n invalidMessage: \"Tên hiển thị không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n name: \"mat_khau\",\r\n label: _(\"PASSWORD\"),\r\n type: \"password\",\r\n labelPosition: \"top\",\r\n required: true,\r\n validate: webix.rules.isNotEmpty,\r\n invalidMessage: \"Mật khẩu không được để trống !\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n // {\r\n // \tview: \"text\",\r\n // \tname: \"nguoinhan\",\r\n // \tid: \"nguoinhan\",\r\n // \tlabel: _(\"NGUOI_NHAN\"),\r\n // \tlabelPosition: \"top\",\r\n // \trequired: true,\r\n // \tvalidate: webix.rules.isNotEmpty,\r\n // \tinvalidMessage: \"Người nhận không được để trống !\"\r\n // },\r\n {\r\n view: \"multicombo\",\r\n name: \"nguoinhan\",\r\n id: \"nguoinhan\",\r\n label: _(\"NGUOI_NHAN\"),\r\n labelPosition: \"top\",\r\n required: true,\r\n validate: webix.rules.isNotEmpty,\r\n invalidMessage: \"Người nhận không được để trống !\",\r\n newValues: true,\r\n separator: \";\",\r\n suggest: {\r\n selectAll: true,\r\n\r\n body: {\r\n id: \"nguoinhan_suggest\",\r\n //data: [{\"id\":\"hungkq@minvoice.vn\",\"value\":\"hungkq@minvoice.vn\"},{\"id\":\"khieuhung.kt@gmail.com\",\"value\":\"khieuhung.kt@gmail.com\"},{\"id\":\"abc@gmail.com\",\"value\":\"abc@gmail.com\"},{\"id\":\"xyz@gmail.com\",\"value\":\"xyz@gmail.com\"}]\r\n //url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00050\",\r\n //template: webix.template(\"#value#\")\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n name: \"bcc\",\r\n label: \"BCC\",\r\n labelPosition: \"top\",\r\n },\r\n ],\r\n },\r\n {\r\n view: \"text\",\r\n name: \"tieude\",\r\n label: _(\"TIEU_DE\"),\r\n labelPosition: \"top\",\r\n },\r\n ],\r\n },\r\n },\r\n {\r\n view: \"label\",\r\n name: \"his_email\",\r\n id: \"his_email\",\r\n //label: \"Hóa đơn đã được gửi đi 5 lần\",\r\n template: function (obj) {\r\n if (obj.value == 0) return \"Hóa đơn chưa gửi cho khách hàng !\";\r\n return (\r\n \"Hóa đơn đã được gửi \" +\r\n obj.value +\r\n \" lần ! Lịch sử gửi email \"\r\n );\r\n },\r\n on: {\r\n onItemClick: function () {\r\n var inv_invoiceauth_id = \"\";\r\n var table = webix.$$(\"windowData\");\r\n if (table === undefined || table === null) {\r\n table = webix.$$(\"invoiceViews\");\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.hdon_id;\r\n } else {\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.inv_invoiceauth_id;\r\n }\r\n\r\n var detailForm = $$(\"dmtab-win\").$scope.ui(his_email.$ui);\r\n his_email.initUI(inv_invoiceauth_id);\r\n detailForm.show();\r\n },\r\n },\r\n },\r\n {\r\n name: \"noidung\",\r\n view: \"ckeditor\",\r\n keepViews: true,\r\n label: _(\"NOI_DUNG\"),\r\n labelPosition: \"top\",\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Gửi (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"dmtab-form\");\r\n var item = form.getValues();\r\n var url = app.config.host + \"/Invoice/SendInvoiceByEmail\";\r\n console.log(itemdoc);\r\n if (itemdoc.hdon68 == 1) {\r\n url = app.config.host + \"/Invoice68/SendInvoiceByEmail\";\r\n }\r\n\r\n if ($$(\"dmtab-form\").validate()) {\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, item, function (text) {\r\n var form = webix.$$(\"dmtab-form\");\r\n\r\n form.enable();\r\n form.hideProgress();\r\n\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi Email thành công !\", \"debug\");\r\n\r\n var item = form.getValues();\r\n var topParentView = form.getTopParentView();\r\n\r\n if (topParentView.config.tableId != undefined) {\r\n var table = $$(topParentView.config.tableId);\r\n\r\n var item = table.getSelectedItem();\r\n item.trang_thai = \"Chờ người mua ký\";\r\n table.updateItem(item.id, item);\r\n }\r\n\r\n webix.$$(\"dmtab-win\").close();\r\n } else {\r\n webix.message(data.error);\r\n }\r\n });\r\n } else {\r\n $$(\"nguoinhan\").focus();\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"dmtab-win\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setValues: function (values) {\r\n itemdoc = values;\r\n $$(\"dmtab-form\").setValues(values);\r\n // var k = [{ \"id\": \"hungkq@minvoice.vn\", \"value\": \"hungkq@minvoice.vn\" }, { \"id\": \"khieuhung.kt@gmail.com\", \"value\": \"khieuhung.kt@gmail.com\" }, { \"id\": \"abc@gmail.com\", \"value\": \"abc@gmail.com\" }, { \"id\": \"xyz@gmail.com\", \"value\": \"xyz@gmail.com\" }];\r\n // $$(\"nguoinhan_suggest\").define(\"data\", k);\r\n if (values.nguoinhan != null && values.nguoinhan != \"\") {\r\n var k = [{ id: values.nguoinhan, value: values.nguoinhan }];\r\n $$(\"nguoinhan_suggest\").define(\"data\", k);\r\n }\r\n if (values.hasOwnProperty(\"lst_email\")) {\r\n $$(\"nguoinhan_suggest\").define(\"data\", values.lst_email);\r\n }\r\n\r\n // $$(\"dmtab-form\").setValues(values);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/sendemailbienlai',[\"app\", \"locale\", \"views/forms/lichsuemail\"], function (app, _, his_email) {\r\n var editmode = 0;\r\n var itemdoc;\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n id: \"dmtab-win\",\r\n position: \"center\",\r\n head: \"Gửi biên lai cho khách hàng qua email\",\r\n fullscreen: true,\r\n //height: 700,\r\n //width: 1000,\r\n keepViews: true,\r\n move: true,\r\n body: {\r\n paddingY: 5,\r\n paddingX: 5,\r\n view: \"form\",\r\n id: \"dmtab-form\",\r\n // on: {\r\n // \tonItemClick: function (id) {\r\n // \t\tif (id == \"his_email\") {\r\n // \t\t\tvar detailForm = $$(\"dmtab-win\").$scope.ui(his_email.$ui);\r\n // \t\t\tdetailForm.show();\r\n // \t\t}\r\n // \t}\r\n // },\r\n elements: [\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin gửi mail\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"nguoi_gui\",\r\n label: _(\"NGUOI_GUI\"),\r\n labelPosition: \"top\",\r\n required: true,\r\n validate: webix.rules.isNotEmpty,\r\n invalidMessage: \"Người gửi không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n name: \"alias\",\r\n label: _(\"Bí Danh\"),\r\n labelPosition: \"top\",\r\n // required: true,\r\n validate: webix.rules.isNotEmpty,\r\n invalidMessage: \"Tên hiển thị không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n name: \"mat_khau\",\r\n label: _(\"PASSWORD\"),\r\n type: \"password\",\r\n labelPosition: \"top\",\r\n required: true,\r\n validate: webix.rules.isNotEmpty,\r\n invalidMessage: \"Mật khẩu không được để trống !\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n // {\r\n // \tview: \"text\",\r\n // \tname: \"nguoinhan\",\r\n // \tid: \"nguoinhan\",\r\n // \tlabel: _(\"NGUOI_NHAN\"),\r\n // \tlabelPosition: \"top\",\r\n // \trequired: true,\r\n // \tvalidate: webix.rules.isNotEmpty,\r\n // \tinvalidMessage: \"Người nhận không được để trống !\"\r\n // },\r\n {\r\n view: \"multicombo\",\r\n name: \"nguoinhan\",\r\n id: \"nguoinhan\",\r\n label: _(\"NGUOI_NHAN\"),\r\n labelPosition: \"top\",\r\n required: true,\r\n validate: webix.rules.isNotEmpty,\r\n invalidMessage: \"Người nhận không được để trống !\",\r\n newValues: true,\r\n separator: \";\",\r\n suggest: {\r\n selectAll: true,\r\n\r\n body: {\r\n id: \"nguoinhan_suggest\",\r\n //data: [{\"id\":\"hungkq@minvoice.vn\",\"value\":\"hungkq@minvoice.vn\"},{\"id\":\"khieuhung.kt@gmail.com\",\"value\":\"khieuhung.kt@gmail.com\"},{\"id\":\"abc@gmail.com\",\"value\":\"abc@gmail.com\"},{\"id\":\"xyz@gmail.com\",\"value\":\"xyz@gmail.com\"}]\r\n //url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00050\",\r\n //template: webix.template(\"#value#\")\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n name: \"bcc\",\r\n label: \"BCC\",\r\n labelPosition: \"top\",\r\n },\r\n ],\r\n },\r\n {\r\n view: \"text\",\r\n name: \"tieude\",\r\n label: _(\"TIEU_DE\"),\r\n labelPosition: \"top\",\r\n },\r\n ],\r\n },\r\n },\r\n {\r\n view: \"label\",\r\n name: \"his_email\",\r\n id: \"his_email\",\r\n //label: \"Hóa đơn đã được gửi đi 5 lần\",\r\n template: function (obj) {\r\n if (obj.value == 0) return \"Biên lai chưa gửi cho khách hàng !\";\r\n return (\r\n \"Biên lai đã được gửi \" +\r\n obj.value +\r\n \" lần ! Lịch sử gửi email \"\r\n );\r\n },\r\n on: {\r\n onItemClick: function () {\r\n var inv_invoiceauth_id = \"\";\r\n var table = webix.$$(\"windowData\");\r\n if (table === undefined || table === null) {\r\n table = webix.$$(\"invoiceViews\");\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.hdon_id;\r\n } else {\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.inv_invoiceauth_id;\r\n }\r\n\r\n var detailForm = $$(\"dmtab-win\").$scope.ui(his_email.$ui);\r\n his_email.initUI(inv_invoiceauth_id);\r\n detailForm.show();\r\n },\r\n },\r\n },\r\n {\r\n name: \"noidung\",\r\n view: \"ckeditor\",\r\n keepViews: true,\r\n label: _(\"NOI_DUNG\"),\r\n labelPosition: \"top\",\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Gửi (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"dmtab-form\");\r\n var item = form.getValues();\r\n var url = app.config.host + \"/Invoice/SendInvoiceByEmail\";\r\n console.log(itemdoc);\r\n if (itemdoc.hdon68 == 1) {\r\n url = app.config.host + \"/Invoice68/SendInvoiceByEmail\";\r\n }\r\n\r\n if ($$(\"dmtab-form\").validate()) {\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, item, function (text) {\r\n var form = webix.$$(\"dmtab-form\");\r\n\r\n form.enable();\r\n form.hideProgress();\r\n\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi Email thành công !\", \"debug\");\r\n\r\n var item = form.getValues();\r\n var topParentView = form.getTopParentView();\r\n\r\n if (topParentView.config.tableId != undefined) {\r\n var table = $$(topParentView.config.tableId);\r\n\r\n var item = table.getSelectedItem();\r\n item.trang_thai = \"Chờ người mua ký\";\r\n table.updateItem(item.id, item);\r\n }\r\n\r\n webix.$$(\"dmtab-win\").close();\r\n } else {\r\n webix.message(data.error);\r\n }\r\n });\r\n } else {\r\n $$(\"nguoinhan\").focus();\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"dmtab-win\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setValues: function (values) {\r\n itemdoc = values;\r\n $$(\"dmtab-form\").setValues(values);\r\n // var k = [{ \"id\": \"hungkq@minvoice.vn\", \"value\": \"hungkq@minvoice.vn\" }, { \"id\": \"khieuhung.kt@gmail.com\", \"value\": \"khieuhung.kt@gmail.com\" }, { \"id\": \"abc@gmail.com\", \"value\": \"abc@gmail.com\" }, { \"id\": \"xyz@gmail.com\", \"value\": \"xyz@gmail.com\" }];\r\n // $$(\"nguoinhan_suggest\").define(\"data\", k);\r\n if (values.nguoinhan != null && values.nguoinhan != \"\") {\r\n var k = [{ id: values.nguoinhan, value: values.nguoinhan }];\r\n $$(\"nguoinhan_suggest\").define(\"data\", k);\r\n }\r\n if (values.hasOwnProperty(\"lst_email\")) {\r\n $$(\"nguoinhan_suggest\").define(\"data\", values.lst_email);\r\n }\r\n\r\n // $$(\"dmtab-form\").setValues(values);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/sendemailtncn',[\"app\", \"locale\", \"views/forms/lichsuemail\"], function (app, _, his_email) {\r\n var editmode = 0;\r\n var itemdoc;\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n id: \"dmtab-win\",\r\n position: \"center\",\r\n head: \"Gửi chứng từ cho khách hàng qua email\",\r\n fullscreen: true,\r\n //height: 700,\r\n //width: 1000,\r\n keepViews: true,\r\n move: true,\r\n body: {\r\n paddingY: 5,\r\n paddingX: 5,\r\n view: \"form\",\r\n id: \"dmtab-form\",\r\n // on: {\r\n // \tonItemClick: function (id) {\r\n // \t\tif (id == \"his_email\") {\r\n // \t\t\tvar detailForm = $$(\"dmtab-win\").$scope.ui(his_email.$ui);\r\n // \t\t\tdetailForm.show();\r\n // \t\t}\r\n // \t}\r\n // },\r\n elements: [\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin gửi mail\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"nguoi_gui\",\r\n label: _(\"NGUOI_GUI\"),\r\n labelPosition: \"top\",\r\n required: true,\r\n validate: webix.rules.isNotEmpty,\r\n invalidMessage: \"Người gửi không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n name: \"alias\",\r\n label: _(\"Bí Danh\"),\r\n labelPosition: \"top\",\r\n // required: true,\r\n validate: webix.rules.isNotEmpty,\r\n invalidMessage: \"Tên hiển thị không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n name: \"mat_khau\",\r\n label: _(\"PASSWORD\"),\r\n type: \"password\",\r\n labelPosition: \"top\",\r\n required: true,\r\n validate: webix.rules.isNotEmpty,\r\n invalidMessage: \"Mật khẩu không được để trống !\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n // {\r\n // \tview: \"text\",\r\n // \tname: \"nguoinhan\",\r\n // \tid: \"nguoinhan\",\r\n // \tlabel: _(\"NGUOI_NHAN\"),\r\n // \tlabelPosition: \"top\",\r\n // \trequired: true,\r\n // \tvalidate: webix.rules.isNotEmpty,\r\n // \tinvalidMessage: \"Người nhận không được để trống !\"\r\n // },\r\n {\r\n view: \"multicombo\",\r\n name: \"nguoinhan\",\r\n id: \"nguoinhan\",\r\n label: _(\"NGUOI_NHAN\"),\r\n labelPosition: \"top\",\r\n required: true,\r\n validate: webix.rules.isNotEmpty,\r\n invalidMessage: \"Người nhận không được để trống !\",\r\n newValues: true,\r\n separator: \";\",\r\n suggest: {\r\n selectAll: true,\r\n\r\n body: {\r\n id: \"nguoinhan_suggest\",\r\n //data: [{\"id\":\"hungkq@minvoice.vn\",\"value\":\"hungkq@minvoice.vn\"},{\"id\":\"khieuhung.kt@gmail.com\",\"value\":\"khieuhung.kt@gmail.com\"},{\"id\":\"abc@gmail.com\",\"value\":\"abc@gmail.com\"},{\"id\":\"xyz@gmail.com\",\"value\":\"xyz@gmail.com\"}]\r\n //url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00050\",\r\n //template: webix.template(\"#value#\")\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n name: \"bcc\",\r\n label: \"BCC\",\r\n labelPosition: \"top\",\r\n },\r\n ],\r\n },\r\n {\r\n view: \"text\",\r\n name: \"tieude\",\r\n label: _(\"TIEU_DE\"),\r\n labelPosition: \"top\",\r\n },\r\n ],\r\n },\r\n },\r\n {\r\n view: \"label\",\r\n name: \"his_email\",\r\n id: \"his_email\",\r\n //label: \"Hóa đơn đã được gửi đi 5 lần\",\r\n template: function (obj) {\r\n if (obj.value == 0) return \"Chứng từ chưa gửi cho khách hàng !\";\r\n return (\r\n \"Chứng từ đã được gửi \" +\r\n obj.value +\r\n \" lần ! Lịch sử gửi email \"\r\n );\r\n },\r\n on: {\r\n onItemClick: function () {\r\n var inv_invoiceauth_id = \"\";\r\n var table = webix.$$(\"windowData\");\r\n if (table === undefined || table === null) {\r\n table = webix.$$(\"invoiceViews\");\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.hdon_id;\r\n } else {\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.inv_invoiceauth_id;\r\n }\r\n\r\n var detailForm = $$(\"dmtab-win\").$scope.ui(his_email.$ui);\r\n his_email.initUI(inv_invoiceauth_id);\r\n detailForm.show();\r\n },\r\n },\r\n },\r\n {\r\n name: \"noidung\",\r\n view: \"ckeditor\",\r\n keepViews: true,\r\n label: _(\"NOI_DUNG\"),\r\n labelPosition: \"top\",\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Gửi (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"dmtab-form\");\r\n var item = form.getValues();\r\n var url = app.config.host + \"/Invoice/SendInvoiceByEmail\";\r\n console.log(itemdoc);\r\n if (itemdoc.hdon68 == 1) {\r\n url = app.config.host + \"/Invoice68/SendInvoiceByEmail\";\r\n }\r\n\r\n if ($$(\"dmtab-form\").validate()) {\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, item, function (text) {\r\n var form = webix.$$(\"dmtab-form\");\r\n\r\n form.enable();\r\n form.hideProgress();\r\n\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi Email thành công !\", \"debug\");\r\n\r\n var item = form.getValues();\r\n var topParentView = form.getTopParentView();\r\n\r\n if (topParentView.config.tableId != undefined) {\r\n var table = $$(topParentView.config.tableId);\r\n\r\n var item = table.getSelectedItem();\r\n item.trang_thai = \"Chờ người mua ký\";\r\n table.updateItem(item.id, item);\r\n }\r\n\r\n webix.$$(\"dmtab-win\").close();\r\n } else {\r\n webix.message(data.error);\r\n }\r\n });\r\n } else {\r\n $$(\"nguoinhan\").focus();\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"dmtab-win\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setValues: function (values) {\r\n itemdoc = values;\r\n $$(\"dmtab-form\").setValues(values);\r\n // var k = [{ \"id\": \"hungkq@minvoice.vn\", \"value\": \"hungkq@minvoice.vn\" }, { \"id\": \"khieuhung.kt@gmail.com\", \"value\": \"khieuhung.kt@gmail.com\" }, { \"id\": \"abc@gmail.com\", \"value\": \"abc@gmail.com\" }, { \"id\": \"xyz@gmail.com\", \"value\": \"xyz@gmail.com\" }];\r\n // $$(\"nguoinhan_suggest\").define(\"data\", k);\r\n if (values.nguoinhan != null && values.nguoinhan != \"\") {\r\n var k = [{ id: values.nguoinhan, value: values.nguoinhan }];\r\n $$(\"nguoinhan_suggest\").define(\"data\", k);\r\n }\r\n if (values.hasOwnProperty(\"lst_email\")) {\r\n $$(\"nguoinhan_suggest\").define(\"data\", values.lst_email);\r\n }\r\n\r\n // $$(\"dmtab-form\").setValues(values);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/templatewindow',[\r\n\t\"app\",\r\n\t\"locale\",\r\n\t\"models/user\",\r\n\t\"views/forms/editwindow\",\r\n\t\"views/forms/selectwindow\"\r\n],function(app,_,user,editwindow,selectwindow){\r\n\tvar editmode = 0;\t\r\n var tables = [];\r\n\r\n\tvar windowno = app.path[1].params[0];\r\n var col=[];\r\n\tvar rw =[];\t\t\t\t\t\r\n\tvar el = [];\r\n\tvar head_name=[];\r\n\tvar head;\r\n\tvar url = app.config.host + \"/api/System/GetAllByWindowNo?window_id=\" + windowno;\r\n\t\t \r\n\treturn {\t\t\r\n\t\t$ui:{\r\n\t\t\tview:\"window\", modal:true, id:\"window-win\", position:\"center\",\r\n\t\t\t//width:800,\r\n\t\t\thead:\"Thông tin khách hàng\",\r\n\t\t\t//fullscreen:true,\t\t\t\r\n\t\t\tbody:{\r\n paddingY:10, \r\n paddingX:10, \r\n view:\"form\", \r\n\t\t\t\tid:\"window-form\", \r\n\t\t\t\tcomplexData:true,\r\n\t\t\t\tmargin:0,\r\n\t\t\t\tborderless:true,\r\n elements:el\t\t\t\t\r\n\t\t\t}\t\t\t\r\n\t\t},\t\r\n\t\tinitUI: function(windowconfig) {\r\n\t\t\t\r\n\t\t\tvar rp = windowconfig;\r\n\t\t\tvar rows_max = rp['data'][0]['rows_max'];\r\n\t\t\tvar vc_window = rp[\"data\"][0];\r\n\t\t\tvar tabs = vc_window.Tabs;\r\n\r\n\t\t\tvar win = $$(vc_window.window_id);\r\n\r\n\t\t\tif (typeof win.showProgress === \"undefined\")\r\n\t\t\t\twebix.extend(win, webix.ProgressBar);\r\n\t\t\t\r\n\t\t\tel = [];\r\n\t\t\tcol = [] ;\t\t\t\r\n\r\n\t\t\tif (vc_window.width==null && vc_window.height==null){\r\n\t\t\t\twin.config.fullscreen = true;\t\t\t\t\r\n\t\t\t}\r\n\r\n\t\t\tif (vc_window.after_save!=null){\r\n\t\t\t\twin.config.after_save = vc_window.after_save;\r\n\t\t\t}\r\n\r\n\t\t\tvar layoutdetail = vc_window.layoutdetail;\r\n\t\t\twebix.ui(JSON.parse(layoutdetail),$$(\"window-form\"));\r\n\r\n\t\t\tvar fields = rp['data'][0]['Tabs'][0]['Fields'];\r\n\r\n\t\t\tfor(var i=0;i0){\r\n\r\n\t\t\t\t\t\t\t\t\tjson[0].editorId = this.editorId;\r\n\t\t\t\t\t\t\t\t\tjson[0].formId = this.formId;\r\n\t\t\t\t\t\t\t\t\tjson[0].fieldExpression = this.fieldExpression;\r\n\t\t\t\t\t\t\t\t\tjson[0].editmode = this.editmode;\r\n\t\t\t\t\t\t\t\t\tjson[0].editorvalue = this.editorvalue;\r\n\t\t\t\t\t\t\t\t\tjson[0].suggest = this.suggest;\r\n\r\n\t\t\t\t\t\t\t\t\tvar windowno = json[0].WINDOWNO;\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/api/System/GetAllByWindowNo?window_id=\"+windowno ;\r\n\t\t\t\t\t\t\t\t\tvar a = webix.ajax(url);\r\n\t\t\t\t\t\t\t\t\turl = app.config.host +\"/api/System/GetDataByReferences?id=\"+json[0].id+\"&value_field=\" + this.editorvalue;\r\n\t\t\t\t\t\t\t\t\tvar b = webix.ajax(url);\r\n\t\t\t\t\t\t\t\t\tvar c= this.editmode;\r\n\t\t\t\t\t\t\t\t\tvar d = json[0];\r\n\r\n\t\t\t\t\t\t\t\t\twebix.promise.all([a,b,c,d]).then(function(results){\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tvar windowconfig = results[0].json();\r\n\t\t\t\t\t\t\t\t\t\tvar res_b = results[1].json();\r\n\t\t\t\t\t\t\t\t\t\tvar mode = results[2];\r\n\t\t\t\t\t\t\t\t\t\tvar master = results[3];\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar vc_window = windowconfig[\"data\"][0];\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (mode == 1){\r\n\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.id = vc_window.window_id;\r\n\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.editorId = master.editorId;\r\n\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.valueField = master.value_field;\r\n\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.fieldExpression = master.fieldExpression;\r\n\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.formId = master.formId;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tvar win = webix.ui(editwindow.$ui); \r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\teditwindow.initUI(windowconfig);\r\n\t\t\t\t\t\t\t\t\t\t\teditwindow.setEditMode(mode);\r\n\t\t\t\t\t\t\t\t\t\t\teditwindow.setValues(null,windowconfig);\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t$$(master.suggest).hide();\r\n\t\t\t\t\t\t\t\t\t\t\twin.show();\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\telse {\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tif (res_b.length == 0){\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.alert({\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: \"Thông báo\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttext: \"Không tìm thấy dữ liệu\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tvar ajax = webix.ajax();\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\tajax.master = {\r\n\t\t\t\t\t\t\t\t\t\t\t\tmaster: master,\r\n\t\t\t\t\t\t\t\t\t\t\t\tvc_window: vc_window\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/api/System/GetDataById?window_id=\"+ vc_window.window_id + \"&id=\"+res_b[0].doc_id;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tajax.get(url,function(text){\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar json = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar data = json.data[0];\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar vc_window = this.vc_window;\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar master = this.master;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.id = vc_window.window_id;\r\n\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.editorId = master.editorId;\r\n\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.valueField = master.value_field;\r\n\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.fieldExpression = master.fieldExpression;\r\n\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.formId = master.formId;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar win = webix.ui(editwindow.$ui); \r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\teditwindow.initUI(windowconfig);\r\n\t\t\t\t\t\t\t\t\t\t\t\teditwindow.setEditMode(2);\r\n\t\t\t\t\t\t\t\t\t\t\t\teditwindow.setValues(data,windowconfig);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(master.suggest).hide();\r\n\t\t\t\t\t\t\t\t\t\t\t\twin.show();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t});\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (item.value_change!=null || field.column_type == \"nvarchar\" || field.column_type == \"varchar\" || field.column_type == \"char\"){\r\n\t\t\t\t\titem.on.onChange = function(newv,oldv){\r\n\t\t\t\t\t\t\tvar data_width = this.config.data_width;\r\n\r\n\t\t\t\t\t\t\tif (data_width< newv.length){\r\n\t\t\t\t\t\t\t\twebix.message(\"Số lượng ký tự tối đa là \" + data_width.toString());\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (this.config.value_change!=null){\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tvar fn = Function(\"newv\",\"oldv\",\"id\",this.config.value_change);\r\n\t\t\t\t\t\t\t\tfn(newv,oldv,this.config.id);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\twebix.ui(item,$$(item.id));\r\n\t\t\t\t//el[row-1].cols.push(item);\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t}\r\n\r\n\t\t\tif (vc_window.window_type == \"MasterDetail\"){\r\n\r\n\t\t\t\tvar cells = [];\r\n\r\n for(var i=0;i0){\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tjson[0].editorId = this.editorId;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tjson[0].tableId = this.tableId;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tjson[0].fieldExpression = this.fieldExpression;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tjson[0].columnName = this.columnName;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tjson[0].editmode = this.editmode;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tjson[0].editorvalue = this.editorvalue;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tjson[0].suggest = this.suggest;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar windowno = json[0].WINDOWNO;\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/api/System/GetAllByWindowNo?window_id=\"+windowno ;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar a = webix.ajax(url);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\turl = app.config.host +\"/api/System/GetDataByReferences?id=\"+json[0].id+\"&value_field=\" + this.editorvalue;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar b = webix.ajax(url);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar c= this.editmode;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar d = json[0];\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.promise.all([a,b,c,d]).then(function(results){\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar windowconfig = results[0].json();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar res_b = results[1].json();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar mode = results[2];\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar master = results[3];\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar vc_window = windowconfig[\"data\"][0];\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (mode == 1){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.id = vc_window.window_id;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.editorId = master.editorId;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.valueField = master.value_field;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.fieldExpression = master.fieldExpression;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.formId = master.formId;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.tableId = master.tableId;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.columnName = master.columnName;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar win = webix.ui(editwindow.$ui); \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.initUI(windowconfig);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.setEditMode(mode);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.setValues(null,windowconfig);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(master.suggest).hide();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twin.show();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (res_b.length == 0){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.alert({\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: \"Thông báo\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttext: \"Không tìm thấy dữ liệu\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar ajax = webix.ajax();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tajax.master = {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaster: master,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvc_window: vc_window\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/api/System/GetDataById?window_id=\"+ vc_window.window_id + \"&id=\"+res_b[0].doc_id;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tajax.get(url,function(text){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar json = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar data = json.data[0];\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar vc_window = this.vc_window;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar master = this.master;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.id = vc_window.window_id;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.editorId = master.editorId;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.valueField = master.value_field;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.fieldExpression = master.fieldExpression;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.formId = master.formId;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.tableId = master.tableId;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.columnName = master.columnName;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar win = webix.ui(editwindow.$ui); \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.initUI(windowconfig);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.setEditMode(2);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.setValues(data,windowconfig);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(master.suggest).hide();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twin.show();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\tonSelectChange:function(){\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar selectedItem = this.getSelectedId();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (this.config.select_change!=null){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar fn = Function(\"selectedItem\",this.config.select_change);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfn(selectedItem);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t]\r\n \r\n }\r\n };\r\n\r\n cells.push(item);\r\n }\r\n\t\t\t\t}\r\n\t\t\t\t\r\n var subview = {\r\n borderless:true,\r\n view:\"tabview\",\r\n scrollX:true,\r\n\t\t\t\t\tcells: cells,\r\n\t\t\t\t\ttabbar:{\r\n\t\t\t\t\t\twidth:200\r\n\t\t\t\t\t}\t\t\t\t\t\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif (vc_window.width!=null || vc_window.height!=null){\r\n\t\t\t\t\tsubview.height = 250;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//el.push(subview);\r\n\t\t\t\t\r\n\t\t\t\tif (vc_window.row_tab!=null){\r\n\t\t\t\t\tel[vc_window.row_tab-1]=subview;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tel.push(subview);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n }\r\n\t\t\t\r\n\t\t\tvar cols = [\r\n\t\t\t\t{},\r\n\t\t\t\t{ \r\n\t\t\t\t\tshortcut:\"F10\", \r\n\t\t\t\t\tview:\"button\", label:\"Nhận\", type:\"form\", align:\"center\", \r\n\t\t\t\t\twidth:100,\r\n\t\t\t\t\ton: {\r\n\t\t\t\t\t\tonClick: function() {\r\n\t\t\t\t\t\t\tvar form = webix.$$(\"window-form\");\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tvar khData={};\r\n\r\n\t\t\t\t\t\t\tkhData.windowid=String(rp['data'][0]['window_id']);\r\n\t\t\t\t\t\t\tkhData.editmode=editmode;\r\n\t\t\t\t\t\t\tkhData.data=[];\r\n\r\n\t\t\t\t\t\t\tvar vc_window = rp['data'][0];\r\n\r\n\t\t\t\t\t\t\tif (vc_window.window_type == \"MasterDetail\"){\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tvar tabs = vc_window.Tabs;\r\n\t\t\t\t\t\t\t\tvar details = [];\r\n\r\n\t\t\t\t\t\t\t\tfor(var i=0;iSTT\", width: 50 },\r\n { id: \"code\", header: \"
Mã loại hóa đơn
\", width: 100 },\r\n { id: \"name\", header: \"
Tên loại hóa đơn
\", width: 160 },\r\n { id: \"mau_hd\", header: \"
Mẫu hóa đơn
\", width: 120 },\r\n { id: \"ky_hieu\", header: \"
Ký hiệu
\", width: 100 },\r\n {\r\n id: \"ton_dau_ky\", name: \"namdaika\", header: [\r\n {\r\n content: \"columnGroup\", closed: false, batch: \"ton_dau\",\r\n groupText: \"Tổng số tồn đầu kỳ\", colspan: 1\r\n },\r\n \"Tổng số \"], width: 150\r\n },\r\n {\r\n id: \"tu_so1\", header: [\r\n {\r\n content: \"columnGroup\", closed: false, batch: \"gr1\",\r\n groupText: \"Số tồn đầu kỳ\", colspan: 2\r\n },\r\n \"Từ số\"]\r\n },\r\n { id: \"den_so1\", batch: \"gr1\", header: [null, \"Đến số\"] },\r\n {\r\n id: \"tu_so2\", header: [\r\n {\r\n content: \"columnGroup\", closed: false, batch: \"gr2\",\r\n groupText: \"Số mua/phát hành trong kỳ\", colspan: 2\r\n },\r\n \"Từ số\"]\r\n },\r\n { id: \"den_so2\", batch: \"gr2\", header: [null, \"Đến số\"] },\r\n {\r\n id: \"tu_so3\", header: [\r\n {\r\n content: \"columnGroup\", closed: false, batch: \"gr3\",\r\n groupText: \"Tổng số sử dụng, xóa bỏ, mất, hủy\", colspan: 3\r\n },\r\n \"Từ số\"]\r\n },\r\n { id: \"den_so3\", batch: \"gr3\", header: [null, \"Đến số\"] },\r\n { id: \"cong\", batch: \"gr3\", header: [null, \"Cộng\"] },\r\n {\r\n id: \"sl_sd\", header: [\r\n {\r\n content: \"columnGroup\", closed: false, batch: \"gr4\",\r\n groupText: \"Đã sử dụng\", colspan: 1\r\n },\r\n \"Số lượng\"], width: 150\r\n },\r\n {\r\n id: \"so_luong1\", header: [\r\n {\r\n content: \"columnGroup\", closed: false, batch: \"gr5\",\r\n groupText: \"Xóa bỏ\", colspan: 2\r\n },\r\n \"Số lượng\"], width: 110\r\n },\r\n { id: \"so1\", batch: \"gr5\", header: [null, \"Số\"] },\r\n {\r\n id: \"so_luong2\", header: [\r\n {\r\n content: \"columnGroup\", closed: false, batch: \"gr6\",\r\n groupText: \"Mất\", colspan: 2\r\n },\r\n \"Số lượng\"], width: 110\r\n },\r\n { id: \"so2\", batch: \"gr6\", header: [null, \"Số\"] },\r\n {\r\n id: \"so_luong3\", header: [\r\n {\r\n content: \"columnGroup\", closed: false, batch: \"gr7\",\r\n groupText: \"Hủy\", colspan: 2\r\n },\r\n \"Số lượng\"], width: 110\r\n },\r\n { id: \"so3\", batch: \"gr7\", header: [null, \"Số\"] },\r\n {\r\n id: \"tu_so4\", header: [\r\n {\r\n content: \"columnGroup\", closed: false, batch: \"gr8\",\r\n groupText: \"Tồn cuối kỳ\", colspan: 3\r\n },\r\n \"Từ số\"]\r\n },\r\n { id: \"den_so4\", batch: \"gr8\", header: [null, \"Đến số\"] },\r\n { id: \"so_luong4\", batch: \"gr8\", header: [null, \"Số lượng\"] }\r\n\r\n ]\r\n },\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin đơn vị\",\r\n body: {\r\n rows: [\r\n {\r\n view: \"text\",\r\n id: \"nguoi_dai_dien\",\r\n name: \"nguoi_dai_dien\",\r\n //labelPosition: \"top\",\r\n label: \"Người đại diện\",\r\n css: \"mcls_readonly_text\",\r\n labelWidth: 100,\r\n readonly: true,\r\n width: 500\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"nguoi_lap\",\r\n view: \"text\",\r\n name: \"nguoi_lap\",\r\n //labelPosition: \"top\",\r\n css: \"mcls_readonly_text\",\r\n labelWidth: 100,\r\n label: \"Người lập\",\r\n readonly: true,\r\n width: 500\r\n },\r\n {\r\n id: \"ngay_lap\",\r\n view: \"datepicker\",\r\n name: \"ngay_lap\",\r\n css: \"mcls_readonly_text\",\r\n value: new Date(),\r\n label: \"Ngày lập\",\r\n readonly: true,\r\n width: 500\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F11\", view: \"button\", icon: \"refresh\", type: \"form\", label: \"Tải dữ liệu (F11)\", align: \"center\", width: 120,\r\n on: {\r\n onClick: function () {\r\n\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/Bcthsd/BcTinhhinhsudung\", $$('dataform').config.item, function (text) {\r\n var data = JSON.parse(text);\r\n //console.log(data);\r\n var table = webix.$$(\"dataBC\");\r\n table.clearAll();\r\n table.parse(data);\r\n });\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n shortcut: \"F10\", id: \"btnGhi\", view: \"button\", icon: \"refresh\", label: \"Lưu (F10)\", type: \"danger\", align: \"center\", width: 120,\r\n on: {\r\n onClick: function () {\r\n var ss = $$(\"dataBC\").serialize();\r\n\r\n var dataBC = {\r\n data: ss,\r\n nguoi_lap: $$('nguoi_lap').getValue(),\r\n nguoi_dai_dien: $$('nguoi_dai_dien').getValue(),\r\n ngay_lap: $$('ngay_lap').getValue()\r\n };\r\n\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/Bcthsd/bcthsd_INSERT\", dataBC, function (text) {\r\n var data = JSON.parse(text);\r\n if (data.hasOwnProperty(\"error\")) {\r\n webix.message(data.error);\r\n }\r\n else {\r\n webix.message(data.ok, \"debug\");\r\n }\r\n });\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n shortcut: \"F9\", view: \"button\", type: \"form\", icon: \"refresh\", label: \"Export XML (F9)\", align: \"center\", width: 120,\r\n on: {\r\n onClick: function () {\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn ghi báo cáo trước khi kết suất XML không ?\", ok: \"Có\", cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n var ss = $$(\"dataBC\").serialize();\r\n\r\n var dataBC = {\r\n data: ss,\r\n nguoi_lap: $$('nguoi_lap').getValue(),\r\n nguoi_dai_dien: $$('nguoi_dai_dien').getValue(),\r\n ngay_lap: $$('ngay_lap').getValue()\r\n };\r\n var box = webix.modalbox({\r\n title: \"Đang kết suất XML ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200\r\n });\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/Bcthsd/bcthsd_INSERT\", dataBC, function (text) {\r\n var data = JSON.parse(text);\r\n if (data.hasOwnProperty(\"error\")) {\r\n webix.modalbox.hide(box);\r\n webix.message(data.error, \"error\");\r\n }\r\n else {\r\n var item = $$('dataform').config.item;\r\n // console.log(item);\r\n var input = {\r\n ma_dvcs: user.getDvcsID(),\r\n tokhai_quy: item.tokhai_quy,\r\n tokhai_thang: item.tokhai_thang,\r\n nam: item.nam,\r\n thang: item.thang,\r\n tu_ngay: item.tu_ngay,\r\n den_ngay: item.den_ngay\r\n }\r\n\r\n webix.ajax()\r\n .response(\"arraybuffer\")\r\n .get(app.config.host + \"/Bcthsd/ExportFileXML\", input, function (text, data) {\r\n var file = new Blob([data], { type: 'application/xml' });\r\n webix.html.download(file, $$('tenfile').getValue());\r\n webix.modalbox.hide(box);\r\n });\r\n }\r\n });\r\n\r\n }\r\n else {\r\n var item = $$('dataform').config.item;\r\n // console.log(item);\r\n var input = {\r\n ma_dvcs: user.getDvcsID(),\r\n tokhai_quy: item.tokhai_quy,\r\n tokhai_thang: item.tokhai_thang,\r\n nam: item.nam,\r\n thang: item.thang,\r\n tu_ngay: item.tu_ngay,\r\n den_ngay: item.den_ngay\r\n }\r\n var box = webix.modalbox({\r\n title: \"Đang kết suất XML ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200\r\n });\r\n webix.ajax()\r\n .response(\"arraybuffer\")\r\n .get(app.config.host + \"/Bcthsd/ExportFileXML\", input, function (text, data) {\r\n var file = new Blob([data], { type: 'application/xml' });\r\n webix.html.download(file, $$('tenfile').getValue());\r\n webix.modalbox.hide(box);\r\n });\r\n }\r\n }\r\n });\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n shortcut: \"F8\", view: \"button\", type: \"form\", icon: \"far fa-refresh\", label: \"Print (F8)\", align: \"center\", width: 120,\r\n on: {\r\n onClick: function () {\r\n var item = $$('dataform').config.item;\r\n // console.log(item);\r\n var input = {\r\n ma_dvcs: user.getDvcsID(),\r\n bc_soluong: item.bc_soluong,\r\n nam: item.nam,\r\n thang: item.thang,\r\n tokhai_quy: item.tokhai_quy,\r\n tokhai_thang: item.tokhai_thang\r\n }\r\n var box = webix.modalbox({\r\n title: \"Đang in báo cáo ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200\r\n });\r\n webix.ajax()\r\n .response(\"arraybuffer\")\r\n .get(app.config.host + \"/Bcthsd/PrintPDF?ma_dvcs=\" + user.getDvcsID() + \"&bc_soluong=\" + item.bc_soluong + \"&nam=\" + item.nam + \"&thang=\" + item.thang + \"&tokhai_quy=\" + item.tokhai_quy + \"&tokhai_thang=\" + item.tokhai_thang, function (text, data) {\r\n var file = new Blob([data], { type: 'application/pdf' });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n // var printWindow = window.open(fileURL, '', 'width=800,height=500');\r\n // printWindow.print()\r\n // var a = document.createElement(\"a\");\r\n // a.target = '_blank';\r\n // document.body.appendChild(a);\r\n\r\n // a.href = fileURL;\r\n // a.download = \"fileName.pdf\";\r\n // a.click();\r\n //$$(\"frame-body\").define(\"src\", fileURL);\r\n //kk.show();\r\n window.open(fileURL, '_blank');\r\n\r\n // webix.html.download(file, $$('tenfile').getValue());\r\n });\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {}\r\n /*{\r\n view: \"button\", hotkey: \"esc\", label: \"Hủy bỏ\", align: \"center\", width: 120,\r\n click: function () {\r\n $$(\"tinhhinhsudung\").removeView(\"dataBC\");\r\n // webix.$$(\"tinhhinhsudung\").close();\r\n }\r\n }*/\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n\r\n },\r\n initUI: initUI\r\n };\r\n\r\n});\ndefine('views/forms/token',[\"app\", \"locale\"], function (app, _) {\r\n\tvar editmode = 0;\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"chukyso-win\", position: \"center\",\r\n\t\t\thead: \"Thông tin Token\",\r\n\t\t\t//height:420,\t\t\r\n\t\t\tbody: {\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"chukyso-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\tmargin: 0,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"serial_number\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tlabel: _(\"SO_SERIAL\"),\r\n\t\t\t\t\t\treadonly: true,\r\n\t\t\t\t\t\twidth: 350\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"token_label\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tlabel: \"TOKEN LABEL\",\r\n\t\t\t\t\t\treadonly: true,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"pass\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tlabel: _(\"PASSWORD\"),\r\n\t\t\t\t\t\ttype: \"password\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tshortcut: \"F10\", view: \"button\", label: \"Lưu (F10)\", type: \"form\", align: \"center\", width: 120,\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"chukyso-form\");\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar khData = {};\r\n\r\n\t\t\t\t\t\t\t\t\t\tkhData.windowid = app.path[1].params[0];\r\n\t\t\t\t\t\t\t\t\t\tkhData.editmode = editmode;\r\n\t\t\t\t\t\t\t\t\t\tkhData.data = [];\r\n\r\n\t\t\t\t\t\t\t\t\t\tkhData.data.push(item);\r\n\r\n\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t.post(app.config.host + \"/System/Save\", khData, function (text) {\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar json = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!json.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"chukyso-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tapp.callEvent(\"dataChanged\", [editmode, json.data]);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(json.error, \"error\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", align: \"center\", width: 120, type: \"danger\",\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\twebix.$$(\"chukyso-win\").close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t]\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tsetEditMode: function (mode) {\r\n\t\t\teditmode = mode;\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/forms/tokenfile',[\"app\", \"locale\"], function (app, _) {\r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\", modal: true, id: \"tokenfile-win\", position: \"center\",\r\n head: \"Thông tin Token File\",\r\n //height:420,\t\t\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n id: \"tokenfile-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"textarea\",\r\n name: \"file_path\",\r\n labelPosition: \"top\",\r\n label: _(\"PATH\"),\r\n height: 100,\r\n required: true,\r\n validate: webix.rules.isNotEmpty,\r\n invalidMessage: \"Đường dẫn không được để trống !\"\r\n },\r\n {\r\n view: \"text\",\r\n name: \"pass\",\r\n labelPosition: \"top\",\r\n label: _(\"PASSWORD\"),\r\n type: \"password\",\r\n required: true,\r\n invalidMessage: \"Password không được để trống !\",\r\n validate: webix.rules.isNotEmpty\r\n },\r\n {},\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\", view: \"button\", label: \"Lưu (F10)\", type: \"form\", align: \"center\", width: 120,\r\n on: {\r\n onClick: function () {\r\n if ($$(\"tokenfile-form\").validate()) {\r\n var form = webix.$$(\"tokenfile-form\");\r\n\r\n var item = form.getValues();\r\n\r\n var khData = {};\r\n\r\n khData.windowid = app.path[1].params[0];\r\n khData.editmode = editmode;\r\n khData.data = [];\r\n\r\n khData.data.push(item);\r\n\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/Token/SaveTokenFile\", khData, function (text) {\r\n\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"tokenfile-win\").close();\r\n app.callEvent(\"dataChanged\", [editmode, json.data]);\r\n }\r\n else {\r\n webix.message(json.error, \"error\");\r\n }\r\n\r\n\r\n });\r\n }\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n\r\n }\r\n },\r\n {\r\n view: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", align: \"center\", width: 120, type: \"danger\",\r\n click: function () {\r\n webix.$$(\"tokenfile-win\").close();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n\r\n ]\r\n }\r\n\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n }\r\n };\r\n\r\n});\ndefine('views/forms/updateToWeb',[\"require\", \"locale\", \"app\"], function (require, _, app) {\r\n \r\n\r\n var layout = {\r\n view: \"window\",\r\n id: \"formConfirm\",\r\n head: \"Đăng nhập\",\r\n modal: true,\r\n position: \"center\",\r\n // css: { \"font-weight\": \"bold\", \"text-transform\": \"uppercase\" },\r\n body: {\r\n view: \"form\",\r\n id: \"formConfirmValid\",\r\n // elementsConfig: {\r\n // labelPosition: \"top\",\r\n // //validateEvent: \"key\"\r\n // },\r\n elements: [\r\n {\r\n view: \"text\",\r\n label: _(\"Account\"),\r\n id: \"1\",\r\n name: \"taikhoan\",\r\n width: 350,\r\n invalidMessage: \"Tài khoản không được để trống !\",\r\n required: true,\r\n css: \"mcls_uppercase\",\r\n },\r\n {\r\n view: \"text\",\r\n label: _(\"PASSWORD\"),\r\n id: \"pass\",\r\n name: \"matkhau\",\r\n type: \"password\",\r\n width: 350,\r\n invalidMessage: \"Mật khẩu không được để trống !\",\r\n required: true,\r\n },\r\n // {\r\n // view: \"label\",\r\n // name: \"lb1\",\r\n // id: \"lb\",\r\n // template: \"
\"\r\n // },\r\n {\r\n view: \"button\",\r\n css: \"mcls_btnRegisterLogin\",\r\n type: \"iconButton\",\r\n icon: \"long-arrow-right\",\r\n label: _(\"Phần mềm hóa đơn điện tử MobiFone Invoice\"),\r\n width: 250,\r\n click: function () {\r\n window.open(\"http://minvoice.vn/dang-ky-su-dung/\", \"_blank\");\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"button\",\r\n value: \"Đồng ý\",\r\n type: \"danger\",\r\n click: function () {\r\n var model = {\r\n username: $$(\"1\").getValue(),\r\n password: $$(\"pass\").getValue(),\r\n };\r\n if ($$(\"formConfirmValid\").validate()) {\r\n var box = webix.modalbox({\r\n title: \"Đang cập nhật phần mềm ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n var urlCheck = app.config.host + \"/System/CheckPassUpdate\";\r\n\r\n var url = app.config.host + \"/System/UpdateToWeb\";\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(urlCheck, model, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n //console.log(text);\r\n var data = JSON.parse(text);\r\n\r\n if (data.error == \"\" || data.error == null) {\r\n webix.modalbox.hide(box);\r\n webix.message(data.ok, \"debug\");\r\n\r\n webix.$$(\"formConfirm\").close();\r\n } else {\r\n webix.$$(\"formConfirm\").close();\r\n webix.modalbox.hide(box);\r\n webix.message(data.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n webix.modalbox.hide(box);\r\n webix.message(data.error, \"error\");\r\n }\r\n });\r\n //this.getTopParentView().hide();\r\n }\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ\",\r\n type: \"iconButton\",\r\n icon: \"times\",\r\n click: function () {\r\n //this.getFormView().save();\r\n $$(\"formConfirm\").close();\r\n //this.getTopParentView().hide();\r\n },\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function () {\r\n $$(\"formConfirmValid\").focus();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/uploadexcel',[\"app\", \"locale\"], function (app, _) {\r\n // var dialog = webix.ui({\r\n // \tid: \"uploader\",\r\n // \tview: \"uploader\",\r\n // \tvalue: 'Chọn file',\r\n // \tname: \"uploader\",\r\n // \taccept: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\r\n // \tlink: \"mylist\",\r\n // \tautosend: false,\r\n // \t//borderless: true,\r\n // \tmultiple: false,\r\n // \tupload: app.config.host + \"/System/UploadExcel\",\r\n // \ton: {\r\n // \t\tonAfterFileAdd: function (file) {\r\n // \t\t\t//console.log(file);\r\n // \t\t\t// var kk = {\r\n // \t\t\t// \tname: file.name,\r\n // \t\t\t// \tlastModified: file.lastModified,\r\n // \t\t\t// \tlastModifiedDate: file.lastModifiedDate,\r\n // \t\t\t// \twebkitRelativePath: file.webkitRelativePath,\r\n // \t\t\t// \tid: file.id,\r\n // \t\t\t// \tsize: file.size,\r\n // \t\t\t// \tsizetext: file.sizetext,\r\n // \t\t\t// \tstatus: file.status,\r\n // \t\t\t// \ttype: file.type\r\n // \t\t\t// };\r\n // \t\t\t// $$(\"mylist\").add(kk);\r\n\r\n // \t\t\t// console.log($$(\"mylist\").getIdByIndex(0));\r\n // \t\t\t// var id = $$(\"mylist\").getIdByIndex(0);\r\n // \t\t\t// console.log($$(\"mylist\").getItem(id));\r\n // \t\t\t$$(\"mylist\").refresh();\r\n // \t\t\t//$$(\"mylist\").show();\r\n\r\n // \t\t},\r\n // \t\tonUploadComplete: function (response) {\r\n // \t\t\t// var topParentView = this.getTopParentView();\r\n\r\n // \t\t\t// if (topParentView.config.tableId !== undefined) {\r\n // \t\t\t// \tvar table = $$(topParentView.config.tableId);\r\n\r\n // \t\t\t// \tif (table != null) {\r\n // \t\t\t// \t\ttable.clearAll();\r\n // \t\t\t// \t\ttable.load(table.config.url);\r\n // \t\t\t// \t}\r\n // \t\t\t// }\r\n // \t\t\t// webix.message(\"Upload File thành công !\", \"debug\");\r\n // \t\t\t// webix.$$(\"uploadfile-win\").close();\r\n // \t\t},\r\n // \t\tonFileUploadError: function (file, response) {\r\n // \t\t\tconsole.log(file);\r\n // \t\t\tconsole.log(response);\r\n // \t\t}\r\n // \t},\r\n // \tapiOnly: true,\r\n // });\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n id: \"uploadfile-win\",\r\n position: \"center\",\r\n head: \"Nhận dữ liệu từ file Excel\",\r\n width: 500,\r\n height: 500,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 100 },\r\n view: \"form\",\r\n id: \"uploadfile-form\",\r\n complexData: true,\r\n elements: [\r\n {\r\n cols: [\r\n {\r\n view: \"toolbar\",\r\n css: { background: \"#e6f7ff !important\" },\r\n rows: [\r\n // { gravity: 2 },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-folder-open\",\r\n label: \"Chọn file\",\r\n width: 110,\r\n on: {\r\n onClick: function () {\r\n webix.$$(\"uploader\").fileDialog();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-download\",\r\n label: \"Tải file mẫu\",\r\n width: 110,\r\n on: {\r\n onClick: function () {\r\n var uploader = webix.$$(\"uploader\");\r\n var formData = uploader.config.formData;\r\n var filename = formData[\"filename\"] == null ? \"template.xlsx\" : formData[\"filename\"];\r\n var table = $$(\"uploadfile-win\");\r\n // webix.extend(table, webix.OverlayBox);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .bind({ filename: filename })\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/System/DownloadFileExcelTemplate?id=\" + formData[\"excel_id\"], function (text, data, XmlHttpRequest) {\r\n webix.delay(\r\n function (filename) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n var fileURL = URL.createObjectURL(file);\r\n\r\n var link = document.createElement(\"a\");\r\n document.body.appendChild(link);\r\n link.download = filename;\r\n link.href = fileURL;\r\n link.click();\r\n document.body.removeChild(link); // remove the link when done\r\n //document.location.href = fileURL;\r\n },\r\n null,\r\n [filename],\r\n 500\r\n );\r\n\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-check\",\r\n label: \"Nhận file (F10)\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"uploadfile-win\");\r\n // webix.extend(table, webix.OverlayBox);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n var file = $$(\"uploader\").files.getFirstId();\r\n if (file == undefined || file == null) {\r\n webix.message(\"Bạn chưa chọn file !\", \"error\");\r\n $$(\"uploadfile-win\").enable();\r\n $$(\"uploadfile-win\").hideProgress();\r\n return;\r\n }\r\n // var kk = $$(\"uploader\").files.data.pull;\r\n // console.log(kk);\r\n $$(\"uploader\").send(function (response) {\r\n var message = response.message || \"Nhận dữ liệu Excel thành công !\";\r\n console.log(response);\r\n console.log(message);\r\n if (response != undefined) {\r\n if (!response.hasOwnProperty(\"error\")) {\r\n $$(\"uploadfile-win\").enable();\r\n $$(\"uploadfile-win\").hideProgress();\r\n //this.callEvent(\"onUploadComplete\");\r\n // success call event onUploadComplete ở trên\r\n var topParentView = this.getTopParentView();\r\n\r\n if (topParentView.config.callback) {\r\n topParentView.config.callback();\r\n return;\r\n }\r\n\r\n if (topParentView.config.tableId !== undefined) {\r\n var table = $$(topParentView.config.tableId);\r\n\r\n if (table != null && table.config.url != undefined) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n }\r\n\r\n webix.alert({\r\n title: \"Thành công !\",\r\n text: \"
\" + message + \"
\",\r\n type: \"alert-warning\",\r\n callback: function (result) {\r\n webix.$$(\"uploadfile-win\").close();\r\n },\r\n });\r\n\r\n //webix.message(\"Nhận dữ liệu Excel thành công !\", \"debug\");\r\n } else {\r\n $$(\"uploadfile-win\").enable();\r\n $$(\"uploadfile-win\").hideProgress();\r\n\r\n webix.alert({\r\n title: \"Lỗi !\",\r\n text: response.error,\r\n type: \"alert-error\",\r\n callback: function (result) {\r\n webix.$$(\"uploadfile-win\").close();\r\n },\r\n // callback: function (result) {\r\n // \twebix.alert({\r\n // \t\ttitle: \"Custom title\",\r\n // \t\tok: \"Custom text\",\r\n // \t\ttext: \"Result: \" + result\r\n // \t});\r\n // }\r\n });\r\n //webix.message(response.error, \"error\");\r\n }\r\n } else {\r\n $$(\"uploadfile-win\").enable();\r\n $$(\"uploadfile-win\").hideProgress();\r\n }\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n hotkey: \"esc\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-times\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 110,\r\n on: {\r\n onClick: function () {\r\n $$(\"mylist\").clearAll();\r\n $$(\"mylist\").unbind();\r\n var id = $$(\"uploader\").files.getFirstId();\r\n if (id != undefined) {\r\n $$(\"uploader\").stopUpload(id);\r\n }\r\n webix.$$(\"uploadfile-win\").close();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n rows: [\r\n // {view:\"text\",id:\"df\",label:\"errr\"},\r\n {\r\n id: \"uploader\",\r\n view: \"uploader\",\r\n value: \"Chọn file\",\r\n hide: true,\r\n name: \"uploader\",\r\n accept: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\r\n link: \"mylist\",\r\n autosend: false,\r\n //borderless: true,\r\n multiple: false,\r\n upload: app.config.host + \"/System/UploadExcel\",\r\n on: {\r\n onAfterRender: function () {\r\n //console.log('called once after first rendering:');\r\n this.hide();\r\n },\r\n onAfterFileAdd: function (file) {\r\n var fileName = file.name;\r\n if (!fileName.endsWith(\".xls\") && !fileName.endsWith(\".xlsx\")) {\r\n webix.alert({\r\n title: \"Lỗi !\",\r\n text: \"File không đúng định dạng Excel!\",\r\n type: \"alert-error\",\r\n callback: function () {\r\n $$(\"uploader\").files.data.clearAll();\r\n },\r\n });\r\n }\r\n //console.log(file);\r\n // var kk = {\r\n // \tname: file.name,\r\n // \tlastModified: file.lastModified,\r\n // \tlastModifiedDate: file.lastModifiedDate,\r\n // \twebkitRelativePath: file.webkitRelativePath,\r\n // \tid: file.id,\r\n // \tsize: file.size,\r\n // \tsizetext: file.sizetext,\r\n // \tstatus: file.status,\r\n // \ttype: file.type\r\n // };\r\n // $$(\"mylist\").add(kk);\r\n\r\n // console.log($$(\"mylist\").getIdByIndex(0));\r\n // var id = $$(\"mylist\").getIdByIndex(0);\r\n // console.log($$(\"mylist\").getItem(id));\r\n $$(\"mylist\").refresh();\r\n //$$(\"mylist\").show();\r\n },\r\n onUploadComplete: function (response) {\r\n // var topParentView = this.getTopParentView();\r\n\r\n // if (topParentView.config.tableId !== undefined) {\r\n // \tvar table = $$(topParentView.config.tableId);\r\n\r\n // \tif (table != null) {\r\n // \t\ttable.clearAll();\r\n // \t\ttable.load(table.config.url);\r\n // \t}\r\n // }\r\n // webix.message(\"Upload File thành công !\", \"debug\");\r\n // webix.$$(\"uploadfile-win\").close();\r\n\r\n if (response === undefined) return;\r\n\r\n if (response.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: response.error });\r\n }\r\n },\r\n onFileUploadError: function (file, response) {\r\n console.log(file);\r\n console.log(response);\r\n $$(\"uploadfile-win\").enable();\r\n $$(\"uploadfile-win\").hideProgress();\r\n },\r\n },\r\n apiOnly: true,\r\n },\r\n {\r\n view: \"list\",\r\n id: \"mylist\",\r\n type: \"uploader\",\r\n height: 100,\r\n //autoheight: true\r\n borderless: true,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/uploadexcelform',[\"app\", \"locale\"], function (app, _) {\r\n // var dialog = webix.ui({\r\n // \tid: \"uploader\",\r\n // \tview: \"uploader\",\r\n // \tvalue: 'Chọn file',\r\n // \tname: \"uploader\",\r\n // \taccept: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\r\n // \tlink: \"mylist\",\r\n // \tautosend: false,\r\n // \t//borderless: true,\r\n // \tmultiple: false,\r\n // \tupload: app.config.host + \"/System/UploadExcel\",\r\n // \ton: {\r\n // \t\tonAfterFileAdd: function (file) {\r\n // \t\t\t//console.log(file);\r\n // \t\t\t// var kk = {\r\n // \t\t\t// \tname: file.name,\r\n // \t\t\t// \tlastModified: file.lastModified,\r\n // \t\t\t// \tlastModifiedDate: file.lastModifiedDate,\r\n // \t\t\t// \twebkitRelativePath: file.webkitRelativePath,\r\n // \t\t\t// \tid: file.id,\r\n // \t\t\t// \tsize: file.size,\r\n // \t\t\t// \tsizetext: file.sizetext,\r\n // \t\t\t// \tstatus: file.status,\r\n // \t\t\t// \ttype: file.type\r\n // \t\t\t// };\r\n // \t\t\t// $$(\"mylist\").add(kk);\r\n\r\n // \t\t\t// console.log($$(\"mylist\").getIdByIndex(0));\r\n // \t\t\t// var id = $$(\"mylist\").getIdByIndex(0);\r\n // \t\t\t// console.log($$(\"mylist\").getItem(id));\r\n // \t\t\t$$(\"mylist\").refresh();\r\n // \t\t\t//$$(\"mylist\").show();\r\n\r\n // \t\t},\r\n // \t\tonUploadComplete: function (response) {\r\n // \t\t\t// var topParentView = this.getTopParentView();\r\n\r\n // \t\t\t// if (topParentView.config.tableId !== undefined) {\r\n // \t\t\t// \tvar table = $$(topParentView.config.tableId);\r\n\r\n // \t\t\t// \tif (table != null) {\r\n // \t\t\t// \t\ttable.clearAll();\r\n // \t\t\t// \t\ttable.load(table.config.url);\r\n // \t\t\t// \t}\r\n // \t\t\t// }\r\n // \t\t\t// webix.message(\"Upload File thành công !\", \"debug\");\r\n // \t\t\t// webix.$$(\"uploadfile-win\").close();\r\n // \t\t},\r\n // \t\tonFileUploadError: function (file, response) {\r\n // \t\t\tconsole.log(file);\r\n // \t\t\tconsole.log(response);\r\n // \t\t}\r\n // \t},\r\n // \tapiOnly: true,\r\n // });\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n id: \"uploadfile-win\",\r\n position: \"center\",\r\n head: \"Nhận dữ liệu từ file Excel\",\r\n width: 500,\r\n height: 500,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 100 },\r\n view: \"form\",\r\n id: \"uploadfile-form\",\r\n complexData: true,\r\n elements: [\r\n {\r\n cols: [\r\n {\r\n view: \"toolbar\",\r\n css: { background: \"#e6f7ff !important\" },\r\n rows: [\r\n // { gravity: 2 },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-folder-open\",\r\n label: \"Chọn file\",\r\n width: 110,\r\n on: {\r\n onClick: function () {\r\n webix.$$(\"uploader\").fileDialog();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-download\",\r\n label: \"Tải file mẫu\",\r\n width: 110,\r\n on: {\r\n onClick: function () {\r\n debugger\r\n var uploader = webix.$$(\"uploader\");\r\n var formData = uploader.config.formData;\r\n var filename = formData[\"filename\"] == null ? \"template.xlsx\" : formData[\"filename\"];\r\n var table = $$(\"uploadfile-win\");\r\n // webix.extend(table, webix.OverlayBox);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .bind({ filename: filename })\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/System/DownloadFileExcelTemplate?id=\" + formData[\"excel_id\"], function (text, data, XmlHttpRequest) {\r\n webix.delay(\r\n function (filename) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n var fileURL = URL.createObjectURL(file);\r\n\r\n var link = document.createElement(\"a\");\r\n document.body.appendChild(link);\r\n link.download = filename;\r\n link.href = fileURL;\r\n link.click();\r\n document.body.removeChild(link); // remove the link when done\r\n //document.location.href = fileURL;\r\n },\r\n null,\r\n [filename],\r\n 500\r\n );\r\n\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-check\",\r\n label: \"Nhận file (F10)\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n\r\n // Lấy mẫu excel import\r\n var uploader = webix.$$(\"uploader\");\r\n var formData = uploader.config.formData;\r\n var excel_id = formData[\"excel_id\"];\r\n \r\n var table = $$(\"uploadfile-win\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n var file = $$(\"uploader\").files.getFirstId();\r\n if (file == undefined || file == null) {\r\n webix.message(\"Bạn chưa chọn file !\", \"error\");\r\n $$(\"uploadfile-win\").enable();\r\n $$(\"uploadfile-win\").hideProgress();\r\n return;\r\n }\r\n\r\n // khi import bật lên rồi sau khi import thì tắt\r\n debugger\r\n var checkTien = $$(\"tudongtinhtien\");\r\n checkTien.setValue(1);\r\n\r\n if(excel_id ===\"EX00017\"){\r\n var checkbox = $$(\"giamthuebanhang20\");\r\n if (checkbox) {\r\n $$(\"tienthuegtgtgiam\").setValue(0);\r\n $$(\"tgtttbso_last\").setValue(0);\r\n checkbox.setValue(0);\r\n }\r\n }\r\n\r\n var fileData = $$(\"uploader\").files.getItem(file);\r\n var reader = new FileReader();\r\n reader.readAsArrayBuffer(fileData.file);\r\n reader.onload = function (e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n table.clearAll();\r\n\r\n //Đọc file excel\r\n var data = new Uint8Array(e.target.result);\r\n var workbook = XLSX.read(data, { type: \"array\" });\r\n //Lấy sheet data\r\n var firstSheetName = workbook.SheetNames[0];\r\n var firstSheet = workbook.Sheets[firstSheetName];\r\n var range = XLSX.utils.decode_range(firstSheet[\"!ref\"]);\r\n // đếm cột có kí tự để so sánh mẫu\r\n var totalColumns = 0;\r\n for (var col = range.s.c; col <= range.e.c; col++) {\r\n for (var row = 0; row <= range.e.r; row++) { \r\n var cellAddress = XLSX.utils.encode_cell({ r: row, c: col });\r\n var cell = firstSheet[cellAddress];\r\n \r\n if (cell && cell.v && String(cell.v).trim() !== \"\") {\r\n totalColumns ++; \r\n break; \r\n }\r\n }\r\n }\r\n var checkErro = false;\r\n var isGiamTru = false;\r\n //Lặp từng dòng trong file import\r\n for (var row = 5; row <= (range.e.r + 1); row++) {\r\n var item = {\r\n id: webix.uid(),\r\n };\r\n //Map dữ liệu excel với cột trong bảng table_chitiet\r\n var columns = [\"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\"];\r\n var columnIds = [\"ma\", \"ten\", \"mdvtinh\", \"sluong\", \"dgia\", \"tlckhau\", \"stckhau\", \"thtien\", \"tiletienthuegtgtgiam\", \"tienthuegtgtgiam\", \"tgtien\"];\r\n if(excel_id ===\"EX00011\"){\r\n columns = [\"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\"];\r\n columnIds= [\"ma\", \"ten\", \"mdvtinh\", \"sluong\", \"dgia\", \"thtien\", \"tlckhau\", \"stckhau\", \"tsuat\", \"tthue\", \"tgtien\"]; // Tên cột tương ứng trong Webix\r\n }else if(excel_id ===\"EX00024\"){\r\n columns = [\"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\"];\r\n columnIds = [\"ma\", \"ten\", \"mdvtinh\", \"sluong\", \"dgia\", \"tgtien\", \"kmai\"]; \r\n }else{\r\n columns = [\"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\"];\r\n columnIds = [\"ma\", \"ten\", \"mdvtinh\", \"sluong\", \"dgia\", \"tlckhau\", \"stckhau\", \"thtien\", \"tiletienthuegtgtgiam\", \"tienthuegtgtgiam\", \"tgtien\"]; \r\n }\r\n if(totalColumns !== columns.length){\r\n webix.message(\"File excel là \" + totalColumns + \" cột khác với file mẫu là \" + columns.length + \" cột!\" , \"error\");\r\n checkErro = true;\r\n break;\r\n }\r\n \r\n //Lặp columns để set giá trị vào ô trong bảng table_chitiet\r\n for (var index = 0; index < columns.length; index++) {\r\n var col = columns[index]; \r\n\r\n var cellAddress = col + row; \r\n var cell = firstSheet[cellAddress];\r\n var value;\r\n if (cell) { \r\n value = cell.v; \r\n if(columnIds[index] === \"tsuat\"){\r\n item[columnIds[index]] = String(value); \r\n }else{\r\n item[columnIds[index]] = value;\r\n }\r\n \r\n } else {\r\n // Check các cột bắt buộc nhập trong excel\r\n if(excel_id ===\"EX00011\" && (columnIds[index]===\"ten\" || columnIds[index]===\"tsuat\" || columnIds[index]===\"tthue\"|| columnIds[index]===\"tgtien\")){\r\n webix.message(\"Dòng \" + row + \" cột \" + col+ \" không được để trống\" , \"error\");\r\n table.clearAll();\r\n checkErro = true;\r\n break;\r\n }\r\n \r\n if(excel_id ===\"EX00024\" && (columnIds[index]===\"ten\" || columnIds[index]===\"kmai\")){\r\n webix.message(\"Dòng \" + row + \" cột \" + col+ \" không được để trống\" , \"error\");\r\n table.clearAll();\r\n checkErro = true;\r\n break;\r\n }\r\n \r\n if(excel_id ===\"EX00017\" && (columnIds[index]===\"ten\" || columnIds[index]===\"thtien\" || columnIds[index]===\"tgtien\")){\r\n webix.message(\"Dòng \" + row + \" cột \" + col+ \" không được để trống\" , \"error\");\r\n table.clearAll();\r\n checkErro = true;\r\n $$(\"tienthuegtgtgiam\").setValue(0);\r\n $$(\"tgtttbso_last\").setValue(0);\r\n break;\r\n }\r\n\r\n item[columnIds[index]] = \"\"; \r\n }\r\n };\r\n\r\n debugger\r\n if(excel_id ===\"EX00017\" && (item[\"sluong\"]!==\"\" && item[\"stckhau\"] !== \"\" && item[\"dgia\"] !== \"\"\r\n && item[\"tlckhau\"] !== \"\")){\r\n if(item[\"dgia\"]*item[\"sluong\"]*item[\"tlckhau\"]/100 !== item[\"stckhau\"]){\r\n webix.message(\"Tiền chiết khấu tại dòng \" + row + \" đang bị tính sai\" , \"error\");\r\n table.clearAll();\r\n checkErro = true;\r\n $$(\"tienthuegtgtgiam\").setValue(0);\r\n $$(\"tgtttbso_last\").setValue(0);\r\n break;\r\n }\r\n\r\n if((item[\"dgia\"]*item[\"sluong\"] - item[\"stckhau\"]) !== item[\"thtien\"]){\r\n webix.message(\"Thành tiền tại dòng \" + row + \" đang bị tính sai\" , \"error\");\r\n table.clearAll();\r\n checkErro = true;\r\n $$(\"tienthuegtgtgiam\").setValue(0);\r\n $$(\"tgtttbso_last\").setValue(0);\r\n break;\r\n }\r\n\r\n }\r\n\r\n if(excel_id ===\"EX00024\" && (item[\"tgtien\"]===\"\" && item[\"kmai\"] !== 4)){\r\n webix.message(\"Trường thành tiền bắt buộc nhập với tính chất khác ghi chú!\" , \"error\");\r\n webix.alert({\r\n title: \"Lỗi !\",\r\n text: \"Trường thành tiền bắt buộc nhập với tính chất khác ghi chú!\",\r\n type: \"alert-error\",\r\n });\r\n table.clearAll();\r\n checkErro = true;\r\n break;\r\n }\r\n\r\n if(excel_id ===\"EX00024\" && (item[\"tgtien\"]!==\"\" && item[\"kmai\"] === 4)){\r\n webix.message(\"Trường thành tiền không được nhập với tính chất ghi chú!\" , \"error\");\r\n webix.alert({\r\n title: \"Lỗi !\",\r\n text: \"Trường thành tiền không được nhập với tính chất ghi chú!\",\r\n type: \"alert-error\",\r\n });\r\n table.clearAll();\r\n checkErro = true;\r\n break;\r\n }\r\n if(checkErro) break;\r\n \r\n if(excel_id ===\"EX00017\" && item[\"tienthuegtgtgiam\"]!==\"\"){\r\n isGiamTru = true;\r\n }\r\n\r\n if(excel_id !==\"EX00024\"){\r\n item[\"kmai\"] = 1; \r\n }\r\n table.add(item); \r\n table.updateItem(item.id, item);\r\n \r\n }\r\n \r\n table.refreshColumns(); \r\n\r\n if(!checkErro){\r\n webix.message(\"Import dữ liệu thành công!\");\r\n }\r\n\r\n //Tắt tự động tính tiền\r\n var checkbox = $$(\"tudongtinhtien\");\r\n if (checkbox) {\r\n checkbox.setValue(0);\r\n }\r\n if(excel_id ===\"EX00017\"){\r\n var checkbox = $$(\"giamthuebanhang20\");\r\n if(isGiamTru){\r\n checkbox.setValue(1);\r\n }\r\n }\r\n };\r\n \r\n reader.onerror = function () {\r\n webix.message(\"Không thể đọc file Excel!\", \"error\");\r\n };\r\n\r\n $$(\"uploadfile-win\").enable();\r\n $$(\"uploadfile-win\").hideProgress();\r\n webix.$$(\"uploadfile-win\").close();\r\n return;\r\n \r\n \r\n // var kk = $$(\"uploader\").files.data.pull;\r\n // console.log(kk);\r\n\r\n $$(\"uploader\").send(function (response) {\r\n var message = response.message || \"Nhận dữ liệu Excel thành công !\";\r\n console.log(response);\r\n console.log(message);\r\n if (response != undefined) {\r\n if (!response.hasOwnProperty(\"error\")) {\r\n $$(\"uploadfile-win\").enable();\r\n $$(\"uploadfile-win\").hideProgress();\r\n //this.callEvent(\"onUploadComplete\");\r\n // success call event onUploadComplete ở trên\r\n var topParentView = this.getTopParentView();\r\n\r\n if (topParentView.config.callback) {\r\n topParentView.config.callback();\r\n return;\r\n }\r\n\r\n if (topParentView.config.tableId !== undefined) {\r\n var table = $$(topParentView.config.tableId);\r\n\r\n if (table != null && table.config.url != undefined) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n }\r\n\r\n webix.alert({\r\n title: \"Thành công !\",\r\n text: \"
\" + message + \"
\",\r\n type: \"alert-warning\",\r\n callback: function (result) {\r\n webix.$$(\"uploadfile-win\").close();\r\n },\r\n });\r\n\r\n //webix.message(\"Nhận dữ liệu Excel thành công !\", \"debug\");\r\n } else {\r\n $$(\"uploadfile-win\").enable();\r\n $$(\"uploadfile-win\").hideProgress();\r\n\r\n webix.alert({\r\n title: \"Lỗi !\",\r\n text: response.error,\r\n type: \"alert-error\",\r\n callback: function (result) {\r\n webix.$$(\"uploadfile-win\").close();\r\n },\r\n // callback: function (result) {\r\n // \twebix.alert({\r\n // \t\ttitle: \"Custom title\",\r\n // \t\tok: \"Custom text\",\r\n // \t\ttext: \"Result: \" + result\r\n // \t});\r\n // }\r\n });\r\n //webix.message(response.error, \"error\");\r\n }\r\n } else {\r\n $$(\"uploadfile-win\").enable();\r\n $$(\"uploadfile-win\").hideProgress();\r\n }\r\n });\r\n\r\n\r\n\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n hotkey: \"esc\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-times\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 110,\r\n on: {\r\n onClick: function () {\r\n $$(\"mylist\").clearAll();\r\n $$(\"mylist\").unbind();\r\n var id = $$(\"uploader\").files.getFirstId();\r\n if (id != undefined) {\r\n $$(\"uploader\").stopUpload(id);\r\n }\r\n webix.$$(\"uploadfile-win\").close();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n rows: [\r\n // {view:\"text\",id:\"df\",label:\"errr\"},\r\n {\r\n id: \"uploader\",\r\n view: \"uploader\",\r\n value: \"Chọn file\",\r\n hide: true,\r\n name: \"uploader\",\r\n accept: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\r\n link: \"mylist\",\r\n autosend: false,\r\n //borderless: true,\r\n multiple: false,\r\n upload: app.config.host + \"/System/UploadExcel\",\r\n on: {\r\n onAfterRender: function () {\r\n //console.log('called once after first rendering:');\r\n this.hide();\r\n },\r\n onAfterFileAdd: function (file) {\r\n var fileName = file.name;\r\n if (!fileName.endsWith(\".xls\") && !fileName.endsWith(\".xlsx\")) {\r\n webix.alert({\r\n title: \"Lỗi !\",\r\n text: \"File không đúng định dạng Excel!\",\r\n type: \"alert-error\",\r\n callback: function () {\r\n $$(\"uploader\").files.data.clearAll();\r\n },\r\n });\r\n }\r\n //console.log(file);\r\n // var kk = {\r\n // \tname: file.name,\r\n // \tlastModified: file.lastModified,\r\n // \tlastModifiedDate: file.lastModifiedDate,\r\n // \twebkitRelativePath: file.webkitRelativePath,\r\n // \tid: file.id,\r\n // \tsize: file.size,\r\n // \tsizetext: file.sizetext,\r\n // \tstatus: file.status,\r\n // \ttype: file.type\r\n // };\r\n // $$(\"mylist\").add(kk);\r\n\r\n // console.log($$(\"mylist\").getIdByIndex(0));\r\n // var id = $$(\"mylist\").getIdByIndex(0);\r\n // console.log($$(\"mylist\").getItem(id));\r\n $$(\"mylist\").refresh();\r\n //$$(\"mylist\").show();\r\n },\r\n onUploadComplete: function (response) {\r\n // var topParentView = this.getTopParentView();\r\n\r\n // if (topParentView.config.tableId !== undefined) {\r\n // \tvar table = $$(topParentView.config.tableId);\r\n\r\n // \tif (table != null) {\r\n // \t\ttable.clearAll();\r\n // \t\ttable.load(table.config.url);\r\n // \t}\r\n // }\r\n // webix.message(\"Upload File thành công !\", \"debug\");\r\n // webix.$$(\"uploadfile-win\").close();\r\n\r\n if (response === undefined) return;\r\n\r\n if (response.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: response.error });\r\n }\r\n },\r\n onFileUploadError: function (file, response) {\r\n console.log(file);\r\n console.log(response);\r\n $$(\"uploadfile-win\").enable();\r\n $$(\"uploadfile-win\").hideProgress();\r\n },\r\n },\r\n apiOnly: true,\r\n },\r\n {\r\n view: \"list\",\r\n id: \"mylist\",\r\n type: \"uploader\",\r\n height: 100,\r\n //autoheight: true\r\n borderless: true,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/uploadexceltemplate',[\"app\", \"locale\"], function (app, _) {\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"uploadfile-win\", position: \"center\",\r\n\t\t\thead: \"Nhận dữ liệu từ file Excel\",\r\n\t\t\twidth: 500,\r\n\t\t\theight: 500,\r\n\t\t\tbody: {\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\telementsConfig: { labelWidth: 100 },\r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"uploadfile-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"toolbar\",\r\n\t\t\t\t\t\t\t\tcss: { \"background\": \"#e6f7ff !important\" },\r\n\t\t\t\t\t\t\t\trows: [\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tview: \"button\", type: \"icon\", icon: \"fas fa-folder-open\", label: \"Chọn file\", width: 110,\r\n\t\t\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"uploader\").fileDialog();\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tview: \"button\", type: \"icon\", icon: \"fas fa-download\", label: \"Tải file mẫu\", width: 110,\r\n\t\t\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar uploader = webix.$$(\"uploader\");\r\n\t\t\t\t\t\t\t\t\t\t\t\tdebugger;\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar formData = uploader.config.formData;\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar filename = formData[\"filename\"] == null ? \"template.xlsx\" : formData[\"filename\"];\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar parent_code = formData[\"parent_code\"];\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar table = $$(\"uploadfile-win\");\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.extend(table, webix.ProgressBar);\r\n\t\t\t\t\t\t\t\t\t\t\t\ttable.disable();\r\n\t\t\t\t\t\t\t\t\t\t\t\ttable.showProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t.bind({filename: filename})\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t.response(\"arraybuffer\")\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t.get(app.config.host + \"/System/DownloadFileExcelTemplate?id=\" + formData[\"excel_id\"] + \"&branch_code=\" + parent_code, function (text, data, XmlHttpRequest) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.delay(function (filename) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar file = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar fileURL = URL.createObjectURL(file);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar link = document.createElement('a');\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdocument.body.appendChild(link);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlink.download = filename;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlink.href = fileURL;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlink.click();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdocument.body.removeChild(link); // remove the link when done\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}, null, [filename], 500);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttable.enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttable.hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tshortcut: \"F10\", view: \"button\", type: \"icon\", icon: \"fas fa-check\", label: \"Nhận file (F10)\", width: 120, on: {\r\n\t\t\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar table = $$(\"uploadfile-win\");\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.extend(table, webix.ProgressBar);\r\n\t\t\t\t\t\t\t\t\t\t\t\ttable.disable();\r\n\t\t\t\t\t\t\t\t\t\t\t\ttable.showProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar file = $$(\"uploader\").files.getFirstId();\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (file == undefined || file == null) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(\"Bạn chưa chọn file !\", \"error\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploader\").send(function (response) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar message = response.message || \"Nhập file Excel thành công !\";\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (response != undefined) {\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (!response.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar topParentView = this.getTopParentView();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (topParentView.config.callback){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttopParentView.config.callback();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (topParentView.config.tableId !== undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar table = $$(topParentView.config.tableId);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (table != null && table.config.url!=undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttable.clearAll();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttable.load(table.config.url);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.alert({\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: \"Thành công !\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttext: \"
\"+message+\"
\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: \"alert-warning\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcallback: function (result) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"uploadfile-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").hideProgress();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.alert({\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: \"Lỗi !\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttext: response.error,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: \"alert-error\",\r\n callback: function (result) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"uploadfile-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\thotkey: \"esc\", view: \"button\", type: \"icon\", icon: \"fas fa-times\", label: \"Hủy bỏ (ESC)\", width: 110,\r\n\t\t\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"mylist\").clearAll();\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"mylist\").unbind();\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar id = $$(\"uploader\").files.getFirstId();\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (id != undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploader\").stopUpload(id);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"uploadfile-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\trows: [\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tid: \"uploader\",\r\n\t\t\t\t\t\t\t\t\t\tview: \"uploader\",\r\n\t\t\t\t\t\t\t\t\t\tvalue: 'Chọn file',\r\n\t\t\t\t\t\t\t\t\t\thide: true,\r\n\t\t\t\t\t\t\t\t\t\tname: \"uploader\",\r\n\t\t\t\t\t\t\t\t\t\taccept: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\r\n\t\t\t\t\t\t\t\t\t\tlink: \"mylist\",\r\n\t\t\t\t\t\t\t\t\t\tautosend: false,\r\n\t\t\t\t\t\t\t\t\t\tmultiple: false,\r\n\t\t\t\t\t\t\t\t\t\tupload: app.config.host + \"/System/UploadExcelTemplate\",\r\n\t\t\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\t\t\tonAfterRender: function () {\r\n\t\t\t\t\t\t\t\t\t\t\t\tthis.hide();\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\tonAfterFileAdd: function (file) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar fileName = file.name;\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!fileName.endsWith(\".xls\") && !fileName.endsWith(\".xlsx\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.alert({\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: \"Lỗi !\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttext: \"File không đúng định dạng Excel!\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: \"alert-error\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcallback: function () {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploader\").files.data.clearAll();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\tonUploadComplete: function (response) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (response === undefined) return;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (response.hasOwnProperty(\"error\")){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message({type:\"error\",text:response.error});\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\tonFileUploadError: function (file, response) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\tapiOnly: true,\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tview: \"list\",\r\n\t\t\t\t\t\t\t\t\t\tid: \"mylist\",\r\n\t\t\t\t\t\t\t\t\t\ttype: \"uploader\",\r\n\t\t\t\t\t\t\t\t\t\theight: 100,\r\n\t\t\t\t\t\t\t\t\t\tborderless: true\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n});\ndefine('views/forms/uploadexceluser',[\"app\", \"locale\"], function (app, _) {\r\n\r\n\t// var dialog = webix.ui({\r\n\t// \tid: \"uploader\",\r\n\t// \tview: \"uploader\",\r\n\t// \tvalue: 'Chọn file',\r\n\t// \tname: \"uploader\",\r\n\t// \taccept: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\r\n\t// \tlink: \"mylist\",\r\n\t// \tautosend: false,\r\n\t// \t//borderless: true,\r\n\t// \tmultiple: false,\r\n\t// \tupload: app.config.host + \"/System/UploadExcel\",\r\n\t// \ton: {\r\n\t// \t\tonAfterFileAdd: function (file) {\r\n\t// \t\t\t//console.log(file);\r\n\t// \t\t\t// var kk = {\r\n\t// \t\t\t// \tname: file.name, \r\n\t// \t\t\t// \tlastModified: file.lastModified,\r\n\t// \t\t\t// \tlastModifiedDate: file.lastModifiedDate,\r\n\t// \t\t\t// \twebkitRelativePath: file.webkitRelativePath,\r\n\t// \t\t\t// \tid: file.id,\r\n\t// \t\t\t// \tsize: file.size,\r\n\t// \t\t\t// \tsizetext: file.sizetext,\r\n\t// \t\t\t// \tstatus: file.status,\r\n\t// \t\t\t// \ttype: file.type\r\n\t// \t\t\t// };\r\n\t// \t\t\t// $$(\"mylist\").add(kk);\r\n\r\n\t// \t\t\t// console.log($$(\"mylist\").getIdByIndex(0));\r\n\t// \t\t\t// var id = $$(\"mylist\").getIdByIndex(0);\r\n\t// \t\t\t// console.log($$(\"mylist\").getItem(id));\r\n\t// \t\t\t$$(\"mylist\").refresh();\r\n\t// \t\t\t//$$(\"mylist\").show();\r\n\r\n\t// \t\t},\r\n\t// \t\tonUploadComplete: function (response) {\r\n\t// \t\t\t// var topParentView = this.getTopParentView();\r\n\r\n\t// \t\t\t// if (topParentView.config.tableId !== undefined) {\r\n\t// \t\t\t// \tvar table = $$(topParentView.config.tableId);\r\n\r\n\t// \t\t\t// \tif (table != null) {\r\n\t// \t\t\t// \t\ttable.clearAll();\r\n\t// \t\t\t// \t\ttable.load(table.config.url);\r\n\t// \t\t\t// \t}\r\n\t// \t\t\t// }\r\n\t// \t\t\t// webix.message(\"Upload File thành công !\", \"debug\");\r\n\t// \t\t\t// webix.$$(\"uploadfile-win\").close();\r\n\t// \t\t},\r\n\t// \t\tonFileUploadError: function (file, response) {\r\n\t// \t\t\tconsole.log(file);\r\n\t// \t\t\tconsole.log(response);\r\n\t// \t\t}\r\n\t// \t},\r\n\t// \tapiOnly: true,\r\n\t// });\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"uploadfile-win\", position: \"center\",\r\n\t\t\thead: \"Nhận dữ liệu từ file Excel\",\r\n\t\t\twidth: 500,\r\n\t\t\theight: 500,\r\n\t\t\tbody: {\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\telementsConfig: { labelWidth: 100 },\r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"uploadfile-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"toolbar\",\r\n\t\t\t\t\t\t\t\tcss: { \"background\": \"#e6f7ff !important\" },\r\n\t\t\t\t\t\t\t\trows: [\r\n\t\t\t\t\t\t\t\t\t// { gravity: 2 },\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tview: \"button\", type: \"icon\", icon: \"fas fa-folder-open\", label: \"Chọn file\", width: 110,\r\n\t\t\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"uploader\").fileDialog();\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tview: \"button\", type: \"icon\", icon: \"fas fa-download\", label: \"Tải file mẫu\", width: 110,\r\n\t\t\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar uploader = webix.$$(\"uploader\");\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar formData = uploader.config.formData;\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar filename = formData[\"filename\"] == null ? \"template.xlsx\" : formData[\"filename\"];\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar table = $$(\"uploadfile-win\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t// webix.extend(table, webix.OverlayBox);\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.extend(table, webix.ProgressBar);\r\n\t\t\t\t\t\t\t\t\t\t\t\ttable.disable();\r\n\t\t\t\t\t\t\t\t\t\t\t\ttable.showProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t.bind({filename: filename})\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t.response(\"arraybuffer\")\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t.get(app.config.host + \"/System/DownloadFileExcelTemplate?id=\" + formData[\"excel_id\"], function (text, data, XmlHttpRequest) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.delay(function (filename) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar file = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar fileURL = URL.createObjectURL(file);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar link = document.createElement('a');\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdocument.body.appendChild(link);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlink.download = filename;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlink.href = fileURL;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlink.click();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdocument.body.removeChild(link); // remove the link when done\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//document.location.href = fileURL;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}, null, [filename], 500);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttable.enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttable.hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tshortcut: \"F10\", view: \"button\", type: \"icon\", icon: \"fas fa-check\", label: \"Nhận file (F10)\", width: 120, on: {\r\n\t\t\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar table = $$(\"uploadfile-win\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t// webix.extend(table, webix.OverlayBox);\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.extend(table, webix.ProgressBar);\r\n\t\t\t\t\t\t\t\t\t\t\t\ttable.disable();\r\n\t\t\t\t\t\t\t\t\t\t\t\ttable.showProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar file = $$(\"uploader\").files.getFirstId();\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (file == undefined || file == null) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(\"Bạn chưa chọn file !\", \"error\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t// var kk = $$(\"uploader\").files.data.pull;\r\n\t\t\t\t\t\t\t\t\t\t\t\t// console.log(kk);\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploader\").send(function (response) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar message = response.message || \"Nhận dữ liệu Excel thành công !\";\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tconsole.log(response);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tconsole.log(message);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (response != undefined) {\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (!response.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//this.callEvent(\"onUploadComplete\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// success call event onUploadComplete ở trên \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar topParentView = this.getTopParentView();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// if (topParentView.config.callback){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// \ttopParentView.config.callback();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// \treturn;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// }\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (topParentView.config.tableId !== undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar table = $$(topParentView.config.tableId);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (table != null && table.config.url!=undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttable.clearAll();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttable.load(table.config.url);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.alert({\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: \"Thành công !\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttext: \"
\"+message+\"
\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: \"alert-warning\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcallback: function (result) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"uploadfile-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//webix.message(\"Nhận dữ liệu Excel thành công !\", \"debug\");\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").hideProgress();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.alert({\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: \"Lỗi !\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttext: response.error,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: \"alert-error\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcallback: function (result) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"uploadfile-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// callback: function (result) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// \twebix.alert({\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// \t\ttitle: \"Custom title\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// \t\tok: \"Custom text\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// \t\ttext: \"Result: \" + result\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// \t});\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//webix.message(response.error, \"error\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\thotkey: \"esc\", view: \"button\", type: \"icon\", icon: \"fas fa-times\", label: \"Hủy bỏ (ESC)\", width: 110,\r\n\t\t\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"mylist\").clearAll();\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"mylist\").unbind();\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar id = $$(\"uploader\").files.getFirstId();\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (id != undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploader\").stopUpload(id);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"uploadfile-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\trows: [\r\n\t\t\t\t\t\t\t\t\t// {view:\"text\",id:\"df\",label:\"errr\"},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tid: \"uploader\",\r\n\t\t\t\t\t\t\t\t\t\tview: \"uploader\",\r\n\t\t\t\t\t\t\t\t\t\tvalue: 'Chọn file',\r\n\t\t\t\t\t\t\t\t\t\thide: true,\r\n\t\t\t\t\t\t\t\t\t\tname: \"uploader\",\r\n\t\t\t\t\t\t\t\t\t\taccept: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\r\n\t\t\t\t\t\t\t\t\t\tlink: \"mylist\",\r\n\t\t\t\t\t\t\t\t\t\tautosend: false,\r\n\t\t\t\t\t\t\t\t\t\t//borderless: true,\r\n\t\t\t\t\t\t\t\t\t\tmultiple: false,\r\n\t\t\t\t\t\t\t\t\t\tupload: app.config.host + \"/System/UploadExcelListUnit\",\r\n\t\t\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\t\t\tonAfterRender: function () {\r\n\t\t\t\t\t\t\t\t\t\t\t\t//console.log('called once after first rendering:');\r\n\t\t\t\t\t\t\t\t\t\t\t\tthis.hide();\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\tonAfterFileAdd: function (file) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t//console.log(file);\r\n\t\t\t\t\t\t\t\t\t\t\t\t// var kk = {\r\n\t\t\t\t\t\t\t\t\t\t\t\t// \tname: file.name, \r\n\t\t\t\t\t\t\t\t\t\t\t\t// \tlastModified: file.lastModified,\r\n\t\t\t\t\t\t\t\t\t\t\t\t// \tlastModifiedDate: file.lastModifiedDate,\r\n\t\t\t\t\t\t\t\t\t\t\t\t// \twebkitRelativePath: file.webkitRelativePath,\r\n\t\t\t\t\t\t\t\t\t\t\t\t// \tid: file.id,\r\n\t\t\t\t\t\t\t\t\t\t\t\t// \tsize: file.size,\r\n\t\t\t\t\t\t\t\t\t\t\t\t// \tsizetext: file.sizetext,\r\n\t\t\t\t\t\t\t\t\t\t\t\t// \tstatus: file.status,\r\n\t\t\t\t\t\t\t\t\t\t\t\t// \ttype: file.type\r\n\t\t\t\t\t\t\t\t\t\t\t\t// };\r\n\t\t\t\t\t\t\t\t\t\t\t\t// $$(\"mylist\").add(kk);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t// console.log($$(\"mylist\").getIdByIndex(0));\r\n\t\t\t\t\t\t\t\t\t\t\t\t// var id = $$(\"mylist\").getIdByIndex(0);\r\n\t\t\t\t\t\t\t\t\t\t\t\t// console.log($$(\"mylist\").getItem(id));\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"mylist\").refresh();\r\n\t\t\t\t\t\t\t\t\t\t\t\t//$$(\"mylist\").show();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\tonUploadComplete: function (response) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t// var topParentView = this.getTopParentView();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t// if (topParentView.config.tableId !== undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t// \tvar table = $$(topParentView.config.tableId);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t// \tif (table != null) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t// \t\ttable.clearAll();\r\n\t\t\t\t\t\t\t\t\t\t\t\t// \t\ttable.load(table.config.url);\r\n\t\t\t\t\t\t\t\t\t\t\t\t// \t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t// }\r\n\t\t\t\t\t\t\t\t\t\t\t\t// webix.message(\"Upload File thành công !\", \"debug\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t// webix.$$(\"uploadfile-win\").close();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (response === undefined) return;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (response.hasOwnProperty(\"error\")){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message({type:\"error\",text:response.error});\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\tonFileUploadError: function (file, response) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tconsole.log(file);\r\n\t\t\t\t\t\t\t\t\t\t\t\tconsole.log(response);\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\tapiOnly: true,\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tview: \"list\",\r\n\t\t\t\t\t\t\t\t\t\tid: \"mylist\",\r\n\t\t\t\t\t\t\t\t\t\ttype: \"uploader\",\r\n\t\t\t\t\t\t\t\t\t\theight: 100,\r\n\t\t\t\t\t\t\t\t\t\t//autoheight: true\r\n\t\t\t\t\t\t\t\t\t\tborderless: true\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n});\ndefine('views/forms/uploadfile',[\"app\"],function(app){\r\n\t\r\n\treturn {\t\t\r\n\t\t$ui:{\r\n\t\t\tview:\"window\", modal:true, id:\"uploadfile-win\", position:\"center\",\r\n\t\t\thead:\"Tải file\",\r\n\t\t\tbody:{\r\n paddingY:20, \r\n paddingX:30, \r\n elementsConfig:{labelWidth: 100}, \r\n view:\"form\", \r\n\t\t\t\tid:\"uploadfile-form\", \r\n\t\t\t\tcomplexData:true,\r\n elements:[\r\n\t\t\t\t\t{ \r\n\t\t\t\t\t\tid:\"uploader\",\r\n\t\t\t\t\t\tview: \"uploader\", \r\n\t\t\t\t\t\tvalue: 'Upload file', \r\n\t\t\t\t\t\tname:\"file\",\r\n\t\t\t\t\t\t//accept:\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\r\n\t\t\t\t\t\tlink:\"mylist\",\r\n\t\t\t\t\t\t//upload: app.config.host + \"/System/UploadExcel\" ,\r\n\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\tonUploadComplete: function(response){\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tif (response.hasOwnProperty(\"error\")){\r\n\t\t\t\t\t\t\t\t\twebix.message({ type:\"error\",text:response[\"error\"]});\r\n\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tvar topParentView = this.getTopParentView();\r\n\r\n\t\t\t\t\t\t\t\tif (topParentView.config.tableId !== undefined){\r\n\t\t\t\t\t\t\t\t\tvar table = $$(topParentView.config.tableId);\r\n\r\n\t\t\t\t\t\t\t\t\tif (table!=null){\r\n\t\t\t\t\t\t\t\t\t\ttable.clearAll();\r\n\t\t\t\t\t\t\t\t\t\ttable.load(table.config.url);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif (response.hasOwnProperty(\"success\")){\r\n\t\t\t\t\t\t\t\t\twebix.message({ type:\"success\",text:response[\"success\"]});\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\twebix.$$(\"uploadfile-win\").close();\t\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview:\"list\", \r\n\t\t\t\t\t\tid:\"mylist\", \r\n\t\t\t\t\t\ttype:\"uploader\",\r\n\t\t\t\t\t\tautoheight:true, borderless:true\t\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"button\",\r\n\t\t\t\t\t\tlabel: \"Hủy bỏ\",\r\n\t\t\t\t\t\tclick: function() {\r\n\t\t\t\t\t\t\twebix.$$(\"uploadfile-win\").close();\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t}\t\t\t\r\n\t\t\t\r\n\t\t}\t\r\n\t\t\r\n\t};\r\n\r\n});\ndefine('views/forms/usertracuu',[\"app\", \"models/user\", \"views/menus/version\"], function (app, user, version) {\r\n var editmode = 0;\r\n function initUI(item) {\r\n var form = $$(\"usertracuu-win\");\r\n\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n\r\n var mst = version.getMST();\r\n var schema = version.GetSchema();\r\n //console.log(schema);\r\n item.mst = mst;\r\n // item.mst = \"0100686209\";\r\n item.schema_name = schema;\r\n webix\r\n .ajax()\r\n .headers({ \"content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/GetUserTracuu\", item, function (result) {\r\n form.enable();\r\n form.hideProgress();\r\n var data = JSON.parse(result);\r\n if (!data.hasOwnProperty(\"error\")) {\r\n var btnEdit = webix.$$(\"btnSavve\");\r\n btnEdit.define(\"label\", \"Sửa\");\r\n btnEdit.refresh();\r\n data.ma_dt = data.code_customer;\r\n data.mst = data.tax_code;\r\n $$(\"usertracuu-form\").setValues(data);\r\n } else {\r\n webix.message(data.error, \"debug\");\r\n $$(\"schema_name\").setValue(item.schema_name);\r\n $$(\"mst\").setValue(item.mst);\r\n // $$(\"mst\").setValue(\"0100686209\");\r\n $$(\"email\").setValue(item.email);\r\n $$(\"username\").setValue(item.code.replace(/[^a-zA-Z0-9 ]/g, \"\"));\r\n $$(\"ma_dt\").setValue(item.code);\r\n }\r\n });\r\n }\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n id: \"usertracuu-win\",\r\n position: \"center\",\r\n move: true,\r\n resize: true,\r\n head: \"Thông tin khách hàng hỗ trợ\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n //elementsConfig: { labelWidth: 100 },\r\n view: \"form\",\r\n width: 500,\r\n // height: 150,\r\n id: \"usertracuu-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"text\",\r\n label: \"Chema name: \",\r\n labelWidth: 80,\r\n name: \"schema_name\",\r\n id: \"schema_name\",\r\n readonly: true,\r\n hidden: true,\r\n css: \"mcls_readonly_text\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Mã số thuế: \",\r\n labelWidth: 80,\r\n name: \"mst\",\r\n id: \"mst\",\r\n readonly: true,\r\n css: \"mcls_readonly_text\",\r\n hidden: true,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Mã KH : \",\r\n labelWidth: 80,\r\n name: \"ma_dt\",\r\n id: \"ma_dt\",\r\n readonly: true,\r\n css: \"mcls_readonly_text\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Username \",\r\n labelWidth: 80,\r\n name: \"username\",\r\n id: \"username\",\r\n // readonly: true,\r\n readonly: true,\r\n css: \"mcls_readonly_text\",\r\n required: true,\r\n invalidMessage: \"Tên truy cập không để trống hoặc nhập không đúng (a-z,A-Z,0-9)\",\r\n validate: webix.rules.isSpecialCharacter,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Password: \",\r\n labelWidth: 80,\r\n name: \"password\",\r\n id: \"password\",\r\n //value: \"minvoice\",\r\n required: true,\r\n invalidMessage: \"Password không được để trống\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Email: \",\r\n labelWidth: 80,\r\n name: \"email\",\r\n id: \"email\",\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n id: \"btnSavve\",\r\n type: \"image\",\r\n image: \"assets/imgs/save.png\",\r\n label: \"Lưu\",\r\n width: 60,\r\n click: function () {\r\n var form = webix.$$(\"usertracuu-form\");\r\n var item = form.getValues();\r\n\r\n if ($$(\"usertracuu-form\").validate()) {\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/CreateUser_tracuu\", item, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n webix.message(data.ok, \"success\");\r\n webix.$$(\"usertracuu-win\").close();\r\n } else {\r\n webix.message(data.error, \"error\");\r\n }\r\n form.enable();\r\n form.hideProgress();\r\n });\r\n }\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"image\",\r\n image: \"assets/imgs/reset.png\",\r\n label: \"Reset Password\",\r\n width: 130,\r\n click: function () {\r\n var form = webix.$$(\"usertracuu-form\");\r\n var item = form.getValues();\r\n\r\n webix.confirm({\r\n text: \"Bạn có chắc chắn muốn reset mật khẩu về mật khẩu mặc định ?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/ResetPassUserTracuu\", item, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n webix.message(data.ok, \"success\");\r\n webix.$$(\"usertracuu-win\").close();\r\n } else {\r\n webix.message(data.error, \"error\");\r\n }\r\n form.enable();\r\n form.hideProgress();\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n id: \"btnXoa\",\r\n type: \"image\",\r\n image: \"assets/imgs/xoa.png\",\r\n label: \"Xóa\",\r\n width: 60,\r\n click: function () {\r\n var form = webix.$$(\"usertracuu-form\");\r\n var item = form.getValues();\r\n webix.confirm({\r\n text: \"Bạn có chắc chắn muốn xóa tài khoản ?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/DeleteUserTracuu\", item, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n webix.message(data.ok, \"success\");\r\n webix.$$(\"usertracuu-win\").close();\r\n } else {\r\n webix.message(data.error, \"error\");\r\n }\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"image\",\r\n image: \"assets/imgs/close.png\",\r\n label: \"Hủy bỏ\",\r\n hotkey: \"esc\",\r\n width: 80,\r\n click: function () {\r\n webix.$$(\"usertracuu-win\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n initUI: initUI,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setValues: function (item) {\r\n var form = webix.$$(\"usertracuu-form\");\r\n // var table = webix.$$(\"discountTable\");\r\n\r\n form.setValues(item);\r\n // table.parse(item.hp_hsgiamtrus, \"json\");\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/xoabo',[\"app\", \"locale\", \"models/user\", \"views/modules/minvoiceplugin\"], function (app, _, user, plugin) {\r\n var editmode = 0;\r\n\r\n function signOnServer(data, cert, server_cert) {\r\n\r\n var parameters = {\r\n xml: data[\"InvoiceXmlData\"],\r\n refUri: \"#data\",\r\n certSerial: cert.so_serial,\r\n tokenSerial: cert.tokenSerial,\r\n signId: \"seller\",\r\n signTag: \"Signatures\",\r\n pass: cert.pass,\r\n inv_InvoiceAuth_id: data[\"inv_InvoiceAuth_id\"]\r\n };\r\n\r\n data.serialNumber = cert.so_serial;\r\n\r\n webix.ajax()\r\n .bind(data)\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(server_cert + \"/Token/SignXml\", parameters, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json[\"error\"] });\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n }\r\n else {\r\n var parameters = this;\r\n parameters.InvoiceXmlData = json.xml;\r\n\r\n webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/SaveInvoiceXoaBo\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result[\"error\"] });\r\n }\r\n else {\r\n var table = webix.$$(\"windowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n $$(\"chukyso-win\").close();\r\n }\r\n\r\n });\r\n\r\n }\r\n });\r\n }\r\n\r\n\r\n function signOnServerFile(data, cert, server_cert) {\r\n\r\n var parameters = {\r\n xml: data[\"InvoiceXmlData\"],\r\n refUri: \"#data\",\r\n certSerial: cert.so_serial,\r\n tokenSerial: cert.tokenSerial,\r\n signId: \"seller\",\r\n signTag: \"Signatures\",\r\n pass: cert.pass,\r\n path: cert.path,\r\n inv_InvoiceAuth_id: data[\"inv_InvoiceAuth_id\"]\r\n };\r\n\r\n data.serialNumber = cert.so_serial;\r\n\r\n webix.ajax()\r\n .bind(data)\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(server_cert + \"/Token/SignXmlByFile\", parameters, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json[\"error\"] });\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n }\r\n else {\r\n var parameters = this;\r\n parameters.InvoiceXmlData = json.xml;\r\n\r\n webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/SaveInvoiceXoaBo\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result[\"error\"] });\r\n }\r\n else {\r\n var table = webix.$$(\"windowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n $$(\"chukyso-win\").close();\r\n }\r\n\r\n });\r\n\r\n }\r\n });\r\n }\r\n\r\n function signOnCertFile(cert){\r\n \r\n var form = webix.$$(\"chukyso-form\");\r\n\r\n var item = form.getValues();\r\n var table = webix.$$(\"windowData\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n var postData={\r\n username:user.getCurrentUser(),\r\n branch_code:\"\",\r\n template_code:selectedItem.template_code,\r\n invoice_series:selectedItem.invoice_series,\r\n invoice_number:selectedItem.invoice_number,\r\n cer_serial:cert.so_serial,\r\n ngayvb:moment(item.ngayvb).format(\"YYYY-MM-DD\"),\r\n sovb:item.sovb,\r\n ghi_chu:item.ghi_chu\r\n };\r\n\r\n webix.ajax()\r\n .headers({'Content-Type':'application/json'})\r\n .post(app.config.host + \"/Invoice/DeleteByCertFile\",postData,function(text){\r\n var res=JSON.parse(text);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n if (res.hasOwnProperty(\"error\")){\r\n webix.message({type:\"error\",text:res.error});\r\n }\r\n else {\r\n var table = webix.$$(\"windowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n $$(\"chukyso-win\").close();\r\n }\r\n });\r\n }\r\n\r\n return {\r\n $ui: {\r\n view: \"window\", modal: true, id: \"chukyso-win\", position: \"center\",\r\n head: \"Xoá bỏ hóa đơn\",\r\n width: 400,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n id: \"chukyso-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"text\",\r\n label: _(\"SOVB\"),\r\n labelPosition: \"top\",\r\n name: \"sovb\",\r\n required: true,\r\n invalidMessage: \"Số văn bản không được để trống\"\r\n },\r\n {\r\n view: \"datepicker\",\r\n label: _(\"NGAYVB\"),\r\n labelPosition: \"top\",\r\n name: \"ngayvb\",\r\n format: \"%d/%m/%Y\",\r\n required: true,\r\n invalidMessage: \"Ngày văn bản không được để trống\"\r\n },\r\n {\r\n view: \"textarea\",\r\n name: \"ghi_chu\",\r\n label: _(\"GHI_CHU\"),\r\n labelPosition: \"top\",\r\n height: 150\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\", view: \"button\", label: \"Lưu (F10)\", type: \"form\", align: \"center\", width: 100,\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"chukyso-form\");\r\n\r\n if (form.validate() == false) return;\r\n\r\n var item = form.getValues();\r\n\r\n var table = webix.$$(\"windowData\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n var a = webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/GetThongTinXoaBo\", {\r\n id: selectedItem.id,\r\n sovb: item.sovb,\r\n ngayvb: item.ngayvb,\r\n ghi_chu: item.ghi_chu\r\n });\r\n\r\n var b = webix.ajax(app.config.host + \"/Invoice/GetListCertificates\");\r\n\r\n var c = webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/System/ExecuteCommand\", {\r\n command: \"CM00019\",\r\n parameter: {\r\n ma_dvcs: \"\"\r\n }\r\n });\r\n\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n\r\n webix.promise.all([a, b, c]).then(function (results) {\r\n var a_result = results[0].json();\r\n var listcerts = results[1].json();\r\n var c_result = results[2].json();\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n\r\n if (listcerts.length == 0) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n\r\n form.enable();\r\n form.hideProgress();\r\n\r\n return;\r\n }\r\n\r\n if (a_result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: 'error', text: a_result.error });\r\n\r\n form.enable();\r\n form.hideProgress();\r\n\r\n return;\r\n\r\n }\r\n\r\n var kytaptrung = \"\";\r\n var server_cert = \"\";\r\n\r\n for (var i = 0; i < c_result.length; i++) {\r\n var item = c_result[i];\r\n\r\n if (item.ma == \"KYTAPTRUNG\") {\r\n kytaptrung = item.gia_tri;\r\n }\r\n\r\n if (item.ma == \"SERVER_CERT\") {\r\n server_cert = item.gia_tri;\r\n }\r\n }\r\n\r\n //console.log(listcerts.length);\r\n\r\n if (kytaptrung == \"C\") {\r\n if (listcerts.length == 1) {\r\n signOnServer(a_result, listcerts[0], server_cert);\r\n }\r\n else {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n webix.modalbox.hide(); \r\n signOnServer(table.config.xmlData, cert, table.config.server_cert);\r\n\r\n break;\r\n }\r\n }\r\n });\r\n\r\n var popupText = document.getElementsByClassName(\"webix_popup_text\")[0];\r\n popupText.style.paddingTop = 0;\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n xmlData: a_result,\r\n server_cert: server_cert,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\"\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"so_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150\r\n },\r\n {\r\n id: \"subjectname\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450\r\n },\r\n {\r\n id: \"ngaybatdau\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200\r\n },\r\n {\r\n id: \"ngayketthuc\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice/GetListCertificates\"\r\n });\r\n }\r\n }\r\n else {\r\n if (kytaptrung == \"FILE\") {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n webix.modalbox.hide();\r\n signOnServerFile(table.config.xmlData, cert, table.config.server_cert);\r\n\r\n break;\r\n }\r\n }\r\n });\r\n\r\n var popupText = document.getElementsByClassName(\"webix_popup_text\")[0];\r\n popupText.style.paddingTop = 0;\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n xmlData: a_result,\r\n server_cert: server_cert,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\"\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"so_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150\r\n },\r\n {\r\n id: \"subjectname\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450\r\n },\r\n {\r\n id: \"ngaybatdau\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200\r\n },\r\n {\r\n id: \"ngayketthuc\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice/GetListCertificatesFile\"\r\n });\r\n }\r\n else {\r\n\r\n if (listcerts.length == 1){\r\n var cert = listcerts[0];\r\n\r\n if (cert.cert_type == \"FILE\"){\r\n signOnCertFile(cert);\r\n return;\r\n }\r\n }\r\n \r\n console.log(\"Signature_Client\");\r\n //console.log(a_result);\r\n var resultTime;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/System/GetDate\", function (text) {\r\n resultTime = JSON.parse(text);\r\n });\r\n var hub = plugin.hub();\r\n\r\n hub.off('resCommand');\r\n hub.on('resCommand', function (result) {\r\n var json = JSON.parse(result);\r\n console.log(json);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: 'error', text: json.error });\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n }\r\n else {\r\n\r\n var callback = json.callback;\r\n\r\n if (callback == \"SignCancelInvoice\") {\r\n var parameters = json.data;\r\n\r\n webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/SaveInvoiceXoaBo\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result[\"error\"] });\r\n }\r\n else {\r\n var table = webix.$$(\"windowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n $$(\"chukyso-win\").close();\r\n }\r\n });\r\n }\r\n }\r\n });\r\n\r\n var arg = {\r\n callback: \"SignCancelInvoice\",\r\n idData: \"#data\",\r\n data: a_result,\r\n idSigner: \"seller\",\r\n tagSign: \"Signatures\",\r\n dateKy: resultTime.dateKy,\r\n listcerts: listcerts\r\n };\r\n\r\n\r\n hub.invoke('execCommand', arg.callback, JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success done !\");\r\n //console.log(\"2\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n }\r\n }\r\n\r\n }).fail(function (err) {\r\n alert(err);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n });\r\n\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n\r\n }\r\n },\r\n {\r\n view: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", type: \"danger\", align: \"center\", width: 100,\r\n click: function () {\r\n webix.$$(\"chukyso-win\").close();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n\r\n ]\r\n }\r\n\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n }\r\n };\r\n\r\n});\ndefine('views/hotro',[\"app\", \"locale\", \"views/forms/license\"], function (app, _, licenseForm) {\r\n \r\n\r\n webix.$$(\"title\").parse({ title: \"Gửi yêu cầu hỗ trợ đến MobiFone Invoice\", details: \"Gửi yêu cầu hỗ trợ đến MobiFone Invoice\" });\r\n\r\n var layout = {\r\n // paddingY: 60,\r\n // paddingX: 500,\r\n cols: [\r\n { gravity: 1, template: \"\" },\r\n {\r\n rows: [\r\n { gravity: 1, template: \"\" },\r\n // {\r\n // height: 35,\r\n // type: \"toolbar\",\r\n // cols: controls\r\n // },\r\n {\r\n // view: \"scrollview\",\r\n // scroll: \"y\",\r\n // body: {\r\n view: \"form\",\r\n id: \"form_hotro\",\r\n paddingY: 10,\r\n // width: 500,\r\n // height: 500,\r\n position: \"center\",\r\n paddingX: 10,\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"text\",\r\n name: \"ms_thue\",\r\n id: \"ms_thue\",\r\n label: _(\"MS_THUE\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\",\r\n },\r\n {\r\n view: \"text\",\r\n name: \"ten_dvcs\",\r\n id: \"ten_dvcs\",\r\n label: _(\"DONVI\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\",\r\n },\r\n {\r\n view: \"text\",\r\n name: \"dia_chi\",\r\n label: _(\"DIA_CHI\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\",\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"nguoi_dai_dien\",\r\n label: _(\"NGUOI_DAI_DIEN_PL\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\",\r\n },\r\n {\r\n view: \"text\",\r\n name: \"email\",\r\n label: \"Email\",\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"nguoi_lien_he\",\r\n id: \"nguoi_lien_he\",\r\n label: _(\"Người liên hệ\"),\r\n labelPosition: \"top\",\r\n required: true,\r\n invalidMessage: \"Bạn phải nhập người liên hệ\",\r\n },\r\n\r\n {\r\n view: \"text\",\r\n name: \"sdt\",\r\n id: \"sdt\",\r\n label: \"Số điện thoại\",\r\n labelPosition: \"top\",\r\n required: true,\r\n //webix.ru\r\n invalidMessage: \"Bạn phải nhập số điện thoại\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"teamview\",\r\n id: \"teamview\",\r\n label: _(\"Teamview (UltraViewer)\"),\r\n labelPosition: \"top\",\r\n },\r\n\r\n {\r\n view: \"text\",\r\n name: \"pass\",\r\n id: \"pass\",\r\n label: \"Password\",\r\n labelPosition: \"top\",\r\n },\r\n ],\r\n },\r\n {\r\n id: \"noi_dung\",\r\n view: \"textarea\",\r\n name: \"noi_dung\",\r\n label: \"Yêu cầu hỗ trợ\",\r\n height: 160,\r\n labelPosition: \"top\",\r\n },\r\n\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Gửi (F10)\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"form_hotro\");\r\n\r\n var item = form.getValues();\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y - %H:%i\");\r\n var string = format(new Date());\r\n\r\n var descrip =\r\n \"Ngày :\" +\r\n string +\r\n \"
\" +\r\n \"Công ty :\" +\r\n item.ten_dvcs +\r\n \"
\" +\r\n \"Mã số thuế :\" +\r\n item.ms_thue +\r\n \"
\" +\r\n \"Người liên hệ: \" +\r\n item.nguoi_lien_he +\r\n \"
\" +\r\n \"Số điện thoại: \" +\r\n item.sdt +\r\n \"
\" +\r\n \"Teamview (UltraViewer): \" +\r\n item.teamview +\r\n \"
\" +\r\n \"Pass: \" +\r\n item.pass +\r\n \"
\" +\r\n \"Nội dung cần hỗ trợ: \" +\r\n item.noi_dung +\r\n \"
\";\r\n\r\n if ($$(\"form_hotro\").validate()) {\r\n var box = webix.modalbox({\r\n title: \"Đang gửi yêu cầu hỗ trợ đến MobiFone Invoice\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var data = {\r\n mst: item.ms_thue,\r\n noidung: item.noi_dung,\r\n nguoi_lien_he: item.nguoi_lien_he,\r\n sdt_nguoi_lien_he: item.sdt,\r\n ultra_teamview: item.teamview,\r\n pass: item.pass,\r\n };\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/SendSupport\", data, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"nguoi_lien_he\").setValue(null);\r\n $$(\"sdt\").setValue(null);\r\n $$(\"teamview\").setValue(null);\r\n $$(\"pass\").setValue(null);\r\n $$(\"noi_dung\").setValue(null);\r\n webix.message(\"Gửi yêu cầu hỗ trợ thành công !\", \"debug\");\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n webix.modalbox.hide(box);\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Nhập lại (ESC)\",\r\n align: \"center\",\r\n width: 120,\r\n type: \"danger\",\r\n click: function () {\r\n $$(\"nguoi_lien_he\").setValue(null);\r\n $$(\"sdt\").setValue(null);\r\n $$(\"teamview\").setValue(null);\r\n $$(\"pass\").setValue(null);\r\n $$(\"noi_dung\").setValue(null);\r\n // webix.$$(\"chukyso-win\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n { gravity: 1, template: \"\" },\r\n ],\r\n },\r\n { gravity: 1, template: \"\" },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var url = app.config.host + \"/System/GetInfoCompany\";\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"form_hotro\").setValues(json);\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/infocompany',[\r\n \"app\",\r\n \"locale\",\r\n \"views/forms/license\",\r\n], function (app, _, licenseForm) {\r\n \r\n\r\n webix.$$(\"title\").parse({ title: \"Thông tin doanh nghiệp\", details: \"Cập nhật thông tin doanh nghiệp\" });\r\n\r\n var controls = [\r\n {},\r\n {\r\n id: \"btnSave\",\r\n view: \"button\",\r\n type: \"danger\",\r\n //css: \"mcls_btn_save\", \r\n icon: \"save\",\r\n label: _(\"Ghi\") + \" (F10)\",\r\n width: 85,\r\n shortcut: \"F10\",\r\n on: {\r\n onClick: function () {\r\n\r\n var form = webix.$$(\"foInfoCompany\");\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n if (form.validate()) {\r\n var item = form.getValues();\r\n\r\n webix.ajax()\r\n .bind(form)\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/System/SaveInfoCompany\", item, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n this.enable();\r\n this.hideProgress();\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"debug\", text: \"Đã lưu thành công\" });\r\n\r\n }\r\n else {\r\n webix.message({ type: \"error\", text: data.error });\r\n }\r\n });\r\n }\r\n\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {}\r\n ];\r\n\r\n var layout = {\r\n cols: [\r\n { gravity: 0.5, template: \"\" },\r\n {\r\n rows: [\r\n { height: 20 },\r\n {\r\n view: \"form\",\r\n id: \"foInfoCompany\",\r\n paddingY: 10,\r\n paddingX: 10,\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"text\",\r\n name: \"tax_code\",\r\n label: _(\"MS_THUE\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\"\r\n },\r\n {\r\n view: \"text\",\r\n name: \"name\",\r\n label: _(\"DONVI\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\"\r\n },\r\n {\r\n view: \"text\",\r\n name: \"address\",\r\n label: _(\"DIA_CHI\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\"\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"nguoi_dai_dien\",\r\n label: _(\"NGUOI_DAI_DIEN_PL\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\"\r\n },\r\n {\r\n view: \"text\",\r\n name: \"email\",\r\n label: \"Email\",\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\"\r\n }\r\n ]\r\n },\r\n {\r\n view: \"text\",\r\n name: \"begin_date\",\r\n label: _(\"NGAY_BD_NAM_TC\"),\r\n placeholder: \"dd/mm\",\r\n labelPosition: \"top\",\r\n invalidMessage: _(\"NGAY_BD_NAM_TC\") + \" không hợp lệ\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n this.validate();\r\n }\r\n }\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"tel\",\r\n label: _(\"DIEN_THOAI\"),\r\n labelPosition: \"top\",\r\n validate: webix.rules.isPhoneNumber,\r\n invalidMessage: \"Định dạng điện thoại nhập không đúng\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv != \"\") {\r\n this.validate();\r\n }\r\n }\r\n }\r\n },\r\n\r\n {\r\n view: \"text\",\r\n name: \"fax\",\r\n label: \"Fax\",\r\n labelPosition: \"top\",\r\n validate: webix.rules.isPhoneNumber,\r\n invalidMessage: \"Định dạng fax nhập không đúng\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv != \"\") {\r\n this.validate();\r\n }\r\n }\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"city\",\r\n label: _(\"TINH_THANH\"),\r\n labelPosition: \"top\"\r\n },\r\n\r\n {\r\n view: \"text\",\r\n name: \"district\",\r\n label: \"Quận huyện\",\r\n labelPosition: \"top\"\r\n }\r\n ]\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"bank_account\",\r\n label: _(\"TAI_KHOAN\"),\r\n labelPosition: \"top\",\r\n validate: webix.rules.isPhoneNumber,\r\n invalidMessage: \"Định dạng tài khoản nhập không đúng\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv != \"\") {\r\n this.validate();\r\n }\r\n }\r\n }\r\n },\r\n {\r\n view: \"text\",\r\n name: \"bank_name\",\r\n label: _(\"TAI_NH\"),\r\n labelPosition: \"top\"\r\n }\r\n ]\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"combo\",\r\n name: \"provincial_tax_authorities\",\r\n label: \"Cơ quan thuế cấp tỉnh\",\r\n labelPosition: \"top\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00015\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n webix.ajax()\r\n .headers({ 'Content-Type': 'application/json' })\r\n .post(\r\n app.config.host + \"/System/ExecuteCommand\",\r\n {\r\n command: \"CM00007\",\r\n parameter: {\r\n nhom: newv\r\n }\r\n },\r\n function (text) {\r\n var result = JSON.parse(text);\r\n\r\n var list = $$(\"ma_cqthuecapql\").getPopup().getList();\r\n list.clearAll();\r\n\r\n list.parse(result);\r\n });\r\n\r\n\r\n }\r\n }\r\n },\r\n {\r\n id: \"ma_cqthuecapql\",\r\n view: \"combo\",\r\n name: \"manage_tax_authorities\",\r\n label: \"Cơ quan thuế quản lý\",\r\n labelPosition: \"top\",\r\n options: []\r\n }\r\n ]\r\n },\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin đơn vị chủ quản\",\r\n body: {\r\n rows: [\r\n {\r\n view: \"text\",\r\n name: \"manage_taxcode\",\r\n label: _(\"MS_THUE\"),\r\n validate: webix.rules.isTaxCode,\r\n invalidMessage: \"Mã số thuế không hợp lệ\",\r\n labelPosition: \"top\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv != \"\") {\r\n this.validate();\r\n }\r\n }\r\n }\r\n },\r\n {\r\n view: \"text\",\r\n name: \"manage_unit_name\",\r\n label: _(\"DONVI\"),\r\n labelPosition: \"top\"\r\n },\r\n {\r\n view: \"text\",\r\n name: \"manage_email\",\r\n validate: webix.rules.isEmail,\r\n invalidMessage: \"Email không hợp lệ\",\r\n label: _(\"EMAIL\"),\r\n labelPosition: \"top\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv != \"\") {\r\n this.validate();\r\n }\r\n }\r\n }\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n margin: 15,\r\n cols: controls\r\n }\r\n ],\r\n rules: {\r\n begin_date: function (value) {\r\n if (value != \"\") {\r\n\r\n if (value.toString().length != 5)\r\n return false;\r\n\r\n var patt = /^[0-1][1-2][/][0-9][0-9]$/;\r\n\r\n return patt.test(value);\r\n\r\n }\r\n return true;\r\n }\r\n }\r\n },\r\n { height: 10 }\r\n ]\r\n },\r\n { gravity: 0.5, template: \"\" }\r\n\r\n ]\r\n\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var url = app.config.host + \"/System/GetInfoCompany\";\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"foInfoCompany\").setValues(json);\r\n\r\n });\r\n }\r\n\r\n };\r\n});\ndefine('views/license',[\r\n \"app\",\r\n \"locale\",\r\n \"views/forms/license\",\r\n], function (app, _, licenseForm) {\r\n \r\n\r\n webix.$$(\"title\").parse({ title: \"Đăng ký bản quyền\", details: \"Đăng ký số lượng hóa đơn sử dụng\" });\r\n\r\n var controls = [\r\n {\r\n id: \"btnRegFirst\",\r\n view: \"button\",\r\n type: \"form\",\r\n icon: \"registered\",\r\n label: _(\"DANG_KY_LAN_DAU\"),\r\n width: 150,\r\n on: {\r\n onClick: function () {\r\n\r\n webix.ajax().bind(this).get(app.config.host + \"/License/Info\", function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.key_license != undefined) {\r\n webix.alert({\r\n title: _(\"THONG_BAO\"),\r\n ok: \"OK\",\r\n text: \"Phần mềm đã được đăng ký lần đầu\"\r\n });\r\n }\r\n else {\r\n var win = this.$scope.ui(licenseForm.$ui);\r\n win.getHead().setHTML(_(\"DANG_KY_LAN_DAU\"));\r\n win.show();\r\n $$(\"license-form\").setValues(json);\r\n }\r\n });\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n id: \"btnRegMore\",\r\n view: \"button\",\r\n type: \"danger\",\r\n icon: \"registered\",\r\n label: _(\"DANG_KY_THEM\"),\r\n width: 150,\r\n on: {\r\n onClick: function () {\r\n\r\n webix.ajax().bind(this).get(app.config.host + \"/License/Info\", function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.key_license != undefined) {\r\n var win = this.$scope.ui(licenseForm.$ui);\r\n win.getHead().setHTML(_(\"DANG_KY_THEM\"));\r\n win.show();\r\n $$(\"license-form\").setValues(json);\r\n }\r\n else {\r\n\r\n webix.alert({\r\n title: _(\"THONG_BAO\"),\r\n ok: \"OK\",\r\n text: \"Phần mềm chưa được đăng ký lần đầu\"\r\n });\r\n }\r\n });\r\n\r\n\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {}\r\n ];\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 35,\r\n type: \"toolbar\",\r\n cols: controls\r\n },\r\n {\r\n view: \"iframe\",\r\n id: \"framePdf\",\r\n toolbar: \"toolbar\",\r\n //src: app.config.host + \"/License/PrintLicenseInfo\"\r\n\r\n }\r\n ]\r\n\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var url = app.config.host + \"/License/PrintLicenseInfo\";\r\n\r\n var form = view;\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n webix.ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, {\r\n error: function (text, data, XmlHttpRequest) {\r\n form.enable();\r\n form.hideProgress();\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: 'application/pdf' });\r\n var fileURL = URL.createObjectURL(file);\r\n\r\n var framePdf = $$(\"framePdf\");\r\n framePdf.load(fileURL);\r\n\r\n form.enable();\r\n form.hideProgress();\r\n }\r\n });\r\n }\r\n\r\n };\r\n});\ndefine('views/licenseInvoice',[\r\n \"app\",\r\n \"locale\",\r\n \"models/user\",\r\n \"views/menus/version\",\r\n], function (app, _, user, version) {\r\n \r\n\r\n var op = [];\r\n webix.$$(\"title\").parse({ title: \"Thông tin doanh nghiệp\", details: \"Cập nhật thông tin doanh nghiệp\" });\r\n\r\n var controls = [\r\n {},\r\n {\r\n id: \"btnSave\",\r\n view: \"button\",\r\n type: \"danger\",\r\n icon: \"save\",\r\n label: \"Cấp bản quyền (F10)\",\r\n //width: 135,\r\n shortcut: \"F10\",\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"foInfoCompany\");\r\n\r\n if (form.validate()) {\r\n var item = form.getValues();\r\n if (item.floderId == null || item.floderId == \"\") {\r\n var box = webix.modalbox({\r\n title: \"Đang tạo thư mục ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200\r\n });\r\n\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/License/SaveInfoCompany\", item, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"debug\", text: \"Cấp bản quyền thành công\" });\r\n var table = webix.$$(\"foInfoCompany\");\r\n table.refresh();\r\n\r\n table.load(table.config.url);\r\n webix.modalbox.hide(box);\r\n }\r\n else {\r\n webix.message({ type: \"error\", text: data.error });\r\n webix.modalbox.hide(box);\r\n }\r\n });\r\n }\r\n else {\r\n webix.message(\"Khách hàng đã được cấp bản quyền !\", \"error\");\r\n return;\r\n }\r\n }\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {}\r\n ];\r\n\r\n var layout = {\r\n // paddingY: 60,\r\n // paddingX: 500,\r\n cols: [\r\n { gravity: 0.5, template: \"\" },\r\n {\r\n rows: [\r\n { gravity: 1, template: \"\" },\r\n {\r\n view: \"form\",\r\n id: \"foInfoCompany\",\r\n paddingY: 15,\r\n // width: 700,\r\n // height:300,\r\n position: \"center\",\r\n paddingX: 15,\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"ms_thue\",\r\n label: _(\"MS_THUE\"),\r\n css: \"mcls_license_text\",\r\n readonly: true,\r\n labelPosition: \"top\"\r\n },\r\n {\r\n view: \"text\",\r\n name: \"nguoi_dai_dien\",\r\n label: _(\"NGUOI_DAI_DIEN_PL\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\"\r\n }\r\n ]\r\n\r\n },\r\n {\r\n view: \"text\",\r\n name: \"ten_dvcs\",\r\n label: _(\"DONVI\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\"\r\n },\r\n {\r\n view: \"text\",\r\n name: \"dia_chi\",\r\n label: _(\"DIA_CHI\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\"\r\n },\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin đơn vị chủ quản\",\r\n body: {\r\n rows: [\r\n {\r\n view: \"text\",\r\n name: \"mst_dvcq\",\r\n label: _(\"MS_THUE\"),\r\n validate: webix.rules.isTaxCode,\r\n invalidMessage: \"Mã số thuế không hợp lệ\",\r\n labelPosition: \"top\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv != \"\") {\r\n this.validate();\r\n }\r\n }\r\n }\r\n },\r\n {\r\n view: \"text\",\r\n name: \"ten_dvcq\",\r\n label: _(\"DONVI\"),\r\n labelPosition: \"top\"\r\n },\r\n {\r\n view: \"text\",\r\n name: \"email_dvcq\",\r\n validate: webix.rules.isEmail,\r\n invalidMessage: \"Email không hợp lệ\",\r\n label: _(\"EMAIL\"),\r\n labelPosition: \"top\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv != \"\") {\r\n this.validate();\r\n }\r\n }\r\n }\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n view: \"text\",\r\n name: \"floderId\",\r\n label: _(\"Key\"),\r\n css: \"mcls_license_text\",\r\n readonly: true,\r\n labelPosition: \"top\"\r\n },\r\n {\r\n view: \"text\",\r\n name: \"floderTitle\",\r\n label: _(\"Title\"),\r\n validate: webix.rules.isEmpty,\r\n invalidMessage: \"Bạn phải nhập tiêu đề cho thư mục !\",\r\n required: true,\r\n //css: \"mcls_readonly_text\",\r\n //readonly: true,\r\n labelPosition: \"top\"\r\n },\r\n {\r\n view: \"text\",\r\n name: \"floderDes\",\r\n label: _(\"Description\"),\r\n validate: webix.rules.isEmpty,\r\n invalidMessage: \"Bạn phải nhập diễn dải cho thư mục !\",\r\n required: true,\r\n //css: \"mcls_readonly_text\",\r\n //readonly: true,\r\n labelPosition: \"top\"\r\n },\r\n {\r\n margin: 15,\r\n cols: controls\r\n\r\n }\r\n\r\n ]\r\n },\r\n { gravity: 5, template: \"\" }\r\n ]\r\n },\r\n { gravity: 0.5, template: \"\" }\r\n ]\r\n\r\n };\r\n\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var url = app.config.host + \"/System/GetInfoCompany\";\r\n $$(\"foInfoCompany\").config.url = url;\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"foInfoCompany\").setValues(json);\r\n\r\n });\r\n }\r\n };\r\n});\ndefine('views/quenmk',[\"app\", \"locale\"], function (app, _) {\r\n //var json = version.getInfocompany();\r\n //$$(\"hotro-form\").setValues(json);\r\n\r\n var layout = {\r\n view: \"window\",\r\n modal: true,\r\n id: \"retrivepass-win\",\r\n position: \"center\",\r\n head: {\r\n // height: 40,\r\n rows: [\r\n {\r\n height: 15,\r\n borderless: true,\r\n cols: [\r\n { gravity: 1, template: \"\" },\r\n {\r\n view: \"icon\",\r\n icon: \"fal fa-times\",\r\n css: \"icquenmk\",\r\n hotkey: \"esc\",\r\n click: function () {\r\n $$(\"retrivepass-win\").close();\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n id: \"head-form\",\r\n height: 60,\r\n view: \"template\",\r\n css: \"quenmklock\",\r\n borderless: true,\r\n template: function (obj) {\r\n return '';\r\n },\r\n },\r\n {\r\n view: \"label\",\r\n label: \"Quên mật khẩu tài khoản MobiFone Invoice\",\r\n css: \"quenmk\",\r\n },\r\n ],\r\n },\r\n width: 500,\r\n //minheight: 240,\r\n height: 350,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 30,\r\n //elementsConfig:{labelWidth: 120},\r\n view: \"form\",\r\n id: \"retrivepassForm\",\r\n complexData: true,\r\n elements: [\r\n {\r\n view: \"template\",\r\n css: \"forgot-password-link\",\r\n borderless: true,\r\n template: \"Quý khách quên mật khẩu tài khoản SSO, vui lòng truy cập tại đây\",\r\n },\r\n {\r\n view: \"template\",\r\n borderless: true,\r\n template: \"
Hệ thống của MobiFone Invoice sẽ gửi mật khẩu mới cho Quý khách hàng. \" + \"Quý khách hàng dùng mật khẩu đó để đăng nhập vào phần mềm
\",\r\n css: \"quenmktemplate\",\r\n },\r\n {\r\n view: \"text\",\r\n labelPosition: \"top\",\r\n //id: \"email\",\r\n name: \"email\",\r\n label: \"MỜI NHẬP EMAIL\",\r\n icon: \"email\",\r\n css: \"quenmkemail\",\r\n required: true,\r\n invalidMessage: \"Bạn chưa nhập địa chỉ email hoặc email định dạng không đúng\",\r\n placeholder: \"ví dụ lan@gmail.com\",\r\n validate: webix.rules.isEmail,\r\n },\r\n // {\r\n // view: \"fieldset\",\r\n // label: \"Hướng dẫn\",\r\n // body: {\r\n // rows: [\r\n // {\r\n // id: \"version\",\r\n // //borderless: true,\r\n // css: { \"background\": \"#e6f7ff !important\" },\r\n // // width: 200,\r\n // view: \"template\",\r\n // template: \"

Bước 1:


\"\r\n // + \"

Bước 2:

\"\r\n // + \"

Bước 3:

\"\r\n // }\r\n // ]\r\n // }\r\n // },\r\n\r\n {\r\n margin: 10,\r\n cols: [\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Gửi yêu cầu (F10)\",\r\n css: \"btnlogin\",\r\n align: \"center\",\r\n height: 43,\r\n width: 180,\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n if ($$(\"retrivepassForm\").validate()) {\r\n var form = $$(\"retrivepassForm\");\r\n\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Account/ResetPass\", $$(\"retrivepassForm\").getValues(), function (text, xml, xhr) {\r\n var json = JSON.parse(text);\r\n\r\n var form = $$(\"retrivepassForm\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n // webix.alert({\r\n // title: \"Thông báo\",\r\n // ok: \"OK\",\r\n // text: json.error,\r\n // type: \"alert-error\"\r\n // });\r\n webix.message(json.error, \"error\");\r\n } else {\r\n webix.alert({\r\n title: \"Thông báo\",\r\n ok: \"OK\",\r\n text: \"Đã gửi mật khẩu tới email.Bạn hãy kiểm tra lại.\",\r\n });\r\n }\r\n });\r\n } else {\r\n $$(\"retrivepassForm\").focus();\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // view: \"button\", hidden: true, hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", align: \"center\", width: 120, type: \"danger\",\r\n // click: function () {\r\n // webix.$$(\"retrivepass-win\").close();\r\n // }\r\n // },\r\n {},\r\n ],\r\n },\r\n { height: 10 },\r\n ],\r\n },\r\n };\r\n return {\r\n $ui: layout,\r\n initUI: function (json) {\r\n $$(\"retrivepassForm\").setValues(json);\r\n },\r\n };\r\n});\r\n\ndefine('views/thongbaosso_nologin',[\"app\", \"locale\", \"views/forms/link_sso_nologin\"], function (app, _, linkSSO) {\r\n\tvar layout = {\r\n\t\tview: \"window\",\r\n\t\tmodal: true,\r\n\t\tid: \"notisso\",\r\n\t\tposition: \"center\",\r\n\t\thead: \"Thông báo\",\r\n\t\twidth: 800,\r\n\t\theight: 400,\r\n\t\tbody: {\r\n\t\t\tview: \"form\",\r\n\t\t\tid: \"notissobody\",\r\n\t\t\telements: [\r\n\t\t\t\t{\r\n\t\t\t\t\ttype: \"clean\",\r\n\t\t\t\t\trows: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tview: \"template\",\r\n\t\t\t\t\t\t\ttemplate: \"
\" +\r\n\t\t\t\t\t\t\t\t\"

Kính gửi Quý khách hàng

\" +\r\n\t\t\t\t\t\t\t\t\"
Nhằm nâng cao chất lượng dịch vụ, MobiFone tiến hành nâng cấp hệ thống Quản lý tài khoản tập trung (SSO) cho các khách hàng sử dụng hệ sinh thái giải pháp số của MobiFone.
\" +\r\n\t\t\t\t\t\t\t\t\"
\" +\r\n\t\t\t\t\t\t\t\t\"
Sau khi hoàn thành liên kết, Quý khách có thể đăng nhập toàn bộ các hệ thống thuộc hệ sinh thái giải pháp của MobiFone bằng một tài khoản duy nhất.
\" +\r\n\t\t\t\t\t\t\t\t\"
\" +\r\n\t\t\t\t\t\t\t\t\"
Thời gian liên kết: Từ ngày 01/04/2024 đến 30/04/2024
\" +\r\n\t\t\t\t\t\t\t\t\"
\" +\r\n\t\t\t\t\t\t\t\t\"
\" +\r\n\t\t\t\t\t\t\t\t\"
\",\r\n\t\t\t\t\t\t\tborderless: false,\r\n\t\t\t\t\t\t\theight: 200\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tview: \"button\",\r\n\t\t\t\t\t\t\ttemplate: \"
Liên kết ngay tại đây
\",\r\n\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\tvar win = this.$scope.ui(linkSSO.$ui);\r\n\t\t\t\t\t\t\t\t\twin.show();\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\theight: 50\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\ttype: \"clean\",\r\n\t\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview: \"template\",\r\n\t\t\t\t\t\t\t\t\ttemplate: \"Xem chi tiết hướng dẫn tại đây\",\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview: \"button\",\r\n\t\t\t\t\t\t\t\t\tvalue: \"Đóng\",\r\n\t\t\t\t\t\t\t\t\twidth: 100,\r\n\t\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\t$$(\"notisso\").hide();\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t]\r\n\t\t\t\t}\r\n\t\t\t]\r\n\t\t}\r\n\t};\r\n\treturn {\r\n\t\t$ui: layout,\r\n\t\tinitUI: function (json) {\r\n\t\t\treturn\r\n\t\t},\r\n\t};\r\n});\n/**\r\n * Created by Mads on 03-10-2015.\r\n */\r\n\r\ndefine('views/login',[\"models/user\", \"locale\", \"app\", \"helpers/locale\", \"views/menus/version\", \"views/quenmk\", \"views/thongbaosso_nologin\", \"views/forms/link_sso\"], function (user, _, app, locale, version, quenmk, thongbaosso, linkSSO) {\r\n \r\n webix.ui({\r\n view: \"popup\",\r\n id: \"my_pop\",\r\n head: \"Submenu\",\r\n width: 250,\r\n body: {\r\n view: \"list\",\r\n data: [{ id: \"1\", name: \"Cập nhật bản cũ\", location: \"Mobi-Invoice Desktop\" }],\r\n template: \"#name# - #location#\",\r\n autoheight: true,\r\n select: true,\r\n on: {\r\n onItemDblClick: function (id) {\r\n if (id == \"1\") {\r\n app.router(\"/updateToWeb\");\r\n }\r\n },\r\n },\r\n },\r\n });\r\n var values = webix.copy(\r\n {\r\n username: \"\",\r\n password: \"\",\r\n rememberme: false,\r\n language: \"vi\",\r\n ma_dvcs: \"\",\r\n },\r\n Cookies.getJSON(\"Crm\")\r\n );\r\n\r\n var demo = function () {\r\n webix.message(\"ấvasv\");\r\n };\r\n\r\n var action = document.querySelector(\".showLogin\");\r\n action.classList.add(\"inactive\");\r\n\r\n return {\r\n $ui: {\r\n css: \"bodylogin\",\r\n rows: [\r\n {\r\n //borderless: true,\r\n // css: { \"box-shadow\": \"0 15px 10px rgba(0,0,0,0.2)\" },\r\n height: 80,\r\n cols: [\r\n { gravity: 1, template: \"\", width: 150 },\r\n {\r\n view: \"label\",\r\n template: \"\",\r\n height: 65,\r\n borderless: true,\r\n css: { padding: \"10px\", \"padding-top\": \"1px !important\" },\r\n },\r\n {\r\n id: \"version\",\r\n borderless: true,\r\n view: \"label\",\r\n template: \"
Hotline:
\",\r\n css: { padding: \"10px\", \"padding-top\": \"20px\", color: \"white\" },\r\n },\r\n {\r\n rows: [\r\n { gravity: 1, template: \"\" },\r\n {\r\n id: \"cbLanguage\",\r\n view: \"combo\",\r\n width: 125,\r\n options: [\r\n { id: \"vi\", value: \"Việt Nam\" },\r\n /* { id: \"en\", value: \"English\" },\r\n { id: \"ko\", value: \"Korea\" } */\r\n ],\r\n // inputAlign: \"right\",\r\n //css: \"cbLanguage\",\r\n value: locale.getLang(),\r\n on: {\r\n onChange: function (newv, oldv) {\r\n locale.setLang(newv, null);\r\n },\r\n },\r\n },\r\n { gravity: 1, template: \"\" },\r\n ],\r\n },\r\n { gravity: 1, template: \"\", width: 150 },\r\n ],\r\n },\r\n {\r\n cols: [\r\n { gravity: 1, template: \"\" },\r\n // { gravity: 1, template: \"\" },\r\n // { gravity: 1, template: \"\" },\r\n // { gravity: 1, template: \"\" },\r\n // { gravity: 1, template: \"\" },\r\n // { gravity: 1, template: \"\" },\r\n {\r\n // css: { \"padding-left\": \"450px\" },\r\n rows: [\r\n { gravity: 0.05, template: \"\" },\r\n {\r\n view: \"form\",\r\n gravity: 5,\r\n id: \"loginForm\",\r\n width: 900,\r\n height: 550,\r\n margin: 5,\r\n paddingX: 50,\r\n css: \"login\",\r\n borderless: false,\r\n elements: [\r\n {\r\n view: \"label\",\r\n label: \"Đăng nhập\",\r\n css: \"lbldangnhap\",\r\n },\r\n {\r\n view: \"combo\",\r\n id: \"ma_dvcs\",\r\n name: \"ma_dvcs\",\r\n label: _(\"DONVI\"),\r\n width: 330,\r\n css: \"donvilogin\",\r\n //options: app.config.host +\"/System/GetAllDmDvcs\",\r\n options: {\r\n view: \"gridsuggest\",\r\n textValue: \"name\",\r\n body: {\r\n //url: app.config.host + \"/System/GetAllDmDvcs\",\r\n textValue: \"name\",\r\n columns: [\r\n {\r\n id: \"tax_code\",\r\n width: 120,\r\n header: _(\"MS_THUE\"),\r\n },\r\n {\r\n id: \"name\",\r\n width: 450,\r\n header: _(\"DONVI\"),\r\n },\r\n ],\r\n ready: function () {\r\n var values = Cookies.getJSON(\"Crm\");\r\n\r\n var obj = $$(\"ma_dvcs\");\r\n var list = obj.getList();\r\n \r\n if (values === undefined) {\r\n if (list.count()) {\r\n var id = list.getIdByIndex(0);\r\n obj.setValue(id);\r\n }\r\n } else {\r\n var item = list.getItem(values.ma_dvcs);\r\n\r\n if (item != null && item != undefined) {\r\n obj.setValue(values.ma_dvcs);\r\n } else {\r\n if (list.count()) {\r\n var id = list.getIdByIndex(0);\r\n obj.setValue(id);\r\n }\r\n }\r\n }\r\n },\r\n },\r\n },\r\n value: values.ma_dvcs,\r\n required: true,\r\n hidden: true,\r\n },\r\n {\r\n view: \"text\",\r\n id: \"username\",\r\n name: \"username\",\r\n label: _(\"USERNAME\"),\r\n icon: \"user\",\r\n width: 330,\r\n value: values.username,\r\n required: true,\r\n invalidMessage: \"Tên truy cập không để trống!\",\r\n //validate: webix.rules.isSpecialCharacter,\r\n css: \"mcls_uppercase\",\r\n },\r\n {\r\n view: \"text\",\r\n id: \"password\",\r\n name: \"password\",\r\n width: 330,\r\n type: \"password\",\r\n label: _(\"PASSWORD\"),\r\n value: values.password,\r\n invalidMessage: \"Mật khẩu không được để trống\",\r\n required: true,\r\n css: \"passlogin\",\r\n icon: \"fa fa-eye\", \r\n on: {\r\n onItemClick: function (id, e) {\r\n // Kiểm tra xem người dùng có click vào biểu tượng không\r\n if (e.target && e.target.classList.contains(\"webix_input_icon\")) {\r\n var inputNode = $$(\"password\").getInputNode(); // Lấy node input\r\n var inputType = inputNode.type; // Kiểm tra loại của input (password hoặc text)\r\n \r\n // Thay đổi loại input và biểu tượng tương ứng\r\n if (inputType === \"password\") {\r\n inputNode.type = \"text\"; // Hiển thị mật khẩu\r\n webix.html.removeCss(e.target, \"fa-eye\");\r\n webix.html.addCss(e.target, \"fa-eye-slash\"); // Thêm biểu tượng mắt đóng\r\n } else {\r\n inputNode.type = \"password\"; // Ẩn mật khẩu\r\n webix.html.removeCss(e.target, \"fa-eye-slash\");\r\n webix.html.addCss(e.target, \"fa-eye\"); // Thêm biểu tượng mắt mở\r\n }\r\n }\r\n }\r\n }\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"remember\",\r\n name: \"rememberme\",\r\n css: \"rememberlogin\",\r\n label: _(\"REMEMBERME\") + \" ?\",\r\n labelPosition: \"left\",\r\n labelWidth: 130,\r\n checkValue: \"true\",\r\n uncheckValue: \"false\",\r\n value: values.rememberme,\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"button\",\r\n id: \"login\",\r\n name: \"login\",\r\n label: _(\"DANGNHAP\"),\r\n css: \"btnlogin\",\r\n width: 300,\r\n height: 43,\r\n hotkey: \"enter\",\r\n type: \"form\",\r\n click: function () {\r\n var username = $$(\"username\").getValue();\r\n $$(\"username\").setValue(username.toUpperCase());\r\n \r\n if ($$(\"loginForm\").validate()) {\r\n var values = $$(\"loginForm\").getValues();\r\n if (\"true\" === values.rememberme) {\r\n values.language = $$(\"cbLanguage\").getValue();\r\n Cookies.set(\"Crm\", values);\r\n } else {\r\n // Clear cookie\r\n Cookies.remove(\"Crm\");\r\n }\r\n \r\n var _ma_dvcs = values.ma_dvcs;\r\n\r\n if ($$(\"ma_dvcs\").config.hidden) {\r\n _ma_dvcs = \"\";\r\n }\r\n user.login(values.username, values.password, _ma_dvcs, $$(\"cbLanguage\").getValue(), $$(\"loginForm\"));\r\n } else {\r\n $$(\"username\").focus();\r\n $$(\"loginForm\").focus();\r\n }\r\n },\r\n },\r\n ]\r\n },\r\n {\r\n width: 330,\r\n css: \"linelogin\",\r\n cols: [\r\n {\r\n view: \"button\",\r\n label: _(\"QUENMK\"),\r\n css: \"mcls_btnResetPassLogin\",\r\n type: \"iconButton\",\r\n icon: \"far fa-key\",\r\n width: 300,\r\n click: function () {\r\n var win = this.$scope.ui(quenmk.$ui);\r\n win.show();\r\n // app.router(\"/retrivepass\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n css: \"mcls_btnRegisterLogin\",\r\n type: \"iconButton\",\r\n hidden: true,\r\n icon: \"far fa-long-arrow-right\",\r\n label: _(\"DANGKY\"),\r\n width: 150,\r\n click: function () {\r\n window.open(\"http://mobifone.vn/\", \"_blank\");\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n height: 25\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"label\",\r\n template: \"
Hoặc đăng nhập bằng
\",\r\n width: 300,\r\n align: \"center\"\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"button\",\r\n id: \"loginsso\",\r\n name: \"loginsso\",\r\n template: \"
\" +\r\n \"\" +\r\n \"\" +\r\n _(\"DANGNHAPSSO\") + \"
\",\r\n align: \"center\",\r\n width: 300,\r\n height: 100,\r\n type: \"iconButton\",\r\n click: function () {\r\n var host_name = \"auth-sso.mobifone.vn:8080\";\r\n var realm_name = \"sso-mobifone\";\r\n var client_id = \"TTCNTT-MOBIFONEINVOICE\";\r\n var scope = \"openid\";\r\n var response_type = \"code\";\r\n var redirect_uri = \"http:\" + window.location.host + \"/%23%21/app/loginsso\";\r\n var url = \"https://\" + host_name +\r\n \"/oauth/realms/\" + realm_name +\r\n \"/protocol/openid-connect/auth?client_id=\" + client_id +\r\n \"&scope=\" + scope +\r\n \"&response_type=\" + response_type +\r\n \"&redirect_uri=\" + redirect_uri;\r\n window.location.href = url;\r\n },\r\n }\r\n\r\n ],\r\n },\r\n ],\r\n elementsConfig: {\r\n labelPosition: \"top\",\r\n //validateEvent: \"key\"\r\n },\r\n },\r\n { gravity: 0.1, temlate: \"\" },\r\n ],\r\n },\r\n { gravity: 1, template: \"\" },\r\n ],\r\n },\r\n {\r\n height: 80,\r\n },\r\n ],\r\n },\r\n $oninit: function (view, $scope) {\r\n\r\n $$(\"loginForm\").focus();\r\n //var winthongbaosso = $scope.ui(thongbaosso.$ui);\r\n //winthongbaosso.show();\r\n },\r\n };\r\n});\r\n\ndefine('views/loginsso',[\"models/user\"], function (user) {\r\n function getParameterByName(name, url) {\r\n if (!url) url = window.location.href;\r\n name = name.replace(/[\\[\\]]/g, \"\\\\$&\");\r\n var regex = new RegExp(\"[?&]\" + name + \"(=([^&#]*)|&|#|$)\"),\r\n results = regex.exec(url);\r\n if (!results) return null;\r\n if (!results[2]) return '';\r\n return decodeURIComponent(results[2].replace(/\\+/g, \" \"));\r\n }\r\n var currentUrl = window.location.href.replace(/#!\\//, '');\r\n var urlParams = new URLSearchParams(currentUrl);\r\n var sso_code = urlParams.get('code');\r\n var login_type = getParameterByName('login_type', url);\r\n login_type = getParameterByName('login_type', url);\r\n var redirect_uri_api = \"http:\" + window.location.host + \"/#!/app/loginsso\";\r\n var redirect_uri = \"http:\" + window.location.host + \"/%23%21/app/loginsso\";\r\n if(login_type == 'sso'){\r\n var host_name = \"auth-sso.mobifone.vn:8080\";\r\n var realm_name = \"sso-mobifone\";\r\n var client_id = \"TTCNTT-MOBIFONEINVOICE\";\r\n var scope = \"openid\";\r\n var response_type = \"code\";\r\n var url = \"https://\" + host_name +\r\n \"/oauth/realms/\" + realm_name +\r\n \"/protocol/openid-connect/auth?client_id=\" + client_id +\r\n \"&scope=\" + scope +\r\n \"&response_type=\" + response_type +\r\n \"&redirect_uri=\" + redirect_uri;\r\n window.location.href = url;\r\n }\r\n else{\r\n if(sso_code != null || sso_code != \"\"){\r\n user.loginsso(sso_code, redirect_uri_api, '', 'vi');\r\n }\r\n else{\r\n window.location.href = \"/#!\" + start;\r\n }\r\n }\r\n return {\r\n $ui: {},\r\n }\r\n});\r\n\ndefine('views/main',[\"app\", \"locale\", \"models/user\", \"views/forms/main\"], function (app, _, user, main) {\r\n \r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var op = [];\r\n\r\n webix.$$(\"title\").parse({ title: \"Quản lý hóa đơn\", details: \"Quản lý hóa đơn đầu vào\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\"Thêm\", { $template: \"Separator\" }, \"Sửa\", { $template: \"Separator\" }, \"Xóa\", { $template: \"Separator\" }, \"Tải File đính kèm\"],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Tải File đính kèm\") {\r\n var table = webix.$$(\"mainData\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n webix.message(\"Continue !\", \"debug\");\r\n //console.log(item);\r\n // if (item.inv_originalId != null && item.inv_originalId != undefined) {\r\n // var box = webix.modalbox({\r\n // title: \"Đang in chứng từ\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // //var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n // //newWin.location = fileURL;\r\n // window.open(fileURL, '_blank');\r\n\r\n // }\r\n // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // // var file = new Blob([data], { type: 'application/pdf' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, '_blank');\r\n // // // webix.html.download(file, $$('tenfile').getValue());\r\n // // });\r\n // }\r\n // else {\r\n // webix.message(\"Không tồn tại hóa đơn gốc !\", \"error\");\r\n // return;\r\n // }\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n id: \"btnReload\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-refresh\",\r\n label: _(\"REFRESH\"),\r\n css: \"webix_secondary\",\r\n width: 96,\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mainData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnPlus\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-plus\",\r\n label: \"Thêm (F4)\",\r\n width: 90,\r\n shortcut: \"F4\",\r\n css: \"webix_secondary\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(main.$ui);\r\n //main.setValues(null, null, null);\r\n main.setEditMode(1);\r\n detailForm.show();\r\n // if (vc_window.after_new != null) {\r\n // var fn = Function(\"app\", vc_window.after_new);\r\n // fn(app);\r\n // }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"far fa-edit\",\r\n label: \"Sửa (F3)\",\r\n width: 90,\r\n shortcut: \"F3\",\r\n css: \"webix_secondary\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(main.$ui);\r\n //var detailForm = this.$scope.ui(webix.$$(\"main\"));\r\n var table = webix.$$(\"mainData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.$group) {\r\n webix.message(\"Không thể sửa nhóm !\", \"error\");\r\n return;\r\n }\r\n // main.setEditMode(0);\r\n // main.initUI(windowconfig);\r\n main.setEditMode(2);\r\n main.setValues(item, null);\r\n\r\n detailForm.show();\r\n //main.focusFirstElement();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnDelete\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-trash-o\",\r\n label: \"Xóa (F8)\",\r\n width: 80,\r\n shortcut: \"F8\",\r\n css: \"webix_secondary\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mainData\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần xóa !\", \"error\");\r\n return;\r\n }\r\n if (item.$group) {\r\n webix.message(\"Không thể xóa cột nhóm !\", \"error\");\r\n return;\r\n }\r\n\r\n var khData = {};\r\n // khData.windowid = windowconfig.data[0].window_id;\r\n khData.editmode = 3;\r\n khData.data = [];\r\n khData.data.push(item);\r\n\r\n webix.confirm({\r\n title: \"XÓA HÓA ĐƠN\",\r\n text: \"Bạn có muốn xóa hóa đơn số: \" + item.invoiceNumber + \"\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/ManageInvoice/SaveInv\", khData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.ExceptionMessage, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n table.remove(item.id);\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnDowload\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"far fa-download\",\r\n css: \"webix_secondary\",\r\n label: _(\"Tải File\"),\r\n width: 80,\r\n on: {\r\n onClick: function () {\r\n //webix.confirm();\r\n //webix.message(\"Continue ! \", \"debug\");\r\n var table = webix.$$(\"mainData\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.fileUrl == null || item.fileUrl == \"\") {\r\n webix.message(\"Hóa đơn không có file đính kèm !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.$group) {\r\n webix.message(\"Không thể sửa nhóm !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.confirm({\r\n title: \"TẢI HÓA ĐƠN\",\r\n text: \"Bạn có muốn tải file hóa đơn số: \" + item.invoiceNumber + \"\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(app.config.host + \"/ManageInvoice/DowloadFile?url=\" + item.fileUrl, function (text, data) {\r\n var file = new Blob([data], { type: item.fileType });\r\n webix.html.download(file, item.fileName);\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n // webix.ajax()\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .post(app.config.host + \"/ManageInvoice/SaveInv\", khData,\r\n // {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // table.enable();\r\n // table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n // //webix.message(XmlHttpRequest.statusText, \"error\");\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // table.remove(item.id);\r\n // table.enable();\r\n // table.hideProgress();\r\n // }\r\n // });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnPrint\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"far fa-print\",\r\n label: _(\"PRINT\") + \" PDF\",\r\n css: \"webix_secondary\",\r\n width: 70,\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"mainData\");\r\n\r\n // var rpParameter = table.config.rpParameter;\r\n var rpParameter = null;\r\n // if (rpParameter == undefined || rpParameter == null) {\r\n // webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n // return;\r\n // }\r\n // rpParameter.type = \"PDF\";\r\n //console.log(rpParameter);\r\n // if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang in báo cáo ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/Bcthsd/PrintPDFBangKeBanRa\",\r\n rpParameter,\r\n {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n window.open(fileURL, \"_blank\");\r\n webix.modalbox.hide(box);\r\n },\r\n }\r\n // function (text, data) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n // webix.modalbox.hide(box);\r\n // window.open(fileURL, '_blank');\r\n // }\r\n );\r\n // }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnExport\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"far fa-file\",\r\n label: _(\"EXPORT_EXCEL\"),\r\n css: \"webix_secondary\",\r\n width: 115,\r\n on: {\r\n onClick: function () {\r\n var box = webix.modalbox({\r\n title: \"Đang kết suất Excel ... \",\r\n buttons: [\"Hủy bỏ\"],\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"0\":\r\n clearTimeout(interVal);\r\n webix.modalbox.hide(box);\r\n break;\r\n }\r\n },\r\n });\r\n var interVal = setTimeout(function () {\r\n var table = $$(\"mainData\");\r\n webix.toExcel(table, {\r\n rawValues: true,\r\n });\r\n clearTimeout(interVal);\r\n webix.modalbox.hide(box);\r\n }, 1500);\r\n\r\n // var rpParameter = table.config.rpParameter;\r\n // if (rpParameter == undefined || rpParameter == null) {\r\n // webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n // return;\r\n // }\r\n // rpParameter.type = \"xlsx\";\r\n\r\n // if (rpParameter != null) {\r\n // var box = webix.modalbox({\r\n // title: \"Đang kết xuất Excel ....\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .post(app.config.host + \"/Bcthsd/PrintPDFBangKeBanRa\", rpParameter,\r\n // {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // webix.message(XmlHttpRequest.statusText, \"error\");\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n // var fileURL = URL.createObjectURL(file);\r\n // webix.modalbox.hide(box);\r\n // window.location.href = fileURL;\r\n // }\r\n // }\r\n // // function (text, data) {\r\n\r\n // // var file = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n\r\n // // window.location.href = fileURL;\r\n // // }\r\n // );\r\n // }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n container: \"testA\",\r\n view: \"treetable\",\r\n id: \"mainData\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n //autowidth: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/ManageInvoice/GetData\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n on: {\r\n onItemClick: function (id) {\r\n if (id.column == \"ten_loai\") {\r\n //webix.confirm()\r\n webix.message(\"Continue Dowloading ... !\", \"debug\");\r\n }\r\n },\r\n onClick: function (e) {\r\n var view = $$(e);\r\n if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\")) webix.confirm(\"The changes was not saved\");\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {\r\n webix.delay(function () {\r\n this.adjustRowHeight(\"ten_loai\", true);\r\n this.render();\r\n }, this);\r\n //console.log($$(\"mainData\").serialize());\r\n this.openAll();\r\n $$(\"cmenu\").attachTo($$(\"mainData\"));\r\n },\r\n onColumnResize: function () {\r\n this.adjustRowHeight(\"ten_loai\", true);\r\n this.render();\r\n },\r\n // \"data->onStoreUpdated\": function () {\r\n // this.data.each(function (obj, i) {\r\n // console.log(obj);\r\n // console.log(i);\r\n // obj.index = i + 1;\r\n // })\r\n // }\r\n },\r\n columns: [\r\n {\r\n id: \"stt\",\r\n header: \"
STT
\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"ten_loai\",\r\n header: [{ text: \"
Hóa đơn chứng từ bán
\", colspan: 2 }, { text: \"
Số hóa đơn
\" }],\r\n width: 525,\r\n // template: function (obj, common) {\r\n // if (obj.$group) return common.treetable(obj, common) + obj.invoiceNumber;\r\n // return obj.invoiceNumber;\r\n //}\r\n template: function (obj, common) {\r\n if (obj.$level == 1) return common.treetable(obj, common) + \"\" + obj.value + \" ( \" + obj.$count + \" )\" + \"\";\r\n //return obj.invoiceNumber;\r\n return \" \" + obj.invoiceNumber + \"\";\r\n },\r\n },\r\n {\r\n id: \"invoiceDate\",\r\n header: [null, { text: \"
Ngày hóa đơn
\" }],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n { id: \"sellerName\", header: [\"
Tên người mua
\", { content: \"textFilter\" }], width: 300 },\r\n { id: \"sellerTaxCode\", header: \"
Mã số thuế
\", width: 150 },\r\n {\r\n id: \"totalAmountWithoutVat\",\r\n header: \"
Doanh thu chưa có thuế GTGT
\",\r\n width: 200,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n template: function (obj, common) {\r\n if (obj.$level == 1) return \"\" + fm(obj.totalAmountWithoutVat) + \"\";\r\n return obj.totalAmountWithoutVat == null ? 0 : fm(obj.totalAmountWithoutVat);\r\n },\r\n },\r\n {\r\n id: \"vatAmount\",\r\n header: \"
Thuế GTGT
\",\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n template: function (obj, common) {\r\n if (obj.$level == 1) return \"\" + fm(obj.vatAmount) + \"\";\r\n return obj.vatAmount == null ? 0 : fm(obj.vatAmount);\r\n },\r\n },\r\n { id: \"ghi_chu\", header: \"
Ghi chú
\", width: 150 },\r\n ],\r\n pager: \"pagerA\",\r\n scheme: {\r\n $group: {\r\n by: \"ten_loai\",\r\n //css:\"multiline\",\r\n map: {\r\n vatAmount: [\"vatAmount\", \"sum\"],\r\n totalAmountWithoutVat: [\"totalAmountWithoutVat\", \"sum\"],\r\n //title: [\"year\"]\r\n },\r\n },\r\n //$sort: { by: \"stt\", dir: \"asc\" }\r\n },\r\n ready: function () {\r\n //this.open(this.getFirstId());\r\n //this.sort({ by: \"stt\", dir: \"asc\" });\r\n this.openAll();\r\n },\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 35,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChangedMain\", function (editmode, item) {\r\n var table = webix.$$(\"mainData\");\r\n\r\n if (editmode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (editmode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n // var table = $$(\"mainData\");\r\n // var url = {\r\n // $proxy: true,\r\n // load: function (view, callback, params) {\r\n // console.log(view.config);\r\n // console.log(callback);\r\n // console.log(params);\r\n // /*var windowno = app.path[1].params[0];\r\n // var url = app.config.host + \"/System/GetDataByWindowNo?window_id=\" + windowno;\r\n\r\n // if (params == null) {\r\n // url = url + \"&start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n // }\r\n // else {\r\n // url = url + \"&start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n // if (params.filter != null) {\r\n // var array = [];\r\n\r\n // for (var property in params.filter) {\r\n\r\n // var column = view.getColumnConfig(property);\r\n\r\n // if (column !== undefined) {\r\n // var item = {\r\n // columnName: property,\r\n // columnType: column.columnType,\r\n // value: params.filter[property]\r\n // };\r\n\r\n // array.push(item);\r\n // }\r\n // }\r\n\r\n // //console.log(JSON.stringify(array));\r\n // if (array.length > 0) {\r\n // url = url + \"&filter=\" + JSON.stringify(array);\r\n // }\r\n // else {\r\n // url = url + \"&filter=null\";\r\n // }\r\n\r\n // }\r\n // else {\r\n // url = url + \"&filter=null\";\r\n // }\r\n // }\r\n\r\n // if (view.config.infoparam != null) {\r\n // url = url + \"&infoparam=\" + JSON.stringify(view.config.infoparam);\r\n // }\r\n // else {\r\n // url = url + \"&infoparam=null\";\r\n // }\r\n\r\n // var tlbParams = $$(\"tlbParams\");\r\n\r\n // if (tlbParams !== undefined) {\r\n // var childViews = tlbParams.getChildViews();\r\n\r\n // var parameters = [];\r\n\r\n // for (var i = 0; i < childViews.length; i++) {\r\n // var child = childViews[i];\r\n\r\n // var id = child.config.id;\r\n // var value_field = child.config.value_field;\r\n\r\n // var item = {\r\n // columnName: value_field,\r\n // value: $$(id).getValue()\r\n // };\r\n\r\n // parameters.push(item);\r\n // }\r\n\r\n // url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n\r\n // }\r\n // else {\r\n // url = url + \"&tlbparam=null\";\r\n // }*/\r\n\r\n // //console.log(url);\r\n\r\n // /* webix.ajax().bind(view)\r\n // .get(url,function(text){\r\n // var json =JSON.parse(text);\r\n\r\n // this.clearAll();\r\n\r\n // if (!json.hasOwnProperty(\"error\")){\r\n // this.parse(json.data,\"json\");\r\n // }\r\n // }); */\r\n\r\n // //webix.ajax(url, callback, view);\r\n\r\n // }\r\n // };\r\n\r\n // table.define(\"url\", url);\r\n },\r\n };\r\n});\r\n\ndefine('views/mauhoadon',[\"app\", \"views/forms/mauhoadon\", \"locale\", \"views/modules/minvoiceplugin\"], function (app, dmwindowform, _, plugin) {\r\n \r\n\r\n var op = [];\r\n\r\n webix.$$(\"title\").parse({ title: \"Mẫu hóa đơn\", details: \"Danh sách mẫu hóa đơn\" });\r\n\r\n var submenu = webix.ui({\r\n view: \"submenu\",\r\n width: 200,\r\n padding: 0,\r\n data: [\r\n // { id: \"createInvoiceTemplate\", value: \"Tạo mẫu hóa đơn\" },\r\n { id: \"printInvoiceTemplate\", value: \"Xem mẫu hóa đơn (PDF)\" },\r\n { id: \"printTempHtml\", value: \"Xem mẫu hóa đơn (Html)\" },\r\n { id: \"dowload\", value: \"Tải file .repx\" },\r\n // { id: \"signInvoiceTemplate\", value: \"Ký mẫu hóa đơn\" },\r\n { id: \"uploadInvoiceTemplate\", value: \"Upload mẫu hóa đơn\" },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n this.hide();\r\n\r\n if (id == \"createInvoiceTemplate\") {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang tạo mẫu hóa đơn\",\r\n buttons: [\"Hủy bỏ\"],\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"0\":\r\n clearInterval(interVal);\r\n webix.modalbox.hide(box);\r\n break;\r\n }\r\n },\r\n });\r\n\r\n var interVal = setInterval(function () {\r\n var url = app.config.host + \"/Invoice/GetInvoiceTemplate?id=\" + item.id;\r\n\r\n webix.ajax(url, {\r\n error: function (text, data, XmlHttpRequest) {\r\n alert(text);\r\n webix.modalbox.hide(box);\r\n clearInterval(interVal);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.trang_thai_mau == \"Đã tạo mẫu\") {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n item.trang_thai_mau = \"Đã tạo mẫu\";\r\n table.updateItem(item);\r\n\r\n webix.modalbox.hide(box);\r\n clearInterval(interVal);\r\n }\r\n },\r\n });\r\n }, 3000);\r\n\r\n window.location.href = app.config.host + \"/Content/App/ReportDesign/ReportDesign.application?type=99&id=\" + item.id;\r\n }\r\n\r\n if (id == \"printInvoiceTemplate\") {\r\n var item = $$(\"dmwindowData\").getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn\", \"error\");\r\n return;\r\n }\r\n\r\n var url = app.config.host + \"/Invoice/PrintInvoiceTemplate?id=\" + item.id;\r\n var box = webix.modalbox({\r\n title: \"Đang in mẫu hóa đơn (PDF) ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n // webix.html.download(file, \"ahihi.pdf\");\r\n var fileURL = URL.createObjectURL(file);\r\n //console.log(fileURL);\r\n webix.modalbox.hide(box);\r\n window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (id == \"dowload\") {\r\n var item = $$(\"dmwindowData\").getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.template_status != \"Đã tạo mẫu\") {\r\n webix.message(\"Mẫu hóa đơn chưa được tạo, không thể tải xuống !\", \"error\");\r\n return;\r\n }\r\n\r\n var url = app.config.host + \"/Invoice/DowloadRepx?id=\" + item.id;\r\n var box = webix.modalbox({\r\n title: \"Đang tải mẫu hóa đơn (repx) ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n var file = new Blob([data], { type: \"application/octet-stream\" });\r\n webix.html.download(file, \"InvoiceTemplate.repx\");\r\n // var fileURL = URL.createObjectURL(file);\r\n //console.log(fileURL);\r\n webix.modalbox.hide(box);\r\n //window.open(fileURL, '_blank');\r\n });\r\n }\r\n\r\n if (id == \"printTempHtml\") {\r\n var item = $$(\"dmwindowData\").getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn\");\r\n return;\r\n }\r\n\r\n var url = app.config.host + \"/Invoice/PrintInvoiceTemplate?id=\" + item.id + \"&type=Html\";\r\n var box = webix.modalbox({\r\n title: \"Đang in mẫu hóa đơn (Html) ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n var newwin = window.open();\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n var file = new Blob([data], { type: \"text/html\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n newwin.location = fileURL;\r\n });\r\n }\r\n\r\n if (id == \"signInvoiceTemplate\") {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn\", \"error\");\r\n return;\r\n }\r\n\r\n var a = webix.ajax(app.config.host + \"/Invoice/GetXmlTemplate?id=\" + item.id);\r\n var b = webix.ajax(app.config.host + \"/Invoice/GetListCertificates\");\r\n var c = webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/System/ExecuteCommand\", {\r\n command: \"CM00019\",\r\n parameter: {\r\n ma_dvcs: \"\",\r\n },\r\n });\r\n\r\n webix.promise.all([a, b, c]).then(function (results) {\r\n var xmlData = results[0].json();\r\n var listcerts = results[1].json();\r\n var c_results = results[2].json();\r\n\r\n if (listcerts.length == 0) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n var kytaptrung = \"\";\r\n var server_cert = \"\";\r\n\r\n for (var i = 0; i < c_results.length; i++) {\r\n var item = c_results[i];\r\n\r\n if (item.code == \"KYTAPTRUNG\") {\r\n kytaptrung = item.value;\r\n }\r\n\r\n if (item.ma == \"SERVER_CERT\") {\r\n server_cert = item.value;\r\n }\r\n }\r\n\r\n if (kytaptrung == \"K\") {\r\n var hub = plugin.hub();\r\n\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var callback = json.callback;\r\n\r\n if (callback == \"SignInvoice\") {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n var parameter = {\r\n id: item.id,\r\n xml: json.xml,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/SignXmlTemplate\", parameter, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var table = $$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n });\r\n }\r\n }\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var item = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: item.cer_serial,\r\n ngaybatdau: item.begin_date,\r\n ngayketthuc: item.end_date,\r\n issuer: item.issuer,\r\n subjectname: item.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n callback: \"SignInvoice\",\r\n idData: \"#data\",\r\n xml: xmlData[\"xml\"],\r\n idSigner: \"seller\",\r\n tagSign: \"Signatures\",\r\n dateKy: xmlData[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", arg.callback, JSON.stringify(arg));\r\n } else {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n webix.ajax(app.config.host + \"/Invoice/GetXmlTemplate?id=\" + item.id, function (text, data) {\r\n var xmlData = JSON.parse(text);\r\n\r\n var parameters = {\r\n xml: xmlData[\"xml\"],\r\n refUri: \"#data\",\r\n certSerial: cert.cer_serial,\r\n tokenSerial: cert.token_serial,\r\n signId: \"seller\",\r\n signTag: \"Signatures\",\r\n pass: cert.pass,\r\n inv_InvoiceAuth_id: xmlData[\"id\"],\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(server_cert + \"/Token/SignXml\", parameters, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json[\"error\"]);\r\n } else {\r\n var parameter = {\r\n id: item.inv_InvoiceAuth_id,\r\n xml: json.xml,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/SignXmlTemplate\", parameter, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var table = $$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n },\r\n });\r\n\r\n var popupText = document.getElementsByClassName(\"webix_popup_text\")[0];\r\n popupText.style.paddingTop = 0;\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice/GetListCertificates\",\r\n });\r\n }\r\n });\r\n }\r\n\r\n if (id == \"uploadInvoiceTemplate\") {\r\n require([\"views/forms/uploadfile\"], function (uploadForm) {\r\n var table = webix.$$(\"dmwindowData\");\r\n\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n\r\n win.getHead().setHTML(\"Tải file mẫu hóa đơn\");\r\n win.show();\r\n\r\n var item = table.getSelectedItem();\r\n\r\n webix.$$(\"uploader\").define(\"upload\", app.config.host + \"/Invoice/UploadInvTemplate\");\r\n webix.$$(\"uploader\").define(\"formData\", { dmmauhoadon_id: item.id });\r\n webix.$$(\"uploader\").refresh();\r\n });\r\n }\r\n },\r\n },\r\n });\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"fas fa-plus\",\r\n // css: \"webix_secondary\",\r\n // label: _(\"THEM\") + \" (F4)\",\r\n // width: 85,\r\n //css:\"button_raised\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var win = this.$scope.ui(dmwindowform.$ui);\r\n dmwindowform.setEditMode(1);\r\n\r\n win.show();\r\n\r\n var form = $$(\"mauhoadon-form\");\r\n var values = form.getValues();\r\n\r\n values.invoice_type = \"E\";\r\n values.copy_number = 0;\r\n values.row_print_template = 10;\r\n\r\n form.setValues(values);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"fas fa-edit\",\r\n // css: \"webix_secondary\",\r\n // label: _(\"SUA\") + \" (F3)\",\r\n // width: 85,\r\n //css:\"button_raised\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmwindowform.$ui);\r\n var form = webix.$$(\"mauhoadon-form\");\r\n\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n form.setValues(item);\r\n\r\n dmwindowform.setEditMode(2);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"fas fa-trash-o\",\r\n // label: _(\"XOA\") + \" (F8)\",\r\n // css: \"webix_secondary\",\r\n // width: 85,\r\n //css:\"button_raised\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n var khData = {};\r\n khData.windowid = app.path[1].params[0];\r\n khData.editmode = 3;\r\n khData.data = [];\r\n khData.data.push(item);\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \" + item.name,\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/Save\", khData, function (text) {\r\n var json = JSON.parse(text);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"COPY\") + \" (F7)\",\r\n id: \"btnCopy\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"fas fa-copy\",\r\n // label: _(\"COPY\") + \" (F7)\",\r\n // css: \"webix_secondary\",\r\n // width: 90,\r\n //css:\"button_raised\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa chọn mẫu cần sao chép\" });\r\n return;\r\n }\r\n\r\n var comp = {\r\n view: \"window\",\r\n modal: true,\r\n head: \"Sao chép mẫu\",\r\n position: \"center\",\r\n body: {\r\n view: \"form\",\r\n paddingY: 10,\r\n paddingX: 10,\r\n margin: 0,\r\n complexData: true,\r\n elements: [\r\n {\r\n view: \"text\",\r\n name: \"invoice_series\",\r\n labelPosition: \"top\",\r\n width: 300,\r\n value: item.invoice_series,\r\n required: true,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == undefined) return;\r\n if (newv == \"\") return;\r\n\r\n if (newv.length != 6) {\r\n webix.message({ type: \"error\", text: \"Độ dài ký hiệu phải là 6 ký tự\" });\r\n this.focus();\r\n return;\r\n }\r\n\r\n var patt = /^[A,B,C,D,E,G,H,K,L,M,N,P,Q,R,S,T,U,V,X,Y][A,B,C,D,E,G,H,K,L,M,N,P,Q,R,S,T,U,V,X,Y][/]$/;\r\n\r\n if (patt.test(newv.substring(0, 3)) == false) {\r\n webix.message({ type: \"error\", text: \"3 ký tự đầu không đúng\" });\r\n this.focus();\r\n return;\r\n }\r\n\r\n patt = /^[1-9][0-9]$/;\r\n\r\n var nam = newv.substring(3, 5);\r\n\r\n if (patt.test(nam) == false) {\r\n webix.message({ type: \"error\", text: \"2 ký tự năm không đúng\" });\r\n this.focus();\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var year = now.getFullYear();\r\n\r\n nam = Number(\"20\" + nam);\r\n\r\n if (nam < year - 1 || nam > year) {\r\n webix.message({ type: \"error\", text: \"Năm ký hiệu không đúng\" });\r\n this.focus();\r\n return;\r\n }\r\n\r\n if (newv.substring(5, 6) != \"E\") {\r\n webix.message({ type: \"error\", text: \"Ký tự cuối phải là E\" });\r\n this.focus();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Lưu (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var win = this.getTopParentView();\r\n var form = win.queryView({ view: \"form\" });\r\n\r\n if (form.validate() == false) {\r\n return;\r\n }\r\n var item = form.getValues();\r\n var table = webix.$$(\"dmwindowData\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n var url = app.config.host + \"/Invoice/CopyTemplate\";\r\n item.id = selectedItem.id;\r\n\r\n webix\r\n .ajax()\r\n .bind(win)\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, item, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n this.close();\r\n if (data.hasOwnProperty(\"ok\") && data.ok) {\r\n webix.message(\"Thêm mới mẫu hóa đơn thành công!\", \"success\");\r\n }\r\n var table = webix.$$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(data.error, \"error\");\r\n }\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n align: \"center\",\r\n type: \"danger\",\r\n width: 120,\r\n click: function () {\r\n var win = this.getTopParentView();\r\n win.close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n rules: {\r\n $obj: function () {\r\n var data = this.getValues();\r\n var newv = data.invoice_series;\r\n\r\n if (newv.length != 6) {\r\n webix.message({ type: \"error\", text: \"Độ dài ký hiệu phải là 6 ký tự\" });\r\n return false;\r\n }\r\n\r\n var patt = /^[A,B,C,D,E,G,H,K,L,M,N,P,Q,R,S,T,U,V,X,Y][A,B,C,D,E,G,H,K,L,M,N,P,Q,R,S,T,U,V,X,Y][/]$/;\r\n\r\n if (patt.test(newv.substring(0, 3)) == false) {\r\n webix.message({ type: \"error\", text: \"3 ký tự đầu không đúng\" });\r\n return false;\r\n }\r\n\r\n patt = /^[1-9][0-9]$/;\r\n\r\n var nam = newv.substring(3, 5);\r\n\r\n if (patt.test(nam) == false) {\r\n webix.message({ type: \"error\", text: \"2 ký tự năm không đúng\" });\r\n return false;\r\n }\r\n\r\n var now = new Date();\r\n var year = now.getFullYear();\r\n\r\n nam = Number(\"20\" + nam);\r\n\r\n if (nam < year - 1 || nam > year) {\r\n webix.message({ type: \"error\", text: \"Năm ký hiệu không đúng\" });\r\n return false;\r\n }\r\n\r\n if (newv.substring(5, 6) != \"E\") {\r\n webix.message({ type: \"error\", text: \"Ký tự cuối phải là E\" });\r\n return false;\r\n }\r\n\r\n return true;\r\n },\r\n },\r\n },\r\n };\r\n\r\n var win = this.$scope.ui(comp);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n rules: {\r\n $obj: function () {\r\n var data = this.getValues();\r\n\r\n return true; //success!\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"CHUC_NANG\") + \"\",\r\n id: \"btnChucNang\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"fas fa-angle-down\",\r\n // label: \"Chức năng\",\r\n // width: 120,\r\n // css: \"button_raised\",\r\n click: function () {\r\n submenu.show(webix.$$(\"btnChucNang\").$view);\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"dmwindowData\",\r\n view: \"datatable\",\r\n select: true,\r\n datafetch: 100,\r\n //loadahead: 15,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/System/GetDataByWindowNo?window_id=\" + windowno;\r\n\r\n if (params == null) {\r\n url = url + \"&start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"&start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n if (column !== undefined) {\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n if (column.tableAlias != undefined) {\r\n item.tableAlias = column.tableAlias;\r\n }\r\n\r\n if (item.columnType == \"bit\") {\r\n if (item.value != \"\") {\r\n item.value = item.value == \"true\" ? true : item.value == \"false\" ? false : \"\";\r\n }\r\n }\r\n\r\n if (item.columnType == \"int\" || item.columnType == \"decimal\") {\r\n if (item.value != \"\") {\r\n if (webix.rules.isNumber(item.value)) {\r\n item.value = Number(item.value);\r\n } else {\r\n item.value = \"\";\r\n }\r\n }\r\n }\r\n\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n if (array.length > 0) {\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n } else {\r\n url = url + \"&filter=null\";\r\n }\r\n } else {\r\n url = url + \"&filter=null\";\r\n }\r\n }\r\n\r\n if (view.config.infoparam != null) {\r\n url = url + \"&infoparam=\" + JSON.stringify(view.config.infoparam);\r\n } else {\r\n url = url + \"&infoparam=null\";\r\n }\r\n\r\n var tlbParams = $$(\"tlbParams\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n var item = {\r\n columnName: value_field,\r\n value: $$(id).getValue(),\r\n };\r\n\r\n parameters.push(item);\r\n }\r\n\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n\r\n //console.log(url);\r\n\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n on: {\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n },\r\n columns: [\r\n { id: \"name\", columnType: \"character varying\", header: [_(\"TEN_MAU\"), { content: \"serverFilter\" }], width: 250 },\r\n {\r\n id: \"sl_invoice_type_id\",\r\n view: \"combo\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00008\",\r\n header: [_(\"LOAI_HOA_DON\"), { content: \"serverSelectFilter\" }],\r\n columnType: \"uuid\",\r\n tableAlias: \"sl_invoice_template\",\r\n width: 300,\r\n },\r\n {\r\n id: \"invoice_type\",\r\n view: \"combo\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00009\",\r\n header: [_(\"HINH_THUC\"), { content: \"serverSelectFilter\" }],\r\n columnType: \"character varying\",\r\n width: 200,\r\n },\r\n { id: \"template_code\", columnType: \"character varying\", header: [_(\"MAU_SO\"), { content: \"serverFilter\" }], width: 150 },\r\n { id: \"invoice_series\", columnType: \"character varying\", header: [_(\"KY_HIEU\"), { content: \"serverFilter\" }], width: 150 },\r\n // { id: \"copy_number\", columnType: \"integer\", header: [_(\"SO_LIEN\"), { content: \"serverFilter\" }], width: 150 },\r\n { id: \"template_status\", columnType: \"character varying\", header: [_(\"TRANG_THAI_MAU\"), { content: \"serverFilter\" }], width: 150 },\r\n // {\r\n // id: \"signed\",\r\n // checkValue: true,\r\n // uncheckValue: false,\r\n // template: function (obj, common, value) {\r\n // if (value)\r\n // return \"
\";\r\n // else\r\n // return \"
\";\r\n // },\r\n // columnType: \"boolean\",\r\n // header: [_(\"DA_KY\"), { content: \"serverFilter\" }],\r\n // width: 100\r\n // }\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n type: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n view: \"toolbar\",\r\n cols: controls,\r\n borderless: true,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmwindowData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmwindow,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\n\r\ndefine('views/menus/notification',[\"app\"\r\n], function (app) {\r\n\r\n function initUI(item) {\r\n $$(\"lstUser\").select(item.id);\r\n $$(\"content\").setHTML(item.inv_content);\r\n $$(\"notification-win\").getHead().setHTML(\"Thông tin bản cập nhật: \" + item.version);\r\n }\r\n\r\n return {\r\n $ui: {\r\n view: \"window\", modal: true, id: \"notification-win\", position: \"center\", resize: true, move: true,\r\n head: \"Thông tin bản cập nhật\",\r\n body: {\r\n view: \"form\",\r\n id: \"notification-form\",\r\n height: 500,\r\n complexData: true,\r\n elements: [\r\n {\r\n cols: [\r\n {\r\n view: \"list\",\r\n id: \"lstUser\",\r\n select: true,\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var item = this.getItem(id);\r\n //webix.message(id, \"error\");\r\n $$(\"notification-win\").getHead().setHTML(\"Thông tin bản cập nhật: \" + item.version);\r\n $$(\"content\").setHTML(item.inv_content);\r\n }\r\n },\r\n url: app.config.host + \"/System/GetNotification\",\r\n // data: [\r\n // { id: 1, version: \"3.1.0.0\", update: \"Lorem ipsum dolor sit amet\", personId: 1 },\r\n // { id: 2, version: \"3.2.0.0\", update: \"Praesent luctus nulla enim, pellentesque condimentum \", personId: 2 },\r\n // { id: 3, version: \"3.3.0.0\", update: \"Lorem ipsum dolor sit amet\", personId: 2 },\r\n // { id: 4, version: \"3.4.0.0\", update: \"Morbi eget facilisis risus\", personId: 1 },\r\n // { id: 5, version: \"3.5.0.0\", update: \"Cras lacinia bibendum arcu\", personId: 1 }\r\n // ],\r\n template: \"- #version#\",\r\n //template: \" #User# \",\r\n width: 150\r\n },\r\n {\r\n width: 900,\r\n paddingX: 5,\r\n paddingX: 5,\r\n rows: [\r\n {\r\n view: \"template\", id: \"content\", scroll: \"xy\",\r\n // , gravity: 3\r\n type: { height: \"auto\" },\r\n // template: function (obj) {\r\n // return \"\" + obj.user + \" \" + obj.value;\r\n // }\r\n },\r\n {\r\n paddingY: 5,\r\n cols: [\r\n {},\r\n // {\r\n // view: \"button\", value: \"Cập nhật\", width: 100, type: \"danger\",\r\n // click: function () {\r\n\r\n // }\r\n // },\r\n {\r\n view: \"button\", type: \"danger\", label: \"Đóng (ESC)\", shortcut: \"esc\", align: \"center\", width: 100,\r\n on: {\r\n onClick: function () {\r\n webix.$$(\"notification-win\").close();\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n\r\n ]\r\n }\r\n },\r\n initUI: initUI\r\n };\r\n\r\n});\ndefine('views/menus/sidebar',[\"app\"],function(app){\r\n\t\r\n\treturn {\r\n\t\t$ui:{\r\n\t\t\twidth: 220,\r\n\r\n\t\t\trows:[\r\n\t\t\t\t{\r\n\t\t\t\t\tview: \"tree\",\r\n\t\t\t\t\t//id: \"app:menu\",\r\n\t\t\t\t\ttype: \"menuTree2\",\r\n\t\t\t\t\tcss: \"menu\",\r\n\t\t\t\t\tactiveTitle: true,\r\n\t\t\t\t\tselect: true,\r\n\t\t\t\t\ttooltip: {\r\n\t\t\t\t\t\ttemplate: function(obj){\r\n\t\t\t\t\t\t\treturn obj.$count?\"\":obj.details;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\ton:{\r\n\t\t\t\t\t\tonBeforeSelect:function(id){\r\n\t\t\t\t\t\t\tif(this.getItem(id).$count){\r\n\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tonAfterSelect:function(id){\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tvar item = this.getItem(id);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tvar start = item.window_id!=null ? item.code + \":\" + item.window_id : item.code;\r\n\t\t\t\t\t\t\tthis.$scope.show(\"./\"+ start);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\twebix.$$(\"title\").parse({title: item.value, details: item.details});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\turl: app.config.host + \"/api/System/GetSideBar\"\r\n\t\t\t\t}\r\n\t\t\t]\r\n\t\t},\r\n\t\tgetApiHost: function(){\r\n\t\t\treturn app.config.host;\r\n\t\t}\r\n\t};\r\n\r\n});\r\n\ndefine('views/modules/dashline',[\"app\"], function (app) {\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\theight: 136,\r\n\t\t\tcss: \"tiles\",\r\n\t\t\tborderless:true,\r\n\t\t\ttemplate: function (data) {\r\n\t\t\t\tvar t = null;\r\n\r\n\t\t\t\tif (data.items == undefined) return;\r\n\r\n\t\t\t\tvar items = data.items;\r\n\t\t\t\tvar html = '
'\r\n\t\t\t\t\t+ '
'\r\n\t\t\t\t\t+ 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quae, nulla! Assumenda dignissimos harum, molestias iure repudiandae ratione praesentium. Illo facilis et velit ut quam omnis, porro molestiae magni, laboriosam ipsa.'\r\n\t\t\t\t\t+ '
'\r\n\t\t\t\t\t+ '
'\r\n\t\t\t\t\t+ 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Non, quaerat blanditiis. Eligendi quae tenetur ratione repellendus ut.
'\r\n\t\t\t\t\t+ '
'\r\n\t\t\t\t\t+ 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quae, nulla! Assumenda dignissimos harum, molestias iure repudiandae ratione praesentium. Illo facilis et velit ut quam omnis, porro molestiae magni, laboriosam ipsa.'\r\n\t\t\t\t\t+ '
'\r\n\t\t\t\t\t+ '
'\r\n\t\t\t\tvar html = \"
\";\r\n\t\t\t\thtml += \"

Hóa đơn 32

\" ;\r\n\r\n\t\t\t\tfor (var i = 0; i < items.length; i++) {\r\n\t\t\t\t\tt = items[i];\r\n\r\n\t\t\t\t\tvar tien = webix.Number.format(t.tien, {\r\n\t\t\t\t\t\tgroupDelimiter: \",\",\r\n\t\t\t\t\t\tgroupSize: 3,\r\n\t\t\t\t\t\tdecimalDelimiter: \".\",\r\n\t\t\t\t\t\tdecimalSize: 0\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tvar code = \"duyethoadon\";\r\n\t\t\t\t\tvar params = \"0\" + t.p_id;\r\n\r\n\t\t\t\t\tif (t.p_id == \"04\") {\r\n\t\t\t\t\t\tcode = \"reportwindow\";\r\n\t\t\t\t\t\tparams = \"WIN00022:d13001df-01fe-4d4f-ab65-cc98e7b41661\";\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\thtml += \"
\";\r\n\t\t\t\t\t// html += \"

\"+t.dien_giai+\"

\"\r\n\t\t\t\t\thtml += \"

\"+t.dien_giai+\"

\"\r\n\t\t\t\t\thtml += \"\"+tien+\"
\"\r\n\t\t\t\t\t// html += \"
\";\r\n\t\t\t\t\t// html += \"
\" + tien + \"
\" + t.dien_giai + \"
\";\r\n\t\t\t\t // html += \"\"+tien+\"
\";\r\n\t\t\t\t\thtml += \"
\";\r\n\t\t\t\t}\r\n\t\t\t\thtml += \"
\";\r\n\t\t\t\treturn html;\r\n\t\t\t},\r\n\t\t\turl: app.config.host + \"/Invoice/DashboardTiles\"\r\n\t\t}\r\n\r\n\t};\r\n\r\n});\ndefine('views/modules/dashline78',[\"app\"], function (app) {\r\n return {\r\n $ui: {\r\n height: 136,\r\n CSS: \"titles\",\r\n borderless: true,\r\n template: function (data) {\r\n var t = null;\r\n\r\n if (data.items == undefined) return;\r\n var items = data.items;\r\n var html = \"
\";\r\n html += \"

Hóa đơn 78

\";\r\n\r\n for (var i = 0; i < items.length; i++) {\r\n t = items[i];\r\n\r\n var tien = webix.Number.format(t.tien, {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n });\r\n\r\n var code = \"duyethoadon\";\r\n var params = \"0\" + t.p_id;\r\n\r\n if (t.p_id == \"04\") {\r\n code = \"reportwindow\";\r\n params = \"WIN00022:d13001df-01fe-4d4f-ab65-cc98e7b41661\";\r\n }\r\n html += \"
\";\r\n html +=\r\n \"

\" +\r\n t.dien_giai +\r\n \"

\";\r\n html +=\r\n \"

\" +\r\n tien +\r\n \"

\";\r\n html += \"
\";\r\n }\r\n html += \"
\";\r\n return html;\r\n },\r\n url: app.config.host + \"/Invoice68/DashboardTiles78\",\r\n },\r\n };\r\n});\r\n\ndefine('views/modules/data_invoice',[\"app\"],function(app){\r\n\r\n\treturn {\r\n\t\t$ui:{\r\n\t\t\t\"type\": \"clean\",\r\n\t\t\t\"rows\":[\r\n\t\t\t\t{\r\n\t\t\t\t\t\"template\": \" Danh sách mẫu hóa đơn sử dụng\", \"css\": \"sub_title\", \"height\": 30\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n \"view\":\"datatable\",\r\n \"css\" : \"mcls_invoiceDashboard\",\r\n \"url\": app.config.host + \"/Invoice/DashboardInvoices\",\r\n \"columns\": [\r\n // {\r\n // id: \"trang_thai\",\r\n // header:\"Trạng thái\",\r\n // width:120,\r\n // template:\"#trang_thai#\"\r\n // },\r\n {\r\n id: \"mau_so\",\r\n header:\"Mẫu hóa đơn\",\r\n template: \"#mau_so#\",\r\n fillspace:1\r\n },\r\n {\r\n id: \"ky_hieu\",\r\n header:\"Ký hiệu\",\r\n fillspace:1\r\n },\r\n {\r\n id: \"ngay_bd_sd\",\r\n header:\"Ngày sử dụng\",\r\n fillspace:1,\r\n format: function(text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text); \r\n return format(text);\r\n }\r\n },\r\n {\r\n id: \"so_luong\",\r\n header:\"Số lượng\",\r\n width:120,\r\n css: {\"text-align\": \"right\",\"color\":\"blue\", \"font-weight\": \"bold\"},\r\n format: webix.Number.numToStr({\r\n groupDelimiter:\",\",\r\n groupSize:3,\r\n decimalDelimiter:\".\",\r\n decimalSize:0\r\n })\r\n },\r\n {\r\n id: \"sl_xuat\",\r\n header:\"Đã xuất\",\r\n width:120,\r\n css: {\"text-align\": \"right\",\"color\":\"red\",\"font-weight\": \"bold\"},\r\n format: webix.Number.numToStr({\r\n groupDelimiter:\",\",\r\n groupSize:3,\r\n decimalDelimiter:\".\",\r\n decimalSize:0\r\n })\r\n },\r\n {\r\n id: \"con_lai\",\r\n header:\"Còn lại\",\r\n width:120,\r\n css: {\"text-align\": \"right\",\"font-weight\": \"bold\",\"color\":\"green\"},\r\n format: webix.Number.numToStr({\r\n groupDelimiter:\",\",\r\n groupSize:3,\r\n decimalDelimiter:\".\",\r\n decimalSize:0\r\n })\r\n },\r\n {\r\n id: \"trung_binh\",\r\n header:\"Trung bình 1 ngày\",\r\n width:120,\r\n css: {\"text-align\": \"right\",\"font-weight\": \"bold\"},\r\n format: webix.Number.numToStr({\r\n groupDelimiter:\",\",\r\n groupSize:3,\r\n decimalDelimiter:\".\",\r\n decimalSize:0\r\n })\r\n }\r\n ]\r\n }\r\n\t\t\t]\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/register_licence_branch',[\"app\",\r\n \"locale\",\r\n \"views/forms/register_licence_branch\"\r\n ],function(app,_,dmwindowform){\r\n\r\n var itemValue;\r\n\t\r\n function initUI(){\r\n\t\t\r\n // call API kiểm tra đơn vị này có được đăng ký không?\r\n var table = webix.$$(\"treewindowDataRegister\");\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var value = itemValue.code;\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/System/CheckBrandValidation?value=\" + value, function (res) {\r\n // res = true;\r\n if (res == \"false\") {\r\n webix.message({ type: \"error\", text: \"Đơn vị không thể đăng ký\" });\r\n webix.$$(\"dangkylicense-win\").close();\r\n }\r\n else {\r\n // call API get danh sách đã đăng ký của đơn vị\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n webix.ajax()\r\n .headers({'Content-type':'application/json'})\r\n .post(url,\r\n {\r\n command:\"CM00098\",\r\n parameter:{\r\n branch_id: itemValue.id\r\n }\r\n }\r\n ,function(text){\r\n var json = JSON.parse(text);\r\n \r\n var data = listToTree(json, { idKey: \"id\", parentId: \"parent_id\" });\r\n \r\n var tblData = $$(\"treewindowDataRegister\");\r\n \r\n tblData.parse(data,\"json\");\r\n tblData.openAll();\r\n \r\n });\r\n }\r\n });\r\n }\r\n }\r\n table.define(\"url\", url);\r\n \r\n }\r\n\r\n var controls = [\r\n // {\r\n // id: \"btnRefreshRegister\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"fas fa-refresh\",\r\n // label: _(\"REFRESH\"),\r\n // css: \"webix_secondary\",\r\n // width: 95,\r\n // on: {\r\n // onClick: function () {\r\n \r\n // }\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // }\r\n // },\r\n {\r\n id: \"btnPlusRegister\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-plus\",\r\n label: \"Thêm mới\",\r\n css: \"webix_secondary\",\r\n width: 100,\r\n //css:\"button_raised\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function (item) {\r\n var detailForm = this.$scope.ui(dmwindowform.$ui);\r\n var form = webix.$$(\"register_licence-form\");\r\n \r\n var branchCode = itemValue.code;\r\n\r\n dmwindowform.setEditMode(1);\r\n detailForm.show();\r\n\r\n var cb=$$(\"cbBranchCode\");\r\n cb.define(\"readonly\",true);\r\n cb.setValue(branchCode);\r\n cb.refresh();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n id: \"btnEditRegister\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-edit\",\r\n css: \"webix_secondary\",\r\n label: \"Cập nhật\",\r\n width: 100,\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmwindowform.$ui);\r\n var form = webix.$$(\"register_licence-form\");\r\n\r\n var table = webix.$$(\"treewindowDataRegister\");\r\n var item = table.getSelectedItem();\r\n item.createdondate = new Date(item.createdondate);\r\n form.setValues(item); \r\n dmwindowform.setEditMode(2);\r\n\r\n detailForm.show();\r\n }, \r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n \r\n },\r\n \r\n {},\r\n ]\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"treewindowDataRegister\",\r\n view: \"treetable\",\r\n select: true,\r\n resizeColumn: true,\r\n scheme: {\r\n $change: function (item) {\r\n if (item.$count > 1980)\r\n item.$css = \"highlight\";\r\n },\r\n $init: function (obj) {\r\n\r\n },\r\n },\r\n \r\n \r\n on: {\r\n onItemDblClick: function (id, e, node) {\r\n var btnEditRegister = $$(\"btnEditRegister\");\r\n btnEditRegister.callEvent(\"onClick\");\r\n },\r\n },\r\n //url: app.config.host + \"/api/System/GetDataByWindowNo?window_id=\"+windowno ,\r\n columns: [\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"branch_name\",\r\n header: \"Tên khách hàng/ đơn vị\",\r\n width: 300,\r\n },\r\n {\r\n id: \"quantity\",\r\n header: \"Số lượng (hóa đơn)\",\r\n width: 200,\r\n },\r\n {\r\n id: \"createdondate\",\r\n header: \"Ngày đăng ký\",\r\n width: 200,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n },\r\n ],\r\n data: [\r\n \r\n ],\r\n filterMode:{\r\n level:false,\r\n showSubItems:false\r\n }\r\n }\r\n ]\r\n }\r\n\r\n\treturn {\t\r\n // $ui: layout,\t\r\n\t\t$ui:{ \r\n\t\t\tview:\"window\", modal:true, id:\"dangkylicense-win\", position:\"center\",\r\n\t\t\thead:\"Đăng ký licence cho khách hàng\",\r\n\t\t\tfullscreen:true,\r\n\t\t\tbody:{\r\n rows: [\r\n {\r\n id: \"tlbMain\",\r\n height: 35,\r\n type: \"toolbar\",\r\n cols: controls\r\n },\r\n {\r\n rows: [\r\n grid\r\n ]\r\n },\r\n { \r\n view:\"button\", shortcut:\"esc\", label:\"Hủy bỏ (ESC)\",type:\"danger\",align:\"center\",\r\n width:100,\r\n on:{\r\n onClick: function(){\r\n this.getTopParentView().close();\r\n }\r\n },\r\n click:function(){\r\n this.callEvent(\"onClick\");\r\n }\r\n }\r\n ]\r\n\t\t\t}\t\t\t\r\n\t\t\t\r\n\t\t},\t\r\n \r\n setItemValue: function (item) {\r\n\t\t\titemValue = item;\r\n initUI();\r\n\t\t}\r\n \r\n\t};\r\n\r\n});\ndefine('views/reportwindow',[\"app\", \"locale\", \"views/forms/loadDataReport\", \"views/forms/detailreport\", \"views/forms/window\", \"models/user\"], function (app, _, loadDataReport, detailreport, windowform, user) {\r\n \r\n\r\n var windowno = app.path[1].params[0];\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n if ($$(\"cbReport\").getValue() == null || $$(\"cbReport\").getValue() == \"\") {\r\n webix.message(\"Bạn chưa chọn báo cáo !\", \"error\");\r\n return;\r\n }\r\n\r\n var cbReport = webix.$$(\"cbReport\");\r\n var reportTable = webix.$$(\"reportTable\");\r\n\r\n webix.extend(reportTable, webix.ProgressBar);\r\n reportTable.disable();\r\n reportTable.showProgress();\r\n\r\n var list = cbReport.getList();\r\n\r\n var item = list.getItem(cbReport.getValue());\r\n\r\n loadDataReport.$ui.id = item.wb_infowindow_id;\r\n loadDataReport.$ui.report_id = cbReport.getValue();\r\n loadDataReport.$ui.load_event = \"loadReport\";\r\n\r\n if ($$(\"tblReport\").config.rpParameter != null) {\r\n loadDataReport.$ui.editmode = 1;\r\n loadDataReport.$ui.formvalues = $$(\"tblReport\").config.rpParameter.parameters;\r\n } else {\r\n loadDataReport.$ui.editmode = 0;\r\n loadDataReport.$ui.formvalues = null;\r\n }\r\n\r\n var wininfoparam = this.$scope.ui(loadDataReport.$ui);\r\n loadDataReport.initUI(item.wb_infowindow_id).then(function () {\r\n wininfoparam.show();\r\n reportTable.enable();\r\n reportTable.hideProgress();\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 130,\r\n label: ' ' + '' + _(\"PRINT\") + \" (PDF)\" + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"tblReport\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n\r\n var datafrmAll = table.serialize();\r\n\r\n if (datafrmAll.length == 0) {\r\n webix.message(\"Không có dữ liệu để in!\", \"error\");\r\n return;\r\n }\r\n\r\n rpParameter.type = \"PDF\";\r\n\r\n if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang in báo cáo ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/System/CreateReport\",\r\n rpParameter,\r\n {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n window.open(fileURL, \"_blank\");\r\n },\r\n }\r\n );\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"EXPORT_EXCEL\") + \"\",\r\n id: \"btnExport\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"tblReport\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n\r\n var datafrmAll = table.serialize();\r\n\r\n if (datafrmAll.length == 0) {\r\n webix.message(\"Không có dữ liệu để xuất!\", \"error\");\r\n return;\r\n }\r\n\r\n rpParameter.type = \"xlsx\";\r\n\r\n if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang kết xuất Excel ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/System/CreateReport\",\r\n rpParameter,\r\n {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n webix.modalbox.hide(box);\r\n var reportItem = $$(\"cbReport\").getList().getSelectedItem();\r\n\r\n if (reportItem != null) {\r\n var export_name = reportItem.export_name;\r\n webix.html.download(file, export_name + \".xlsx\");\r\n }\r\n\r\n },\r\n }\r\n );\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n {\r\n id: \"cbReport\",\r\n view: \"combo\",\r\n width: 450,\r\n label: \"Chọn báo cáo\",\r\n labelWidth: 90,\r\n suggest: {\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n var parameters = {\r\n command: \"CM00016\",\r\n parameter: {\r\n window_id: windowno,\r\n username: user.getCurrentUser(),\r\n },\r\n };\r\n\r\n webix.ajax().bind(view).headers({ \"Content-Type\": \"application/json\" }).post(url, parameters, callback);\r\n },\r\n },\r\n template: \"#name#\",\r\n body: {\r\n template: \"#name#\",\r\n },\r\n },\r\n on: {\r\n onChange: function () {\r\n var report_id = this.getValue();\r\n\r\n if (report_id == \"\") {\r\n return;\r\n }\r\n var name = $$(\"cbReport\").getText();\r\n webix.$$(\"title\").parse({ title: name, details: name });\r\n initTable(report_id);\r\n },\r\n },\r\n },\r\n ];\r\n\r\n var grid = {\r\n id: \"reportTable\",\r\n rows: [\r\n {\r\n id: \"tblReport\",\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n select: true,\r\n css: \"report\",\r\n columns: [],\r\n headermenu: {\r\n width: 200,\r\n autoheight: false,\r\n scroll: true,\r\n },\r\n scheme: {\r\n $change: function (item) {\r\n if (item.BOLD == \"C\") item.$css = \"rowBold\";\r\n },\r\n },\r\n pager: \"pagerA\",\r\n on: {\r\n onBeforeContextMenu: function (id) {\r\n var item = this.getItem(id);\r\n\r\n if (item.DOC_ID != null && item.MA_CT != null) {\r\n var mn = $$(\"ctxMenu\");\r\n var menuitem = mn.getItem(\"SUACTGOC\");\r\n if (menuitem == null) {\r\n mn.add({ id: \"SUACTGOC\", value: \"Sửa chứng từ\" });\r\n }\r\n }\r\n\r\n webix.delay(function () {\r\n this.clearSelection();\r\n this.select(id.row, id.column);\r\n }, this);\r\n },\r\n },\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var contextmenu = webix.ui({\r\n view: \"contextmenu\",\r\n id: \"ctxMenu\",\r\n on: {\r\n onMenuItemClick: function (id) {\r\n var item = this.getItem(id);\r\n\r\n if (id == \"SUACTGOC\") {\r\n var table = $$(\"tblReport\");\r\n var row = table.getSelectedItem();\r\n\r\n var sql = \"SELECT TOP 1 a.* FROM VC_WINDOW a WHERE a.ma_ct='\" + row.MA_CT + \"'\";\r\n var url = app.config.host + \"/api/System/ExecuteQuery?sql=\" + sql;\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = json[0];\r\n\r\n var table = $$(\"tblReport\");\r\n var row = table.getSelectedItem();\r\n\r\n var a = webix.ajax(app.config.host + \"/api/System/GetDataById?window_id=\" + data.WINDOW_ID + \"&id=\" + row.DOC_ID);\r\n var b = webix.ajax(app.config.host + \"/api/System/GetAllByWindowNo?window_id=\" + data.WINDOW_ID);\r\n\r\n webix.promise.all([a, b]).then(function (results) {\r\n var a_result = results[0].json();\r\n var windowconfig = results[1].json();\r\n\r\n var vc_window = windowconfig[\"data\"][0];\r\n windowform.$ui.id = vc_window.WINDOW_ID;\r\n\r\n var table = $$(\"tblReport\");\r\n var detailForm = table.$scope.ui(windowform.$ui);\r\n\r\n var item = a_result.data[0];\r\n\r\n windowform.initUI(windowconfig);\r\n windowform.setEditMode(2);\r\n windowform.setValues(item, windowconfig);\r\n\r\n detailForm.show();\r\n });\r\n });\r\n } else {\r\n var ctx = this.getContext();\r\n\r\n detailreport.$ui.id = \"dtrp_\" + item.MENU_ID;\r\n detailreport.$ui.parentParameter = ctx.obj.config.rpParameter.parameters;\r\n detailreport.$ui.parentRow = ctx.obj.getSelectedItem();\r\n\r\n this.hide();\r\n\r\n var win = ctx.obj.$scope.ui(detailreport.$ui);\r\n detailreport.initUI(item);\r\n win.show();\r\n }\r\n },\r\n },\r\n });\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n type: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n function initTable(report_id) {\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n var parameters = {\r\n command: \"CM00012\",\r\n parameter: {\r\n wb_report_id: report_id,\r\n },\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, parameters, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n var table = webix.$$(\"tblReport\");\r\n\r\n table.clearAll();\r\n table.config.rpParameter = null;\r\n\r\n var cols = [];\r\n var isFooter = false;\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n var col = json[i];\r\n //console.log(col);\r\n\r\n var item = {\r\n id: col.value_field,\r\n header: \"
\" + _(col.header_title) + \"
\",\r\n width: col.width,\r\n hidden: col.hidden == \"C\" ? true : false,\r\n };\r\n\r\n // cột tổng dưới footer\r\n if (col.footer === \"\" || col.footer === null) {\r\n } else {\r\n var temp = JSON.parse(col.footer);\r\n item.footer = temp;\r\n\r\n isFooter = true;\r\n }\r\n\r\n //console.log(col.sum);\r\n if (col.header != null) {\r\n if (col.header != \"\") {\r\n var headers = JSON.parse(col.header);\r\n\r\n for (var j = 0; j < headers.length; j++) {\r\n var hd = headers[j];\r\n if (hd != null) {\r\n hd.text = \"
\" + _(hd.text) + \"
\";\r\n }\r\n }\r\n\r\n item.header = headers;\r\n }\r\n }\r\n\r\n if (col.data_type == \"datetime\" || col.data_type == \"date\") {\r\n item.format = function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (col.data_type == \"decimal\" || col.data_type == \"int\" || col.data_type == \"integer\" || col.data_type == \"numeric\") {\r\n item.css = { \"text-align\": \"right\" };\r\n item.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n });\r\n }\r\n\r\n if (col.data_type == \"boolean\") {\r\n item.template = function (obj, common, value) {\r\n if (value) return \"
\";\r\n else return \"
\";\r\n };\r\n }\r\n\r\n if (col.value_field == \"nlap\" && col.wb_report_id == \"7fdfab2b-9508-4471-98e0-96d36443ab08\") {\r\n\r\n item.template = function (obj, common) {\r\n if (obj.$level == 1) return common.treetable(obj, common) + \"\" + obj.value + \" ( \" + obj.$count + \" )\" + \"\";\r\n return obj.nlap;\r\n };\r\n }\r\n\r\n if (col.value_field == \"ord\") {\r\n\r\n item.sort = \"int\";\r\n }\r\n\r\n cols.push(item);\r\n }\r\n\r\n table.define(\"footer\", isFooter);\r\n\r\n table.config.columns = cols;\r\n table.config.report_id = json[0][\"wb_report_id\"];\r\n table.refreshColumns();\r\n });\r\n }\r\n var initComponents = function (_windowconfig) {\r\n var vc_window = _windowconfig[\"data\"][0];\r\n\r\n webix.$$(\"title\").parse({\r\n title: vc_window[\"name\"],\r\n details: vc_window[\"name\"],\r\n width: 1000,\r\n });\r\n\r\n $$(\"head-title\").show();\r\n };\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n\r\n var windowno = app.path[1].params[0];\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n if (app_cache[windowno] != null) {\r\n var windowconfig = app_cache[windowno];\r\n\r\n initComponents(windowconfig);\r\n } //không có cache\r\n else {\r\n var url = app.config.host + \"/System/GetConfigWinByNo?id=\" + windowno;\r\n webix.ajax(url, function (text, xml, xhr) {\r\n var rp = JSON.parse(text);\r\n var windowconfig = rp;\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n app_cache[windowno] = windowconfig;\r\n\r\n webix.storage.local.put(\"APP_CACHE\", app_cache);\r\n\r\n initComponents(windowconfig);\r\n });\r\n }\r\n\r\n if (app.path[1].params[1] != null) {\r\n var id = app.path[1].params[1];\r\n $$(\"cbReport\").setValue(id);\r\n\r\n var load_event = \"loadReport\";\r\n var report_id = \"d13001df-01fe-4d4f-ab65-cc98e7b41661\";\r\n var id = \"5accccd3-51bd-4370-b130-b01ab35d6c86\";\r\n\r\n var now = new Date();\r\n now.setHours(0, 0, 0, 0);\r\n\r\n var item = {\r\n ma_dvcs: user.getDvcsID(),\r\n tu_ngay: null,\r\n den_ngay: now,\r\n };\r\n\r\n var table = $$(\"tblReport\");\r\n table.report_id = report_id;\r\n\r\n var rpParameter = {\r\n parameters: item,\r\n infowindow_id: id,\r\n type: \"json\",\r\n report_id: report_id,\r\n };\r\n\r\n table.config.rpParameter = rpParameter;\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/CreateReport\", rpParameter, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n var table = $$(\"tblReport\");\r\n table.clearAll();\r\n table.parse(data, \"json\");\r\n });\r\n }\r\n\r\n $scope.on(app, \"loadReport\", function (report_id, infoWindowId, item) {\r\n\r\n var table = $$(\"tblReport\");\r\n // webix.extend(table, webix.OverlayBox);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n //table.showOverlay(\"

\");\r\n if (table.config.report_id == report_id) {\r\n var rpParameter = {\r\n parameters: item,\r\n infowindow_id: infoWindowId,\r\n type: \"json\",\r\n report_id: report_id,\r\n };\r\n\r\n table.config.rpParameter = rpParameter;\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/CreateReport\", rpParameter, function (text) {\r\n webix.delay(\r\n function () {\r\n var data = JSON.parse(text);\r\n\r\n var table = $$(\"tblReport\");\r\n table.clearAll();\r\n table.parse(data, \"json\");\r\n },\r\n null,\r\n null,\r\n 1000\r\n );\r\n\r\n table.enable();\r\n table.hideProgress();\r\n // var data = JSON.parse(text);\r\n\r\n // var table = $$(\"tblReport\");\r\n // table.clearAll();\r\n // table.parse(data, \"json\");\r\n });\r\n }\r\n });\r\n\r\n $scope.on(app, \"loadDetailReport\", function (report_id, infoWindowId, item, menuitem) {\r\n var win = $$(\"dtrp_\" + menuitem.MENU_ID);\r\n var table = win.getChildViews()[1].getChildViews()[1];\r\n\r\n if (table.config.report_id == report_id) {\r\n var rpParameter = {\r\n parameters: item,\r\n infowindow_id: infoWindowId,\r\n type: \"json\",\r\n report_id: report_id,\r\n };\r\n\r\n table.config.rpParameter = rpParameter;\r\n\r\n var ajax = webix.ajax();\r\n ajax.master = menuitem;\r\n\r\n ajax.headers({ \"Content-type\": \"application/json\" }).post(app.config.host + \"/api/System/CreateReport\", rpParameter, function (text) {\r\n\r\n var win = $$(\"dtrp_\" + this.MENU_ID);\r\n var table = win.getChildViews()[1].getChildViews()[1];\r\n\r\n table.clearAll();\r\n var data = JSON.parse(text);\r\n table.parse(data, \"json\");\r\n table.refresh();\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n }\r\n });\r\n },\r\n initUI: function () {\r\n $$(\"head-title\").show();\r\n },\r\n };\r\n});\r\n\n/**\r\n * Created by Mads on 03-10-2015.\r\n */\r\ndefine('views/retrivepass',[\"models/user\", \"locale\", \"app\", \"helpers/locale\"], function (user, _, app, locale) {\r\n \r\n\r\n var values = webix.copy(\r\n {\r\n username: \"\",\r\n password: \"\",\r\n rememberme: false,\r\n language: \"vi\",\r\n ma_dvcs: \"VP\",\r\n },\r\n Cookies.getJSON(\"Crm\")\r\n );\r\n\r\n return {\r\n $ui: {\r\n cols: [\r\n { gravity: 1, template: \"\" },\r\n {\r\n rows: [\r\n { gravity: 1, template: \"\" },\r\n {\r\n css: { \"background-color\": \"#cc0000\", color: \"white\", \"border-radius\": \"15px 15px 0px 0px\" },\r\n cols: [\r\n {\r\n view: \"template\",\r\n type: \"header\",\r\n template: \"Quên mật khẩu ?\",\r\n css: { \"background-color\": \"#cc0000\", color: \"white\", \"padding-bottom\": \"5px\" },\r\n borderless: true,\r\n //width:180\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"form\",\r\n gravity: 1,\r\n id: \"loginForm\",\r\n width: 360,\r\n elementsConfig: {\r\n labelPosition: \"top\",\r\n },\r\n elements: [\r\n {\r\n view: \"template\",\r\n template: \"
\",\r\n height: 130,\r\n borderless: true,\r\n css: { padding: \"0px\" },\r\n },\r\n {\r\n height: 15,\r\n },\r\n {\r\n view: \"text\",\r\n //id: \"email\",\r\n name: \"email\",\r\n label: \"Nhập địa chỉ email để gửi mật khẩu mới\",\r\n icon: \"email\",\r\n required: true,\r\n invalidMessage: \"Bạn chưa nhập địa chỉ email hoặc email định dạng không đúng\",\r\n placeholder: \"Email\",\r\n validate: webix.rules.isEmail,\r\n },\r\n {\r\n view: \"button\",\r\n //type:\"danger\",\r\n id: \"login\",\r\n name: \"login\",\r\n label: \"Gửi yêu cầu tạo mật khẩu\",\r\n //hotkey: \"enter\",\r\n css: \"mcls_btnResetPass\",\r\n click: function () {\r\n if ($$(\"loginForm\").validate()) {\r\n var form = $$(\"loginForm\");\r\n\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Account/ResetPass\", $$(\"loginForm\").getValues(), function (text, xml, xhr) {\r\n var json = JSON.parse(text);\r\n\r\n var form = $$(\"loginForm\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.alert({\r\n title: \"Thông báo\",\r\n ok: \"OK\",\r\n text: json.error,\r\n type: \"alert-error\",\r\n });\r\n } else {\r\n webix.alert({\r\n title: \"Thông báo\",\r\n ok: \"OK\",\r\n text: \"Đã gửi mật khẩu tới email.Bạn hãy kiểm tra lại.\",\r\n });\r\n }\r\n });\r\n } else {\r\n $$(\"loginForm\").focus();\r\n }\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Quay lại đăng nhập\",\r\n type: \"form\",\r\n icon: \"repeat\",\r\n click: function () {\r\n app.router(\"/login\");\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n id: \"version\",\r\n //borderless: true,\r\n css: { background: \"#e6f7ff !important\" },\r\n width: 200,\r\n view: \"template\",\r\n template:\r\n \"

Bước 1:


\" +\r\n \"

Bước 2:

\" +\r\n \"

Bước 3:

\",\r\n },\r\n ],\r\n },\r\n { gravity: 1, temlate: \"\" },\r\n ],\r\n },\r\n { gravity: 1, template: \"\" },\r\n ],\r\n },\r\n\r\n $oninit: function () {\r\n $$(\"loginForm\").focus();\r\n },\r\n };\r\n});\r\n\ndefine('views/searchinvoice',[\"app\", \"views/forms/searchinvoice\", \"locale\"], function (app, searchForm, _) {\r\n \r\n\r\n var op = [];\r\n\r\n webix.$$(\"title\").parse({ title: \"Tra cứu hóa đơn\", details: \"Hóa đơn đã lập\" });\r\n\r\n var controls = [\r\n {\r\n id: \"txtSearch\",\r\n view: \"search\",\r\n align: \"center\",\r\n placeholder: _(\"SEARCH\") + \"..\",\r\n width: 300,\r\n on: {\r\n onTimedKeyPress: function () {\r\n var table = $$(\"tblSearch\");\r\n\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"icon\",\r\n css: \"webix_secondary\",\r\n icon: \" fas fa-edit\",\r\n label: _(\"TIM_CHI_TIET\"),\r\n width: 100,\r\n on: {\r\n onClick: function () {\r\n var win = this.$scope.ui(searchForm.$ui);\r\n searchForm.setValues($$(\"tblSearch\").config.paramFilter);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnPrint\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-print\",\r\n css: \"webix_secondary\",\r\n label: _(\"PRINT\"),\r\n width: 65,\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"tblSearch\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\");\r\n return;\r\n }\r\n\r\n var url = app.config.host + \"/Invoice/Preview?id=\" + item.inv_InvoiceAuth_id;\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n\r\n webix.modalbox.hide(box);\r\n window.open(fileURL, \"_blank\");\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"tblSearch\",\r\n view: \"datatable\",\r\n select: true,\r\n datafetch: 100,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice/Search\";\r\n var item = {};\r\n\r\n var txtSearch = $$(\"txtSearch\");\r\n\r\n var filter = {};\r\n\r\n if (txtSearch !== undefined) {\r\n var typingFilter = txtSearch.getValue();\r\n\r\n if (typingFilter != \"\") {\r\n filter.typingFilter = typingFilter;\r\n }\r\n }\r\n\r\n if (view.config.paramFilter != null) {\r\n filter.paramFilter = view.config.paramFilter;\r\n }\r\n\r\n if (params == null) {\r\n item.start = 0;\r\n item.count = view.config.datafetch;\r\n item.continue = null;\r\n item.filter = filter;\r\n } else {\r\n item.start = params.start;\r\n item.count = params.count;\r\n item.continue = params.continue;\r\n item.filter = filter;\r\n }\r\n\r\n webix.ajax().bind(view).headers({ \"Content-Type\": \"application/json\" }).post(url, item, callback);\r\n },\r\n },\r\n columns: [\r\n { id: \"mau_hd\", header: _(\"MAU_HD\"), width: 150 },\r\n { id: \"inv_invoiceSeries\", header: _(\"KY_HIEU\"), width: 120 },\r\n { id: \"inv_invoiceNumber\", header: _(\"SO_HDON\"), width: 120 },\r\n { id: \"inv_invoiceIssuedDate\", header: _(\"NGAY_HDON\"), width: 150 },\r\n { id: \"ma_dt\", header: _(\"MA_DT\"), width: 150 },\r\n { id: \"inv_buyerLegalName\", header: _(\"TEN_DON_VI\"), width: 250 },\r\n { id: \"inv_buyerDisplayName\", header: _(\"TEN_NGUOI_MUA\"), width: 250 },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 35,\r\n view: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $$(\"tblSearch\").config.paramFilter = {};\r\n\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"tblSearch\");\r\n table.config.paramFilter = item;\r\n\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/templatewindow',[\r\n \"app\",\r\n \"views/forms/templatewindow\",\r\n \"views/forms/infowindow\",\r\n\t\"locale\"\r\n], function(app,windowform,infowindow,_) {\r\n \r\n\t\r\n\tvar layoutId = \"\";\r\n\tvar col = [];\r\n\tvar sub_col = [];\r\n var windowconfig = null;\r\n var buttons = [];\r\n\t//var windowno = \"\":\r\n\t\r\n\tvar initUI = function(){\r\n\t\tvar windowno = app.path[1].params[0];\r\n\t\t\r\n\t\tcol = [];\t\t\r\n sub_col = [];\r\n \r\n var query = \"SELECT TOP 1 * FROM WB_MENU WHERE WINDOW_ID='\"+ windowno +\"'\";\r\n\r\n var url = app.config.host + \"/System/ExecuteQuery?sql=\" + query;\r\n\r\n webix.ajax(url,function(text){\r\n var json = JSON.parse(text);\r\n\r\n if (json.length>0){\r\n webix.$$(\"title\").parse({title: json[0][\"name\"], details: json[0][\"details\"]});\r\n }\r\n });\r\n\r\n /* query = \"SELECT CODE as id,NAME as value FROM VC_MAUIN WHERE WINDOW_ID='\"+ windowno +\"'\";\r\n url = app.config.host + \"/api/System/ExecuteQuery?sql=\" + query;\r\n\r\n webix.ajax(url,function(text){\r\n var json = JSON.parse(text);\r\n\r\n if (json.length>0){\r\n $$(\"cbMauIn\").define(\"options\",json);\r\n $$(\"cbMauIn\").setValue(json[0].id);\r\n $$(\"cbMauIn\").show();\r\n $$(\"btnPrint\").show(); \r\n }\r\n else {\r\n $$(\"cbMauIn\").define(\"options\",[]);\r\n $$(\"cbMauIn\").hide();\r\n $$(\"btnPrint\").hide();\r\n }\r\n\r\n $$(\"cbMauIn\").refresh();\r\n }); */\r\n\r\n url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n webix.ajax()\r\n .headers({'Content-type':'application/json'})\r\n .post(url,\r\n { \r\n command : \"CM00002\", \r\n parameter: {\r\n window_id: windowno\r\n }\r\n },function(text){\r\n var json = JSON.parse(text);\r\n\r\n if (buttons.length>0){\r\n for(var i=0;i0){\r\n url = url + \"&filter=\" +JSON.stringify(array);\r\n }\r\n else {\r\n url = url + \"&filter=null\";\r\n }\r\n \r\n }\r\n else {\r\n url = url + \"&filter=null\";\r\n } \r\n }\r\n\r\n if (view.config.infoparam!=null){\r\n url = url + \"&infoparam=\" + JSON.stringify(view.config.infoparam);\r\n }\r\n else {\r\n url = url + \"&infoparam=null\";\r\n }\r\n\r\n var tlbParams = $$(\"tlbParams\");\r\n\r\n if (tlbParams!== undefined){\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n\r\n for(var i=0;i< childViews.length;i++){\r\n var child = childViews[i];\r\n\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n var item = {\r\n columnName: value_field,\r\n value: $$(id).getValue()\r\n };\r\n \r\n parameters.push(item);\r\n }\r\n\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n\r\n }\r\n else {\r\n url = url + \"&tlbparam=null\" ;\r\n }\r\n \r\n console.log(url);\r\n\r\n webix.ajax(url, callback, view);\r\n \r\n }\r\n };\r\n \r\n table.define(\"url\", url );\r\n\r\n if (vc_window.vc_infowindow_id!=null){\r\n if (vc_window.vc_infowindow_id!=\"\"){\r\n $$(\"btnSearch\").show();\r\n table.config.infowindow_id = vc_window.vc_infowindow_id;\r\n }\r\n else {\r\n $$(\"btnSearch\").hide();\r\n table.config.infowindow_id = null;\r\n }\r\n }\r\n else {\r\n $$(\"btnSearch\").hide();\r\n table.config.infowindow_id = null;\r\n }\r\n\r\n \r\n \r\n\r\n\t\t\twebix.$$(\"windowData\").getParentView().getParentView().getParentView().enable();\r\n\t\t\twebix.$$(\"windowData\").getParentView().getParentView().getParentView().hideProgress();\r\n\r\n\t\t});\r\n\t};\r\n\t\r\n\r\n var controls = [\r\n { \r\n id: \"btnPlus\",\r\n view: \"button\", \r\n type: \"icon\", \r\n icon:\"plus\", \r\n label: \"Thêm\" ,\r\n width:65,\r\n shortcut: \"F4\",\r\n //css:\"button_raised\",\r\n on:{\r\n onClick: function(){\r\n var vc_window = windowconfig[\"data\"][0];\r\n windowform.$ui.id = vc_window.window_id;\r\n\r\n var detailForm = this.$scope.ui(windowform.$ui); \r\n \r\n windowform.initUI(windowconfig);\r\n windowform.setEditMode(1);\r\n\r\n var params = null;\r\n\r\n var tlbParams = $$(\"tlbParams\");\r\n\r\n if (tlbParams!== undefined){\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var item = [];\r\n\r\n for(var i=0;i< childViews.length;i++){\r\n var child = childViews[i];\r\n\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n item[value_field] = $$(id).getValue(); \r\n \r\n }\r\n\r\n params = item;\r\n\r\n }\r\n \r\n\r\n windowform.setValues(null,windowconfig,params);\r\n \r\n detailForm.show();\r\n windowform.focusFirstElement();\r\n\r\n if (vc_window.after_new!=null){\r\n var fn = Function(\"app\",vc_window.after_new);\r\n fn(app);\r\n }\r\n }\r\n },\r\n click: function(){\r\n this.callEvent(\"onClick\"); \r\n }\r\n },\r\n { \r\n id: \"btnEdit\",\r\n view: \"button\", \r\n type: \"icon\", \r\n icon:\"edit\", \r\n label: \"Sửa\" ,\r\n width:55,\r\n shortcut: \"F3\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function(){\r\n var vc_window = windowconfig[\"data\"][0];\r\n windowform.$ui.id = vc_window.window_id;\r\n\r\n var detailForm = this.$scope.ui(windowform.$ui);\r\n \r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem(); \r\n \r\n windowform.initUI(windowconfig);\r\n windowform.setEditMode(2);\r\n windowform.setValues(item,windowconfig);\r\n \r\n detailForm.show();\r\n windowform.focusFirstElement();\r\n }\r\n },\r\n click: function(){ \r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n { \r\n id: \"btnDelete\", \r\n view: \"button\", \r\n type: \"icon\", \r\n icon:\"trash-o\", \r\n label: \"Xóa\" ,\r\n width:55,\r\n shortcut: \"F8\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function(){\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n\r\n var khData={};\r\n khData.windowid=windowconfig.data[0].window_id;\r\n khData.editmode=3;\r\n khData.data=[];\r\n khData.data.push(item);\r\n \r\n webix.confirm({\r\n text:\"Bạn có muốn xóa \", ok:\"Có\", cancel:\"Không\",\r\n callback:function(res){\r\n if(res){\r\n webix.ajax()\r\n .headers({'Content-type':'application/json'})\r\n .post( app.config.host + \"/System/Save\", khData , function(text){\r\n if (text.hasOwnProperty(\"error\")){\r\n webix.message(text.error);\r\n return;\r\n }\r\n \r\n table.remove(item.id);\r\n\r\n });\r\n \r\n }\r\n }\r\n });\r\n }\r\n },\r\n click: function(){ \r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n { \r\n id: \"btnCopy\", \r\n view: \"button\", \r\n type: \"icon\", \r\n icon:\"files-o\", \r\n label: _(\"COPY\") ,\r\n width:85,\r\n on: {\r\n onClick: function(){\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null){\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\");\r\n return;\r\n }\r\n\r\n var vc_window = windowconfig[\"data\"][0];\r\n windowform.$ui.id = vc_window.window_id;\r\n\r\n var detailForm = this.$scope.ui(windowform.$ui); \r\n \r\n windowform.initUI(windowconfig);\r\n windowform.setEditMode(1);\r\n windowform.copyValues(item,windowconfig);\r\n \r\n detailForm.show();\r\n windowform.focusFirstElement();\r\n\r\n if (vc_window.after_new!=null){\r\n var fn = Function(vc_window.after_new);\r\n fn();\r\n }\r\n\r\n \r\n }\r\n },\r\n click: function(){ \r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n { \r\n id: \"btnSearch\", \r\n view: \"button\", \r\n type: \"icon\", \r\n icon:\"search\", \r\n label: _(\"SEARCH\") ,\r\n width:85,\r\n shortcut: \"F2\",\r\n on: {\r\n onClick: function(){\r\n var table = webix.$$(\"windowData\");\r\n \r\n infowindow.$ui.id = table.config.infowindow_id;\r\n infowindow.$ui.load_event = \"filterTable\"; \r\n\r\n var wininfoparam = this.$scope.ui(infowindow.$ui);\r\n\r\n infowindow.initUI(table.config.infowindow_id); \r\n wininfoparam.show();\r\n }\r\n },\r\n click: function(){ \r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n { \r\n id: \"btnPrint\", \r\n view: \"button\", \r\n type: \"icon\", \r\n icon:\"print\", \r\n label: _(\"PRINT\") ,\r\n width:40,\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function(){\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dữ liệu cần in\");\r\n return;\r\n }\r\n\r\n var cbMauIn = $$(\"cbMauIn\");\r\n\r\n var rpParameter = {\r\n parameter : item,\r\n CODE: cbMauIn.getValue()\r\n };\r\n\r\n var url = app.config.host + \"/api/System/InChungTu\" ;\r\n\r\n webix.ajax()\r\n .response(\"arraybuffer\")\r\n .headers({'Content-type':'application/json'})\r\n .post(url, rpParameter, function(text, data){\r\n var file = new Blob([data], {type: 'application/pdf'});\r\n var fileURL = URL.createObjectURL(file);\r\n window.open(fileURL,'_blank');\r\n });\r\n \r\n }\r\n },\r\n click: function(){ \r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {},\r\n {\r\n view:\"richselect\",\r\n label:_(\"MAUIN\"),\r\n width:250,\r\n labelWidth:50,\r\n id:\"cbMauIn\"\r\n }\r\n ] \r\n \r\n var grid = {\r\n rows:[\r\n {\r\n id : \"windowData\",\r\n view: \"datatable\", \r\n select: true,\r\n datafetch: 50,\r\n columns: col ,\r\n on:{\r\n onSubViewCreate:function(view, item){\r\n var subView = view;\r\n\r\n if (subView!=null){\r\n var windowno = app.path[1].params[0];\r\n\r\n var url = app.config.host + \"/System/GetDataDetailsByTabTable?window_id=\"+ windowno\r\n +\"&id=\"+item.id;\r\n \r\n var detailTables = subView.getChildViews()[1].getChildViews();\r\n\r\n for(var i=0;i ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mau04_68\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + \"Thêm mới \" + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(form_0405.$ui);\r\n form_0405.setEditMode(1);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mau04_68\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem != undefined && selectedItem != null) {\r\n var detailForm = this.$scope.ui(form_0405.$ui);\r\n form_0405.setEditMode(2);\r\n form_0405.setValuesEdit(selectedItem);\r\n if (selectedItem.trang_thai == 1) {\r\n var form = $$(\"huyhoadon\").elements;\r\n for (var key in form) {\r\n var $el = form[key];\r\n $el.define(\"readonly\", \"true\");\r\n $el.define(\"css\", \"mcls_readonly_text\");\r\n $el.refresh();\r\n }\r\n\r\n $$(\"danhsach_hoadonhuy\").define(\"editable\", \"false\");\r\n $$(\"danhsach_hoadonhuy\").refresh();\r\n $$(\"btnLuuTamHDDT\").destructor();\r\n $$(\"btnGhiSignHuyHDDT\").destructor();\r\n }\r\n detailForm.show();\r\n } else {\r\n webix.message(\"Chưa chọn thông báo nào!\");\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mau04_68\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem != undefined && selectedItem != null) {\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n selectedItem.signMode = 0;\r\n var data = [];\r\n data.push(selectedItem);\r\n var postData = {\r\n data: data,\r\n signMode: 0,\r\n editmode: 3,\r\n };\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SavePhatHanhBienLai\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n table.enable();\r\n table.hideProgress();\r\n return;\r\n } else {\r\n table.enable();\r\n table.clearAll();\r\n table.load(table.config.url);\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n } else {\r\n webix.message(\"Chưa chọn thông báo nào!\");\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Ký\") + \"\",\r\n id: \"btnSign\",\r\n on: {\r\n onClick: function () {\r\n var tableDK = webix.$$(\"mau04_68\");\r\n var selectedItem = tableDK.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Mẫu đã ký, bạn không thể ký lại! \", \"error\");\r\n return;\r\n }\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = { \r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n id: selectedItem.id,\r\n notEditMode: 1,\r\n signMode: 1,\r\n };\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SavePhatHanhBienLai\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Ký thành công !\", \"success\");\r\n // $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedMau0405\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n\r\n // return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"mau04_68\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n id: selectedItem.id,\r\n notEditMode: 1,\r\n signMode: 1,\r\n check_HSM: \"1\",\r\n };\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SavePhatHanhBienLai\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Ký thành công !\", \"success\");\r\n // $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedMau0405\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlPhatHanhBL?id=\" + selectedItem.id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, selectedItem]).then(function (results) {\r\n // webix.extend(tblInvoice, webix.ProgressBar);\r\n // tblInvoice.disable();\r\n // tblInvoice.showProgress();\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký biên lai hoặc Plugin ký biên lai chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: selectedItem.id,\r\n tthdon: 3,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlPhatHanhBienLai\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n webix.message(\"Ký thành công !\", \"success\");\r\n // $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedMau0405\", [1, null]);\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n // app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n\r\n // webix.message(\"Thành công !\", \"success\");\r\n // webix.$$(\"huyhoadonForms\").close();\r\n }\r\n });\r\n }\r\n });\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"mau04_68\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n subview: {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n scrollX: true,\r\n cells: [\r\n {\r\n header: \"Chi tiết\",\r\n body: {\r\n view: \"datatable\",\r\n height: 200,\r\n resizeColumn: true,\r\n // scroll: true,\r\n id: \"mau04_68_chitiet\",\r\n headerRowHeight: 50,\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n view: \"text\",\r\n id: \"tbph_id\",\r\n name: \"tbph_id\",\r\n hidden: true,\r\n },\r\n {\r\n view: \"text\",\r\n id: \"tbph_chitiet_id\",\r\n name: \"tbph_chitiet_id\",\r\n hidden: true,\r\n },\r\n {\r\n view: \"text\",\r\n header: \"STT\",\r\n id: \"index\",\r\n name: \"index\",\r\n width: 80,\r\n },\r\n {\r\n header: \"Tên biên lai\",\r\n id: \"tenlbl\",\r\n width: 120,\r\n },\r\n {\r\n header: \"Kí hiệu\",\r\n id: \"khieu\",\r\n width: 120,\r\n },\r\n {\r\n header: \"Số lượng\",\r\n id: \"soluong\",\r\n width: 120,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n header: \"Từ số\",\r\n id: \"tuso\",\r\n width: 120,\r\n // template: function (obj) {\r\n // return obj.khieu.toString().substring(0, 1);\r\n // },\r\n },\r\n {\r\n header: \"Đên số\",\r\n id: \"denso\",\r\n width: 120,\r\n // template: function (obj) {\r\n // return obj.khieu.toString().substring(0, 1);\r\n // },\r\n },\r\n {\r\n header: \"Hợp đồng số\",\r\n id: \"hdso\",\r\n width: 120,\r\n },\r\n {\r\n header: \"Hợp đồng ngày\",\r\n id: \"hdngay\",\r\n width: 120,\r\n // template: function (obj) {\r\n // return obj.khieu.toString().substring(0, 1);\r\n // },\r\n },\r\n {\r\n id: \"ngay\",\r\n name: \"ngay\",\r\n header: \"Ngày lập\",\r\n width: 120,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"ldo\",\r\n name: \"ldo\",\r\n header: \"Lý do\",\r\n width: 250,\r\n },\r\n ],\r\n data: [\r\n {\r\n index: 1,\r\n khieu: \"1KT20YY\",\r\n shdon: \"0000001\",\r\n ngay: new Date(),\r\n ladhddt: \"1\",\r\n ldo: \"Sai thông tin\",\r\n },\r\n {\r\n index: 2,\r\n khieu: \"1KT20YY\",\r\n shdon: \"0000002\",\r\n ngay: new Date(),\r\n ladhddt: \"1\",\r\n ldo: \"Sai tiền\",\r\n },\r\n ],\r\n // scrollX: false,\r\n // autoheight: true,\r\n },\r\n },\r\n ],\r\n },\r\n scheme: {\r\n $init: function () {\r\n // this.data.each(function (obj, i) {\r\n // obj.index = i + 1;\r\n // });\r\n },\r\n },\r\n onClick: {\r\n // ShowHistory: function (event, cell, target){\r\n // debugger\r\n // var table = webix.$$(\"mau04_68\");\r\n // var win = table.$scope.ui(hoadonHistory.$ui);\r\n // var hdon_id = cell.row;\r\n // hoadonHistory.setEditMode(hdon_id);\r\n // win.show();\r\n // },\r\n Dowload0405: function (event, cell, target) {\r\n var win = webix.$$(\"mau04_68\");\r\n var record = win.getItem(cell.row);\r\n\r\n if (record.loai_tbao != \"5\") {\r\n if (record.trang_thai != 1) {\r\n webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n return;\r\n }\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n var filename = record.loai_tbao == \"5\" ? \"Mau05.xml\" : \"Mau04.xml\";\r\n var url = app.config.host + \"/Invoice68/ExportTBPHBienLai?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, filename);\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n return false; // here it blocks the default behavior\r\n },\r\n Dowload0405Rep: function (event, cell, target) {\r\n var win = webix.$$(\"mau04_68\");\r\n var record = win.getItem(cell.row);\r\n\r\n if (record.loai_tbao != \"5\") {\r\n if (record.trang_thai != 1) {\r\n webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n return;\r\n }\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n var filename = record.loai_tbao == \"5\" ? \"Mau05Rep.xml\" : \"Mau04Rep.xml\";\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau04Rep?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, filename);\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n return false; // here it blocks the default behavior\r\n },\r\n InMau0405: function (event, cell, target) {\r\n var table = webix.$$(\"mau04_68\");\r\n var item = table.getItem(cell.row);\r\n\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inTbph_bienlai?id=\" + item.id + \"&type=PDF&loai=\" + item.loai_tbao, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n InMau0405Rep: function (event, cell, target) {\r\n var table = webix.$$(\"mau04_68\");\r\n var item = table.getItem(cell.row);\r\n\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n // var box = webix.modalbox({\r\n // title: \"Đang in biên lai ....\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200,\r\n // });\r\n\r\n // var newWin = window.open();\r\n // var html =\r\n // \"biên lai điện tử MobiFone Invoice\" +\r\n // '' +\r\n // '' +\r\n // '
Đang tải dữ liệu ...

';\r\n // newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .sync()\r\n .get(app.config.host + \"/Invoice68/inMau04SS?id=\" + item.id, function (text) {\r\n var result = text.replace(new RegExp(\"\\\\\" + \"\\\\\", \"gi\"), \"\");\r\n var newWin = window.open();\r\n var html =\r\n \"biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n \"\" +\r\n '
' +\r\n result +\r\n \"
\" +\r\n \"\";\r\n newWin.document.write(html);\r\n });\r\n },\r\n },\r\n on: {\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"mau04_68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataTBPHDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {},\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n },\r\n {\r\n id: \"trang_thai\",\r\n\r\n header: [\r\n \"Trạng thái gửi\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 150,\r\n template: function (obj) {\r\n return obj.trang_thai == 1\r\n ? \" Đã ký\"\r\n : \" Chưa ký\";\r\n },\r\n },\r\n {\r\n id: \"Dowload0405\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n width: 120,\r\n template: function (obj) {\r\n if (obj.trang_thai == 1) {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n },\r\n {\r\n id: \"btnInMau0405\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.trang_thai == 1) {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 120,\r\n },\r\n {\r\n id: \"tnnt\",\r\n header: [\r\n \"Tên công ty\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 300,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"ddanh\",\r\n header: [\r\n \"Địa chỉ\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 500,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"sdthoai\",\r\n header: [\r\n \"Số điện thoại\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 150,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"tcqt\",\r\n header: [\r\n \"Cơ quan thuế nhận\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 300,\r\n },\r\n {\r\n id: \"ntbao\",\r\n header: [\r\n \"Ngày thông báo\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n width: 200,\r\n },\r\n ],\r\n // data: [\r\n // {\r\n // stt: 1,\r\n // loai_tb: \"4\",\r\n // trang_thai: \"Chờ duyệt\",\r\n // mso: \"001\",\r\n // ntbao: new Date(),\r\n // nguoi_gui: \"ADMINNISTRATOR\"\r\n // },\r\n // {\r\n // stt: 2,\r\n // loai_tb: \"5\",\r\n // trang_thai: \"Chờ duyệt\",\r\n // mso: \"002\",\r\n // ntbao: new Date(),\r\n // nguoi_gui: \"ADMINNISTRATOR\"\r\n // }\r\n // ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n // height: 40,\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"mau04_68\");\r\n webix.$$(\"title\").parse({\r\n title: \"Quản lý thông báo phát hành\",\r\n details: \"Quản lý thông báo phát hành\",\r\n });\r\n $scope.on(app, \"dataChangedMau0405\", function (mode, item) {\r\n // if (mode == 1) {\r\n // table.add(item);\r\n // }\r\n // if (mode == 5) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // }\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/tinhhinhsudung',[\r\n \"app\",\r\n \"views/forms/dmwindow\",\r\n \"locale\",\r\n \"models/user\",\r\n \"views/forms/tinhhinhsudung\"\r\n], function (app, dmwindowform, _, user, tinhhinhsudungform) {\r\n \r\n\r\n var op = [];\r\n webix.$$(\"title\").parse({ title: \"Tình hình sử dụng hóa đơn\", details: \"Báo cáo tình hình sử dụng hóa đơn (BC26/AC)\" });\r\n\r\n var controls = [\r\n {},\r\n {\r\n id: \"btnSave\",\r\n view: \"button\",\r\n type: \"danger\",\r\n icon: \"save\",\r\n label: \"Nhận (F10)\",\r\n width: 85,\r\n shortcut: \"F10\",\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"tinhhinhsudung\");\r\n var item = form.getValues();\r\n var donvi = $$(\"cbdonvi\").getValue();\r\n \r\n if (donvi.length > 0) {\r\n webix.$$('btnshow').callEvent(\"onClick\");\r\n } else {\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/Bcthsd/Check_xulyHD\", item, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n webix.$$('btnshow').callEvent(\"onClick\");\r\n }\r\n else {\r\n webix.message(data.error, \"error\");\r\n }\r\n form.enable();\r\n form.hideProgress();\r\n });\r\n }\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n id: \"btnshow\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"save\",\r\n label: \"Nhận\",\r\n hidden: true,\r\n width: 65,\r\n shortcut: \"F11\",\r\n on: {\r\n onClick: function () {\r\n\r\n var form = webix.$$(\"tinhhinhsudung\");\r\n var item = form.getValues();\r\n var win = this.$scope.ui(tinhhinhsudungform.$ui);\r\n\r\n tinhhinhsudungform.initUI(item);\r\n win.show();\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n }\r\n },\r\n {}\r\n ];\r\n\r\n var thang = webix.Date.dateToStr(\"%n\");\r\n var thangcb = thang(new Date());\r\n var nam = webix.Date.dateToStr(\"%Y\");\r\n var cbnam = nam(new Date());\r\n\r\n var date = new Date();\r\n var firstDay = new Date(date.getFullYear(), date.getMonth(), 1);\r\n var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n\r\n var layout = {\r\n // paddingY: 60,\r\n // paddingX: 500,\r\n cols: [\r\n { gravity: 0.5, template: \"\" },\r\n {\r\n rows: [\r\n { gravity: 1, template: \"\" },\r\n {\r\n view: \"form\",\r\n id: \"tinhhinhsudung\",\r\n paddingY: 10,\r\n // width: 700,\r\n // height:300,\r\n position: \"center\",\r\n paddingX: 10,\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"multicombo\",\r\n label: _(\"DONVI\"),\r\n name: \"lst_branch_code\",\r\n id: \"cbdonvi\",\r\n labelWidth: 80,\r\n suggest: {\r\n selectAll: true,\r\n body: {\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00198\"\r\n }\r\n }\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"tkThang\",\r\n name: \"tokhai_thang\",\r\n view: \"checkbox\",\r\n value: 1,\r\n label: \"Tờ khai tháng\",\r\n labelWidth: 100\r\n },\r\n {\r\n id: \"tkQuy\",\r\n name: \"tokhai_quy\",\r\n view: \"checkbox\",\r\n label: \"Tờ khai quý\",\r\n labelWidth: 100\r\n }\r\n ]\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"cbThang\",\r\n name: \"thang\",\r\n view: \"combo\",\r\n label: \"Tháng\",\r\n value: thangcb,\r\n options: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"]\r\n },\r\n {\r\n id: \"cbNam\",\r\n name: \"nam\",\r\n view: \"text\",\r\n value: cbnam,\r\n label: \"Năm\"\r\n }\r\n ]\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"cbTungay\",\r\n view: \"datepicker\",\r\n name: \"tu_ngay\",\r\n\r\n label: \"Từ ngày\"\r\n\r\n },\r\n {\r\n id: \"cbDenngay\",\r\n view: \"datepicker\",\r\n name: \"den_ngay\",\r\n\r\n label: \"Đến ngày\"\r\n }\r\n ]\r\n },\r\n {\r\n view: \"fieldset\",\r\n label: \"Chọn phụ lục kê khai\",\r\n body: {\r\n rows: [\r\n {\r\n view: \"checkbox\",\r\n id: \"mau312\",\r\n name: \"mau_312\",\r\n label: \"Mẫu 3.12(Kỳ báo cáo cuối cùng)\",\r\n labelWidth: 200\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"mau310\",\r\n name: \"mau_310\",\r\n label: \"Mẫu 3.10(Chuyển địa điểm)\",\r\n labelWidth: 200\r\n },\r\n ]\r\n }\r\n },\r\n {\r\n id: \"bcSoluong\",\r\n name: \"bc_soluong\",\r\n view: \"checkbox\",\r\n label: \"Báo cáo theo số lượng hóa đơn\",\r\n labelWidth: 210\r\n },\r\n // {\r\n // view: \"template\",\r\n // template: \"
\"\r\n // // type: \"section\"\r\n // },\r\n {\r\n margin: 10,\r\n cols: controls\r\n\r\n }\r\n\r\n ]\r\n },\r\n { gravity: 5, template: \"\" }\r\n ]\r\n },\r\n { gravity: 0.5, template: \"\" }\r\n ]\r\n\r\n };\r\n\r\n function subview(config) {\r\n webix.ui(config, $$('tinhhinhsudung').getChildViews()[2].getChildViews()[0]);\r\n }\r\n\r\n var d = new Date();\r\n var quarter = Math.floor((d.getMonth() / 3));\r\n var quarter1 = quarter + 1;\r\n var firstDate = new Date(d.getFullYear(), quarter * 3, 1);\r\n var lastDate = new Date(firstDate.getFullYear(), firstDate.getMonth() + 3, 0)\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n\r\n var year = $$(\"cbNam\").getValue();\r\n var month = $$(\"cbThang\").getValue();\r\n var date1 = month + \"/01\" + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n var firstDay = new Date(date.getFullYear(), date.getMonth(), 1);\r\n var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n $$(\"cbTungay\").setValue(firstDay);\r\n $$(\"cbDenngay\").setValue(lastDay);\r\n var tkQuy = $$(\"tkQuy\").getValue();\r\n\r\n $$(\"tkThang\").attachEvent(\"onChange\", function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"tkQuy\").setValue(0);\r\n $$(\"tkThang\").setValue(1);\r\n\r\n subview({\r\n id: \"cbThang\",\r\n name: \"thang\",\r\n view: \"combo\",\r\n label: \"Tháng\",\r\n value: thangcb,\r\n options: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"]\r\n });\r\n var ssk = $$('tinhhinhsudung').getChildViews()[2].getChildViews()[0];\r\n ssk.define(\"id\", \"cbThang\");\r\n\r\n $$(\"cbThang\").attachEvent(\"onChange\", function (newv, oldv) {\r\n var year = $$(\"cbNam\").getValue();\r\n var month = $$(\"cbThang\").getValue();\r\n var date1 = month + \"/01\" + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n var firstDay1 = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\r\n var lastDay1 = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n $$(\"cbTungay\").setValue(firstDay1);\r\n $$(\"cbTungay\").refresh();\r\n $$(\"cbDenngay\").setValue(lastDay1);\r\n $$(\"cbDenngay\").refresh();\r\n });\r\n $$(\"cbNam\").attachEvent(\"onChange\", function (newv, oldv) {\r\n var year2 = $$(\"cbNam\").getValue();\r\n var month2 = $$(\"cbThang\").getValue();\r\n var date1 = month2 + \"/01\" + \"/\" + year2;\r\n\r\n var date2 = new Date(date1);\r\n var firstDay2 = new Date(date2.getFullYear(), date2.getMonth(), 1);\r\n\r\n var lastDay2 = new Date(date2.getFullYear(), date2.getMonth() + 1, 0);\r\n $$(\"cbTungay\").setValue(firstDay2);\r\n $$(\"cbTungay\").refresh();\r\n $$(\"cbDenngay\").setValue(lastDay2);\r\n $$(\"cbDenngay\").refresh();\r\n });\r\n var year = $$(\"cbNam\").getValue();\r\n var month = $$(\"cbThang\").getValue();\r\n var date1 = month + \"/01\" + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n var firstDay1 = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\r\n var lastDay1 = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n $$(\"cbTungay\").setValue(firstDay1);\r\n $$(\"cbTungay\").refresh();\r\n $$(\"cbDenngay\").setValue(lastDay1);\r\n $$(\"cbDenngay\").refresh();\r\n }\r\n // webix.message(\"value cũ : \"+oldv+\" Mới: \"+newv);\r\n });\r\n\r\n $$(\"tkQuy\").attachEvent(\"onChange\", function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"tkThang\").setValue(0);\r\n subview({\r\n id: \"cbQuy\",\r\n name: \"quy\",\r\n view: \"combo\",\r\n label: \"Quý\",\r\n value: quarter1,\r\n options: [\"1\", \"2\", \"3\", \"4\"]\r\n });\r\n var ssk = $$('tinhhinhsudung').getChildViews()[2].getChildViews()[0];\r\n ssk.define(\"id\", \"cbQuy\");\r\n\r\n $$(\"cbQuy\").attachEvent(\"onChange\", function (newv, oldv) {\r\n var quy = $$(\"cbQuy\").getValue();\r\n //console.log(quy);\r\n var nam = $$(\"cbNam\").getValue();\r\n var thang;\r\n if (quy == 1) {\r\n thang = 0;\r\n }\r\n if (quy == 2) {\r\n thang = 3;\r\n }\r\n if (quy == 3) {\r\n thang = 6\r\n }\r\n if (quy == 4) {\r\n thang = 9\r\n }\r\n var firstDate = new Date(nam, thang, 1);\r\n var lastDate = new Date(nam, thang + 3, 0);\r\n\r\n $$(\"cbTungay\").setValue(firstDate);\r\n $$(\"cbTungay\").refresh();\r\n $$(\"cbDenngay\").setValue(lastDate);\r\n $$(\"cbDenngay\").refresh();\r\n });\r\n\r\n var quy = $$(\"cbQuy\").getValue();\r\n var nam = $$(\"cbNam\").getValue();\r\n var thang;\r\n if (quy == 1) {\r\n thang = 0;\r\n }\r\n if (quy == 2) {\r\n thang = 3;\r\n }\r\n if (quy == 3) {\r\n thang = 6\r\n }\r\n if (quy == 4) {\r\n thang = 9\r\n }\r\n var firstDate = new Date(nam, thang, 1);\r\n var lastDate = new Date(nam, thang + 3, 0);\r\n\r\n $$(\"cbTungay\").setValue(firstDate);\r\n $$(\"cbTungay\").refresh();\r\n $$(\"cbDenngay\").setValue(lastDate);\r\n $$(\"cbDenngay\").refresh();\r\n\r\n }\r\n\r\n });\r\n\r\n $$(\"cbThang\").attachEvent(\"onChange\", function (newv, oldv) {\r\n var year = $$(\"cbNam\").getValue();\r\n var month = $$(\"cbThang\").getValue();\r\n var date1 = month + \"/01\" + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n var firstDay1 = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\r\n var lastDay1 = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n $$(\"cbTungay\").setValue(firstDay1);\r\n $$(\"cbTungay\").refresh();\r\n $$(\"cbDenngay\").setValue(lastDay1);\r\n $$(\"cbDenngay\").refresh();\r\n });\r\n\r\n $$(\"cbNam\").attachEvent(\"onChange\", function (newv, oldv) {\r\n\r\n if ($$(\"tkThang\").getValue() == 1) {\r\n var year2 = $$(\"cbNam\").getValue();\r\n var month2 = $$(\"cbThang\").getValue();\r\n var date1 = month2 + \"/01\" + \"/\" + year2;\r\n\r\n var date2 = new Date(date1);\r\n var firstDay2 = new Date(date2.getFullYear(), date2.getMonth(), 1);\r\n\r\n var lastDay2 = new Date(date2.getFullYear(), date2.getMonth() + 1, 0);\r\n $$(\"cbTungay\").setValue(firstDay2);\r\n $$(\"cbTungay\").refresh();\r\n $$(\"cbDenngay\").setValue(lastDay2);\r\n $$(\"cbDenngay\").refresh();\r\n }\r\n if ($$(\"tkQuy\").getValue() == 1) {\r\n var quy = $$(\"cbQuy\").getValue();\r\n //console.log(quy);\r\n var nam = $$(\"cbNam\").getValue();\r\n var thang;\r\n if (quy == 1) {\r\n thang = 0;\r\n }\r\n if (quy == 2) {\r\n thang = 3;\r\n }\r\n if (quy == 3) {\r\n thang = 6\r\n }\r\n if (quy == 4) {\r\n thang = 9\r\n }\r\n var firstDate = new Date(nam, thang, 1);\r\n var lastDate = new Date(nam, thang + 3, 0);\r\n\r\n $$(\"cbTungay\").setValue(firstDate);\r\n $$(\"cbTungay\").refresh();\r\n $$(\"cbDenngay\").setValue(lastDate);\r\n $$(\"cbDenngay\").refresh();\r\n }\r\n });\r\n\r\n $$(\"mau312\").attachEvent(\"onChange\", function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"mau310\").setValue(0);\r\n }\r\n\r\n });\r\n\r\n $$(\"mau310\").attachEvent(\"onChange\", function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"mau312\").setValue(0);\r\n }\r\n\r\n });\r\n }\r\n };\r\n});\ndefine('views/token',[\"app\", \"views/forms/token\", \"locale\"], function (app, dmwindowform, _) {\r\n \r\n\r\n var op = [];\r\n\r\n webix.$$(\"title\").parse({ title: \"Đăng ký Token\", details: \"Danh sách Token\" });\r\n\r\n var controls = [\r\n // {\r\n // id: \"btnRefrescacash\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"refresh\",\r\n // label: _(\"Tải báo cáo\"),\r\n // width: 90,\r\n // // shortcut: \"F4\",\r\n // //css:\"button_raised\",\r\n // on: {\r\n // onClick: function () {\r\n // var box = webix.modalbox({\r\n // title: \"Đang tải xuống\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // //.headers({ 'Content-type': 'application/json' })\r\n // .get(app.config.host + \"/Invoice/Floder?filename=BC_CHITIET_ACB_201812151033.csv\", {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'text/csv' });\r\n // webix.html.download(file, \"baocao.csv\");\r\n\r\n // webix.modalbox.hide(box);\r\n // }\r\n // });\r\n // }\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // }\r\n // },\r\n {\r\n id: \"btnRefresh\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-refresh\",\r\n label: _(\"REFRESH\"),\r\n css: \"webix_secondary\",\r\n width: 90,\r\n // shortcut: \"F4\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n table.clearAll();\r\n //console.log(table);\r\n table.load(table.config.url);\r\n //table.refresh();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnPlus\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-plus\",\r\n label: _(\"THEM\") + \" (F4)\",\r\n css: \"webix_secondary\",\r\n width: 85,\r\n //css:\"button_raised\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var box = webix.modalbox({\r\n title: \"Chọn Token\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblToken\");\r\n\r\n var item = {\r\n tokens: table.serialize(),\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Token/SaveTokens\", item, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var table = $$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n webix.modalbox.hide();\r\n } else {\r\n webix.message(json.error);\r\n }\r\n });\r\n\r\n break;\r\n }\r\n },\r\n });\r\n\r\n var popupText = document.getElementsByClassName(\"webix_popup_text\")[0];\r\n popupText.style.paddingTop = 0;\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnToken\",\r\n id: \"tblToken\",\r\n view: \"datatable\",\r\n borderless: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"serialNumber\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"tokenLabel\",\r\n header: _(\"TOKEN LABEL\"),\r\n width: 550,\r\n },\r\n ],\r\n //url: app.config.host + \"/Token/SelectTokens\"\r\n });\r\n\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(\r\n url,\r\n {\r\n command: \"CM00019\",\r\n parameter: {\r\n ma_dvcs: \"\",\r\n },\r\n },\r\n function (text) {\r\n var array = JSON.parse(text);\r\n\r\n var kytaptrung = \"\";\r\n var server_cert = \"\";\r\n\r\n for (var i = 0; i < array.length; i++) {\r\n var item = array[i];\r\n\r\n if (item.code == \"KYTAPTRUNG\") {\r\n kytaptrung = item.gia_tri;\r\n }\r\n\r\n if (item.code == \"SERVER_CERT\") {\r\n server_cert = item.gia_tri;\r\n }\r\n }\r\n\r\n webix.ajax(server_cert + \"/Token/SelectTokens\", function (text) {\r\n $$(\"tblToken\").clearAll();\r\n $$(\"tblToken\").parse(text, \"json\");\r\n });\r\n }\r\n );\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-edit\",\r\n label: _(\"SUA\") + \" (F3)\",\r\n css: \"webix_secondary\",\r\n width: 75,\r\n //css:\"button_raised\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmwindowform.$ui);\r\n var form = webix.$$(\"chukyso-form\");\r\n\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa !\", \"error\");\r\n return;\r\n }\r\n /* var chon = item.chon;\r\n\r\n item.chon = chon == true ? \"true\" : \"false\"; */\r\n\r\n form.setValues(item);\r\n\r\n dmwindowform.setEditMode(2);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnDelete\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-trash-o\",\r\n css: \"webix_secondary\",\r\n label: _(\"XOA\") + \" (F8)\",\r\n width: 75,\r\n //css:\"button_raised\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n var khData = {};\r\n khData.windowid = app.path[1].params[0];\r\n khData.editmode = 3;\r\n khData.data = [];\r\n khData.data.push(item);\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \" + item.serial_number,\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/Save\", khData, function (text) {\r\n if (text.hasOwnProperty(\"error\")) {\r\n webix.message(text.error);\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"dmwindowData\",\r\n view: \"datatable\",\r\n select: true,\r\n datafetch: 100,\r\n resizeColumn: true,\r\n //loadahead: 15,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/System/GetDataByWindowNo?window_id=\" + windowno;\r\n\r\n if (params == null) {\r\n url = url + \"&start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"&start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n if (column !== undefined) {\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n if (array.length > 0) {\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n } else {\r\n url = url + \"&filter=null\";\r\n }\r\n } else {\r\n url = url + \"&filter=null\";\r\n }\r\n }\r\n\r\n if (view.config.infoparam != null) {\r\n url = url + \"&infoparam=\" + JSON.stringify(view.config.infoparam);\r\n } else {\r\n url = url + \"&infoparam=null\";\r\n }\r\n\r\n var tlbParams = $$(\"tlbParams\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n var item = {\r\n columnName: value_field,\r\n value: $$(id).getValue(),\r\n };\r\n\r\n parameters.push(item);\r\n }\r\n\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n //console.log(url);\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n },\r\n columns: [\r\n { id: \"index\", header: \"\", sort: \"int\", width: 40 },\r\n { id: \"serial_number\", header: _(\"SO_SERIAL\"), width: 200 },\r\n { id: \"token_label\", header: \"TOKEN LABEL\", width: 350 },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 35,\r\n view: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmwindowData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmwindow,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/tokenfile',[\"app\", \"views/forms/tokenfile\", \"locale\"], function (app, dmwindowform, _) {\r\n \r\n\r\n var op = [];\r\n\r\n webix.$$(\"title\").parse({ title: \"Đăng ký Token File mềm\", details: \"Danh sách Token File mềm\" });\r\n\r\n var controls = [\r\n {\r\n id: \"btnRefresh\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-refresh\",\r\n label: _(\"REFRESH\"),\r\n width: 90,\r\n // shortcut: \"F4\",\r\n //css:\"button_raised\",\r\n css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n table.clearAll();\r\n //console.log(table);\r\n table.load(table.config.url);\r\n //table.refresh();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnPlus\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-plus\",\r\n label: _(\"THEM\") + \" (F4)\",\r\n width: 85,\r\n //css:\"button_raised\",\r\n css: \"webix_secondary\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmwindowform.$ui);\r\n var form = webix.$$(\"tokenfile-form\");\r\n\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n // var chon = item.chon;\r\n\r\n // item.chon = chon == true ? \"true\" : \"false\";\r\n\r\n dmwindowform.setEditMode(1);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-edit\",\r\n label: _(\"SUA\") + \" (F3)\",\r\n width: 75,\r\n //css:\"button_raised\",\r\n css: \"webix_secondary\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmwindowform.$ui);\r\n var form = webix.$$(\"tokenfile-form\");\r\n\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa !\", \"error\");\r\n return;\r\n }\r\n // var chon = item.chon;\r\n\r\n // item.chon = chon == true ? \"true\" : \"false\";\r\n\r\n form.setValues(item);\r\n\r\n dmwindowform.setEditMode(2);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnDelete\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-trash-o\",\r\n css: \"webix_secondary\",\r\n label: _(\"XOA\") + \" (F8)\",\r\n width: 75,\r\n //css:\"button_raised\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n var khData = {};\r\n khData.windowid = app.path[1].params[0];\r\n khData.editmode = 3;\r\n khData.data = [];\r\n khData.data.push(item);\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \" + item.serialNumber,\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/Save\", khData, function (text) {\r\n if (text.hasOwnProperty(\"error\")) {\r\n webix.message(text.error);\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"dmwindowData\",\r\n view: \"datatable\",\r\n select: true,\r\n datafetch: 100,\r\n resizeColumn: true,\r\n //loadahead: 15,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/System/GetDataByWindowNo\";\r\n\r\n var start = null;\r\n var count = null;\r\n var filter = [];\r\n var infoparam = null;\r\n var tlbparam_s = [];\r\n\r\n if (params == null) {\r\n url = url + \"&start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n start = 0;\r\n count = view.config.datafetch;\r\n } else {\r\n url = url + \"&start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n start = params.start;\r\n count = params.count;\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n if (column !== undefined) {\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n array.push(item);\r\n }\r\n }\r\n\r\n if (array.length > 0) {\r\n filter = array;\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n } else {\r\n url = url + \"&filter=null\";\r\n }\r\n } else {\r\n url = url + \"&filter=null\";\r\n }\r\n }\r\n\r\n if (view.config.infoparam != null) {\r\n infoparam = view.config.infoparam;\r\n url = url + \"&infoparam=\" + JSON.stringify(view.config.infoparam);\r\n } else {\r\n url = url + \"&infoparam=null\";\r\n }\r\n\r\n var tlbParams = $$(\"tlbParams\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n var item = {\r\n columnName: value_field,\r\n value: $$(id).getValue(),\r\n };\r\n\r\n parameters.push(item);\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n\r\n var item = {\r\n window_id: windowno,\r\n start: start,\r\n count: count,\r\n filter: filter,\r\n infoparam: infoparam,\r\n tlbparam: tlbparam_s,\r\n };\r\n var url1 = app.config.host + \"/System/GetDataByWindowNo\";\r\n webix.ajax().headers({ \"Content-type\": \"application/json\" }).bind(view).post(url1, item, callback, view);\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n },\r\n columns: [\r\n { id: \"index\", header: \"\", sort: \"int\", width: 40 },\r\n { id: \"file_path\", header: _(\"PATH\"), width: 350 },\r\n { id: \"serial_number\", header: \"Số serial\", sort: \"int\", width: 250 },\r\n { id: \"serial_label\", header: \"Serial token\", sort: \"int\", width: 250 },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 35,\r\n view: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmwindowData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmwindow,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/treewindow',[\r\n \"app\",\r\n \"views/forms/window\",\r\n \"locale\"\r\n], function (app, windowform, _) {\r\n \r\n\r\n var layoutId = \"\";\r\n var col = [];\r\n var sub_col = [];\r\n var windowconfig = null;\r\n var buttons = [];\r\n var dataParams = [];\r\n //var windowno = \"\": \r\n\r\n\r\n var initUI = function () {\r\n var windowno = app.path[1].params[0];\r\n\r\n col = [];\r\n sub_col = [];\r\n\r\n var query = \"SELECT * FROM #SCHEMA_NAME#.wb_menu WHERE window_code='\" + windowno + \"' LIMIT 1 OFFSET 0\";\r\n var url = app.config.host + \"/System/Query\";\r\n\r\n webix.ajax()\r\n .headers({\"Content-Type\":\"application/json\"})\r\n .post(url,{sql : query}, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.length > 0) {\r\n webix.$$(\"title\").parse({ title: json[0][\"name\"], details: json[0][\"details\"], url_help: json[0][\"url_help\"] == null || undefined ? \"http://huongdansudung.minvoice.com.vn/\" : json[0][\"url_help\"] });\r\n }\r\n });\r\n\r\n url = app.config.host + \"/System/ExecuteCommand\";\r\n \r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(url,\r\n {\r\n command: \"CM00002\",\r\n parameter: {\r\n window_id: windowno\r\n }\r\n }, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (buttons.length > 0) {\r\n for (var i = 0; i < buttons.length; i++) {\r\n var item = buttons[i];\r\n $$(\"tlbMain\").removeView(item.id);\r\n }\r\n }\r\n\r\n buttons = [];\r\n var menus = [];\r\n\r\n var stt = 5;\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n var item = json[i];\r\n\r\n if (item.is_group_function == \"C\") {\r\n if (item.hidden != 1) {\r\n menus.push({\r\n id: item.name,\r\n value: _(item.caption),\r\n on_click: item.on_click\r\n });\r\n }\r\n }\r\n else {\r\n if (item.hidden != 1) {\r\n var fn = new Function(item.on_click);\r\n\r\n var button = {\r\n id: item.name,\r\n label: _(item.caption),\r\n view: \"button\",\r\n type: \"icon\",\r\n css: \"webix_secondary\",\r\n icon: \"fas fa-\" + item.icon,\r\n width: item.width,\r\n click: fn\r\n };\r\n\r\n buttons.push(button);\r\n $$(\"tlbMain\").addView(button, stt);\r\n\r\n stt=stt+1;\r\n }\r\n }\r\n\r\n }\r\n\r\n if (menus.length > 0) {\r\n subChucNang.clearAll();\r\n subChucNang.parse(menus, \"json\");\r\n\r\n var index = $$(\"tlbMain\").index($$(\"cbMauIn\"));\r\n\r\n var btnChucNang = {\r\n id: \"btnChucNang\",\r\n label: _(\"CHUC_NANG\"),\r\n view: \"button\",\r\n type: \"icon\",\r\n css: \"webix_secondary\",\r\n icon: \"fas fa-tasks\",\r\n width: 100,\r\n click: function () {\r\n subChucNang.show(webix.$$(\"btnChucNang\").$view);\r\n }\r\n }\r\n\r\n $$(\"tlbMain\").addView(btnChucNang, index - 1);\r\n }\r\n\r\n\r\n });\r\n\r\n url = app.config.host + \"/System/GetConfigWinByNo?id=\" + windowno;\r\n\r\n webix.$$(\"treewindowData\").getParentView().getParentView().getParentView().disable();\r\n webix.$$(\"treewindowData\").getParentView().getParentView().getParentView().showProgress();\r\n\r\n webix.ajax(url, function (text, xml, xhr) {\r\n\r\n var rp = JSON.parse(text);\r\n windowconfig = rp;\r\n var vc_window = windowconfig.data[0];\r\n\r\n var isPlusIcon = false;\r\n\r\n var k = Object.keys(rp['data'][0]['Tabs']).length;\r\n //console.log(k);\r\n for (var j = 0; j < (Object.keys(rp['data'][0]['Tabs'][k - 1]['Fields']).length); j++) {\r\n\r\n var field = rp['data'][0]['Tabs'][k - 1]['Fields'][j];\r\n //console.log(field);\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n\r\n var item = {\r\n id: rp['data'][0]['Tabs'][k - 1]['Fields'][j]['column_name'],\r\n header: _(String(rp['data'][0]['Tabs'][k - 1]['Fields'][j]['column_name'])),\r\n formatColumn: field.format\r\n };\r\n\r\n if (field.caption != null) {\r\n item.header = _(field.caption);\r\n }\r\n\r\n if (field.type_filter != null) {\r\n if (field.type_filter != \"\") {\r\n item.header = [_(item.header), { content: field.type_filter }]\r\n }\r\n }\r\n\r\n if (isPlusIcon == false) {\r\n item.template = \"{common.space()} {common.icon()} #\" + item.id + \"#\";\r\n isPlusIcon = true;\r\n }\r\n\r\n if (field.FORMAT != null) {\r\n if (field.column_type == \"decimal\") {\r\n item.css = { \"text-align\": \"right\" };\r\n item.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0\r\n });\r\n }\r\n\r\n if (field.column_type == \"datetime\" || field.column_type == \"date\") {\r\n item.format = function (text) {\r\n var format = webix.Date.dateToStr(this.formatColumn);\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n }\r\n\r\n if (field.type_editor == \"combo\") {\r\n item.editor = field.type_editor;\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n\r\n if (field.column_width == null) {\r\n item.fillspace = true;\r\n }\r\n else {\r\n item.width = field.column_width;\r\n }\r\n\r\n col.push(item);\r\n }\r\n\r\n var table = $$(\"treewindowData\");\r\n table.clearAll();\r\n\r\n table.config.columns = col;\r\n table.refreshColumns();\r\n\r\n //table.define(\"url\",app.config.host + \"/api/System/GetDataByWindowNo?window_id=\"+windowno );\t\r\n\r\n webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/System/GetDataByWindowNo\",\r\n {\r\n window_id: windowno,\r\n start: 0,\r\n count: 999999999,\r\n continue: null,\r\n filter: [],\r\n infoparam: null,\r\n tlbparam: []\r\n }, function (text) {\r\n var json = JSON.parse(text);\r\n //console.log(json);\r\n var data = listToTree(json.data, { idKey: \"id\", parentId: \"parent_id\" });\r\n //console.log(data);\r\n $$(\"treewindowData\").parse(data, \"json\");\r\n $$(\"treewindowData\").openAll();\r\n });\r\n\r\n table.getParentView().getParentView().getParentView().enable();\r\n table.getParentView().getParentView().getParentView().hideProgress();\r\n\r\n var parentToolBar = $$(\"tlbMain\").getParentView();\r\n\r\n parentToolBar.removeView(\"tlbParams\");\r\n $$(\"head-title\").show();\r\n $$(\"head-title\").removeView(\"tlbParams\");\r\n // toolBar windown parram\r\n if (vc_window.WinParams != undefined && vc_window.WinParams != null) {\r\n var toolBarParams = {\r\n id: \"tlbParams\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [],\r\n };\r\n \r\n for (var i = 0; i < vc_window.WinParams.length; i++) {\r\n var item1 = vc_window.WinParams[i];\r\n \r\n var comp = {\r\n id: webix.uid(),\r\n view: item1.type_editor,\r\n width: item1.width,\r\n label: _(item1.caption),\r\n value_field: item1.value_field,\r\n isDefault: item1.has_default,\r\n on: {},\r\n };\r\n \r\n if (comp.view == \"combo\") {\r\n if(comp.value_field) {\r\n dataParams.push({\r\n id: comp.id,\r\n value_field: comp.value_field\r\n })\r\n }\r\n comp.options = {\r\n body: {\r\n comboId: comp.id,\r\n isDefault: item1.has_default,\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + item1.wb_references_id,\r\n ready: function () {\r\n if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n if (count > 0) {\r\n var combo = webix.$$(this.config.comboId);\r\n combo.setValue(this.getFirstId());\r\n loadDataCustom(param);\r\n }\r\n }\r\n },\r\n },\r\n };\r\n \r\n comp.on.onChange = function (newv, oldv) {\r\n var param = {};\r\n param[comp.value_field] = newv;\r\n loadDataCustom(param);\r\n };\r\n }\r\n \r\n if (comp.view == \"treesuggest\") {\r\n var listColumns = JSON.parse(item1.list_column);\r\n \r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n \r\n comp.view = \"combo\";\r\n \r\n comp.options = {\r\n view: \"treesuggest\",\r\n textValue: item1.display_field,\r\n isDefault: item1.has_default,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataByReferencesId?id=\" + view.config.refid;\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n body: {\r\n isDefault: item1.has_default,\r\n comboId: comp.id,\r\n columns: listColumns,\r\n refid: item1.wb_references_id,\r\n filterMode: {\r\n level: false,\r\n showSubItems: false,\r\n },\r\n ready: function () {\r\n if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n \r\n if (count > 0) {\r\n var combo = webix.$$(this.config.comboId);\r\n combo.setValue(this.getFirstId());\r\n }\r\n }\r\n },\r\n },\r\n };\r\n \r\n comp.on.onChange = function (newv, oldv) {\r\n var table = $$(\"windowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n };\r\n }\r\n if (comp.view == \"label\") {\r\n var url = app.config.host + \"/System/GetDataByReferencesId?id=\" + item1.wb_references_id;\r\n var result = JSON.parse(webix.ajax().sync().get(url).response);\r\n comp.label = comp.label + \": \" + result[0][comp.value_field];\r\n // comp.label = webix.ajax(url, function (text) {\r\n // var result = JSON.parse(text);\r\n // var label = $$(id).data.label;\r\n // $$(id).setValue(label + \": \" + result[0][comp.value_field]);\r\n // $$(id).refresh();\r\n // }));\r\n }\r\n \r\n toolBarParams.cols.push(comp);\r\n }\r\n $$(\"head-title\").addView(toolBarParams, 1);\r\n }\r\n });\r\n };\r\n\r\n var mini_dashboard = {\r\n type: \"clean\",\r\n borderless: true,\r\n cols: [\r\n {\r\n id: \"sohoadonconlai\",\r\n name: \"sohoadonconlai\",\r\n view: \"label\",\r\n },\r\n ],\r\n };\r\n\r\n var controls = [\r\n {\r\n id: \"btnRefresh\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-refresh\",\r\n label: _(\"REFRESH\"),\r\n css: \"webix_secondary\",\r\n width: 95,\r\n // shortcut: \"F4\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var param = {};\r\n if(dataParams.length > 0) {\r\n var prCodeComp = dataParams.find(function(e) {\r\n return e.value_field == 'parent_code';\r\n })\r\n dataParams.forEach(function(e) {\r\n param[e.value_field] = $$(e.id).getValue();\r\n });\r\n }\r\n loadDataCustom(param);\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n id: \"btnPlus\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-plus\",\r\n label: \"Thêm\",\r\n css: \"webix_secondary\",\r\n width: 65,\r\n //css:\"button_raised\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var vc_window = windowconfig[\"data\"][0];\r\n windowform.$ui.id = vc_window.code;\r\n\r\n var detailForm = this.$scope.ui(windowform.$ui);\r\n windowform.setEditMode(0);\r\n windowform.initUI(windowconfig);\r\n \r\n windowform.setValues(null, windowconfig);\r\n windowform.setEditMode(1);\r\n \r\n detailForm.show();\r\n\r\n if (vc_window.after_new != null) {\r\n var fn = Function(vc_window.after_new);\r\n fn();\r\n }\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-edit\",\r\n css: \"webix_secondary\",\r\n label: \"Sửa\",\r\n width: 55,\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var vc_window = windowconfig[\"data\"][0];\r\n\r\n\r\n windowform.$ui.id = vc_window.code;\r\n\r\n var detailForm = this.$scope.ui(windowform.$ui);\r\n\r\n var table = webix.$$(\"treewindowData\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == \"\") {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa ! \", \"error\");\r\n return;\r\n }\r\n windowform.initUI(windowconfig);\r\n windowform.setEditMode(2);\r\n windowform.setValues(item, windowconfig);\r\n\r\n detailForm.show();\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n id: \"btnDelete\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-trash-o\",\r\n css: \"webix_secondary\",\r\n label: \"Xóa\",\r\n width: 55,\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"treewindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item.$count > 0) {\r\n webix.message(\"Đã có nhóm con. Không thể xóa\");\r\n return;\r\n }\r\n\r\n var khData = {};\r\n khData.windowid = windowconfig.data[0].code;\r\n khData.editmode = 3;\r\n khData.data = [];\r\n khData.data.push(item);\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \", ok: \"Có\", cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/System/Save\", khData, function (text) {\r\n var json = JSON.parse(text);\r\n //console.log(json);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error);\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n\r\n });\r\n\r\n }\r\n }\r\n });\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n id: \"btnCopy\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-files-o\",\r\n css: \"webix_secondary\",\r\n label: _(\"COPY\"),\r\n width: 85,\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"treewindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu !\", \"error\");\r\n return;\r\n }\r\n\r\n var vc_window = windowconfig[\"data\"][0];\r\n windowform.$ui.id = vc_window.code;\r\n\r\n var detailForm = this.$scope.ui(windowform.$ui);\r\n\r\n windowform.initUI(windowconfig);\r\n windowform.setEditMode(1);\r\n windowform.copyValues(item, windowconfig);\r\n\r\n detailForm.show();\r\n\r\n if (vc_window.after_new != null) {\r\n var fn = Function(vc_window.after_new);\r\n fn();\r\n }\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {}\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"treewindowData\",\r\n view: \"treetable\",\r\n select: true,\r\n resizeColumn: true,\r\n scheme: {\r\n $change: function (item) {\r\n if (item.$count > 1980)\r\n item.$css = \"highlight\";\r\n }\r\n },\r\n on: {\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n }\r\n },\r\n //url: app.config.host + \"/api/System/GetDataByWindowNo?window_id=\"+windowno ,\r\n columns: col,\r\n filterMode:{\r\n level:false,\r\n showSubItems:false\r\n }\r\n }\r\n ]\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n id: \"tlbMain\",\r\n height: 35,\r\n type: \"toolbar\",\r\n cols: controls\r\n },\r\n {\r\n rows: [\r\n grid\r\n ]\r\n }\r\n\r\n\r\n\r\n ]\r\n\r\n };\r\n\r\n function loadData() {\r\n var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"treewindowData\");\r\n table.clearAll();\r\n\r\n webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/System/GetDataByWindowNo\",\r\n {\r\n window_id: windowno,\r\n start: 0,\r\n count: 999999999,\r\n continue: null,\r\n filter: [],\r\n infoparam: null,\r\n tlbparam: []\r\n }, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json.data, { idKey: \"id\", parentId: \"parent_id\" });\r\n $$(\"treewindowData\").parse(data, \"json\");\r\n $$(\"treewindowData\").openAll();\r\n });\r\n }\r\n\r\n function loadDataCustom(param) {\r\n var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"treewindowData\");\r\n table.clearAll();\r\n var defaultBody = {\r\n window_id: windowno,\r\n start: 0,\r\n count: 999999999,\r\n continue: null,\r\n filter: [],\r\n infoparam: null,\r\n tlbparam: []\r\n };\r\n\r\n var body = mergeObject(defaultBody, param)\r\n\r\n webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/System/GetDataByWindowNo\",\r\n body, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json.data, { idKey: \"id\", parentId: \"parent_id\" });\r\n $$(\"treewindowData\").parse(data, \"json\");\r\n $$(\"treewindowData\").openAll();\r\n });\r\n }\r\n\r\n function mergeObject(obj1, obj2) {\r\n var mergedObj = {};\r\n\r\n // Sao chép thuộc tính từ obj1\r\n for (var key in obj1) {\r\n if (obj1.hasOwnProperty(key)) {\r\n mergedObj[key] = obj1[key];\r\n }\r\n }\r\n \r\n // Sao chép thuộc tính từ obj2, ghi đè thuộc tính trùng lặp\r\n for (var key in obj2) {\r\n if (obj2.hasOwnProperty(key)) {\r\n mergedObj[key] = obj2[key];\r\n }\r\n }\r\n \r\n return mergedObj;\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n var windowno = app.path[1].params[0];\r\n\r\n $scope.on(app, \"dataChangedLicense\", function (mode, item) {\r\n \r\n var table = webix.$$(\"treewindowDataRegister\");\r\n\r\n if (mode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n if (mode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n });\r\n\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"treewindowData\");\r\n var url = app.config.host + \"/System/GetDataById?window_id=\" + windowno + \"&id=\" + item.id;\r\n \r\n if(dataParams.length > 0) {\r\n var prCodeComp = dataParams.find(function(e) {\r\n return e.value_field == 'parent_code';\r\n })\r\n\r\n if(prCodeComp) {\r\n url = url + \"&parent_code=\" + $$(prCodeComp.id).getValue();\r\n }\r\n }\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (mode == 1) {\r\n table.data.add(json, 0, json.parent_id);\r\n table.select(json.id);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n //console.log(json.data[0]);\r\n if (selectedItem.parent_id != json.parent_id) {\r\n\r\n var nodeId = table.getSelectedId();\r\n table.remove(nodeId);\r\n\r\n table.clearSelection();\r\n\r\n table.data.add(json, 0, json.parent_id);\r\n table.select(json.id);\r\n }\r\n else {\r\n table.updateItem(selectedItem.id, json);\r\n }\r\n\r\n\r\n }\r\n\r\n\r\n });\r\n\r\n\r\n\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n }\r\n };\r\n});\ndefine('views/update',[\r\n \"app\",\r\n \"locale\",\r\n \"views/forms/license\",\r\n], function (app, _, licenseForm) {\r\n \r\n\r\n webix.$$(\"title\").parse({ title: \"Cập nhật phần mềm\", details: \"Cập nhật phần mềm\" });\r\n\r\n var controls = [\r\n {},\r\n {\r\n id: \"btnUpdate\",\r\n view: \"button\",\r\n type: \"danger\",\r\n //css: \"mcls_btn_save\", \r\n icon: \"save\",\r\n label: _(\"Cập nhật (F10)\"),\r\n // width: 100,\r\n shortcut: \"F10\",\r\n on: {\r\n onClick: function () {\r\n\r\n var form = webix.$$(\"updateform\");\r\n\r\n if (form.validate()) {\r\n webix.confirm({\r\n title: \"Cập nhật phần mềm\",\r\n text: \"Bạn có muốn cập nhật phần mềm \", ok: \"Có\", cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n var box = webix.modalbox({\r\n title: \"Đang tải cập nhật\",\r\n buttons: [\"Hủy bỏ\"],\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"0\":\r\n clearTimeout(interVal);\r\n webix.modalbox.hide(box);\r\n break;\r\n }\r\n }\r\n });\r\n var interVal = setTimeout(function () {\r\n\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/System/UpdateVersion\", function (text) {\r\n var data = JSON.parse(text);\r\n if (!data.hasOwnProperty(\"error\")) {\r\n webix.modalbox.hide(box);\r\n clearTimeout(interVal);\r\n\r\n webix.message(\"Cập nhật thành công !\", \"debug\");\r\n }\r\n else {\r\n webix.modalbox.hide(box);\r\n clearTimeout(interVal);\r\n webix.message(data.error, \"error\");\r\n }\r\n });\r\n\r\n }, 3000);\r\n }\r\n }\r\n });\r\n }\r\n\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {}\r\n ];\r\n\r\n var layout = {\r\n cols: [\r\n { gravity: 0.5, template: \"\" },\r\n {\r\n rows: [\r\n { gravity: 0.2, template: \"\" },\r\n {\r\n view: \"template\", template: \"
Thông tin cập nhật
\",\r\n css: { \"background-color\": \"white\", \"color\": \"red\", \"border-radius\": \"15px 15px 0px 0px\", \"font-size\": \"15px\", \"margin-top\":\"65px\" },\r\n type: \"header\"\r\n },\r\n {\r\n view: \"form\",\r\n id: \"updateform\",\r\n paddingY: 10,\r\n paddingX: 10,\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"text\",\r\n name: \"old_ver\",\r\n label: \"Version hiện tại\",\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\"\r\n },\r\n {\r\n view: \"text\",\r\n name: \"new_ver\",\r\n label: \"Version mới nhất\",\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\"\r\n },\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin bản cập nhật\",\r\n height: 200,\r\n body: {\r\n rows: [\r\n {\r\n view: \"textarea\",\r\n name: \"info_update\",\r\n labelPosition: \"top\",\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n margin: 15,\r\n cols: controls\r\n }\r\n ]\r\n\r\n },\r\n { gravity: 1, template: \"\" }\r\n ]\r\n },\r\n { gravity: 0.5, template: \"\" }\r\n ]\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var url = app.config.host + \"/System/GetVersionUpdate\";\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"updateform\").setValues(json);\r\n\r\n });\r\n }\r\n\r\n };\r\n});\ndefine('views/updateToWeb',[\r\n \"app\",\r\n \"locale\",\r\n \"views/forms/updateToWeb\"\r\n], function (app, _, formUpdate) {\r\n \r\n\r\n //var windowno = app.path[1].params[0];\r\n var windowno = null;\r\n //webix.$$(\"title\").parse({ title: \"Nhận dữ liệu từ VACOMS\", details: \"Nhận dữ liệu từ VACOMS\" });\r\n var header = {\r\n //borderless: true,\r\n css: { \"box-shadow\": \"0 2px 10px rgba(0,0,0,0.2)\" },\r\n height: 135,\r\n cols: [\r\n // { gravity: 1, template: \"\", width: 150 },\r\n {\r\n view: \"label\",\r\n template: \"\",\r\n height: 115,\r\n borderless: true,\r\n css: { \"padding\": \"10px\" }\r\n },\r\n {\r\n id: \"version\",\r\n borderless: true,\r\n view: \"label\",\r\n template: \"
Hotline:
info@minvoice.vn
\",\r\n css: { \"padding\": \"40px\", \"padding-top\": \"50px\" }\r\n },\r\n {\r\n rows: [\r\n { gravity: 1, template: \"\" },\r\n {\r\n id: \"cbLanguage\",\r\n view: \"combo\",\r\n width: 125,\r\n options: [\r\n { id: \"vi\", value: \"Việt Nam\" },\r\n { id: \"en\", value: \"English\" },\r\n { id: \"ko\", value: \"Korea\" }\r\n ],\r\n // inputAlign: \"right\",\r\n //css: \"cbLanguage\",\r\n value: \"vi\",\r\n // on: {\r\n // onChange: function (newv, oldv) {\r\n // locale.setLang(newv, null);\r\n // }\r\n // }\r\n },\r\n { gravity: 1, template: \"\" }\r\n ]\r\n\r\n }\r\n // { gravity: 1, template: \"\", width: 150 }\r\n ]\r\n };\r\n var controls = [\r\n {},\r\n {\r\n id: \"btnSave\",\r\n view: \"button\",\r\n type: \"danger\",\r\n icon: \"save\",\r\n label: \"Thực hiện (F10)\",\r\n // width: 120,\r\n shortcut: \"F10\",\r\n on: {\r\n onClick: function () {\r\n var frm = this.$scope.ui(formUpdate.$ui);\r\n frm.show();\r\n // $$(\"formConfirm\").show();\r\n // $$(\"formConfirmValid\").bind($$(\"formInfo\"));\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Quay lại đăng nhập\",\r\n type: \"form\",\r\n icon: \"fas fa-repeat\",\r\n click: function () {\r\n app.router(\"/login\");\r\n }\r\n },\r\n {}\r\n ];\r\n\r\n var tabview = {\r\n id: \"my_tabview\",\r\n view: \"tabview\",\r\n cells: [\r\n {\r\n header: \"Bảng dữ liệu\",\r\n body: {\r\n id: \"tblDM\",\r\n view: \"datatable\",\r\n select: true,\r\n editable: false,\r\n disable: true,\r\n data: [\r\n { chon: true, MA: \"SYS\", TEN_DM: \"Bảng hệ thống\" },\r\n { chon: true, MA: \"BQ\", TEN_DM: \"Bản Quyền\" },\r\n { chon: true, MA: \"CKS\", TEN_DM: \"Chữ ký số\" },\r\n { chon: true, MA: \"TBH\", TEN_DM: \"Thông báo hủy\" },\r\n { chon: true, MA: \"QTC\", TEN_DM: \"Quyền truy cập\" },\r\n { chon: true, MA: \"LDC\", TEN_DM: \"Loại điều chỉnh\" }\r\n ],\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: { content: \"masterCheckbox\" },\r\n template: \"{common.checkbox()}\",\r\n checkValue: true,\r\n uncheckValue: false,\r\n value: true,\r\n width: 50,\r\n css: { 'text-align': 'right' }\r\n },\r\n {\r\n id: \"MA\",\r\n header: _(\"MA\"),\r\n width: 80\r\n },\r\n {\r\n id: \"TEN_DM\",\r\n header: _(\"Tên Bảng\"),\r\n width: 250\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n header: \"Stored Procedures\",\r\n body: {\r\n id: \"tblDMCT\",\r\n view: \"datatable\",\r\n select: true,\r\n editable: true,\r\n data: [\r\n { chon: true, MA_CT: \"MNU\", TEN_CT: \"Get Menu\" },\r\n { chon: true, MA_CT: \"DHB\", TEN_CT: \"Dashboard\" },\r\n { chon: true, MA_CT: \"CHA\", TEN_CT: \"Biểu đồ\" },\r\n { chon: true, MA_CT: \"PRI\", TEN_CT: \"Print Invoice\" },\r\n { chon: true, MA_CT: \"PRL\", TEN_CT: \"Print License\" },\r\n { chon: true, MA_CT: \"TEM\", TEN_CT: \"Temple Email\" },\r\n { chon: true, MA_CT: \"TSM\", TEN_CT: \"Temple SMS\" },\r\n { chon: true, MA_CT: \"SEI\", TEN_CT: \"Search Invoice\" },\r\n { chon: true, MA_CT: \"ATC\", TEN_CT: \"Auto Create CMD\" },\r\n { chon: true, MA_CT: \"ATF\", TEN_CT: \"Auto Create Field\" }\r\n ],\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: { content: \"masterCheckbox\" },\r\n template: \"{common.checkbox()}\",\r\n checkValue: true,\r\n uncheckValue: false,\r\n value: true,\r\n width: 50,\r\n css: { 'text-align': 'right' }\r\n },\r\n {\r\n id: \"MA_CT\",\r\n header: _(\"Mã\"),\r\n width: 80\r\n },\r\n {\r\n id: \"TEN_CT\",\r\n header: _(\"Tên Stored Procedures\"),\r\n width: 250\r\n }\r\n\r\n ]\r\n }\r\n }\r\n ]\r\n };\r\n\r\n\r\n var layout = {\r\n // paddingY: 60,\r\n // paddingX: 500,\r\n cols: [\r\n { gravity: 0.5, template: \"\" },\r\n {\r\n rows: [\r\n header,\r\n { gravity: 0.1, template: \"\" },\r\n {\r\n gravity: 0.1,\r\n template: \"
CẬP NHẬT PHẦN MỀM LÊN PHIÊN BẢN OLNINE (WEB)
\", css: { \"padding-top\": \"15px\" }\r\n },\r\n {\r\n view: \"form\",\r\n id: \"formInfo\",\r\n paddingY: 10,\r\n // width: 700,\r\n // height:300,\r\n position: \"center\",\r\n paddingX: 10,\r\n complexData: true,\r\n margin: 0,\r\n // elementsConfig: {\r\n // labelPosition: \"top\",\r\n // //validateEvent: \"key\"\r\n // },\r\n url: app.config.host + \"/System/GetAllDmDvcs\",\r\n elements: [\r\n {\r\n cols: [\r\n {\r\n id: \"ten_dvcs\",\r\n name: \"ten_dvcs\",\r\n view: \"text\",\r\n label: \"Tên đơn vị\",\r\n readonly: true,\r\n css: \"mcls_readonly_text\"\r\n },\r\n {\r\n id: \"ms_thue\",\r\n name: \"ms_thue\",\r\n view: \"text\",\r\n label: \"Mã số thuế\",\r\n readonly: true,\r\n css: \"mcls_readonly_text\"\r\n }\r\n ]\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"dia_chi\",\r\n view: \"text\",\r\n name: \"dia_chi\",\r\n label: \"Địa chỉ\",\r\n readonly: true,\r\n css: \"mcls_readonly_text\"\r\n },\r\n {\r\n id: \"tk\",\r\n name: \"gd\",\r\n view: \"checkbox\",\r\n value: 1,\r\n label: \"Ghi đè\"\r\n }\r\n ]\r\n },\r\n {\r\n view: \"template\",\r\n template: \"Lựa chọn Bảng/Stored Procedures Update\",\r\n type: \"section\"\r\n },\r\n tabview,\r\n {\r\n margin: 10,\r\n cols: controls\r\n }\r\n ]\r\n },\r\n { gravity: 0.5, template: \"\" }\r\n ]\r\n },\r\n { gravity: 0.5, template: \"\" }\r\n ]\r\n\r\n };\r\n\r\n return {\r\n $ui: layout\r\n };\r\n});\nwebix.protoUI({\r\n\tname: \"ckeditor\",\r\n\t$init: function (config) {\r\n\t\tthis.$view.className += \" webix_selectable\";\r\n\t\tthis._waitEditor = webix.promise.defer();\r\n\t},\r\n\tdefaults: {\r\n\t\tborderless: true,\r\n\t\tlanguage: \"vi\",\r\n\t\ttoolbar: [\r\n\t\t\t{ name: 'document', items: ['Source', '-', 'Save', 'NewPage', 'Preview', 'Print', '-', 'Templates'] },\r\n\t\t\t{ name: 'clipboard', items: ['Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo'] },\r\n\t\t\t{ name: 'editing', items: ['Find', 'Replace', '-', 'SelectAll', '-', 'Scayt'] },\r\n\t\t\t{ name: 'forms', items: ['Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField'] },\r\n\t\t\t'/',\r\n\t\t\t{ name: 'basicstyles', items: ['Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript', '-', 'CopyFormatting', 'RemoveFormat'] },\r\n\t\t\t{ name: 'paragraph', items: ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', 'CreateDiv', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', '-', 'BidiLtr', 'BidiRtl', 'Language'] },\r\n\t\t\t{ name: 'links', items: ['Link', 'Unlink', 'Anchor'] },\r\n\t\t\t{ name: 'insert', items: ['Image', 'Flash', 'Table', 'HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak', 'Iframe'] },\r\n\t\t\t'/',\r\n\t\t\t{ name: 'styles', items: ['Styles', 'Format', 'Font', 'FontSize'] },\r\n\t\t\t{ name: 'colors', items: ['TextColor', 'BGColor'] },\r\n\t\t\t{ name: 'tools', items: ['Maximize', 'ShowBlocks'] },\r\n\t\t\t{ name: 'about', items: ['About'] }\r\n\t\t]\r\n\t},\r\n\t_init_ckeditor_once: function () {\r\n\t\tvar tid = this.config.textAreaID = \"t\" + webix.uid();\r\n\t\tthis.$view.innerHTML = \"\";\r\n\r\n\t\tthis._3rd_editor = CKEDITOR.replace(this.config.textAreaID, {\r\n\t\t\ttoolbar: this.config.toolbar,\r\n\t\t\tlanguage: this.config.language,\r\n\t\t\twidth: this.$width - 2,\r\n\t\t\theight: this.$height - 140\r\n\t\t});\r\n\t\tthis._waitEditor.resolve(this._3rd_editor);\r\n\r\n\t\tthis._init_ckeditor_once = function () { };\r\n\t},\r\n\t_render_ckeditor: function () {\r\n\t\tvar initMethod = \"replace\";\r\n\t\tif (this.config.editorType === \"inline\") {\r\n\t\t\tCKEDITOR.disableAutoInline = true;\r\n\t\t\tinitMethod = \"inline\";\r\n\t\t}\r\n\r\n\t\tthis._3rd_editor = CKEDITOR[initMethod](this.config.textAreaID, {\r\n\t\t\ttoolbar: this.config.toolbar,\r\n\t\t\tlanguage: this.config.language,\r\n\t\t\twidth: this.$width - 2,\r\n\t\t\theight: this.$height - this.config.barHeight\r\n\r\n\r\n\t\t});\r\n\t\tconsole.log(this.config.barHeight);\r\n\t\tthis._waitEditor.resolve(this._3rd_editor);\r\n\t},\r\n\t_set_inner_size: function (x, y) {\r\n\t\t//alert(x+\"-\"+y);\r\n\t\tif (!this._3rd_editor || !this._3rd_editor.container || !this.$width || this.config.editorType === \"inline\") return;\r\n\t\tthis._3rd_editor.resize(x, y);\r\n\t},\r\n\t$setSize: function (x, y) {\r\n\t\t//alert(x+\"-\"+y);\r\n\t\tif (webix.ui.view.prototype.$setSize.call(this, x, y)) {\r\n\t\t\tthis._init_ckeditor_once();\r\n\t\t\tthis._set_inner_size(x, y);\r\n\t\t}\r\n\t},\r\n\tsetValue: function (value) {\r\n\t\tthis.config.value = value;\r\n\r\n\t\tif (this._3rd_editor && this._3rd_editor.status === \"ready\")\r\n\t\t\tthis._3rd_editor.setData(value);\r\n\t\telse webix.delay(function () {\r\n\t\t\tthis.setValue(value);\r\n\t\t}, this, [], 100);\r\n\t},\r\n\tgetValue: function () {\r\n\t\treturn this._3rd_editor ? this._3rd_editor.getData() : this.config.value;\r\n\t},\r\n\tfocus: function () {\r\n\t\tthis._focus_await = true;\r\n\t\tif (this._3rd_editor)\r\n\t\t\tthis._3rd_editor.focus();\r\n\t},\r\n\tgetEditor: function (waitEditor) {\r\n\t\treturn waitEditor ? this._waitEditor : this._3rd_editor;\r\n\t}\r\n}, webix.ui.view);\ndefine(\"views/webix/ckeditor\", function(){});\n\nwebix.protoUI({\r\n\tname:\"edittree\"\r\n}, webix.EditAbility, webix.ui.tree);\ndefine(\"views/webix/editable\", function(){});\n\nwebix.type(webix.ui.tree, {\r\n\tname:\"fileTree\",\r\n\tcss: \"file\",\r\n\theight: 40,\r\n\ttemplateCommon:webix.template(\"{common.icon()}
{common.folder()} #value#
\"),\r\n\tfolder:function(obj, common){\r\n\t\treturn \"\";\r\n\t}\r\n});\ndefine(\"views/webix/filetree\", function(){});\n\nwebix.type(webix.ui.dataview, {\r\n\tname:\"fileView\",\r\n\tcss: \"files\",\r\n\theight: 80,\r\n\twidth: 150,\r\n\r\n\ttemplate: function(obj){\r\n\t\tvar icon = (obj.icon||\"folder-o\");\r\n\t\treturn \"
\"+obj.value;\r\n\t}\r\n\r\n});\ndefine(\"views/webix/fileview\", function(){});\n\nwebix.protoUI({\r\n\tname:\"google-map\",\r\n\t$init:function(config){\r\n\t\tthis.$view.innerHTML = \"
\";\r\n\t\tthis._contentobj = this.$view.firstChild;\r\n\r\n\t\tthis.map = null;\r\n\t\tthis.$ready.push(this.render);\r\n\t},\r\n\trender:function(){\r\n if(typeof google==\"undefined\"||typeof google.maps==\"undefined\"){\r\n var name = \"webix_callback_\"+webix.uid();\r\n window[name] = webix.bind(function(){\r\n this._initMap.call(this,true);\r\n },this);\r\n\r\n var script = document.createElement(\"script\");\r\n script.type = \"text/javascript\";\r\n script.src = \"//maps.google.com/maps/api/js?sensor=false&callback=\"+name;\r\n document.getElementsByTagName(\"head\")[0].appendChild(script);\r\n }\r\n else\r\n this._initMap();\r\n\t},\r\n _initMap:function(define){\r\n var c = this.config;\r\n\r\n this.map = new google.maps.Map(this._contentobj, {\r\n zoom: c.zoom,\r\n center: new google.maps.LatLng(c.center[0], c.center[1]),\r\n mapTypeId: google.maps.MapTypeId[c.mapType]\r\n });\r\n webix._ldGMap = null;\r\n },\r\n\tcenter_setter:function(config){\r\n\t\tif(this.map)\r\n this.map.setCenter(new google.maps.LatLng(config[0], config[1]));\r\n \r\n\t\treturn config;\r\n\t},\r\n\tmapType_setter:function(config){\r\n\t\t/*ROADMAP,SATELLITE,HYBRID,TERRAIN*/\r\n if(this.map)\r\n \tthis.map.setMapTypeId(google.maps.MapTypeId[config]);\r\n\r\n\t\treturn config;\r\n\t},\r\n\tzoom_setter:function(config){\r\n\t\tif(this.map)\r\n\t\t\t this.map.setZoom(config);\r\n\r\n\t\treturn config;\r\n\t},\r\n\tdefaults:{\r\n\t\tzoom: 5,\r\n\t\tcenter:[ 39.5, -98.5 ],\r\n\t\tmapType: \"ROADMAP\" \r\n\t},\r\n\t$setSize:function(){\r\n\t\twebix.ui.view.prototype.$setSize.apply(this, arguments);\r\n\t\tif(this.map)\r\n google.maps.event.trigger(this.map, \"resize\");\r\n\t}\r\n}, webix.ui.view);\r\n\ndefine(\"views/webix/googlemap\", function(){});\n\ndefine('views/window_custom',[\"app\", \"views/forms/window\", \"views/forms/infowindow\", \"locale\", \"models/user\", \"views/forms/printf\", \"views/forms/sendemail\", \"views/forms/lichsuemail\", \"views/commonHD\"], function (\r\n app,\r\n windowform,\r\n infowindow,\r\n _,\r\n user,\r\n printf,\r\n sendemail,\r\n his_email,\r\n commonHD\r\n) {\r\n \r\n\r\n var layoutId = \"\";\r\n var col = [];\r\n var sub_col = [];\r\n var windowconfig = null;\r\n var buttons = [];\r\n var dataParams = [];\r\n //var windowno = \"\":\r\n\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n data: [],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var item = this.getItem(id);\r\n\r\n this.hide();\r\n\r\n var fn = Function(\"_\", \"user\", item.on_click);\r\n fn(_, user);\r\n },\r\n },\r\n });\r\n\r\n var initUI = function () {\r\n var windowno = app.path[1].params[0];\r\n\r\n col = [];\r\n sub_col = [];\r\n var query = {\r\n command: \"SYS002\",\r\n parameter: {\r\n windowno: windowno,\r\n },\r\n };\r\n //var query = \"SELECT * FROM #SCHEMA_NAME#.wb_menu WHERE window_code='\" + windowno + \"' LIMIT 1 OFFSET 0\";\r\n // var url = app.config.host + \"/System/Query\";\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, query, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.length > 0) {\r\n if (webix.$$(\"title\") != undefined) {\r\n webix.$$(\"title\").parse({ title: json[0][\"name\"], details: json[0][\"details\"] });\r\n }\r\n }\r\n });\r\n\r\n url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n $$(\"tlbMain\").removeView(\"btnChucNang\");\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n url,\r\n {\r\n command: \"CM00004\",\r\n parameter: {\r\n window_id: windowno,\r\n },\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.length > 0) {\r\n $$(\"cbMauIn\").define(\"options\", json);\r\n $$(\"cbMauIn\").setValue(json[0].id);\r\n $$(\"cbMauIn\").show();\r\n $$(\"cbTypeIn\").show();\r\n $$(\"btnPrint\").show();\r\n } else {\r\n $$(\"cbMauIn\").define(\"options\", []);\r\n $$(\"cbMauIn\").hide();\r\n $$(\"cbTypeIn\").hide();\r\n $$(\"btnPrint\").hide();\r\n }\r\n\r\n $$(\"cbMauIn\").refresh();\r\n }\r\n );\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n url,\r\n {\r\n command: \"CM00002\",\r\n parameter: {\r\n window_id: windowno,\r\n },\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (buttons.length > 0) {\r\n for (var i = 0; i < buttons.length; i++) {\r\n var item = buttons[i];\r\n $$(\"tlbMain\").removeView(item.id);\r\n }\r\n }\r\n\r\n buttons = [];\r\n var menus = [];\r\n\r\n var stt = 7;\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n var item = json[i];\r\n\r\n if (item.is_group_function == \"C\") {\r\n if (item.hidden != 1) {\r\n menus.push({\r\n id: item.name,\r\n value: _(item.caption),\r\n on_click: item.on_click,\r\n });\r\n }\r\n } else {\r\n if (item.hidden != 1) {\r\n var fn = new Function(item.on_click);\r\n\r\n var button = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: item.width,\r\n label: ' ' + '' + _(item.caption) + \"\",\r\n id: item.name,\r\n // label: _(item.caption),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-\" + item.icon,\r\n // width: item.width,\r\n click: fn,\r\n };\r\n\r\n buttons.push(button);\r\n $$(\"tlbMain\").addView(button, stt);\r\n\r\n stt = stt + 1;\r\n }\r\n }\r\n }\r\n\r\n if (menus.length > 0) {\r\n subChucNang.clearAll();\r\n subChucNang.parse(menus, \"json\");\r\n\r\n var index = $$(\"tlbMain\").index($$(\"cbMauIn\"));\r\n\r\n var btnChucNang = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"CHUC_NANG\") + \"\",\r\n id: \"btnChucNang\",\r\n // label: _(\"CHUC_NANG\"),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-tasks\",\r\n // width: 100,\r\n click: function () {\r\n subChucNang.show(webix.$$(\"btnChucNang\").$view);\r\n },\r\n };\r\n\r\n $$(\"tlbMain\").addView(btnChucNang, index - 1);\r\n }\r\n }\r\n );\r\n\r\n // lấy thông tin của window\r\n url = app.config.host + \"/System/GetConfigWinByNo?id=\" + windowno;\r\n\r\n webix.$$(\"windowData\").getParentView().getParentView().getParentView().disable();\r\n webix.$$(\"windowData\").getParentView().getParentView().getParentView().showProgress();\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n // console.log(app_cache);\r\n //nếu có trong cache\r\n if (app_cache[windowno] != null) {\r\n windowconfig = app_cache[windowno];\r\n initComponents(windowconfig);\r\n } //không có cache\r\n else {\r\n webix.ajax(url, function (text, xml, xhr) {\r\n var rp = JSON.parse(text);\r\n windowconfig = rp;\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n app_cache[windowno] = windowconfig;\r\n\r\n webix.storage.local.put(\"APP_CACHE\", app_cache);\r\n initComponents(windowconfig);\r\n });\r\n }\r\n };\r\n\r\n var initComponents = function (_windowconfig) {\r\n //console.log(_windowconfig);\r\n var k = Object.keys(_windowconfig[\"data\"][0][\"Tabs\"]).length;\r\n //console.log(k);\r\n var vc_window = _windowconfig[\"data\"][0];\r\n\r\n var tabs = vc_window.Tabs;\r\n\r\n var windowno = vc_window.window_id;\r\n\r\n var masterTab = tabs[0];\r\n //console.log(masterTab);\r\n\r\n $$(\"btnPlus\").show();\r\n $$(\"btnCopy\").show();\r\n $$(\"btnEdit\").show();\r\n $$(\"btnDelete\").show();\r\n\r\n for (var j = 0; j < masterTab.Fields.length; j++) {\r\n var field = masterTab.Fields[j];\r\n\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n\r\n var item = {\r\n id: field.column_name,\r\n header: _(field.column_name),\r\n columnType: field.column_type,\r\n columnAlias: field.column_alias,\r\n template: field.template,\r\n columnFormat: field.format,\r\n };\r\n\r\n if (field.caption != null) {\r\n item.header = _(field.caption);\r\n }\r\n\r\n if (field.column_type == \"numeric\") {\r\n item.css = { \"text-align\": \"right\" };\r\n item.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: field.data_decimal,\r\n });\r\n }\r\n\r\n if (field.type_filter != null) {\r\n if (field.type_filter != \"\") {\r\n item.header = [_(item.header), { content: field.type_filter }];\r\n }\r\n }\r\n\r\n if (field.type_editor == \"combo\") {\r\n item.editor = field.type_editor;\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n\r\n if (field.type_editor == \"gridcombo\") {\r\n item.editor = field.type_editor;\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n item.format = function (text) {\r\n var format = webix.Date.dateToStr(this.columnFormat);\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (field.column_type == \"time\") {\r\n item.format = function (text) {\r\n var format = webix.Date.dateToStr(\"%H:%i\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n }\r\n\r\n if (field.type_editor == \"checkbox\") {\r\n if (field.column_type == \"boolean\") {\r\n item.checkValue = true;\r\n item.uncheckValue = false;\r\n }\r\n\r\n item.template = function (obj, common, value) {\r\n if (value == true || value == 1) return \"
\";\r\n else return \"
\";\r\n };\r\n }\r\n\r\n if (field.column_width == null) {\r\n item.fillspace = true;\r\n } else {\r\n item.width = field.column_width;\r\n }\r\n\r\n col.push(item);\r\n }\r\n\r\n var table = $$(\"windowData\");\r\n table.clearAll();\r\n\r\n table.define(\"windowno\", windowno);\r\n table.define(\"leftSplit\", vc_window.fix_left == null ? 0 : vc_window.fix_left);\r\n table.define(\"rightSplit\", vc_window.fix_right == null ? 0 : vc_window.fix_right);\r\n\r\n table.config.infoparam = null;\r\n table.config.columns = col;\r\n table.config.ma_ct = vc_window.ma_ct;\r\n\r\n table.refreshColumns();\r\n\r\n var parentToolBar = $$(\"tlbMain\").getParentView();\r\n\r\n parentToolBar.removeView(\"tlbParams\");\r\n $$(\"head-title\").show();\r\n $$(\"head-title\").removeView(\"tlbParams\");\r\n // toolBar windown parram\r\n dataParams = [];\r\n if (vc_window.WinParams != undefined && vc_window.WinParams != null) {\r\n var toolBarParams = {\r\n id: \"tlbParams\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [],\r\n };\r\n\r\n for (var i = 0; i < vc_window.WinParams.length; i++) {\r\n var item = vc_window.WinParams[i];\r\n\r\n var comp = {\r\n id: webix.uid(),\r\n view: item.type_editor,\r\n width: item.width,\r\n label: _(item.caption),\r\n value_field: item.value_field,\r\n isDefault: item.has_default,\r\n on: {},\r\n };\r\n\r\n if (comp.view == \"combo\") {\r\n if(comp.value_field) {\r\n dataParams.push({\r\n id: comp.id,\r\n value_field: comp.value_field\r\n })\r\n }\r\n comp.options = {\r\n body: {\r\n comboId: comp.id,\r\n isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + item.wb_references_id,\r\n ready: function () {\r\n if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n if (count > 0) {\r\n var combo = webix.$$(this.config.comboId);\r\n combo.setValue(this.getFirstId());\r\n }\r\n }\r\n },\r\n },\r\n };\r\n\r\n comp.on.onChange = function (newv, oldv) {\r\n var table = $$(\"windowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n };\r\n }\r\n\r\n toolBarParams.cols.push(comp);\r\n }\r\n windowconfig['data_params'] = dataParams;\r\n $$(\"head-title\").addView(toolBarParams, 1);\r\n // parentToolBar.addView(toolBarParams);\r\n }\r\n\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/System/GetDataByWindowNo\";\r\n var start = null;\r\n var count = null;\r\n var filter = [];\r\n var infoparam = null;\r\n var tlbparam_s = [];\r\n\r\n if (params == null) {\r\n url = url + \"&start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n start = 0;\r\n count = view.config.datafetch;\r\n } else {\r\n url = url + \"&start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n start = params.start;\r\n count = params.count;\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n if (column !== undefined) {\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n columnAlias: column.columnAlias,\r\n value: params.filter[property],\r\n };\r\n array.push(item);\r\n }\r\n }\r\n\r\n if (array.length > 0) {\r\n filter = array;\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n } else {\r\n url = url + \"&filter=null\";\r\n }\r\n } else {\r\n url = url + \"&filter=null\";\r\n }\r\n }\r\n\r\n if (view.config.infoparam != null) {\r\n infoparam = view.config.infoparam;\r\n url = url + \"&infoparam=\" + JSON.stringify(view.config.infoparam);\r\n } else {\r\n url = url + \"&infoparam=null\";\r\n }\r\n var tlbParams = $$(\"tlbParams\");\r\n\r\n var checkValue = true;\r\n var parameters = [];\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n if ($$(id).getValue() == \"\") {\r\n checkValue = false;\r\n break;\r\n }\r\n\r\n var item = {\r\n columnName: value_field,\r\n value: $$(id).getValue(),\r\n };\r\n parameters.push(item);\r\n }\r\n } \r\n url = url + \"&tlbparam=null\";\r\n\r\n var item = {\r\n window_id: windowno,\r\n start: start,\r\n count: count,\r\n filter: filter,\r\n infoparam: infoparam,\r\n tlbparam: [],\r\n };\r\n if(parameters != null && parameters.length > 0) {\r\n parameters.forEach(function(c) {\r\n item[c.columnName] = c.value;\r\n });\r\n } \r\n\r\n var url1 = null;\r\n if (checkValue == true) {\r\n url1 = app.config.host + \"/System/GetDataByWindowNo\";\r\n }\r\n webix.ajax().headers({ \"Content-type\": \"application/json\" }).bind(view).post(url1, item, callback, view);\r\n //}\r\n //else {\r\n // $('.webix_overlay').hide()\r\n //}\r\n // webix.ajax().headers({ 'Content-type': 'application/json' })\r\n // .bind(view)\r\n // .post(url, item, function (text) {\r\n // var json = JSON.parse(text);\r\n\r\n // this.clearAll();\r\n\r\n // if (!json.hasOwnProperty(\"error\")) {\r\n // this.bind(json);\r\n // // this.refresh();\r\n // // table.parse(json.data, \"json\");\r\n // }\r\n // });\r\n\r\n // webix.ajax(url, callback, view);\r\n },\r\n };\r\n\r\n table.define(\"url\", url);\r\n\r\n if (vc_window.wb_infowindow_id != null) {\r\n if (vc_window.wb_infowindow_id != \"\") {\r\n $$(\"btnSearch\").show();\r\n table.config.infowindow_id = vc_window.wb_infowindow_id;\r\n } else {\r\n $$(\"btnSearch\").hide();\r\n table.config.infowindow_id = null;\r\n }\r\n } else {\r\n $$(\"btnSearch\").hide();\r\n table.config.infowindow_id = null;\r\n }\r\n\r\n webix.$$(\"windowData\").getParentView().getParentView().getParentView().enable();\r\n webix.$$(\"windowData\").getParentView().getParentView().getParentView().hideProgress();\r\n };\r\n\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n \"Thêm\",\r\n { $template: \"Separator\" },\r\n \"Sửa\",\r\n { $template: \"Separator\" },\r\n \"Xóa\",\r\n { $template: \"Separator\" },\r\n \"Xem hóa đơn gốc\",\r\n { $template: \"Separator\" },\r\n \"Gửi hóa đơn qua email\",\r\n { $template: \"Separator\" },\r\n \"In hóa đơn\",\r\n { $template: \"Separator\" },\r\n \"Lịch sử gửi Email\",\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xem hóa đơn gốc\") {\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n //console.log(item);\r\n if (item.original_invoice_id != null && item.original_invoice_id != undefined) {\r\n var box = webix.modalbox({\r\n title: \"Đang in chứng từ\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n //var newWin = window.open();\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.original_invoice_id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n\r\n webix.modalbox.hide(box);\r\n //newWin.location = fileURL;\r\n window.open(fileURL, \"_blank\");\r\n },\r\n });\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, '_blank');\r\n // // webix.html.download(file, $$('tenfile').getValue());\r\n // });\r\n } else {\r\n webix.message(\"Không tồn tại hóa đơn gốc !\", \"error\");\r\n return;\r\n }\r\n }\r\n if (this.getItem(id).value == \"Lịch sử gửi Email\") {\r\n var table = webix.$$(\"windowData\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n var detailForm = webix.$$(\"windowData\").$scope.ui(his_email.$ui);\r\n his_email.initUI(selectedItem.inv_invoiceauth_id);\r\n detailForm.show();\r\n }\r\n if (this.getItem(id).value == \"Gửi hóa đơn qua email\") {\r\n var table = webix.$$(\"windowData\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n\r\n if (selectedItem.status == \"Chờ ký\" || selectedItem.status == \"Chờ duyệt\") {\r\n webix.message(\"Hóa đơn chưa được ký\", \"error\");\r\n return;\r\n }\r\n\r\n var url = \"/Invoice/GetEmailTemplate?type=Gửi hóa đơn&id=\" + selectedItem.inv_invoiceauth_id;\r\n\r\n webix.ajax(app.config.host + url, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n var win = webix.$$(\"windowData\").$scope.ui(sendemail.$ui);\r\n\r\n var item = {\r\n nguoi_gui: json.sender,\r\n tieude: json.subject,\r\n noidung: json.body,\r\n mat_khau: json.pass,\r\n inv_invoiceauth_id: selectedItem.inv_invoiceauth_id,\r\n type: \"Gửi hóa đơn\",\r\n nguoinhan: selectedItem.buyer_email,\r\n his_email: json.his_email,\r\n };\r\n //console.log(sendemail);\r\n\r\n sendemail.setValues(item);\r\n win.show();\r\n });\r\n }\r\n if (this.getItem(id).value == \"In hóa đơn\") {\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dữ liệu cần in\", \"error\");\r\n return;\r\n }\r\n\r\n var cbMauIn = $$(\"cbMauIn\");\r\n var cbTypeIn = $$(\"cbTypeIn\");\r\n\r\n var rpParameter = {\r\n parameter: item,\r\n wb_mauin_id: cbMauIn.getValue(),\r\n type: cbTypeIn.getValue(),\r\n };\r\n\r\n var mimetype = cbTypeIn.getValue() == \"PDF\" ? \"application/pdf\" : \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\r\n\r\n var url = app.config.host + \"/System/InChungTu\";\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in chứng từ\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, rpParameter, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: mimetype });\r\n var fileURL = URL.createObjectURL(file);\r\n\r\n webix.modalbox.hide(box);\r\n\r\n // var win = $$(\"windowData\").$scope.ui(printf.$ui);\r\n // win.config.url = fileURL;\r\n // win.show();\r\n\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-refresh\",\r\n // label: _(\"REFRESH\"),\r\n // width: 95,\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"windowData\");\r\n table.clearAll();\r\n\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-plus\",\r\n // label: \"Thêm (F4)\",\r\n // css: \"webix_secondary\",\r\n // width: 90,\r\n shortcut: \"F4\",\r\n css: \"btnThem\",\r\n on: {\r\n onClick: function () {\r\n var vc_window = windowconfig[\"data\"][0];\r\n windowform.$ui.id = vc_window.code;\r\n\r\n var detailForm = this.$scope.ui(windowform.$ui);\r\n\r\n windowform.setEditMode(0);\r\n windowform.initUI(windowconfig);\r\n\r\n var params = null;\r\n\r\n var tlbParams = $$(\"tlbParams\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var item = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n item[value_field] = $$(id).getValue();\r\n }\r\n\r\n params = item;\r\n }\r\n\r\n windowform.setValues(null, windowconfig, params);\r\n windowform.setEditMode(1);\r\n\r\n detailForm.show();\r\n windowform.focusFirstElement();\r\n\r\n if (vc_window.after_new != null) {\r\n var fn = Function(\"app\", vc_window.after_new);\r\n fn(app);\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-edit\",\r\n // label: \"Sửa (F3)\",\r\n // width: 90,\r\n shortcut: \"F3\",\r\n // css: \"webix_secondary\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var vc_window = windowconfig[\"data\"][0];\r\n // console.log(vc_window);\r\n windowform.$ui.id = vc_window.code;\r\n var detailForm = this.$scope.ui(windowform.$ui);\r\n\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa !\", \"error\");\r\n return;\r\n }\r\n // không cho sửa hóa đơn điều chỉnh, thay thế đang fix cứng\r\n\r\n if (vc_window.code == \"WIN00187\" || vc_window.code == \"WIN00189\" || vc_window.code == \"WIN00192\" || vc_window.code == \"WIN00193\") {\r\n if (item.trang_thai_hd == 7 || item.trang_thai_hd == 13 || item.trang_thai_hd == 15 || item.trang_thai_hd == 17) {\r\n webix.message(\"Không thể sửa hóa đơn xóa bỏ. Bạn cần phải sử dụng chức năng tương ứng\", \"error\");\r\n return;\r\n }\r\n if (item.trang_thai == \"Đã ký\") {\r\n webix.message(\"Hóa đơn đã ký, bạn không thể sửa !\", \"error\");\r\n return;\r\n }\r\n }\r\n\r\n if (item == null) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa chọn dòng cần sửa\" });\r\n return;\r\n }\r\n\r\n windowform.setEditMode(0);\r\n windowform.initUI(windowconfig);\r\n\r\n if (item.dadung == true) {\r\n item.dadung = 1;\r\n }\r\n windowform.setValues(item, windowconfig);\r\n\r\n windowform.setEditMode(2);\r\n\r\n detailForm.show();\r\n windowform.focusFirstElement();\r\n\r\n if (vc_window.after_edit != null) {\r\n var fn = Function(\"app\", \"_\", vc_window.after_edit);\r\n fn(app, _);\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"fas fa-trash\",\r\n // label: \"Xóa (F8)\",\r\n // width: 80,\r\n shortcut: \"F8\",\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"windowData\");\r\n\r\n if (table.getColumnConfig(\"colMultiChoice\") == undefined) {\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần xóa !\", \"error\");\r\n return;\r\n }\r\n\r\n var khData = {};\r\n khData.windowid = windowconfig.data[0].code;\r\n khData.editmode = 3;\r\n khData.data = [];\r\n khData.data.push(item);\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/Save\", khData, function (text) {\r\n var response = JSON.parse(text);\r\n\r\n if (response.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: response.error });\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n var btnRefresh = $$(\"btnRefresh\");\r\n console.log(btnRefresh);\r\n btnRefresh.callEvent(\"onClick\");\r\n });\r\n }\r\n },\r\n });\r\n } else {\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n deleteMultiChoice();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"COPY\") + \"\",\r\n id: \"btnCopy\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-files-o\",\r\n // label: _(\"COPY\"),\r\n // width: 85,\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\");\r\n return;\r\n }\r\n\r\n var vc_window = windowconfig[\"data\"][0];\r\n windowform.$ui.id = vc_window.code;\r\n\r\n var detailForm = this.$scope.ui(windowform.$ui);\r\n\r\n const cloneItem = JSON.parse(JSON.stringify(item));\r\n\r\n windowform.setEditMode(0);\r\n windowform.initUI(windowconfig);\r\n // windowform.setEditMode(4);\r\n windowform.copyValues(cloneItem, windowconfig);\r\n windowform.setEditMode(1);\r\n detailForm.show();\r\n windowform.focusFirstElement();\r\n\r\n if (vc_window.after_new != null) {\r\n var fn = Function(\"app\", vc_window.after_new);\r\n fn(app);\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 110,\r\n label: ' ' + '' + _(\"SEARCH\") + \" (F2)\" + \"\",\r\n id: \"btnSearch\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-search\",\r\n // label: _(\"SEARCH\") + \" (F2)\",\r\n // width: 110,\r\n // css: \"webix_secondary\",\r\n shortcut: \"F2\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"windowData\");\r\n\r\n infowindow.$ui.id = table.config.infowindow_id;\r\n infowindow.$ui.load_event = \"filterTable\";\r\n\r\n var wininfoparam = this.$scope.ui(infowindow.$ui);\r\n\r\n if (table.config.infoparam != undefined) {\r\n wininfoparam.config.editmode = 1;\r\n wininfoparam.config.formvalues = table.config.infoparam.parameter;\r\n } else {\r\n wininfoparam.config.editmode = 0;\r\n wininfoparam.config.formvalues = null;\r\n }\r\n\r\n infowindow.initUI(table.config.infowindow_id);\r\n wininfoparam.show();\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \" (F7)\" + \"\",\r\n id: \"btnPrint\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"fas fa-print\",\r\n // label: _(\"PRINT\") + \" (F7)\",\r\n // width: 70,\r\n shortcut: \"F7\",\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dữ liệu cần in\", \"error\");\r\n return;\r\n }\r\n\r\n var cbMauIn = $$(\"cbMauIn\");\r\n var cbTypeIn = $$(\"cbTypeIn\");\r\n\r\n var rpParameter = {\r\n parameter: item,\r\n wb_mauin_id: cbMauIn.getValue(),\r\n type: cbTypeIn.getValue(),\r\n };\r\n\r\n var mimetype = cbTypeIn.getValue() == \"PDF\" ? \"application/pdf\" : \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\r\n\r\n if (cbTypeIn.getValue() == \"Rtf\") {\r\n mimetype = \"application/octet-stream\";\r\n }\r\n\r\n var url = app.config.host + \"/System/InChungTu\";\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in chứng từ\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window;\r\n\r\n if (cbTypeIn.getValue() == \"PDF\") {\r\n newWin = window.open();\r\n }\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, rpParameter, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: mimetype });\r\n webix.modalbox.hide(box);\r\n\r\n var cbTypeIn = $$(\"cbTypeIn\");\r\n\r\n if (cbTypeIn.getValue() == \"Excel\" || cbTypeIn.getValue() == \"Rtf\") {\r\n var suffix = cbTypeIn.getValue() == \"Excel\" ? \".xlsx\" : \".rtf\";\r\n\r\n var id = $$(\"cbMauIn\").getValue();\r\n var mauin = $$(\"cbMauIn\").getList().getItem(id);\r\n var export_name = mauin.export_name;\r\n\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n\r\n for (var key in item) {\r\n export_name = export_name.replace(new RegExp(\"#\" + key + \"#\", \"g\"), item[key]);\r\n }\r\n\r\n export_name = export_name.replace(new RegExp(\"/\", \"g\"), \"\");\r\n\r\n webix.html.download(file, export_name + suffix);\r\n return;\r\n }\r\n\r\n var fileURL = URL.createObjectURL(file);\r\n\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n\r\n // onClick: function () {\r\n // var table = webix.$$(\"windowData\");\r\n // var item = table.getSelectedItem();\r\n\r\n // if (item == null) {\r\n // webix.message(\"Bạn chưa chọn dữ liệu cần in\", \"error\");\r\n // return;\r\n // }\r\n\r\n // var cbMauIn = $$(\"cbMauIn\");\r\n // var cbTypeIn = $$(\"cbTypeIn\");\r\n\r\n // var rpParameter = {\r\n // parameter: item,\r\n // wb_mauin_id: cbMauIn.getValue(),\r\n // type: cbTypeIn.getValue()\r\n // };\r\n\r\n // var mimetype = cbTypeIn.getValue() == \"PDF\" ? \"application/pdf\" : (cbTypeIn.getValue() == \"Excel\" ? \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" : \"text/richtext\");\r\n\r\n // var url = app.config.host + \"/System/InChungTu\";\r\n\r\n // var box = webix.modalbox({\r\n // title: \"Đang in chứng từ\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .post(url, rpParameter, {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: mimetype });\r\n\r\n // if (cbTypeIn.getValue() == \"Rtf\") {\r\n // webix.html.download(file, \"invoice.rtf\");\r\n // webix.modalbox.hide(box);\r\n // return;\r\n // }\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n\r\n // // var win = $$(\"windowData\").$scope.ui(printf.$ui);\r\n // // win.config.url = fileURL;\r\n // // win.show();\r\n\r\n // newWin.location = fileURL;\r\n\r\n // }\r\n // });\r\n\r\n // }\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {},\r\n {\r\n view: \"richselect\",\r\n label: _(\"MAUIN\"),\r\n width: 250,\r\n labelWidth: 50,\r\n id: \"cbMauIn\",\r\n },\r\n {\r\n view: \"richselect\",\r\n //label: _(\"MAUIN\"),\r\n width: 80,\r\n labelWidth: 50,\r\n css: \"cbTypePrint\",\r\n id: \"cbTypeIn\",\r\n value: \"PDF\",\r\n options: [\r\n { id: \"PDF\", value: \"PDF\" },\r\n // { \"id\": \"Excel\", \"value\": \"EXCEL\" },\r\n { id: \"Rtf\", value: \"Rtf\" },\r\n ],\r\n }\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"windowData\",\r\n view: \"datatable\",\r\n select: true,\r\n datafetch: 50,\r\n resizeColumn: true,\r\n columns: col,\r\n tooltip: true,\r\n leftSplit: 0,\r\n rightSplit: 0,\r\n headermenu: {\r\n //width: 200,\r\n autoheight: false,\r\n scroll: true,\r\n autowidth: true,\r\n },\r\n multiview: { keepViews: true },\r\n keepViews: true,\r\n //css:\"webix_header_border webix_data_border\",\r\n hover: \"myhover\",\r\n // tooltip: function (obj, common) {\r\n // //obj - row object\r\n // console.log(obj);\r\n // console.log(common);\r\n // //common.column - configuration of related column\r\n // //return \"Rating: \" + obj[common.column.id] + \"
Votes: \" + obj[(common.column.id + 1)];\r\n // return \"\" + obj + \"\";\r\n // },\r\n on: {\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var windowno = app.path[1].params[0];\r\n\r\n var url = app.config.host + \"/System/GetDataDetailsByTabTable?window_id=\" + windowno + \"&id=\" + item.id;\r\n\r\n var detailTables = subView.getChildViews()[1].getChildViews();\r\n\r\n for (var i = 0; i < detailTables.length; i++) {\r\n var dt = detailTables[i];\r\n dt.clearAll();\r\n dt.load(url + \"&tab_table=\" + dt.config.tab_table);\r\n }\r\n }\r\n },\r\n onSubViewOpen: function (id) {\r\n var table = this;\r\n var subView = table.getSubView(id);\r\n\r\n if (subView != null) {\r\n var windowno = app.path[1].params[0];\r\n\r\n var url = app.config.host + \"/System/GetDataDetailsByTabTable?window_id=\" + windowno + \"&id=\" + id.row;\r\n\r\n var detailTables = subView.getChildViews()[1].getChildViews();\r\n\r\n for (var i = 0; i < detailTables.length; i++) {\r\n var dt = detailTables[i];\r\n dt.clearAll();\r\n dt.load(url + \"&tab_table=\" + dt.config.tab_table);\r\n }\r\n }\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n var windowno = app.path[1].params[0];\r\n if (windowno != \"WIN00187\" && windowno != \"WIN00189\" && windowno != \"WIN00193\" && windowno != \"WIN00192\" && windowno != \"WIN00194\") {\r\n $$(\"cmenu\").refresh();\r\n $$(\"cmenu\").sizeToContent();\r\n $$(\"cmenu\").hideItem(\"Xem hóa đơn gốc\");\r\n $$(\"cmenu\").hideItem(\"Gửi hóa đơn qua email\");\r\n $$(\"cmenu\").hideItem(\"In hóa đơn\");\r\n $$(\"cmenu\").attachTo($$(\"windowData\"));\r\n } else {\r\n $$(\"cmenu\").refresh();\r\n $$(\"cmenu\").showItem(\"Xem hóa đơn gốc\");\r\n $$(\"cmenu\").showItem(\"Gửi hóa đơn qua email\");\r\n $$(\"cmenu\").showItem(\"In hóa đơn\");\r\n $$(\"cmenu\").attachTo($$(\"windowData\"));\r\n }\r\n },\r\n },\r\n subview: {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 200,\r\n scrollX: true,\r\n tabbar: {\r\n width: 200,\r\n },\r\n cells: [],\r\n },\r\n pager: \"pagerA\",\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: function (data, common) {\r\n var size = 0;\r\n var start = data.page * data.size;\r\n var end = start + data.size;\r\n if (end > data.count) size = data.count - start;\r\n else size = data.size;\r\n var end = start + data.size;\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Số bản ghi:\" + size + \"/\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {},\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-th-list\",\r\n width: 35,\r\n on: {\r\n onClick: function () {\r\n changeMultiChoice();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n rows: [\r\n {\r\n id: \"tlbMain\",\r\n height: 39,\r\n type: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n cols: controls,\r\n borderless: true,\r\n },\r\n ],\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n function changeMultiChoice() {\r\n var table = $$(\"windowData\");\r\n var columns = webix.toArray(table.config.columns);\r\n\r\n if (table.getColumnConfig(\"colMultiChoice\") == undefined) {\r\n columns.insertAt(\r\n {\r\n id: \"colMultiChoice\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 50,\r\n checkValue: \"C\",\r\n uncheckValue: \"K\",\r\n template: \"{common.checkbox()}\",\r\n },\r\n 0\r\n );\r\n } else {\r\n columns.removeAt(0);\r\n }\r\n\r\n table.refreshColumns();\r\n }\r\n\r\n function deleteMultiChoice() {\r\n var table = $$(\"windowData\");\r\n var array = [];\r\n\r\n table.eachRow(function (row) {\r\n var record = table.getItem(row);\r\n\r\n if (record != undefined && record != null) {\r\n if (record.hasOwnProperty(\"colMultiChoice\")) {\r\n if (record.colMultiChoice == \"C\") {\r\n array.push(record.id);\r\n }\r\n }\r\n }\r\n }, true);\r\n\r\n if (array.length == 0) {\r\n webix.message({ type: \"error\", text: \"Không có bản ghi nào được chọn\" });\r\n return;\r\n }\r\n\r\n var khData = {};\r\n khData.windowid = windowconfig.data[0].code;\r\n khData.editmode = 3;\r\n khData.data = array;\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/DeleteMultiChoice\", khData, function (text) {\r\n var response = JSON.parse(text);\r\n\r\n if (response.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: response.error });\r\n return;\r\n }\r\n\r\n $$(\"btnRefresh\").callEvent(\"onClick\");\r\n });\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"windowData\");\r\n\r\n if (mode == 1) {\r\n // table.add(item);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n if (mode == 2) {\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var table = $$(\"windowData\");\r\n\r\n /* if (item.hasOwnProperty(\"p_MA_CT\")){\r\n item[\"p_MA_CT\"] = table.config.ma_ct;\r\n } */\r\n\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/window',[\"app\", \"views/forms/window\", \"views/forms/infowindow\", \"locale\", \"models/user\", \"views/forms/printf\", \"views/forms/sendemail\", \"views/forms/lichsuemail\", \"views/commonHD\"], function (\r\n app,\r\n windowform,\r\n infowindow,\r\n _,\r\n user,\r\n printf,\r\n sendemail,\r\n his_email,\r\n commonHD\r\n) {\r\n \r\n\r\n var layoutId = \"\";\r\n var col = [];\r\n var sub_col = [];\r\n var windowconfig = null;\r\n var buttons = [];\r\n //var windowno = \"\":\r\n\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n data: [],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var item = this.getItem(id);\r\n\r\n this.hide();\r\n\r\n var fn = Function(\"_\", \"user\", item.on_click);\r\n fn(_, user);\r\n },\r\n },\r\n });\r\n\r\n var initUI = function () {\r\n var windowno = app.path[1].params[0];\r\n\r\n col = [];\r\n sub_col = [];\r\n var query = {\r\n command: \"SYS002\",\r\n parameter: {\r\n windowno: windowno,\r\n },\r\n };\r\n //var query = \"SELECT * FROM #SCHEMA_NAME#.wb_menu WHERE window_code='\" + windowno + \"' LIMIT 1 OFFSET 0\";\r\n // var url = app.config.host + \"/System/Query\";\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, query, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.length > 0) {\r\n if (webix.$$(\"title\") != undefined) {\r\n webix.$$(\"title\").parse({ title: json[0][\"name\"], details: json[0][\"details\"] });\r\n }\r\n }\r\n });\r\n\r\n url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n $$(\"tlbMain\").removeView(\"btnChucNang\");\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n url,\r\n {\r\n command: \"CM00004\",\r\n parameter: {\r\n window_id: windowno,\r\n },\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.length > 0) {\r\n $$(\"cbMauIn\").define(\"options\", json);\r\n $$(\"cbMauIn\").setValue(json[0].id);\r\n $$(\"cbMauIn\").show();\r\n $$(\"cbTypeIn\").show();\r\n $$(\"btnPrint\").show();\r\n } else {\r\n $$(\"cbMauIn\").define(\"options\", []);\r\n $$(\"cbMauIn\").hide();\r\n $$(\"cbTypeIn\").hide();\r\n $$(\"btnPrint\").hide();\r\n }\r\n\r\n $$(\"cbMauIn\").refresh();\r\n }\r\n );\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n url,\r\n {\r\n command: \"CM00002\",\r\n parameter: {\r\n window_id: windowno,\r\n },\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (buttons.length > 0) {\r\n for (var i = 0; i < buttons.length; i++) {\r\n var item = buttons[i];\r\n $$(\"tlbMain\").removeView(item.id);\r\n }\r\n }\r\n\r\n buttons = [];\r\n var menus = [];\r\n\r\n var stt = 7;\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n var item = json[i];\r\n\r\n if (item.is_group_function == \"C\") {\r\n if (item.hidden != 1) {\r\n menus.push({\r\n id: item.name,\r\n value: _(item.caption),\r\n on_click: item.on_click,\r\n });\r\n }\r\n } else {\r\n if (item.hidden != 1) {\r\n var fn = new Function(item.on_click);\r\n\r\n var button = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: item.width,\r\n label: ' ' + '' + _(item.caption) + \"\",\r\n id: item.name,\r\n // label: _(item.caption),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-\" + item.icon,\r\n // width: item.width,\r\n click: fn,\r\n };\r\n\r\n buttons.push(button);\r\n $$(\"tlbMain\").addView(button, stt);\r\n\r\n stt = stt + 1;\r\n }\r\n }\r\n }\r\n\r\n if (menus.length > 0) {\r\n subChucNang.clearAll();\r\n subChucNang.parse(menus, \"json\");\r\n\r\n var index = $$(\"tlbMain\").index($$(\"cbMauIn\"));\r\n\r\n var btnChucNang = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"CHUC_NANG\") + \"\",\r\n id: \"btnChucNang\",\r\n // label: _(\"CHUC_NANG\"),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-tasks\",\r\n // width: 100,\r\n click: function () {\r\n subChucNang.show(webix.$$(\"btnChucNang\").$view);\r\n },\r\n };\r\n\r\n $$(\"tlbMain\").addView(btnChucNang, index - 1);\r\n }\r\n }\r\n );\r\n\r\n // lấy thông tin của window\r\n url = app.config.host + \"/System/GetConfigWinByNo?id=\" + windowno;\r\n\r\n webix.$$(\"windowData\").getParentView().getParentView().getParentView().disable();\r\n webix.$$(\"windowData\").getParentView().getParentView().getParentView().showProgress();\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n // console.log(app_cache);\r\n //nếu có trong cache\r\n if (app_cache[windowno] != null) {\r\n windowconfig = app_cache[windowno];\r\n initComponents(windowconfig);\r\n } //không có cache\r\n else {\r\n webix.ajax(url, function (text, xml, xhr) {\r\n var rp = JSON.parse(text);\r\n windowconfig = rp;\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n app_cache[windowno] = windowconfig;\r\n\r\n webix.storage.local.put(\"APP_CACHE\", app_cache);\r\n initComponents(windowconfig);\r\n });\r\n }\r\n };\r\n\r\n var initComponents = function (_windowconfig) {\r\n //console.log(_windowconfig);\r\n var k = Object.keys(_windowconfig[\"data\"][0][\"Tabs\"]).length;\r\n //console.log(k);\r\n var vc_window = _windowconfig[\"data\"][0];\r\n\r\n var tabs = vc_window.Tabs;\r\n\r\n var windowno = vc_window.window_id;\r\n \r\n if (vc_window.code == \"WIN00103\" || vc_window.code == \"WIN00077\") {\r\n col.push({\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 50,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n });\r\n }\r\n \r\n\r\n if (vc_window.window_type == \"MasterDetail\") {\r\n col.push({\r\n id: \"subRow\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n css: \"nampvsub\",\r\n width: 40,\r\n });\r\n }\r\n\r\n var masterTab = tabs[0];\r\n //console.log(masterTab);\r\n\r\n if (masterTab.insert_cmd == \"\" || masterTab.insert_cmd == null) {\r\n $$(\"btnPlus\").hide();\r\n $$(\"btnCopy\").hide();\r\n } else {\r\n $$(\"btnPlus\").show();\r\n $$(\"btnCopy\").show();\r\n }\r\n\r\n if (masterTab.update_cmd == \"\" || masterTab.update_cmd == null) {\r\n $$(\"btnEdit\").hide();\r\n } else {\r\n $$(\"btnEdit\").show();\r\n }\r\n\r\n if (masterTab.delete_cmd == \"\" || masterTab.delete_cmd == null) {\r\n $$(\"btnDelete\").hide();\r\n } else {\r\n $$(\"btnDelete\").show();\r\n }\r\n\r\n for (var j = 0; j < masterTab.Fields.length; j++) {\r\n var field = masterTab.Fields[j];\r\n\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n\r\n var item = {\r\n id: field.column_name,\r\n header: _(field.column_name),\r\n columnType: field.column_type,\r\n columnAlias: field.column_alias,\r\n template: field.template,\r\n columnFormat: field.format,\r\n };\r\n\r\n if (field.caption != null) {\r\n item.header = _(field.caption);\r\n }\r\n\r\n if (field.column_type == \"numeric\") {\r\n item.css = { \"text-align\": \"right\" };\r\n item.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: field.data_decimal,\r\n });\r\n }\r\n\r\n if (field.type_filter != null) {\r\n if (field.type_filter != \"\") {\r\n item.header = [_(item.header), { content: field.type_filter }];\r\n }\r\n }\r\n\r\n if (field.type_editor == \"combo\") {\r\n item.editor = field.type_editor;\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n\r\n if (field.type_editor == \"gridcombo\") {\r\n item.editor = field.type_editor;\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n item.format = function (text) {\r\n var format = webix.Date.dateToStr(this.columnFormat);\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (field.column_type == \"time\") {\r\n item.format = function (text) {\r\n var format = webix.Date.dateToStr(\"%H:%i\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n }\r\n\r\n if (field.type_editor == \"checkbox\") {\r\n if (field.column_type == \"boolean\") {\r\n item.checkValue = true;\r\n item.uncheckValue = false;\r\n }\r\n\r\n item.template = function (obj, common, value) {\r\n if (value == true || value == 1) return \"
\";\r\n else return \"
\";\r\n };\r\n }\r\n\r\n if (field.column_width == null) {\r\n item.fillspace = true;\r\n } else {\r\n item.width = field.column_width;\r\n }\r\n\r\n col.push(item);\r\n }\r\n\r\n var table = $$(\"windowData\");\r\n table.clearAll();\r\n\r\n if (vc_window.window_type == \"MasterDetail\") {\r\n var cells = [];\r\n\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Master\") {\r\n continue;\r\n }\r\n\r\n var subCols = [];\r\n\r\n for (var j = 0; j < tab.Fields.length; j++) {\r\n var field = tab.Fields[j];\r\n\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n\r\n var subCol = {\r\n id: field.column_name,\r\n header: field.caption == null ? _(field.column_name) : _(field.caption),\r\n hidden: field.hide_in_grid,\r\n };\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n subCol.format = function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (field.column_type == \"numeric\") {\r\n subCol.css = { \"text-align\": \"right\" };\r\n subCol.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: field.data_decimal,\r\n });\r\n }\r\n\r\n if (field.column_width == null) {\r\n subCol.fillspace = true;\r\n } else {\r\n subCol.width = field.column_width;\r\n }\r\n\r\n subCols.push(subCol);\r\n }\r\n\r\n if (tab.tab_type == \"Detail\") {\r\n var item = {\r\n header: tab.name,\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n tab_table: tab.table_name,\r\n columns: subCols,\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n };\r\n cells.push(item);\r\n }\r\n }\r\n\r\n var subview = {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 200,\r\n scrollX: true,\r\n cells: cells,\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n };\r\n\r\n table.define(\"subview\", subview);\r\n }\r\n\r\n table.define(\"windowno\", windowno);\r\n table.define(\"leftSplit\", vc_window.fix_left == null ? 0 : vc_window.fix_left);\r\n table.define(\"rightSplit\", vc_window.fix_right == null ? 0 : vc_window.fix_right);\r\n\r\n table.config.infoparam = null;\r\n table.config.columns = col;\r\n table.config.ma_ct = vc_window.ma_ct;\r\n\r\n table.refreshColumns();\r\n\r\n var parentToolBar = $$(\"tlbMain\").getParentView();\r\n\r\n parentToolBar.removeView(\"tlbParams\");\r\n $$(\"head-title\").show();\r\n $$(\"head-title\").removeView(\"tlbParams\");\r\n // toolBar windown parram\r\n if (vc_window.WinParams != undefined && vc_window.WinParams != null) {\r\n var toolBarParams = {\r\n id: \"tlbParams\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [],\r\n };\r\n\r\n for (var i = 0; i < vc_window.WinParams.length; i++) {\r\n var item = vc_window.WinParams[i];\r\n\r\n var comp = {\r\n id: webix.uid(),\r\n view: item.type_editor,\r\n width: item.width,\r\n label: _(item.caption),\r\n value_field: item.value_field,\r\n isDefault: item.has_default,\r\n on: {},\r\n };\r\n\r\n if (comp.view == \"combo\") {\r\n comp.options = {\r\n body: {\r\n comboId: comp.id,\r\n isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + item.wb_references_id,\r\n ready: function () {\r\n if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n if (count > 0) {\r\n var combo = webix.$$(this.config.comboId);\r\n combo.setValue(this.getFirstId());\r\n }\r\n }\r\n },\r\n },\r\n };\r\n\r\n comp.on.onChange = function (newv, oldv) {\r\n var table = $$(\"windowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n };\r\n }\r\n\r\n if (comp.view == \"treesuggest\") {\r\n var listColumns = JSON.parse(item.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n comp.view = \"combo\";\r\n\r\n comp.options = {\r\n view: \"treesuggest\",\r\n textValue: item.display_field,\r\n isDefault: item.has_default,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataByReferencesId?id=\" + view.config.refid;\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n body: {\r\n isDefault: item.has_default,\r\n comboId: comp.id,\r\n columns: listColumns,\r\n refid: item.wb_references_id,\r\n filterMode: {\r\n level: false,\r\n showSubItems: false,\r\n },\r\n ready: function () {\r\n if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n\r\n if (count > 0) {\r\n var combo = webix.$$(this.config.comboId);\r\n combo.setValue(this.getFirstId());\r\n }\r\n }\r\n },\r\n },\r\n };\r\n\r\n comp.on.onChange = function (newv, oldv) {\r\n var table = $$(\"windowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n };\r\n }\r\n\r\n toolBarParams.cols.push(comp);\r\n }\r\n $$(\"head-title\").addView(toolBarParams, 1);\r\n // parentToolBar.addView(toolBarParams);\r\n }\r\n\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/System/GetDataByWindowNo\";\r\n var start = null;\r\n var count = null;\r\n var filter = [];\r\n var infoparam = null;\r\n var tlbparam_s = [];\r\n\r\n if (params == null) {\r\n url = url + \"&start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n start = 0;\r\n count = view.config.datafetch;\r\n } else {\r\n url = url + \"&start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n start = params.start;\r\n count = params.count;\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n if (column !== undefined) {\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n columnAlias: column.columnAlias,\r\n value: params.filter[property],\r\n };\r\n array.push(item);\r\n }\r\n }\r\n\r\n if (array.length > 0) {\r\n filter = array;\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n } else {\r\n url = url + \"&filter=null\";\r\n }\r\n } else {\r\n url = url + \"&filter=null\";\r\n }\r\n }\r\n\r\n if (view.config.infoparam != null) {\r\n infoparam = view.config.infoparam;\r\n url = url + \"&infoparam=\" + JSON.stringify(view.config.infoparam);\r\n } else {\r\n url = url + \"&infoparam=null\";\r\n }\r\n var tlbParams = $$(\"tlbParams\");\r\n\r\n var checkValue = true;\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n if ($$(id).getValue() == \"\") {\r\n checkValue = false;\r\n break;\r\n }\r\n\r\n var item = {\r\n columnName: value_field,\r\n value: $$(id).getValue(),\r\n };\r\n\r\n parameters.push(item);\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n //if (checkValue == false) {\r\n // $('.webix_overlay').hide();\r\n // webix.message(\"Không tồn tại ký hiệu!\", \"error\");\r\n // return false;\r\n //}\r\n var item = {\r\n window_id: windowno,\r\n start: start,\r\n count: count,\r\n filter: filter,\r\n infoparam: infoparam,\r\n tlbparam: tlbparam_s,\r\n };\r\n var url1 = null;\r\n if (checkValue == true) {\r\n url1 = app.config.host + \"/System/GetDataByWindowNo\";\r\n }\r\n webix.ajax().headers({ \"Content-type\": \"application/json\" }).bind(view).post(url1, item, callback, view);\r\n //}\r\n //else {\r\n // $('.webix_overlay').hide()\r\n //}\r\n // webix.ajax().headers({ 'Content-type': 'application/json' })\r\n // .bind(view)\r\n // .post(url, item, function (text) {\r\n // var json = JSON.parse(text);\r\n\r\n // this.clearAll();\r\n\r\n // if (!json.hasOwnProperty(\"error\")) {\r\n // this.bind(json);\r\n // // this.refresh();\r\n // // table.parse(json.data, \"json\");\r\n // }\r\n // });\r\n\r\n // webix.ajax(url, callback, view);\r\n },\r\n };\r\n\r\n table.define(\"url\", url);\r\n\r\n if (vc_window.wb_infowindow_id != null) {\r\n if (vc_window.wb_infowindow_id != \"\") {\r\n $$(\"btnSearch\").show();\r\n table.config.infowindow_id = vc_window.wb_infowindow_id;\r\n } else {\r\n $$(\"btnSearch\").hide();\r\n table.config.infowindow_id = null;\r\n }\r\n } else {\r\n $$(\"btnSearch\").hide();\r\n table.config.infowindow_id = null;\r\n }\r\n\r\n webix.$$(\"windowData\").getParentView().getParentView().getParentView().enable();\r\n webix.$$(\"windowData\").getParentView().getParentView().getParentView().hideProgress();\r\n };\r\n\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n \"Thêm\",\r\n { $template: \"Separator\" },\r\n \"Sửa\",\r\n { $template: \"Separator\" },\r\n \"Xóa\",\r\n { $template: \"Separator\" },\r\n \"Xem hóa đơn gốc\",\r\n { $template: \"Separator\" },\r\n \"Gửi hóa đơn qua email\",\r\n { $template: \"Separator\" },\r\n \"In hóa đơn\",\r\n { $template: \"Separator\" },\r\n \"Lịch sử gửi Email\",\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xem hóa đơn gốc\") {\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n //console.log(item);\r\n if (item.original_invoice_id != null && item.original_invoice_id != undefined) {\r\n var box = webix.modalbox({\r\n title: \"Đang in chứng từ\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n //var newWin = window.open();\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.original_invoice_id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n\r\n webix.modalbox.hide(box);\r\n //newWin.location = fileURL;\r\n window.open(fileURL, \"_blank\");\r\n },\r\n });\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, '_blank');\r\n // // webix.html.download(file, $$('tenfile').getValue());\r\n // });\r\n } else {\r\n webix.message(\"Không tồn tại hóa đơn gốc !\", \"error\");\r\n return;\r\n }\r\n }\r\n if (this.getItem(id).value == \"Lịch sử gửi Email\") {\r\n var table = webix.$$(\"windowData\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n var detailForm = webix.$$(\"windowData\").$scope.ui(his_email.$ui);\r\n his_email.initUI(selectedItem.inv_invoiceauth_id);\r\n detailForm.show();\r\n }\r\n if (this.getItem(id).value == \"Gửi hóa đơn qua email\") {\r\n var table = webix.$$(\"windowData\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n\r\n if (selectedItem.status == \"Chờ ký\" || selectedItem.status == \"Chờ duyệt\") {\r\n webix.message(\"Hóa đơn chưa được ký\", \"error\");\r\n return;\r\n }\r\n\r\n var url = \"/Invoice/GetEmailTemplate?type=Gửi hóa đơn&id=\" + selectedItem.inv_invoiceauth_id;\r\n\r\n webix.ajax(app.config.host + url, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n var win = webix.$$(\"windowData\").$scope.ui(sendemail.$ui);\r\n\r\n var item = {\r\n nguoi_gui: json.sender,\r\n tieude: json.subject,\r\n noidung: json.body,\r\n mat_khau: json.pass,\r\n inv_invoiceauth_id: selectedItem.inv_invoiceauth_id,\r\n type: \"Gửi hóa đơn\",\r\n nguoinhan: selectedItem.buyer_email,\r\n his_email: json.his_email,\r\n };\r\n //console.log(sendemail);\r\n\r\n sendemail.setValues(item);\r\n win.show();\r\n });\r\n }\r\n if (this.getItem(id).value == \"In hóa đơn\") {\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dữ liệu cần in\", \"error\");\r\n return;\r\n }\r\n\r\n var cbMauIn = $$(\"cbMauIn\");\r\n var cbTypeIn = $$(\"cbTypeIn\");\r\n\r\n var rpParameter = {\r\n parameter: item,\r\n wb_mauin_id: cbMauIn.getValue(),\r\n type: cbTypeIn.getValue(),\r\n };\r\n\r\n var mimetype = cbTypeIn.getValue() == \"PDF\" ? \"application/pdf\" : \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\r\n\r\n var url = app.config.host + \"/System/InChungTu\";\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in chứng từ\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, rpParameter, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: mimetype });\r\n var fileURL = URL.createObjectURL(file);\r\n\r\n webix.modalbox.hide(box);\r\n\r\n // var win = $$(\"windowData\").$scope.ui(printf.$ui);\r\n // win.config.url = fileURL;\r\n // win.show();\r\n\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-refresh\",\r\n // label: _(\"REFRESH\"),\r\n // width: 95,\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"windowData\");\r\n table.clearAll();\r\n\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-plus\",\r\n // label: \"Thêm (F4)\",\r\n // css: \"webix_secondary\",\r\n // width: 90,\r\n shortcut: \"F4\",\r\n css: \"btnThem\",\r\n on: {\r\n onClick: function () {\r\n var vc_window = windowconfig[\"data\"][0];\r\n windowform.$ui.id = vc_window.code;\r\n\r\n var detailForm = this.$scope.ui(windowform.$ui);\r\n\r\n windowform.setEditMode(0);\r\n windowform.initUI(windowconfig);\r\n\r\n var params = null;\r\n\r\n var tlbParams = $$(\"tlbParams\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var item = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n item[value_field] = $$(id).getValue();\r\n }\r\n\r\n params = item;\r\n }\r\n\r\n windowform.setValues(null, windowconfig, params);\r\n windowform.setEditMode(1);\r\n\r\n detailForm.show();\r\n windowform.focusFirstElement();\r\n\r\n if (vc_window.after_new != null) {\r\n var fn = Function(\"app\", vc_window.after_new);\r\n fn(app);\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-edit\",\r\n // label: \"Sửa (F3)\",\r\n // width: 90,\r\n shortcut: \"F3\",\r\n // css: \"webix_secondary\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var vc_window = windowconfig[\"data\"][0];\r\n // console.log(vc_window);\r\n windowform.$ui.id = vc_window.code;\r\n var detailForm = this.$scope.ui(windowform.$ui);\r\n\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa !\", \"error\");\r\n return;\r\n }\r\n // không cho sửa hóa đơn điều chỉnh, thay thế đang fix cứng\r\n\r\n if (vc_window.code == \"WIN00187\" || vc_window.code == \"WIN00189\" || vc_window.code == \"WIN00192\" || vc_window.code == \"WIN00193\") {\r\n if (item.trang_thai_hd == 7 || item.trang_thai_hd == 13 || item.trang_thai_hd == 15 || item.trang_thai_hd == 17) {\r\n webix.message(\"Không thể sửa hóa đơn xóa bỏ. Bạn cần phải sử dụng chức năng tương ứng\", \"error\");\r\n return;\r\n }\r\n if (item.trang_thai == \"Đã ký\") {\r\n webix.message(\"Hóa đơn đã ký, bạn không thể sửa !\", \"error\");\r\n return;\r\n }\r\n }\r\n\r\n if (item == null) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa chọn dòng cần sửa\" });\r\n return;\r\n }\r\n\r\n windowform.setEditMode(0);\r\n windowform.initUI(windowconfig);\r\n\r\n if (item.dadung == true) {\r\n item.dadung = 1;\r\n }\r\n windowform.setValues(item, windowconfig);\r\n\r\n windowform.setEditMode(2);\r\n\r\n detailForm.show();\r\n windowform.focusFirstElement();\r\n\r\n if (vc_window.after_edit != null) {\r\n var fn = Function(\"app\", \"_\", vc_window.after_edit);\r\n fn(app, _);\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"fas fa-trash\",\r\n // label: \"Xóa (F8)\",\r\n // width: 80,\r\n shortcut: \"F8\",\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"windowData\");\r\n\r\n if (table.getColumnConfig(\"colMultiChoice\") == undefined) {\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần xóa !\", \"error\");\r\n return;\r\n }\r\n\r\n var khData = {};\r\n khData.windowid = windowconfig.data[0].code;\r\n khData.editmode = 3;\r\n khData.data = [];\r\n khData.data.push(item);\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/Save\", khData, function (text) {\r\n var response = JSON.parse(text);\r\n\r\n if (response.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: response.error });\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n var btnRefresh = $$(\"btnRefresh\");\r\n console.log(btnRefresh);\r\n btnRefresh.callEvent(\"onClick\");\r\n });\r\n }\r\n },\r\n });\r\n } else {\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n deleteMultiChoice();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"COPY\") + \"\",\r\n id: \"btnCopy\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-files-o\",\r\n // label: _(\"COPY\"),\r\n // width: 85,\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\");\r\n return;\r\n }\r\n\r\n var vc_window = windowconfig[\"data\"][0];\r\n windowform.$ui.id = vc_window.code;\r\n\r\n var detailForm = this.$scope.ui(windowform.$ui);\r\n\r\n const cloneItem = JSON.parse(JSON.stringify(item));\r\n\r\n windowform.setEditMode(0);\r\n windowform.initUI(windowconfig);\r\n // windowform.setEditMode(4);\r\n windowform.copyValues(cloneItem, windowconfig);\r\n windowform.setEditMode(1);\r\n detailForm.show();\r\n windowform.focusFirstElement();\r\n\r\n if (vc_window.after_new != null) {\r\n var fn = Function(\"app\", vc_window.after_new);\r\n fn(app);\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 110,\r\n label: ' ' + '' + _(\"SEARCH\") + \" (F2)\" + \"\",\r\n id: \"btnSearch\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-search\",\r\n // label: _(\"SEARCH\") + \" (F2)\",\r\n // width: 110,\r\n // css: \"webix_secondary\",\r\n shortcut: \"F2\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"windowData\");\r\n\r\n infowindow.$ui.id = table.config.infowindow_id;\r\n infowindow.$ui.load_event = \"filterTable\";\r\n\r\n var wininfoparam = this.$scope.ui(infowindow.$ui);\r\n\r\n if (table.config.infoparam != undefined) {\r\n wininfoparam.config.editmode = 1;\r\n wininfoparam.config.formvalues = table.config.infoparam.parameter;\r\n } else {\r\n wininfoparam.config.editmode = 0;\r\n wininfoparam.config.formvalues = null;\r\n }\r\n\r\n infowindow.initUI(table.config.infowindow_id);\r\n wininfoparam.show();\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \" (F7)\" + \"\",\r\n id: \"btnPrint\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"fas fa-print\",\r\n // label: _(\"PRINT\") + \" (F7)\",\r\n // width: 70,\r\n shortcut: \"F7\",\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dữ liệu cần in\", \"error\");\r\n return;\r\n }\r\n\r\n var cbMauIn = $$(\"cbMauIn\");\r\n var cbTypeIn = $$(\"cbTypeIn\");\r\n\r\n var rpParameter = {\r\n parameter: item,\r\n wb_mauin_id: cbMauIn.getValue(),\r\n type: cbTypeIn.getValue(),\r\n };\r\n\r\n var mimetype = cbTypeIn.getValue() == \"PDF\" ? \"application/pdf\" : \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\r\n\r\n if (cbTypeIn.getValue() == \"Rtf\") {\r\n mimetype = \"application/octet-stream\";\r\n }\r\n\r\n var url = app.config.host + \"/System/InChungTu\";\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in chứng từ\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window;\r\n\r\n if (cbTypeIn.getValue() == \"PDF\") {\r\n newWin = window.open();\r\n }\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, rpParameter, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: mimetype });\r\n webix.modalbox.hide(box);\r\n\r\n var cbTypeIn = $$(\"cbTypeIn\");\r\n\r\n if (cbTypeIn.getValue() == \"Excel\" || cbTypeIn.getValue() == \"Rtf\") {\r\n var suffix = cbTypeIn.getValue() == \"Excel\" ? \".xlsx\" : \".rtf\";\r\n\r\n var id = $$(\"cbMauIn\").getValue();\r\n var mauin = $$(\"cbMauIn\").getList().getItem(id);\r\n var export_name = mauin.export_name;\r\n\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n\r\n for (var key in item) {\r\n export_name = export_name.replace(new RegExp(\"#\" + key + \"#\", \"g\"), item[key]);\r\n }\r\n\r\n export_name = export_name.replace(new RegExp(\"/\", \"g\"), \"\");\r\n\r\n webix.html.download(file, export_name + suffix);\r\n return;\r\n }\r\n\r\n var fileURL = URL.createObjectURL(file);\r\n\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n\r\n // onClick: function () {\r\n // var table = webix.$$(\"windowData\");\r\n // var item = table.getSelectedItem();\r\n\r\n // if (item == null) {\r\n // webix.message(\"Bạn chưa chọn dữ liệu cần in\", \"error\");\r\n // return;\r\n // }\r\n\r\n // var cbMauIn = $$(\"cbMauIn\");\r\n // var cbTypeIn = $$(\"cbTypeIn\");\r\n\r\n // var rpParameter = {\r\n // parameter: item,\r\n // wb_mauin_id: cbMauIn.getValue(),\r\n // type: cbTypeIn.getValue()\r\n // };\r\n\r\n // var mimetype = cbTypeIn.getValue() == \"PDF\" ? \"application/pdf\" : (cbTypeIn.getValue() == \"Excel\" ? \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" : \"text/richtext\");\r\n\r\n // var url = app.config.host + \"/System/InChungTu\";\r\n\r\n // var box = webix.modalbox({\r\n // title: \"Đang in chứng từ\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .post(url, rpParameter, {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: mimetype });\r\n\r\n // if (cbTypeIn.getValue() == \"Rtf\") {\r\n // webix.html.download(file, \"invoice.rtf\");\r\n // webix.modalbox.hide(box);\r\n // return;\r\n // }\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n\r\n // // var win = $$(\"windowData\").$scope.ui(printf.$ui);\r\n // // win.config.url = fileURL;\r\n // // win.show();\r\n\r\n // newWin.location = fileURL;\r\n\r\n // }\r\n // });\r\n\r\n // }\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {},\r\n {\r\n view: \"richselect\",\r\n label: _(\"MAUIN\"),\r\n width: 250,\r\n labelWidth: 50,\r\n id: \"cbMauIn\",\r\n },\r\n {\r\n view: \"richselect\",\r\n //label: _(\"MAUIN\"),\r\n width: 80,\r\n labelWidth: 50,\r\n css: \"cbTypePrint\",\r\n id: \"cbTypeIn\",\r\n value: \"PDF\",\r\n options: [\r\n { id: \"PDF\", value: \"PDF\" },\r\n // { \"id\": \"Excel\", \"value\": \"EXCEL\" },\r\n { id: \"Rtf\", value: \"Rtf\" },\r\n ],\r\n },\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"windowData\",\r\n view: \"datatable\",\r\n select: true,\r\n datafetch: 50,\r\n resizeColumn: true,\r\n columns: col,\r\n tooltip: true,\r\n leftSplit: 0,\r\n rightSplit: 0,\r\n headermenu: {\r\n //width: 200,\r\n autoheight: false,\r\n scroll: true,\r\n autowidth: true,\r\n },\r\n multiview: { keepViews: true },\r\n keepViews: true,\r\n //css:\"webix_header_border webix_data_border\",\r\n hover: \"myhover\",\r\n // tooltip: function (obj, common) {\r\n // //obj - row object\r\n // console.log(obj);\r\n // console.log(common);\r\n // //common.column - configuration of related column\r\n // //return \"Rating: \" + obj[common.column.id] + \"
Votes: \" + obj[(common.column.id + 1)];\r\n // return \"\" + obj + \"\";\r\n // },\r\n on: {\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var windowno = app.path[1].params[0];\r\n\r\n var url = app.config.host + \"/System/GetDataDetailsByTabTable?window_id=\" + windowno + \"&id=\" + item.id;\r\n\r\n var detailTables = subView.getChildViews()[1].getChildViews();\r\n\r\n for (var i = 0; i < detailTables.length; i++) {\r\n var dt = detailTables[i];\r\n dt.clearAll();\r\n dt.load(url + \"&tab_table=\" + dt.config.tab_table);\r\n }\r\n }\r\n },\r\n onSubViewOpen: function (id) {\r\n var table = this;\r\n var subView = table.getSubView(id);\r\n\r\n if (subView != null) {\r\n var windowno = app.path[1].params[0];\r\n\r\n var url = app.config.host + \"/System/GetDataDetailsByTabTable?window_id=\" + windowno + \"&id=\" + id.row;\r\n\r\n var detailTables = subView.getChildViews()[1].getChildViews();\r\n\r\n for (var i = 0; i < detailTables.length; i++) {\r\n var dt = detailTables[i];\r\n dt.clearAll();\r\n dt.load(url + \"&tab_table=\" + dt.config.tab_table);\r\n }\r\n }\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n var windowno = app.path[1].params[0];\r\n if (windowno != \"WIN00187\" && windowno != \"WIN00189\" && windowno != \"WIN00193\" && windowno != \"WIN00192\" && windowno != \"WIN00194\") {\r\n $$(\"cmenu\").refresh();\r\n $$(\"cmenu\").sizeToContent();\r\n $$(\"cmenu\").hideItem(\"Xem hóa đơn gốc\");\r\n $$(\"cmenu\").hideItem(\"Gửi hóa đơn qua email\");\r\n $$(\"cmenu\").hideItem(\"In hóa đơn\");\r\n $$(\"cmenu\").attachTo($$(\"windowData\"));\r\n } else {\r\n $$(\"cmenu\").refresh();\r\n $$(\"cmenu\").showItem(\"Xem hóa đơn gốc\");\r\n $$(\"cmenu\").showItem(\"Gửi hóa đơn qua email\");\r\n $$(\"cmenu\").showItem(\"In hóa đơn\");\r\n $$(\"cmenu\").attachTo($$(\"windowData\"));\r\n }\r\n },\r\n },\r\n subview: {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 200,\r\n scrollX: true,\r\n tabbar: {\r\n width: 200,\r\n },\r\n cells: [],\r\n },\r\n pager: \"pagerA\",\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: function (data, common) {\r\n var size = 0;\r\n var start = data.page * data.size;\r\n var end = start + data.size;\r\n if (end > data.count) size = data.count - start;\r\n else size = data.size;\r\n var end = start + data.size;\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Số bản ghi:\" + size + \"/\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {},\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-th-list\",\r\n width: 35,\r\n on: {\r\n onClick: function () {\r\n changeMultiChoice();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n rows: [\r\n {\r\n id: \"tlbMain\",\r\n height: 39,\r\n type: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n cols: controls,\r\n borderless: true,\r\n },\r\n ],\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n function changeMultiChoice() {\r\n var table = $$(\"windowData\");\r\n var columns = webix.toArray(table.config.columns);\r\n\r\n if (table.getColumnConfig(\"colMultiChoice\") == undefined) {\r\n columns.insertAt(\r\n {\r\n id: \"colMultiChoice\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 50,\r\n checkValue: \"C\",\r\n uncheckValue: \"K\",\r\n template: \"{common.checkbox()}\",\r\n },\r\n 0\r\n );\r\n } else {\r\n columns.removeAt(0);\r\n }\r\n\r\n table.refreshColumns();\r\n }\r\n\r\n function deleteMultiChoice() {\r\n var table = $$(\"windowData\");\r\n var array = [];\r\n\r\n table.eachRow(function (row) {\r\n var record = table.getItem(row);\r\n\r\n if (record != undefined && record != null) {\r\n if (record.hasOwnProperty(\"colMultiChoice\")) {\r\n if (record.colMultiChoice == \"C\") {\r\n array.push(record.id);\r\n }\r\n }\r\n }\r\n }, true);\r\n\r\n if (array.length == 0) {\r\n webix.message({ type: \"error\", text: \"Không có bản ghi nào được chọn\" });\r\n return;\r\n }\r\n\r\n var khData = {};\r\n khData.windowid = windowconfig.data[0].code;\r\n khData.editmode = 3;\r\n khData.data = array;\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/DeleteMultiChoice\", khData, function (text) {\r\n var response = JSON.parse(text);\r\n\r\n if (response.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: response.error });\r\n return;\r\n }\r\n\r\n $$(\"btnRefresh\").callEvent(\"onClick\");\r\n });\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"windowData\");\r\n\r\n if (mode == 1) {\r\n // table.add(item);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n if (mode == 2) {\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var table = $$(\"windowData\");\r\n\r\n /* if (item.hasOwnProperty(\"p_MA_CT\")){\r\n item[\"p_MA_CT\"] = table.config.ma_ct;\r\n } */\r\n\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/windowhoadon78bienlai',[\r\n \"app\",\r\n \"locale\",\r\n \"models/user\",\r\n \"views/forms/formhoadon78bienlai\",\r\n \"views/forms/68_huyhoadon\",\r\n \"views/forms/68_huyhoadon_1\",\r\n \"views/forms/68_hoadon_history\",\r\n \"views/forms/lichsuemail_bienlai\",\r\n \"views/commonHD\",\r\n \"views/Util\",\r\n], function (app, _, user, invoiceForms, huyhoadon, huyhoadon_1, hoadonHistory, his_email, commonHD, Util) {\r\n \r\n var fm = function (number) {\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 0,\r\n });\r\n return k(number);\r\n };\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var item = this.getItem(id);\r\n\r\n this.hide();\r\n\r\n var fn = Function(\"_\", \"user\", item.on_click);\r\n fn(_, user);\r\n },\r\n },\r\n });\r\n\r\n var subBangKe = webix.ui({\r\n view: \"submenu\",\r\n width: 150,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"addBangKeHoaDon\",\r\n value: \"Thêm bảng kê\",\r\n },\r\n {\r\n id: \"EditBangKeHoaDon\",\r\n value: \"Sửa bảng kê\",\r\n },\r\n {\r\n id: \"InBangKeHoaDon\",\r\n value: \"In bảng kê\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (record.id == \"addBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\") {\r\n webix.message(\"Vui lòng chọn biên lai chờ ký !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke != null) {\r\n webix.message(\"Biên lai đã có bảng kê không thể thêm !\", \"error\");\r\n return;\r\n }\r\n\r\n var detailForm = table.$scope.ui(invoiceForms.$ui);\r\n item.shdon = null;\r\n\r\n item.nlap = new Date(item.nlap);\r\n\r\n // ẩn tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = true;\r\n }\r\n\r\n invoiceForms.setEditMode(4); // editmode = 4(add bang ke chi tiet) // edit mode =5 (sửa bảng kê chi tiết)\r\n invoiceForms.initUI(windowconfig);\r\n //$$(\"phi_tab\").hide();\r\n $$(\"head-formInvoice\").define(\"template\", \"Bảng kê chi tiết hoá đơn\");\r\n $$(\"head-formInvoice\").refresh();\r\n\r\n webix.$$(\"infohdon\").disable();\r\n webix.$$(\"infokhang\").disable();\r\n\r\n webix.$$(\"shdon\").config.label = \"Số bảng kê\";\r\n //webix.$$(\"infohdon\").disable();\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: biên lai điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n invoiceForms.setValuesBangKe(item, null);\r\n detailForm.show();\r\n webix.$$(\"btnBangKeSave\").show();\r\n webix.$$(\"btnHoadonSave\").destructor();\r\n webix.$$(\"btnHoadonCQT\").destructor();\r\n }\r\n\r\n if (record.id == \"EditBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\") {\r\n webix.message(\"Vui lòng chọn biên lai chờ ký !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke == null) {\r\n webix.message(\"Biên lai chưa có bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n // ẩn tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = true;\r\n }\r\n\r\n //set số bảng kê cho form sửa bảng kê\r\n item.shdon = item.checksobangke;\r\n\r\n item.nlap = new Date(item.nlap);\r\n var detailForm = table.$scope.ui(invoiceForms.$ui);\r\n invoiceForms.setEditMode(5); // editmode = 4(add bang ke chi tiet) // edit mode =5 (sửa bảng kê chi tiết)\r\n invoiceForms.initUI(windowconfig);\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: biên lai điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n $$(\"head-formInvoice\").define(\"template\", \"Bảng kê chi tiết hoá đơn\");\r\n $$(\"head-formInvoice\").refresh();\r\n //set lại title số bảng kê\r\n webix.$$(\"shdon\").config.label = \"Số bảng kê\";\r\n\r\n webix.$$(\"infohdon\").disable();\r\n webix.$$(\"infokhang\").disable();\r\n\r\n invoiceForms.setValuesBangKe(item, null);\r\n detailForm.show();\r\n webix.$$(\"btnBangKeSave\").show();\r\n webix.$$(\"btnBangKeDelete\").show();\r\n webix.$$(\"btnHoadonSave\").destructor();\r\n webix.$$(\"btnHoadonCQT\").destructor();\r\n }\r\n\r\n if (record.id == \"InBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke == null) {\r\n webix.message(\"Biên lai chưa có bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Biên lai thuế thu nhập cá nhân MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false&checkBangKe=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n },\r\n },\r\n });\r\n\r\n //webix.$$(\"title\").parse({ title: \"Lập hóa đơn -> Hóa đơn giá trị gia tăng\", details: \"Lập hóa đơn -> Hóa đơn giá trị gia tăng\" });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Thêm (F4)\") + \"\",\r\n id: \"btnPlus\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var vc_window = windowconfig[\"data\"][0];\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n var cctbao_id = $$(\"kyhieu_id\").getValue();\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n detailForm.show();\r\n if (vc_window.after_new != null) {\r\n var fn = Function(\"app\", vc_window.after_new);\r\n fn(app);\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Sửa (F3)\") + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n //var detailForm = this.$scope.ui(webix.$$(\"main\"));\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\" && item.tthai != \"Chờ duyệt\" && item.tthai != \"Chờ sinh số\") {\r\n webix.message(\"Biên lai đã ký, không thể sửa !\", \"error\");\r\n return;\r\n }\r\n // main.setEditMode(0);\r\n // main.initUI(windowconfig);\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n item.nlap = new Date(item.nlap);\r\n\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.setEditMode(2);\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: biên lai điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n invoiceForms.setValues(item, null);\r\n\r\n detailForm.show();\r\n //main.focusFirstElement();\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Xóa (F8)\") + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var lstDataChoose = commonHD.GetBienLaiChon();\r\n var lstDataChooseSort = lstDataChoose.sort(function (a, b) {\r\n return Number(a.shdon) - Number(b.shdon);\r\n });\r\n if (lstDataChooseSort.length === 0) return;\r\n var strHoaDonSelect = \" \";\r\n for (var i = 0; i < lstDataChooseSort.length; i++) {\r\n if (\r\n commonHD.CheckKhacNull(lstDataChooseSort[i].tthai) &&\r\n lstDataChooseSort[i].tthai != \"Chờ ký\" &&\r\n lstDataChooseSort[i].tthai != \"Chờ sinh số\" &&\r\n lstDataChooseSort[i].tthai != \"Chờ duyệt\"\r\n ) {\r\n webix.message(\"Không thể xóa biên lai đã ký !\", \"error\");\r\n return;\r\n }\r\n if (i < lstDataChooseSort.length - 1) {\r\n if (\r\n commonHD.CheckKhacNull(lstDataChooseSort[i].shdon) &&\r\n commonHD.CheckKhacNull(lstDataChooseSort[i + 1].shdon) &&\r\n Number(lstDataChooseSort[i + 1].shdon) - Number(lstDataChooseSort[i].shdon) >= 2\r\n ) {\r\n webix.message(\"Các biên lai xóa phải có số biên lai liên tiếp nhau\", \"error\");\r\n return;\r\n } else {\r\n strHoaDonSelect += lstDataChooseSort[i].shdon + \",\";\r\n }\r\n } else {\r\n strHoaDonSelect += lstDataChooseSort[i].shdon;\r\n }\r\n }\r\n var url = app.config.host + \"/Invoice68/hoadonXoaNhieu\";\r\n var data_post = { data: lstDataChooseSort };\r\n webix.confirm({\r\n title: \"XÓA biên lai\",\r\n text: \"Bạn có muốn xóa biên lai số: \" + strHoaDonSelect + \"\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n table.enable();\r\n table.hideProgress();\r\n return;\r\n } else {\r\n table.enable();\r\n table.clearAll();\r\n table.load(table.config.url);\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"COPY\") + \"\",\r\n id: \"btnCopy\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-files-o\",\r\n // label: _(\"COPY\"),\r\n // width: 85,\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var vc_window = windowconfig[\"data\"][0];\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n // var vc_window = windowconfig[\"data\"][0];\r\n // windowform.$ui.id = vc_window.code;\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n item.shdon = null;\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.copyValues(item);\r\n detailForm.show();\r\n if (vc_window.after_new != null) {\r\n var fn = Function(vc_window.after_new);\r\n fn();\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n /*{\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Bảng kê\") + \"\",\r\n id: \"btnBangKeOption\",\r\n click: function () {\r\n subBangKe.show(webix.$$(\"btnBangKeOption\").$view);\r\n },\r\n },*/\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"biên lai thuế thu nhập cá nhân MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"In chuyển đổi\") + \"\",\r\n id: \"btnPrintCD\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"biên lai thuế thu nhập cá nhân MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {},\r\n {},\r\n {},\r\n {},\r\n ];\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu78\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\"Hủy\", { $template: \"Separator\" }, { $template: \"Separator\" }, \"Lịch sử gửi Email\"],\r\n on: {\r\n onItemClick: function (id) {\r\n var self = this;\r\n setTimeout(function () {\r\n var kyHieuHoaDon = {\r\n cctbao_id: $$(\"kyhieu_id\").getValue(),\r\n khieu: $$(\"kyhieu_id\").data.text,\r\n };\r\n\r\n if (self.getItem(id).value == \"Thay thế\") {\r\n commonHD.ExcuteReplaceInvoice(kyHieuHoaDon);\r\n }\r\n if (self.getItem(id).value == \"Điều chỉnh tăng\") {\r\n commonHD.ExcuteIncreaseChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Điều chỉnh giảm\") {\r\n commonHD.ExcuteReduceChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Điều chỉnh thông tin\") {\r\n commonHD.ExcuteInfoChangeInvoice(kyHieuHoaDon);\r\n }\r\n if (self.getItem(id).value == \"Hủy\") {\r\n commonHD.ExcuteHUyInvoicebienlai();\r\n }\r\n if (self.getItem(id).value == \"Lập biên bản xóa bỏ\") {\r\n commonHD.ExcuteCancellingInvoicebienlai();\r\n }\r\n\r\n if (self.getItem(id).value == \"Lịch sử gửi Email\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n var detailForm = webix.$$(\"invoiceViews\").$scope.ui(his_email.$ui);\r\n his_email.initUI(selectedItem.id);\r\n detailForm.show();\r\n }\r\n }, 100);\r\n },\r\n },\r\n });\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n scrollX: true,\r\n //autowidth: true,\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n item.chon = !item.chon;\r\n table.updateItem(id.row, item);\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n $$(\"cmenu78\").refresh();\r\n $$(\"cmenu78\").sizeToContent();\r\n $$(\"cmenu78\").attachTo($$(\"invoiceViews\"));\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n },\r\n columns: col,\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv * 1 != $$(\"pagerA\").config.size) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var mini_dashboard = {\r\n type: \"clean\",\r\n borderless: true,\r\n cols: [\r\n {\r\n id: \"khongMa\",\r\n name: \"khongMa\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"khongMaError\",\r\n name: \"khongMaError\",\r\n css: \"\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"doanhthunocode\",\r\n name: \"doanhthunocode\",\r\n view: \"label\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n id: \"main\",\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n id: \"tlbMain\",\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n var col = [];\r\n var sub_col = [];\r\n var windowconfig = null;\r\n var kihieuRefId = null;\r\n\r\n var initComponents = function (_windowconfig) {\r\n //console.log(_windowconfig);\r\n var k = Object.keys(_windowconfig[\"data\"][0][\"Tabs\"]).length;\r\n //console.log(k);\r\n var vc_window = _windowconfig[\"data\"][0];\r\n webix.$$(\"title\").parse({ title: vc_window[\"name\"], details: \"Lập biên lai ->\" + vc_window[\"name\"], width: 1000 });\r\n var tabs = vc_window.Tabs;\r\n\r\n var windowno = vc_window.window_id;\r\n kihieuRefId = \"RF00054\";\r\n col = [];\r\n sub_col = [];\r\n col.push({\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n });\r\n col.push({\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n });\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n if (tab.tab_type === \"Master\") {\r\n var masterTab = tabs[i];\r\n for (var j = 0; j < tabs[i].Fields.length; j++) {\r\n var field = masterTab.Fields[j];\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n\r\n var item = {\r\n id: field.column_name,\r\n header: _(field.column_name),\r\n columnType: field.column_type,\r\n columnAlias: field.column_alias,\r\n template: field.template,\r\n columnFormat: field.format,\r\n //adjust: true,\r\n };\r\n if (item.template !== undefined && item.template !== null && item.template.includes(\"function\")) item.template = Util.StringToFunc(item.template);\r\n //if(item.format!== undefined && item.format!== null && item.format.includes(\"function\")) item.template = Util.StringToFunc(item.format);\r\n if (field.caption != null) {\r\n item.header = _(field.caption).replace(/(\\[)([0-9]{2})(])/, \"\");\r\n }\r\n if (field.column_type == \"character varying\") {\r\n item.columnType = \"nvarchar\";\r\n }\r\n if (field.column_type == \"numeric\") {\r\n item.css = { \"text-align\": \"right\" };\r\n item.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: field.data_decimal,\r\n });\r\n }\r\n\r\n if (field.type_filter != null) {\r\n if (field.type_filter != \"\") {\r\n item.header = [_(item.header), { content: field.type_filter }];\r\n }\r\n }\r\n if (field.type_filter == \"serverMultiSelectFilter\") {\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.value_filter;\r\n }\r\n if (field.type_filter == \"serverSelectFilter\") {\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.value_filter;\r\n }\r\n if (field.type_editor == \"combo\") {\r\n item.editor = field.type_editor;\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n item.format = function (text) {\r\n var format = webix.Date.dateToStr(this.columnFormat);\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (field.type_editor == \"checkbox\") {\r\n if (field.column_type == \"boolean\") {\r\n item.checkValue = true;\r\n item.uncheckValue = false;\r\n }\r\n\r\n item.template = function (obj, common, value) {\r\n if (value == true || value == 1) return \"
\";\r\n else return \"
\";\r\n };\r\n }\r\n\r\n if (field.column_width == null) {\r\n //item.fillspace = true;\r\n } else {\r\n item.width = field.column_width;\r\n }\r\n\r\n col.push(item);\r\n }\r\n }\r\n if (tab.tab_type == \"Detail\") {\r\n for (var j = 0; j < tab.Fields.length; j++) {\r\n var field = tab.Fields[j];\r\n\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n\r\n var subCol = {\r\n id: field.column_name,\r\n header: field.caption == null ? _(field.column_name) : _(field.caption),\r\n hidden: field.hide_in_grid,\r\n };\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n subCol.format = function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (field.column_type == \"numeric\") {\r\n subCol.css = { \"text-align\": \"right\" };\r\n subCol.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: field.data_decimal,\r\n });\r\n }\r\n\r\n if (field.column_width == null) {\r\n subCol.fillspace = true;\r\n } else {\r\n subCol.width = field.column_width;\r\n }\r\n\r\n sub_col.push(subCol);\r\n }\r\n }\r\n }\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n var subview = {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n css: \"subInvoice\",\r\n scrollX: true,\r\n // tabbar: {\r\n // width: 200\r\n // },\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết biên lai\",\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n margin: 10,\r\n id: \"hoadon68_chitiet_view\",\r\n height: 200,\r\n columns: sub_col,\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n };\r\n /*var subview = {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 200,\r\n scrollX: true,\r\n cells: sub_col,\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n };*/\r\n table.define(\"subview\", subview);\r\n $$(\"head-title\").show();\r\n $$(\"head-title\").removeView(\"paramKH\");\r\n $$(\"head-title\").addView(\r\n {\r\n id: \"paramKH\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [],\r\n },\r\n 1\r\n );\r\n if (vc_window.WinParams != undefined && vc_window.WinParams != null) {\r\n for (var i = 0; i < vc_window.WinParams.length; i++) {\r\n var item = vc_window.WinParams[i];\r\n var comp = {\r\n id: item.value_field,\r\n view: item.type_editor,\r\n width: item.width,\r\n label: _(item.caption),\r\n value_field: item.value_field,\r\n isDefault: item.has_default,\r\n on: {},\r\n };\r\n\r\n if (comp.view == \"combo\") {\r\n comp.options = {\r\n body: {\r\n comboId: comp.id,\r\n isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + item.wb_references_id,\r\n ready: function () {\r\n if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n if (count > 0) {\r\n var combo = webix.$$(this.config.comboId);\r\n combo.setValue(this.getFirstId());\r\n }\r\n }\r\n },\r\n },\r\n };\r\n\r\n comp.on.onChange = function (newv, oldv) {\r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n };\r\n }\r\n $$(\"paramKH\").removeView(item.value_field);\r\n $$(\"paramKH\").addView(comp);\r\n }\r\n\r\n // parentToolBar.addView(toolBarParams);\r\n }\r\n\r\n table.config.columns = col;\r\n table.refreshColumns();\r\n table.define(\"url\", loadUrl);\r\n table.getParentView().getParentView().getParentView().enable();\r\n table.getParentView().getParentView().getParentView().hideProgress();\r\n };\r\n\r\n var loadUrl = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n //get count list combo ký hiệu\r\n var url = app.config.host + \"/Invoice68/GetDataInvoice\";\r\n\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n var table = $$(\"invoiceViews\");\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"params\", params);\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n if (params.filter[property] != null && params.filter[property] != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n var tlbParams = $$(\"paramKH\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n // console.log(child);\r\n var id = child.config.id;\r\n //var value_field = child.config.value_field;\r\n var item = {\r\n columnName: \"cctbao_id\",\r\n value: $$(id).getValue(),\r\n };\r\n if (item.value !== \"\") {\r\n parameters.push(item);\r\n } else {\r\n return;\r\n }\r\n //parameters.push(item);\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n var urlMiniDashBoard = url.replace(\"GetDataInvoice\", \"GetDataInvoiceThongTin\");\r\n\r\n var urlMiniDashBoard = url.replace(\"GetDataInvoice\", \"GetDataInvoiceThongTin\");\r\n\r\n /*webix.ajax().get(urlMiniDashBoard, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"khongMa\").setValue(\"Số hóa đơn đã gửi CQT: \" + json[\"khongma\"]);\r\n $$(\"khongMaError\").setValue(\"Số hóa đơn CQT thông báo lỗi: \" + json[\"khongmaerror\"]);\r\n $$(\"doanhthunocode\").setValue(\"Doanh thu xuất hóa đơn: \" + (fm(json[\"doanhthunocode\"]) ? fm(json[\"doanhthunocode\"]) : 0));\r\n });*/\r\n\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n var buttons = [];\r\n var initUI = function () {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n url,\r\n {\r\n command: \"CM00002\",\r\n parameter: {\r\n window_id: windowno,\r\n },\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (buttons.length > 0) {\r\n for (var i = 0; i < buttons.length; i++) {\r\n var item = buttons[i];\r\n $$(\"tlbMain\").removeView(item.id);\r\n }\r\n }\r\n\r\n buttons = [];\r\n var menus = [];\r\n\r\n var stt = controls.filter(function (x) {\r\n return x.id !== undefined;\r\n }).length;\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n var item = json[i];\r\n\r\n if (item.is_group_function == \"C\") {\r\n if (item.hidden != 1) {\r\n menus.push({\r\n id: item.name,\r\n value: _(item.caption),\r\n on_click: item.on_click,\r\n });\r\n }\r\n } else {\r\n if (item.hidden != 1) {\r\n var fn = new Function(item.on_click);\r\n\r\n var button = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: item.width,\r\n label: ' ' + '' + _(item.caption) + \"\",\r\n id: item.name,\r\n // label: _(item.caption),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-\" + item.icon,\r\n // width: item.width,\r\n click: fn,\r\n };\r\n\r\n buttons.push(button);\r\n $$(\"tlbMain\").addView(button, stt);\r\n\r\n stt = stt + 1;\r\n }\r\n }\r\n }\r\n $$(\"tlbMain\").removeView(\"btnChucNang\");\r\n if (menus.length > 0) {\r\n subChucNang.clearAll();\r\n subChucNang.parse(menus, \"json\");\r\n var btnChucNang = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"CHUC_NANG\") + \"\",\r\n id: \"btnChucNang\",\r\n // label: _(\"CHUC_NANG\"),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-tasks\",\r\n // width: 100,\r\n click: function () {\r\n subChucNang.show(webix.$$(\"btnChucNang\").$view);\r\n },\r\n };\r\n $$(\"tlbMain\").addView(btnChucNang, stt);\r\n }\r\n }\r\n );\r\n col = [];\r\n sub_col = [];\r\n\r\n var url = app.config.host + \"/System/GetConfigWinByNo?id=\" + windowno;\r\n webix.$$(\"invoiceViews\").getParentView().getParentView().getParentView().disable();\r\n webix.$$(\"invoiceViews\").getParentView().getParentView().getParentView().showProgress();\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n\r\n if (app_cache[windowno] != null) {\r\n windowconfig = app_cache[windowno];\r\n initComponents(windowconfig);\r\n } //không có cache\r\n else {\r\n webix.ajax(url, function (text, xml, xhr) {\r\n var rp = JSON.parse(text);\r\n windowconfig = rp;\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n app_cache[windowno] = windowconfig;\r\n\r\n webix.storage.local.put(\"APP_CACHE\", app_cache);\r\n initComponents(windowconfig);\r\n });\r\n }\r\n };\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.extend(view, webix.ProgressBar);\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n //if (editmode == 1) {\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n //}\r\n\r\n //if (editmode == 2) {\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n //}\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n $onDestruct: function (ui, name, url, scope) {\r\n $$(\"tlbParams\").Clear();\r\n },\r\n };\r\n});\r\n\ndefine('views/windowhoadon78tncn',[\r\n \"app\",\r\n \"locale\",\r\n \"models/user\",\r\n \"views/forms/formhoadon78tncn\",\r\n \"views/forms/68_huyhoadon\",\r\n \"views/forms/68_huyhoadon_1\",\r\n \"views/forms/68_hoadon_history\",\r\n \"views/forms/lichsuemailtncn\",\r\n \"views/commonHD\",\r\n \"views/Util\",\r\n], function (app, _, user, invoiceForms, huyhoadon, huyhoadon_1, hoadonHistory, his_email, commonHD, Util) {\r\n \r\n var fm = function (number) {\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n });\r\n return k(number);\r\n };\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var item = this.getItem(id);\r\n\r\n this.hide();\r\n\r\n var fn = Function(\"_\", \"user\", item.on_click);\r\n fn(_, user);\r\n },\r\n },\r\n });\r\n\r\n var subBangKe = webix.ui({\r\n view: \"submenu\",\r\n width: 150,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"addBangKeHoaDon\",\r\n value: \"Thêm bảng kê\",\r\n },\r\n {\r\n id: \"EditBangKeHoaDon\",\r\n value: \"Sửa bảng kê\",\r\n },\r\n {\r\n id: \"InBangKeHoaDon\",\r\n value: \"In bảng kê\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (record.id == \"addBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\") {\r\n webix.message(\"Vui lòng chọn hoá đơn chờ ký !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke != null) {\r\n webix.message(\"Hoá đơn đã có bảng kê không thể thêm !\", \"error\");\r\n return;\r\n }\r\n\r\n var detailForm = table.$scope.ui(invoiceForms.$ui);\r\n item.shdon = null;\r\n\r\n item.nlap = new Date(item.nlap);\r\n\r\n // ẩn tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = true;\r\n }\r\n\r\n invoiceForms.setEditMode(4); // editmode = 4(add bang ke chi tiet) // edit mode =5 (sửa bảng kê chi tiết)\r\n invoiceForms.initUI(windowconfig);\r\n //$$(\"phi_tab\").hide();\r\n $$(\"head-formInvoice\").define(\"template\", \"Bảng kê chi tiết hoá đơn\");\r\n $$(\"head-formInvoice\").refresh();\r\n\r\n webix.$$(\"infohdon\").disable();\r\n webix.$$(\"infokhang\").disable();\r\n\r\n webix.$$(\"shdon\").config.label = \"Số bảng kê\";\r\n //webix.$$(\"infohdon\").disable();\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Chứng từ điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n invoiceForms.setValuesBangKe(item, null);\r\n detailForm.show();\r\n webix.$$(\"btnBangKeSave\").show();\r\n webix.$$(\"btnHoadonSave\").destructor();\r\n webix.$$(\"btnHoadonCQT\").destructor();\r\n }\r\n\r\n if (record.id == \"EditBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\") {\r\n webix.message(\"Vui lòng chọn hoá đơn chờ ký !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke == null) {\r\n webix.message(\"Hoá đơn chưa có bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n // ẩn tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = true;\r\n }\r\n\r\n //set số bảng kê cho form sửa bảng kê\r\n item.shdon = item.checksobangke;\r\n\r\n item.nlap = new Date(item.nlap);\r\n var detailForm = table.$scope.ui(invoiceForms.$ui);\r\n invoiceForms.setEditMode(5); // editmode = 4(add bang ke chi tiet) // edit mode =5 (sửa bảng kê chi tiết)\r\n invoiceForms.initUI(windowconfig);\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Chứng từ điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n $$(\"head-formInvoice\").define(\"template\", \"Bảng kê chi tiết hoá đơn\");\r\n $$(\"head-formInvoice\").refresh();\r\n //set lại title số bảng kê\r\n webix.$$(\"shdon\").config.label = \"Số bảng kê\";\r\n\r\n webix.$$(\"infohdon\").disable();\r\n webix.$$(\"infokhang\").disable();\r\n\r\n invoiceForms.setValuesBangKe(item, null);\r\n detailForm.show();\r\n webix.$$(\"btnBangKeSave\").show();\r\n webix.$$(\"btnBangKeDelete\").show();\r\n webix.$$(\"btnHoadonSave\").destructor();\r\n webix.$$(\"btnHoadonCQT\").destructor();\r\n }\r\n\r\n if (record.id == \"InBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke == null) {\r\n webix.message(\"Hoá đơn chưa có bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in chừng từ ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Chứng từ thuế thu nhập cá nhân MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false&checkBangKe=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n },\r\n },\r\n });\r\n\r\n //webix.$$(\"title\").parse({ title: \"Lập hóa đơn -> Hóa đơn giá trị gia tăng\", details: \"Lập hóa đơn -> Hóa đơn giá trị gia tăng\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu78\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\"Hủy\", { $template: \"Separator\" }, \"Lịch sử gửi Email\"],\r\n on: {\r\n onItemClick: function (id) {\r\n var self = this;\r\n setTimeout(function () {\r\n var kyHieuHoaDon = {\r\n cctbao_id: $$(\"kyhieu_id\").getValue(),\r\n khieu: $$(\"kyhieu_id\").data.text,\r\n };\r\n\r\n if (self.getItem(id).value == \"Thay thế\") {\r\n commonHD.ExcuteReplaceInvoice(kyHieuHoaDon);\r\n }\r\n if (self.getItem(id).value == \"Điều chỉnh tăng\") {\r\n commonHD.ExcuteIncreaseChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Điều chỉnh giảm\") {\r\n commonHD.ExcuteReduceChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Điều chỉnh thông tin\") {\r\n commonHD.ExcuteInfoChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Hủy\") {\r\n commonHD.ExcuteCancellingInvoicetncn();\r\n }\r\n\r\n if (self.getItem(id).value == \"Lịch sử gửi Email\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ\", \"error\");\r\n return;\r\n }\r\n var detailForm = webix.$$(\"invoiceViews\").$scope.ui(his_email.$ui);\r\n his_email.initUI(selectedItem.id);\r\n detailForm.show();\r\n }\r\n }, 100);\r\n },\r\n },\r\n });\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Thêm (F4)\") + \"\",\r\n id: \"btnPlus\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var vc_window = windowconfig[\"data\"][0];\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n var cctbao_id = $$(\"kyhieu_id\").getValue();\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n detailForm.show();\r\n if (vc_window.after_new != null) {\r\n var fn = Function(\"app\", vc_window.after_new);\r\n fn(app);\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Sửa (F3)\") + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n //var detailForm = this.$scope.ui(webix.$$(\"main\"));\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\" && item.tthai != \"Chờ duyệt\" && item.tthai != \"Chờ sinh số\") {\r\n webix.message(\"Chứng từ đã ký hoặc đã gửi lên cơ quan thuế, không thể sửa !\", \"error\");\r\n return;\r\n }\r\n // main.setEditMode(0);\r\n // main.initUI(windowconfig);\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n item.nlap = new Date(item.nlap);\r\n\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.setEditMode(2);\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Chứng từ điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n invoiceForms.setValues(item, null);\r\n\r\n detailForm.show();\r\n //main.focusFirstElement();\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Xóa (F8)\") + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var lstDataChoose = commonHD.GetHoaDonChon();\r\n var lstDataChooseSort = lstDataChoose.sort(function (a, b) {\r\n return Number(a.shdon) - Number(b.shdon);\r\n });\r\n if (lstDataChooseSort.length === 0) return;\r\n var strHoaDonSelect = \" \";\r\n for (var i = 0; i < lstDataChooseSort.length; i++) {\r\n if (\r\n commonHD.CheckKhacNull(lstDataChooseSort[i].tthai) &&\r\n lstDataChooseSort[i].tthai != \"Chờ ký\" &&\r\n lstDataChooseSort[i].tthai != \"Chờ sinh số\" &&\r\n lstDataChooseSort[i].tthai != \"Chờ duyệt\"\r\n ) {\r\n webix.message(\"Không thể xóa chứng từ đã ký,đã gửi !\", \"error\");\r\n return;\r\n }\r\n if (i < lstDataChooseSort.length - 1) {\r\n if (\r\n commonHD.CheckKhacNull(lstDataChooseSort[i].shdon) &&\r\n commonHD.CheckKhacNull(lstDataChooseSort[i + 1].shdon) &&\r\n Number(lstDataChooseSort[i + 1].shdon) - Number(lstDataChooseSort[i].shdon) >= 2\r\n ) {\r\n webix.message(\"Các chứng từ xóa phải có số chứng từ liên tiếp nhau\", \"error\");\r\n return;\r\n } else {\r\n strHoaDonSelect += lstDataChooseSort[i].shdon + \",\";\r\n }\r\n } else {\r\n strHoaDonSelect += lstDataChooseSort[i].shdon;\r\n }\r\n }\r\n var url = app.config.host + \"/Invoice68/hoadonXoaNhieu\";\r\n var data_post = { data: lstDataChooseSort };\r\n webix.confirm({\r\n title: \"XÓA CHỨNG TỪ\",\r\n text: \"Bạn có muốn xóa chứng từ số: \" + strHoaDonSelect + \"\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n table.enable();\r\n table.hideProgress();\r\n return;\r\n } else {\r\n table.enable();\r\n table.clearAll();\r\n table.load(table.config.url);\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"COPY\") + \"\",\r\n id: \"btnCopy\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-files-o\",\r\n // label: _(\"COPY\"),\r\n // width: 85,\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var vc_window = windowconfig[\"data\"][0];\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n // var vc_window = windowconfig[\"data\"][0];\r\n // windowform.$ui.id = vc_window.code;\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n item.shdon = null;\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.copyValues(item);\r\n detailForm.show();\r\n if (vc_window.after_new != null) {\r\n var fn = Function(vc_window.after_new);\r\n fn();\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n /*{\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Bảng kê\") + \"\",\r\n id: \"btnBangKeOption\",\r\n click: function () {\r\n subBangKe.show(webix.$$(\"btnBangKeOption\").$view);\r\n },\r\n },*/\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn chứng từ cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in chứng từ ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Chứng từ thuế thu nhập cá nhân MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {},\r\n {},\r\n {},\r\n {},\r\n {},\r\n ];\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n scrollX: true,\r\n //autowidth: true,\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n item.chon = !item.chon;\r\n table.updateItem(id.row, item);\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n $$(\"cmenu78\").refresh();\r\n $$(\"cmenu78\").sizeToContent();\r\n $$(\"cmenu78\").attachTo($$(\"invoiceViews\"));\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n /*onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },*/\r\n },\r\n columns: col,\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv * 1 != $$(\"pagerA\").config.size) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var mini_dashboard = {\r\n type: \"clean\",\r\n borderless: true,\r\n cols: [\r\n {\r\n id: \"khongMa\",\r\n name: \"khongMa\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"khongMaError\",\r\n name: \"khongMaError\",\r\n css: \"\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"doanhthunocode\",\r\n name: \"doanhthunocode\",\r\n view: \"label\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n id: \"main\",\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n id: \"tlbMain\",\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n var col = [];\r\n var sub_col = [];\r\n var windowconfig = null;\r\n var kihieuRefId = null;\r\n\r\n var initComponents = function (_windowconfig) {\r\n //console.log(_windowconfig);\r\n var k = Object.keys(_windowconfig[\"data\"][0][\"Tabs\"]).length;\r\n //console.log(k);\r\n var vc_window = _windowconfig[\"data\"][0];\r\n webix.$$(\"title\").parse({ title: vc_window[\"name\"], details: \"Lập Chứng từ ->\" + vc_window[\"name\"], width: 1000 });\r\n var tabs = vc_window.Tabs;\r\n\r\n var windowno = vc_window.window_id;\r\n kihieuRefId = \"RF00054\";\r\n col = [];\r\n sub_col = [];\r\n col.push({\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n });\r\n col.push({\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n });\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n if (tab.tab_type === \"Master\") {\r\n var masterTab = tabs[i];\r\n for (var j = 0; j < tabs[i].Fields.length; j++) {\r\n var field = masterTab.Fields[j];\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n\r\n var item = {\r\n id: field.column_name,\r\n header: _(field.column_name),\r\n columnType: field.column_type,\r\n columnAlias: field.column_alias,\r\n template: field.template,\r\n columnFormat: field.format,\r\n //adjust: true,\r\n };\r\n if (item.template !== undefined && item.template !== null && item.template.includes(\"function\")) item.template = Util.StringToFunc(item.template);\r\n //if(item.format!== undefined && item.format!== null && item.format.includes(\"function\")) item.template = Util.StringToFunc(item.format);\r\n if (field.caption != null) {\r\n item.header = _(field.caption).replace(/(\\[)([0-9]{2})(])/, \"\");\r\n }\r\n if (field.column_type == \"character varying\") {\r\n item.columnType = \"nvarchar\";\r\n }\r\n if (field.column_type == \"numeric\") {\r\n item.css = { \"text-align\": \"right\" };\r\n item.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: field.data_decimal,\r\n });\r\n }\r\n if (field.type_filter == \"serverMultiSelectFilter\") {\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.value_filter;\r\n }\r\n if (field.type_filter == \"serverSelectFilter\") {\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.value_filter;\r\n }\r\n if (field.type_filter != null) {\r\n if (field.type_filter != \"\") {\r\n item.header = [_(item.header), { content: field.type_filter }];\r\n }\r\n }\r\n\r\n if (field.type_editor == \"combo\") {\r\n item.editor = field.type_editor;\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n item.format = function (text) {\r\n var format = webix.Date.dateToStr(this.columnFormat);\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (field.type_editor == \"checkbox\") {\r\n if (field.column_type == \"boolean\") {\r\n item.checkValue = true;\r\n item.uncheckValue = false;\r\n }\r\n\r\n item.template = function (obj, common, value) {\r\n if (value == true || value == 1) return \"
\";\r\n else return \"
\";\r\n };\r\n }\r\n\r\n if (field.column_width == null) {\r\n //item.fillspace = true;\r\n } else {\r\n item.width = field.column_width;\r\n }\r\n\r\n col.push(item);\r\n }\r\n }\r\n if (tab.tab_type == \"Detail\") {\r\n for (var j = 0; j < tab.Fields.length; j++) {\r\n var field = tab.Fields[j];\r\n\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n\r\n var subCol = {\r\n id: field.column_name,\r\n header: field.caption == null ? _(field.column_name) : _(field.caption),\r\n hidden: field.hide_in_grid,\r\n };\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n subCol.format = function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (field.column_type == \"numeric\") {\r\n subCol.css = { \"text-align\": \"right\" };\r\n subCol.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: field.data_decimal,\r\n });\r\n }\r\n\r\n if (field.column_width == null) {\r\n subCol.fillspace = true;\r\n } else {\r\n subCol.width = field.column_width;\r\n }\r\n\r\n sub_col.push(subCol);\r\n }\r\n }\r\n }\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n var subview = {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n css: \"subInvoice\",\r\n scrollX: true,\r\n // tabbar: {\r\n // width: 200\r\n // },\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết chứng từ\",\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n margin: 10,\r\n id: \"hoadon68_chitiet_view\",\r\n height: 200,\r\n columns: sub_col,\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n };\r\n /*var subview = {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 200,\r\n scrollX: true,\r\n cells: sub_col,\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n };*/\r\n table.define(\"subview\", subview);\r\n $$(\"head-title\").show();\r\n $$(\"head-title\").removeView(\"paramKH\");\r\n $$(\"head-title\").addView(\r\n {\r\n id: \"paramKH\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [],\r\n },\r\n 1\r\n );\r\n if (vc_window.WinParams != undefined && vc_window.WinParams != null) {\r\n for (var i = 0; i < vc_window.WinParams.length; i++) {\r\n var item = vc_window.WinParams[i];\r\n var comp = {\r\n id: item.value_field,\r\n view: item.type_editor,\r\n width: item.width,\r\n label: _(item.caption),\r\n value_field: item.value_field,\r\n isDefault: item.has_default,\r\n on: {},\r\n };\r\n\r\n if (comp.view == \"combo\") {\r\n comp.options = {\r\n body: {\r\n comboId: comp.id,\r\n isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + item.wb_references_id,\r\n ready: function () {\r\n if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n if (count > 0) {\r\n var combo = webix.$$(this.config.comboId);\r\n combo.setValue(this.getFirstId());\r\n }\r\n }\r\n },\r\n },\r\n };\r\n\r\n comp.on.onChange = function (newv, oldv) {\r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n };\r\n }\r\n $$(\"paramKH\").removeView(item.value_field);\r\n $$(\"paramKH\").addView(comp);\r\n }\r\n\r\n // parentToolBar.addView(toolBarParams);\r\n }\r\n\r\n table.config.columns = col;\r\n table.refreshColumns();\r\n table.define(\"url\", loadUrl);\r\n table.getParentView().getParentView().getParentView().enable();\r\n table.getParentView().getParentView().getParentView().hideProgress();\r\n };\r\n\r\n var loadUrl = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n //get count list combo ký hiệu\r\n var url = app.config.host + \"/Invoice68/GetDataInvoice\";\r\n\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n var table = $$(\"invoiceViews\");\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"params\", params);\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n if (params.filter[property] != null && params.filter[property] != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n var tlbParams = $$(\"paramKH\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n // console.log(child);\r\n var id = child.config.id;\r\n //var value_field = child.config.value_field;\r\n var item = {\r\n columnName: \"cctbao_id\",\r\n value: $$(id).getValue(),\r\n };\r\n if (item.value !== \"\") {\r\n parameters.push(item);\r\n } else {\r\n return;\r\n }\r\n //parameters.push(item);\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n var urlMiniDashBoard = url.replace(\"GetDataInvoice\", \"GetDataInvoiceThongTin\");\r\n\r\n var urlMiniDashBoard = url.replace(\"GetDataInvoice\", \"GetDataInvoiceThongTin\");\r\n\r\n /*webix.ajax().get(urlMiniDashBoard, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"khongMa\").setValue(\"Số hóa đơn đã gửi CQT: \" + json[\"khongma\"]);\r\n $$(\"khongMaError\").setValue(\"Số hóa đơn CQT thông báo lỗi: \" + json[\"khongmaerror\"]);\r\n $$(\"doanhthunocode\").setValue(\"Doanh thu xuất hóa đơn: \" + (fm(json[\"doanhthunocode\"]) ? fm(json[\"doanhthunocode\"]) : 0));\r\n });*/\r\n\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n var buttons = [];\r\n var initUI = function () {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n url,\r\n {\r\n command: \"CM00002\",\r\n parameter: {\r\n window_id: windowno,\r\n },\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (buttons.length > 0) {\r\n for (var i = 0; i < buttons.length; i++) {\r\n var item = buttons[i];\r\n $$(\"tlbMain\").removeView(item.id);\r\n }\r\n }\r\n\r\n buttons = [];\r\n var menus = [];\r\n\r\n var stt = controls.filter(function (x) {\r\n return x.id !== undefined;\r\n }).length;\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n var item = json[i];\r\n\r\n if (item.is_group_function == \"C\") {\r\n if (item.hidden != 1) {\r\n menus.push({\r\n id: item.name,\r\n value: _(item.caption),\r\n on_click: item.on_click,\r\n });\r\n }\r\n } else {\r\n if (item.hidden != 1) {\r\n var fn = new Function(item.on_click);\r\n\r\n var button = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: item.width,\r\n label: ' ' + '' + _(item.caption) + \"\",\r\n id: item.name,\r\n // label: _(item.caption),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-\" + item.icon,\r\n // width: item.width,\r\n click: fn,\r\n };\r\n\r\n buttons.push(button);\r\n $$(\"tlbMain\").addView(button, stt);\r\n\r\n stt = stt + 1;\r\n }\r\n }\r\n }\r\n $$(\"tlbMain\").removeView(\"btnChucNang\");\r\n if (menus.length > 0) {\r\n subChucNang.clearAll();\r\n subChucNang.parse(menus, \"json\");\r\n var btnChucNang = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"CHUC_NANG\") + \"\",\r\n id: \"btnChucNang\",\r\n // label: _(\"CHUC_NANG\"),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-tasks\",\r\n // width: 100,\r\n click: function () {\r\n subChucNang.show(webix.$$(\"btnChucNang\").$view);\r\n },\r\n };\r\n $$(\"tlbMain\").addView(btnChucNang, stt);\r\n }\r\n }\r\n );\r\n col = [];\r\n sub_col = [];\r\n\r\n var url = app.config.host + \"/System/GetConfigWinByNo?id=\" + windowno;\r\n webix.$$(\"invoiceViews\").getParentView().getParentView().getParentView().disable();\r\n webix.$$(\"invoiceViews\").getParentView().getParentView().getParentView().showProgress();\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n\r\n if (app_cache[windowno] != null) {\r\n windowconfig = app_cache[windowno];\r\n initComponents(windowconfig);\r\n } //không có cache\r\n else {\r\n webix.ajax(url, function (text, xml, xhr) {\r\n var rp = JSON.parse(text);\r\n windowconfig = rp;\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n app_cache[windowno] = windowconfig;\r\n\r\n webix.storage.local.put(\"APP_CACHE\", app_cache);\r\n initComponents(windowconfig);\r\n });\r\n }\r\n };\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.extend(view, webix.ProgressBar);\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n //if (editmode == 1) {\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n //}\r\n\r\n //if (editmode == 2) {\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n //}\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n $onDestruct: function (ui, name, url, scope) {\r\n $$(\"tlbParams\").Clear();\r\n },\r\n };\r\n});\r\n\ndefine('views/windowhoadoncode78_mtt',[\r\n \"app\",\r\n \"locale\",\r\n \"models/user\",\r\n \"views/forms/formhoadoncode78_mtt\",\r\n \"views/forms/68_huyhoadon\",\r\n \"views/forms/68_huyhoadon_1\",\r\n \"views/forms/68_hoadon_history\",\r\n \"views/forms/lichsuemail\",\r\n \"views/commonHD\",\r\n \"views/Util\",\r\n \"views/forms/bienbanForm\",\r\n \"views/forms/68_hoadon_history_lienquan\",\r\n \"views/DataStorage/DataHoaDon78\"\r\n], function (app, _, user, invoiceForms, huyhoadon, huyhoadon_1, hoadonHistory, his_email, commonHD, Util, bienbanForm, hoadonlq, dataFormHd78) {\r\n \r\n var fm = function (number) {\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n });\r\n return k(number);\r\n };\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var item = this.getItem(id);\r\n\r\n this.hide();\r\n\r\n var fn = Function(\"_\", \"user\", item.on_click);\r\n fn(_, user);\r\n },\r\n },\r\n });\r\n\r\n var subBangKe = webix.ui({\r\n view: \"submenu\",\r\n width: 150,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"addBangKeHoaDon\",\r\n value: \"Thêm bảng kê\",\r\n },\r\n {\r\n id: \"EditBangKeHoaDon\",\r\n value: \"Sửa bảng kê\",\r\n },\r\n {\r\n id: \"InBangKeHoaDon\",\r\n value: \"In bảng kê\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (record.id == \"addBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\" && item.tthai != \"Chờ duyệt\" && item.tthai != \"Chờ sinh số\") {\r\n webix.message(\"Vui lòng chọn hoá đơn chờ ký !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke != null) {\r\n webix.message(\"Hoá đơn đã có bảng kê không thể thêm !\", \"error\");\r\n return;\r\n }\r\n\r\n var detailForm = table.$scope.ui(invoiceForms.$ui);\r\n item.shdon = null;\r\n\r\n item.nlap = new Date(item.nlap);\r\n\r\n // ẩn tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = true;\r\n }\r\n\r\n invoiceForms.setEditMode(4); // editmode = 4(add bang ke chi tiet) // edit mode =5 (sửa bảng kê chi tiết)\r\n invoiceForms.initUI(windowconfig);\r\n //$$(\"phi_tab\").hide();\r\n $$(\"head-formInvoice\").define(\"template\", \"Bảng kê chi tiết hoá đơn\");\r\n $$(\"head-formInvoice\").refresh();\r\n\r\n webix.$$(\"infohdon\").disable();\r\n webix.$$(\"infokhang\").disable();\r\n\r\n webix.$$(\"shdon\").config.label = \"Số bảng kê\";\r\n //webix.$$(\"infohdon\").disable();\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Hóa đơn điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n invoiceForms.setValuesBangKe(item, null);\r\n detailForm.show();\r\n webix.$$(\"btnBangKeSave\").show();\r\n webix.$$(\"btnHoadonSave\").destructor();\r\n webix.$$(\"btnHoadonCQT\").destructor();\r\n }\r\n\r\n if (record.id == \"EditBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke == null) {\r\n webix.message(\"Hoá đơn chưa có bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n // ẩn tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = true;\r\n }\r\n\r\n //set số bảng kê cho form sửa bảng kê\r\n item.shdon = item.checksobangke;\r\n\r\n item.nlap = new Date(item.nlap);\r\n var detailForm = table.$scope.ui(invoiceForms.$ui);\r\n invoiceForms.setEditMode(5); // editmode = 4(add bang ke chi tiet) // edit mode =5 (sửa bảng kê chi tiết)\r\n invoiceForms.initUI(windowconfig);\r\n\r\n $$(\"head-formInvoice\").define(\"template\", \"Bảng kê chi tiết hoá đơn\");\r\n $$(\"head-formInvoice\").refresh();\r\n //set lại title số bảng kê\r\n webix.$$(\"shdon\").config.label = \"Số bảng kê\";\r\n\r\n webix.$$(\"infohdon\").disable();\r\n webix.$$(\"infokhang\").disable();\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Hóa đơn điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n invoiceForms.setValuesBangKe(item, null);\r\n detailForm.show();\r\n webix.$$(\"btnBangKeSave\").show();\r\n webix.$$(\"btnBangKeDelete\").show();\r\n webix.$$(\"btnHoadonSave\").destructor();\r\n webix.$$(\"btnHoadonCQT\").destructor();\r\n }\r\n\r\n if (record.id == \"InBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n // if (item.tthai != \"Chờ ký\") {\r\n // webix.message(\"Vui lòng chọn hoá đơn chờ ký !\", \"error\");\r\n // return;\r\n // }\r\n\r\n if (item.checksobangke == null) {\r\n webix.message(\"Hoá đơn chưa có bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false&checkBangKe=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n },\r\n },\r\n });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu78\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n \"Thay thế\",\r\n { $template: \"Separator\" },\r\n \"Điều chỉnh tăng\",\r\n { $template: \"Separator\" },\r\n \"Điều chỉnh giảm\",\r\n { $template: \"Separator\" },\r\n \"Điều chỉnh thông tin\",\r\n { $template: \"Separator\" },\r\n // \"Hủy\",\r\n // { $template: \"Separator\" },\r\n \"Lịch sử gửi Email\",\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n var self = this;\r\n setTimeout(function () {\r\n var kyHieuHoaDon = {\r\n cctbao_id: $$(\"kyhieu_id\").getValue(),\r\n khieu: $$(\"kyhieu_id\").data.text,\r\n };\r\n\r\n if (self.getItem(id).value == \"Thay thế\") {\r\n commonHD.ExcuteReplaceInvoice(kyHieuHoaDon);\r\n }\r\n if (self.getItem(id).value == \"Điều chỉnh tăng\") {\r\n commonHD.ExcuteIncreaseChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Điều chỉnh giảm\") {\r\n commonHD.ExcuteReduceChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Điều chỉnh thông tin\") {\r\n commonHD.ExcuteInfoChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Hủy\") {\r\n commonHD.ExcuteCancellingInvoice();\r\n }\r\n\r\n if (self.getItem(id).value == \"Lịch sử gửi Email\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n var detailForm = webix.$$(\"invoiceViews\").$scope.ui(his_email.$ui);\r\n his_email.initUI(selectedItem.id);\r\n detailForm.show();\r\n }\r\n }, 100);\r\n },\r\n },\r\n });\r\n\r\n var subBienBan = webix.ui({\r\n view: \"submenu\",\r\n width: 150,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"AddBienBan\",\r\n value: \"Thêm biên bản\",\r\n },\r\n {\r\n id: \"EditBienBan\",\r\n value: \"Sửa biên bản\",\r\n },\r\n {\r\n id: \"InBienBan\",\r\n value: \"In biên bản\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (record.id == \"AddBienBan\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthdon != 19 && item.tthdon != 21 && item.tthdon != 23 && item.tthdon != 5 && item.tthdon != 2 && item.tthdon != 3) {\r\n webix.message(\"Vui lòng chọn hóa đơn ở trạng thái điều chỉnh, thay thế, hoặc hủy\", \"error\");\r\n return;\r\n }\r\n\r\n // if (item.tthai != \"Chờ ký\") {\r\n // webix.message(\"Vui lòng chọn hoá đơn chờ ký !\", \"error\");\r\n // return;\r\n // } \r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/CheckBienBan?id=\" + item.id, {\r\n error: function (text) {\r\n webix.message(text, \"error\");\r\n return;\r\n },\r\n success: function (text) {\r\n var hasBienBan = JSON.parse(text);\r\n if (hasBienBan) {\r\n webix.message(\"Hoá đơn đã có biên bản không thể thêm mới!\", \"error\");\r\n return;\r\n }\r\n\r\n var component = table.$scope.ui(bienbanForm.$ui);\r\n bienbanForm.setEditMode(1);\r\n bienbanForm.setHideBtnDelete();\r\n component.show();\r\n },\r\n });\r\n }\r\n\r\n if (record.id == \"EditBienBan\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthdon != 19 && item.tthdon != 21 && item.tthdon != 23 && item.tthdon != 5 && item.tthdon != 2 && item.tthdon != 3) {\r\n webix.message(\"Vui lòng chọn hóa đơn ở trạng thái điều chỉnh, thay thế, hoặc hủy\", \"error\");\r\n return;\r\n }\r\n var url = app.config.host + \"/Invoice68/GetDataInvoice_BienBan?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var data = (JSON.parse(text))[0];\r\n\r\n if (!data) {\r\n webix.message(\"Hoá đơn không có biên bản không thể sửa!\", \"error\");\r\n return;\r\n }\r\n\r\n data.nvban = removeTimeZoneT(data.nvban);\r\n\r\n var component = table.$scope.ui(bienbanForm.$ui);\r\n bienbanForm.setValuesBienBan(data, null);\r\n bienbanForm.setEditMode(2);\r\n\r\n component.show();\r\n\r\n });\r\n }\r\n\r\n if (record.id == \"InBienBan\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthdon != 19 && item.tthdon != 21 && item.tthdon != 23 && item.tthdon != 5 && item.tthdon != 2 && item.tthdon != 3) {\r\n webix.message(\"Vui lòng chọn hóa đơn ở trạng thái điều chỉnh, thay thế, hoặc hủy\", \"error\");\r\n return;\r\n }\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/CheckBienBan?id=\" + item.id, {\r\n error: function (text) {\r\n webix.message(text, \"error\");\r\n return;\r\n },\r\n success: function (text) {\r\n var hasBienBan = JSON.parse(text);\r\n if (!hasBienBan) {\r\n webix.message(\"Hoá đơn chưa có biên bản không thể in!\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in biên bản ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBienBan?id=\" + item.id + \"&type=PDF&inchuyendoi=false&checkBienBan=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n });\r\n }\r\n },\r\n },\r\n });\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Thêm (F4)\") + \"\",\r\n id: \"btnPlus\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n var cctbao_id = $$(\"kyhieu_id\").getValue();\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setNewInvoice();\r\n detailForm.show();\r\n // if (vc_window.after_new != null) {\r\n // var fn = Function(\"app\", vc_window.after_new);\r\n // fn(app);\r\n // }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Sửa (F3)\") + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n //var detailForm = this.$scope.ui(webix.$$(\"main\"));\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa !\", \"error\");\r\n return;\r\n }\r\n if (item.mccqthue != undefined && item.mccqthue != null && item.mccqthue != '') {\r\n webix.message(\"Hóa đơn đã có mã, không thể sửa !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai != \"Chờ ký\" && item.tthai != \"Chờ duyệt\" && item.tthai != \"Chờ sinh số\") {\r\n webix.message(\"Hóa đơn đã ký hoặc đã gửi lên cơ quan thuế, không thể sửa !\", \"error\");\r\n return;\r\n }\r\n // main.setEditMode(0);\r\n // main.initUI(windowconfig);\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n item.nlap = new Date(item.nlap);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.setEditMode(2);\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Hóa đơn điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n invoiceForms.setValues(item, null);\r\n\r\n detailForm.show();\r\n //main.focusFirstElement();\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Xóa (F8)\") + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var lstDataChoose = commonHD.GetHoaDonChon();\r\n var lstDataChooseSort = lstDataChoose.sort(function (a, b) {\r\n return Number(a.shdon) - Number(b.shdon);\r\n });\r\n if (lstDataChooseSort.length === 0) return;\r\n var strHoaDonSelect = \" \";\r\n for (var i = 0; i < lstDataChooseSort.length; i++) {\r\n if (\r\n commonHD.CheckKhacNull(lstDataChooseSort[i].tthai) &&\r\n lstDataChooseSort[i].tthai != \"Chờ ký\" &&\r\n lstDataChooseSort[i].tthai != \"Chờ sinh số\" &&\r\n lstDataChooseSort[i].tthai != \"Chờ duyệt\"\r\n ) {\r\n webix.message(\"Không thể xóa hóa đơn đã ký,đã gửi !\", \"error\");\r\n return;\r\n }\r\n if (i < lstDataChooseSort.length - 1) {\r\n if (\r\n commonHD.CheckKhacNull(lstDataChooseSort[i].shdon) &&\r\n commonHD.CheckKhacNull(lstDataChooseSort[i + 1].shdon) &&\r\n Number(lstDataChooseSort[i + 1].shdon) - Number(lstDataChooseSort[i].shdon) >= 2\r\n ) {\r\n webix.message(\"Các hóa đơn xóa phải có số hóa đơn liên tiếp nhau\", \"error\");\r\n return;\r\n } else {\r\n strHoaDonSelect += lstDataChooseSort[i].shdon + \",\";\r\n }\r\n } else {\r\n strHoaDonSelect += lstDataChooseSort[i].shdon;\r\n }\r\n }\r\n var url = app.config.host + \"/Invoice68/hoadonXoaNhieu\";\r\n var data_post = { data: lstDataChooseSort };\r\n webix.confirm({\r\n title: \"XÓA HÓA ĐƠN\",\r\n text: \"Bạn có muốn xóa hóa đơn số: \" + strHoaDonSelect + \"\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n table.enable();\r\n table.hideProgress();\r\n return;\r\n } else {\r\n table.enable();\r\n table.clearAll();\r\n table.load(table.config.url);\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"COPY\") + \"\",\r\n id: \"btnCopy\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-files-o\",\r\n // label: _(\"COPY\"),\r\n // width: 85,\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n // var vc_window = windowconfig[\"data\"][0];\r\n // windowform.$ui.id = vc_window.code;\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n item.mccqthue = \"\";\r\n item.shdon = null;\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.copyValues(item);\r\n detailForm.show();\r\n\r\n // windowform.focusFirstElement();\r\n // if (vc_window.after_new != null) {\r\n // var fn = Function(vc_window.after_new);\r\n // fn();\r\n // }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Bảng kê\") + \"\",\r\n id: \"btnBangKeOption\",\r\n click: function () {\r\n subBangKe.show(webix.$$(\"btnBangKeOption\").$view);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + \"Sinh MTT\" + \"\",\r\n id: \"btnCreatMa\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần tạo mã !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/SinhMTT?hdon_id=\" + item[\"hdon_id\"], {\r\n error: function (text, data, XmlHttpRequest) {\r\n\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n\r\n table.enable();\r\n table.hideProgress();\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"In chuyển đổi\") + \"\",\r\n id: \"btnPrintConvert\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {},\r\n {},\r\n {},\r\n {},\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n scrollX: true,\r\n scroll: true,\r\n //autowidth: true,\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n ShowHistory2: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonlq.$ui);\r\n var hdon_id = cell.row;\r\n hoadonlq.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n item.chon = !item.chon;\r\n table.updateItem(id.row, item);\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n $$(\"cmenu78\").refresh();\r\n $$(\"cmenu78\").sizeToContent();\r\n $$(\"cmenu78\").attachTo($$(\"invoiceViews\"));\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n var urlget = app.config.host + \"/Invoice68/GetDecimalPlace?ma_nt=\" + item[\"dvtte\"];\r\n webix\r\n .ajax()\r\n .sync()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlget, function (text) {\r\n var arr = JSON.parse(text);\r\n var arrayString_chitiet = [\"sluong\", \"dgia\", \"thtien\", \"stckhau\", \"tthue\", \"tgtien\", \"tienphi\"];\r\n for (var i = 0; i < arrayString_chitiet.length; i++) {\r\n var field_name = \"\";\r\n switch (arrayString_chitiet[i]) {\r\n case \"sluong\":\r\n field_name = \"quantity_decimal\";\r\n break;\r\n case \"dgia\":\r\n field_name = \"price_decimal\";\r\n break;\r\n case \"thtien\":\r\n field_name = \"amount_without_vat_decimal\";\r\n break;\r\n case \"stckhau\":\r\n field_name = \"price_discount\";\r\n break;\r\n case \"tthue\":\r\n field_name = \"tax_price\";\r\n break;\r\n case \"tgtien\":\r\n field_name = \"total_amount_decimal\";\r\n break;\r\n case \"tienphi\":\r\n field_name = \"fee_price\";\r\n break;\r\n }\r\n var decimal_place = Array(Number(arr[0][field_name]) + 1).join(\"9\");\r\n var decimal_format = Number(arr[0][field_name]);\r\n var format_numeric = {\r\n maximumValue: Number(\"999999999999.\" + decimal_place),\r\n minValue: Number(\"-999999999999.\" + decimal_place),\r\n decimalPlaces: Number(decimal_format),\r\n };\r\n var formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimal_format,\r\n };\r\n var formatSo = webix.Number.numToStr(formatSoDefault);\r\n\r\n var format_config = tableDetail.getColumnConfig(arrayString_chitiet[i]);\r\n\r\n format_config.format = formatSo;\r\n format_config.numericConfig = format_numeric;\r\n }\r\n });\r\n\r\n tableDetail.load(url);\r\n\r\n var data = tableDetail.serialize();\r\n console.log(data);\r\n }\r\n },\r\n },\r\n subview: {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n css: \"subInvoice\",\r\n scrollX: true,\r\n // tabbar: {\r\n // width: 200\r\n // },\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n margin: 10,\r\n id: \"hoadon68_chitiet_view\",\r\n height: 200,\r\n columns: [],\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n columns: col,\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n table.getColumnConfig;\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var mini_dashboard = {\r\n type: \"clean\",\r\n borderless: true,\r\n cols: [\r\n {\r\n id: \"choCapMa\",\r\n name: \"choCapMa\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"choCapMaError\",\r\n name: \"choCapMaError\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"duocCapMa\",\r\n name: \"duocCapMa\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"chuaGui\",\r\n name: \"chuaGui\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"doanhThu\",\r\n name: \"doanhThu\",\r\n view: \"label\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n id: \"main\",\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n rows: [mini_dashboard],\r\n },\r\n {\r\n id: \"tlbMain\",\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n var col = [];\r\n var sub_col = [];\r\n var windowconfig = null;\r\n var kihieuRefId = null;\r\n\r\n var initComponents = function (_windowconfig) {\r\n //console.log(_windowconfig);\r\n var k = Object.keys(_windowconfig[\"data\"][0][\"Tabs\"]).length;\r\n //console.log(k);\r\n var vc_window = _windowconfig[\"data\"][0];\r\n webix.$$(\"title\").parse({ title: vc_window[\"name\"], details: \"Lập hóa đơn ->\" + vc_window[\"name\"], width: 500 });\r\n var tabs = vc_window.Tabs;\r\n var codewindow = app.path[1].params[0];\r\n var windowno = vc_window.window_id;\r\n kihieuRefId = \"RF00054\";\r\n col = [];\r\n sub_col = [];\r\n col.push({\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n });\r\n col.push({\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n });\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n if (tab.tab_type === \"Master\") {\r\n var masterTab = tabs[i];\r\n for (var j = 0; j < tabs[i].Fields.length; j++) {\r\n var field = masterTab.Fields[j];\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n var item = {\r\n id: field.column_name,\r\n header: _(field.column_name),\r\n columnType: field.column_type,\r\n columnAlias: field.column_alias,\r\n template: field.template,\r\n columnFormat: field.format,\r\n //adjust: true,\r\n };\r\n if (item.template !== undefined && item.template !== null && item.template.includes(\"function\")) item.template = Util.StringToFunc(item.template);\r\n //if(item.format!== undefined && item.format!== null && item.format.includes(\"function\")) item.template = Util.StringToFunc(item.format);\r\n if (field.caption != null) {\r\n item.header = _(field.caption);\r\n }\r\n\r\n if (field.column_type == \"numeric\") {\r\n item.css = { \"text-align\": \"right\" };\r\n item.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: field.data_decimal,\r\n });\r\n }\r\n\r\n if (field.type_filter != null) {\r\n if (field.type_filter != \"\") {\r\n item.header = [_(item.header), { content: field.type_filter }];\r\n }\r\n }\r\n\r\n if (field.type_editor == \"combo\") {\r\n item.editor = field.type_editor;\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n\r\n if (field.type_filter == \"serverMultiSelectFilter\") {\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.value_filter;\r\n }\r\n if (field.type_filter == \"serverSelectFilter\") {\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.value_filter;\r\n }\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n item.format = function (text) {\r\n var format = webix.Date.dateToStr(this.columnFormat);\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (field.type_editor == \"checkbox\") {\r\n if (field.column_type == \"boolean\") {\r\n item.checkValue = true;\r\n item.uncheckValue = false;\r\n }\r\n\r\n item.template = function (obj, common, value) {\r\n if (value == true || value == 1) return \"
\";\r\n else return \"
\";\r\n };\r\n }\r\n\r\n if (field.column_width == null) {\r\n //item.fillspace = true;\r\n } else {\r\n item.width = field.column_width;\r\n }\r\n\r\n col.push(item);\r\n }\r\n }\r\n if (tab.tab_type == \"Detail\") {\r\n for (var j = 0; j < tab.Fields.length; j++) {\r\n var field = tab.Fields[j];\r\n\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n\r\n var subCol = {\r\n id: field.column_name,\r\n header: field.caption == null ? _(field.column_name) : _(field.caption),\r\n hidden: field.hide_in_grid,\r\n };\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n subCol.format = function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (field.column_type == \"numeric\") {\r\n subCol.css = { \"text-align\": \"right\" };\r\n }\r\n\r\n if (field.column_width == null) {\r\n subCol.fillspace = true;\r\n } else {\r\n subCol.width = field.column_width;\r\n }\r\n\r\n sub_col.push(subCol);\r\n }\r\n }\r\n }\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n var subview = {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n css: \"subInvoice\",\r\n scrollX: true,\r\n // tabbar: {\r\n // width: 200\r\n // },\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n margin: 10,\r\n id: \"hoadon68_chitiet_view\",\r\n height: 200,\r\n columns: sub_col,\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n };\r\n /*var subview = {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 200,\r\n scrollX: true,\r\n cells: sub_col,\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n };*/\r\n table.define(\"subview\", subview);\r\n $$(\"head-title\").show();\r\n $$(\"head-title\").removeView(\"paramKH\");\r\n $$(\"head-title\").addView(\r\n {\r\n id: \"paramKH\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [],\r\n },\r\n 1\r\n );\r\n if (vc_window.WinParams != undefined && vc_window.WinParams != null) {\r\n for (var i = 0; i < vc_window.WinParams.length; i++) {\r\n var item = vc_window.WinParams[i];\r\n var comp = {\r\n id: item.value_field,\r\n view: item.type_editor,\r\n width: item.width,\r\n label: _(item.caption),\r\n value_field: item.value_field,\r\n isDefault: item.has_default,\r\n on: {},\r\n };\r\n\r\n if (comp.view == \"combo\") {\r\n comp.options = {\r\n body: {\r\n comboId: comp.id,\r\n isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + item.wb_references_id,\r\n ready: function () {\r\n if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n if (count > 0) {\r\n var combo = webix.$$(this.config.comboId);\r\n combo.setValue(this.getFirstId());\r\n }\r\n }\r\n },\r\n },\r\n };\r\n\r\n comp.on.onChange = function (newv, oldv) {\r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n };\r\n }\r\n\r\n if (comp.view == 'search') {\r\n // Tạm thời fix code cho riêng trường th số hoá đơn này, cơ chế đặt view id này cần xem lại\r\n if(item.value_field == 'shdon') {\r\n comp.id = 'tlbparams_shdon';\r\n comp.placeholder = \"VD: 1-10,21-30,41-50\";\r\n }\r\n var validateFunc = function() {\r\n var value = $$(comp.id).getValue();\r\n if(item.value_field == 'shdon' && value && value != \"\") {\r\n var regex = /^\\d+(-\\d+)?(,\\d+(-\\d+)?)*$/;\r\n return regex.test(value);\r\n }\r\n return true;\r\n }\r\n comp.on.onSearchIconClick = function () {\r\n if(validateFunc()) { \r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(\"Không đúng định dạng: x,x hoặc x-x,x-x (x là số)\", \"error\");\r\n }\r\n };\r\n comp.on.onEnter = function (code, e) {\r\n if(validateFunc()) { \r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(\"Không đúng định dạng: x,x hoặc x-x,x-x (x là số)\", \"error\");\r\n }\r\n };\r\n }\r\n\r\n $$(\"paramKH\").removeView(item.value_field);\r\n $$(\"paramKH\").addView(comp);\r\n }\r\n\r\n // parentToolBar.addView(toolBarParams);\r\n }\r\n\r\n table.config.columns = col;\r\n table.refreshColumns();\r\n table.define(\"url\", loadUrl);\r\n table.getParentView().getParentView().getParentView().enable();\r\n table.getParentView().getParentView().getParentView().hideProgress();\r\n if (codewindow == \"WIN00788C\") {\r\n $$(\"btnBangKeOption\").hide();\r\n $$(\"btnPrintConvert\").hide();\r\n $$(\"btnPrint\").hide();\r\n $$(\"btnPrintVe\").hide();\r\n } else {\r\n $$(\"btnPrintVe\").hide();\r\n }\r\n };\r\n\r\n var loadUrl = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n //get count list combo ký hiệu\r\n var url = app.config.host + \"/Invoice68/GetDataInvoice\";\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n var table = $$(\"invoiceViews\");\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"params\", params);\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n /*if (item.filterType == \"serverDateRangeFilter\") {\r\n var startDate = item.value.start;\r\n if (startDate !== null && startDate !== undefined) {\r\n var hoursDiff = startDate.getHours() - startDate.getTimezoneOffset() / 60;\r\n var minutesDiff = (startDate.getHours() - startDate.getTimezoneOffset()) % 60;\r\n startDate.setHours(hoursDiff);\r\n startDate.setMinutes(minutesDiff);\r\n item.value.start = startDate;\r\n }\r\n\r\n var endDate = item.value.end;\r\n if (endDate !== null && endDate !== undefined) {\r\n var hoursDiff = endDate.getHours() - endDate.getTimezoneOffset() / 60;\r\n var minutesDiff = (endDate.getHours() - endDate.getTimezoneOffset()) % 60;\r\n endDate.setHours(hoursDiff);\r\n endDate.setMinutes(minutesDiff);\r\n item.value.end = endDate;\r\n }\r\n }*/\r\n\r\n if (params.filter[property] != null && params.filter[property] != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n var tlbParams = $$(\"paramKH\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n // Xử lý field name \r\n var child = childViews[i];\r\n var valueField = child.config.value_field;\r\n if(valueField == \"kyhieu_id\") {\r\n valueField = \"cctbao_id\"\r\n\r\n if(!child.getValue() || child.getValue() == \"\") {\r\n return;\r\n }\r\n }\r\n\r\n var item = {\r\n columnName: valueField,\r\n value: child.getValue(),\r\n };\r\n if (item.value !== \"\") {\r\n parameters.push(item);\r\n }\r\n //parameters.push(item);\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n\r\n // Lấy giá trị thông tin các trường đã có mã, không có mã, doanh thu\r\n var urlMiniDashBoard = url.replace(\"GetDataInvoice\", \"GetDataInvoiceThongTin\");\r\n webix.ajax().get(urlMiniDashBoard, function (text) {\r\n var json = JSON.parse(text);\r\n var windowno = app.path[1].params[0];\r\n if (windowno != \"WIN00788C\") {\r\n $$(\"choCapMa\").setValue(\"Số hóa đơn chờ cấp mã: \" + json[\"chocapma\"]);\r\n $$(\"choCapMaError\").setValue(\"Số hóa đơn CQT không cấp mã: \" + json[\"chocapmaerror\"]);\r\n $$(\"duocCapMa\").setValue(\"Số hóa đơn được cấp mã: \" + json[\"duoccapma\"]);\r\n $$(\"chuaGui\").setValue(\"Số hóa đơn chưa ký gửi CQT: \" + json[\"chuagui\"]);\r\n $$(\"doanhThu\").setValue(\"Doanh thu xuất hóa đơn: \" + (fm(json[\"doanhthu\"]) ? fm(json[\"doanhthu\"]) : 0));\r\n }\r\n });\r\n\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n var buttons = [];\r\n var initUI = function () {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n url,\r\n {\r\n command: \"CM00002\",\r\n parameter: {\r\n window_id: windowno,\r\n },\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (buttons.length > 0) {\r\n for (var i = 0; i < buttons.length; i++) {\r\n var item = buttons[i];\r\n $$(\"tlbMain\").removeView(item.id);\r\n }\r\n }\r\n\r\n buttons = [];\r\n var menus = [];\r\n\r\n var stt = controls.filter(function (x) {\r\n return x.id !== undefined;\r\n }).length;\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n var item = json[i];\r\n\r\n if (item.is_group_function == \"C\") {\r\n if (item.hidden != 1) {\r\n menus.push({\r\n id: item.name,\r\n value: _(item.caption),\r\n on_click: item.on_click,\r\n });\r\n }\r\n } else {\r\n if (item.hidden != 1) {\r\n var fn = new Function(item.on_click);\r\n\r\n var button = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: item.width,\r\n label: ' ' + '' + _(item.caption) + \"\",\r\n id: item.name,\r\n // label: _(item.caption),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-\" + item.icon,\r\n // width: item.width,\r\n click: fn,\r\n };\r\n\r\n buttons.push(button);\r\n $$(\"tlbMain\").addView(button, stt);\r\n\r\n stt = stt + 1;\r\n }\r\n }\r\n }\r\n $$(\"tlbMain\").removeView(\"btnChucNang\");\r\n if (menus.length > 0) {\r\n subChucNang.clearAll();\r\n subChucNang.parse(menus, \"json\");\r\n var btnChucNang = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"CHUC_NANG\") + \"\",\r\n id: \"btnChucNang\",\r\n // label: _(\"CHUC_NANG\"),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-tasks\",\r\n // width: 100,\r\n click: function () {\r\n subChucNang.show(webix.$$(\"btnChucNang\").$view);\r\n },\r\n };\r\n $$(\"tlbMain\").addView(btnChucNang, stt);\r\n }\r\n }\r\n );\r\n col = [];\r\n sub_col = [];\r\n\r\n var url = app.config.host + \"/System/GetConfigWinByNo?id=\" + windowno;\r\n webix.$$(\"invoiceViews\").getParentView().getParentView().getParentView().disable();\r\n webix.$$(\"invoiceViews\").getParentView().getParentView().getParentView().showProgress();\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n\r\n if (app_cache[windowno] != null) {\r\n windowconfig = app_cache[windowno];\r\n initComponents(windowconfig);\r\n } //không có cache\r\n else {\r\n webix.ajax(url, function (text, xml, xhr) {\r\n var rp = JSON.parse(text);\r\n windowconfig = rp;\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n app_cache[windowno] = windowconfig;\r\n\r\n webix.storage.local.put(\"APP_CACHE\", app_cache);\r\n initComponents(windowconfig);\r\n });\r\n }\r\n };\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.extend(view, webix.ProgressBar);\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n if(dataFormHd78) {\r\n var khID = dataFormHd78.GetData(\"KHID\");\r\n if(khID) {\r\n webix.$$(\"kyhieu_id\").setValue(khID);\r\n dataFormHd78.ClearData(\"KHID\");\r\n } \r\n }\r\n\r\n // load lai table\r\n table.clearAll();\r\n table.load(table.config.url);\r\n //if (editmode == 1) {\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n //}\r\n\r\n //if (editmode == 2) {\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n //}\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/windowhoadoncode78',[\r\n \"app\",\r\n \"locale\",\r\n \"models/user\",\r\n \"views/forms/formhoadoncode78\",\r\n \"views/forms/68_huyhoadon\",\r\n \"views/forms/68_huyhoadon_1\",\r\n \"views/forms/68_hoadon_history\",\r\n \"views/forms/lichsuemail\",\r\n \"views/commonHD\",\r\n \"views/Util\",\r\n \"views/forms/bienbanForm\",\r\n \"views/forms/68_hoadon_history_lienquan\",\r\n \"views/DataStorage/DataHoaDon78\"\r\n], function (app, _, user, invoiceForms, huyhoadon, huyhoadon_1, hoadonHistory, his_email, commonHD, Util, bienbanForm, hoadonlq, dataFormHd78) {\r\n \r\n var fm = function (number) {\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n });\r\n return k(number);\r\n };\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var item = this.getItem(id);\r\n\r\n this.hide();\r\n\r\n var fn = Function(\"_\", \"user\", item.on_click);\r\n fn(_, user);\r\n },\r\n },\r\n });\r\n\r\n var subBangKe = webix.ui({\r\n view: \"submenu\",\r\n width: 150,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"addBangKeHoaDon\",\r\n value: \"Thêm bảng kê\",\r\n },\r\n {\r\n id: \"EditBangKeHoaDon\",\r\n value: \"Sửa bảng kê\",\r\n },\r\n {\r\n id: \"InBangKeHoaDon\",\r\n value: \"In bảng kê\",\r\n },\r\n {\r\n id: \"ImportBangKeHoaDon\",\r\n value: \"Nhận Excel chi tiết\",\r\n }\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (record.id == \"addBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\" && item.tthai != \"Chờ duyệt\" && item.tthai != \"Chờ sinh số\") {\r\n webix.message(\"Vui lòng chọn hoá đơn chờ ký !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke != null) {\r\n webix.message(\"Hoá đơn đã có bảng kê không thể thêm !\", \"error\");\r\n return;\r\n }\r\n\r\n var detailForm = table.$scope.ui(invoiceForms.$ui);\r\n item.shdon = null;\r\n\r\n item.nlap = new Date(item.nlap);\r\n\r\n // ẩn tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = true;\r\n }\r\n\r\n invoiceForms.setEditMode(4); // editmode = 4(add bang ke chi tiet) // edit mode =5 (sửa bảng kê chi tiết)\r\n invoiceForms.initUI(windowconfig);\r\n //$$(\"phi_tab\").hide();\r\n $$(\"head-formInvoice\").define(\"template\", \"Bảng kê chi tiết hoá đơn\");\r\n $$(\"head-formInvoice\").refresh();\r\n\r\n webix.$$(\"infohdon\").disable();\r\n webix.$$(\"infokhang\").disable();\r\n\r\n webix.$$(\"shdon\").config.label = \"Số bảng kê\";\r\n //webix.$$(\"infohdon\").disable();\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Hóa đơn điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n invoiceForms.setValuesBangKe(item, null);\r\n detailForm.show();\r\n webix.$$(\"btnBangKeSave\").show();\r\n webix.$$(\"btnHoadonSave\").destructor();\r\n webix.$$(\"btnHoadonCQT\").destructor();\r\n }\r\n\r\n if (record.id == \"EditBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke == null) {\r\n webix.message(\"Hoá đơn chưa có bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n // ẩn tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = true;\r\n }\r\n\r\n //set số bảng kê cho form sửa bảng kê\r\n item.shdon = item.checksobangke;\r\n\r\n item.nlap = new Date(item.nlap);\r\n var detailForm = table.$scope.ui(invoiceForms.$ui);\r\n invoiceForms.setEditMode(5); // editmode = 4(add bang ke chi tiet) // edit mode =5 (sửa bảng kê chi tiết)\r\n invoiceForms.initUI(windowconfig);\r\n\r\n $$(\"head-formInvoice\").define(\"template\", \"Bảng kê chi tiết hoá đơn\");\r\n $$(\"head-formInvoice\").refresh();\r\n //set lại title số bảng kê\r\n webix.$$(\"shdon\").config.label = \"Số bảng kê\";\r\n\r\n webix.$$(\"infohdon\").disable();\r\n webix.$$(\"infokhang\").disable();\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Hóa đơn điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n invoiceForms.setValuesBangKe(item, null);\r\n detailForm.show();\r\n webix.$$(\"btnBangKeSave\").show();\r\n webix.$$(\"btnBangKeDelete\").show();\r\n webix.$$(\"btnHoadonSave\").destructor();\r\n webix.$$(\"btnHoadonCQT\").destructor();\r\n }\r\n\r\n if (record.id == \"InBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n // if (item.tthai != \"Chờ ký\") {\r\n // webix.message(\"Vui lòng chọn hoá đơn chờ ký !\", \"error\");\r\n // return;\r\n // }\r\n\r\n if (item.checksobangke == null) {\r\n webix.message(\"Hoá đơn chưa có bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false&checkBangKe=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n\r\n if (record.id == \"ImportBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\" && item.tthai != \"Chờ duyệt\" && item.tthai != \"Chờ sinh số\") {\r\n webix.message(\"Vui lòng chọn hoá đơn chờ ký !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke == null) {\r\n webix.message(\"Hoá đơn chưa có bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n var windowno = app.path[1].params[0];\r\n var excel_id_param = \"\";\r\n\r\n if (windowno != undefined && windowno == \"WIN00781C\") {\r\n excel_id_param = \"EX00018\";\r\n }\r\n else if (windowno != undefined && windowno == \"WIN00782C\") {\r\n excel_id_param = \"EX00019\";\r\n }\r\n else {\r\n webix.message(\"Chức năng nhận Excel chi tiết chưa có mẫu excel phù hợp!\", \"error\");\r\n return;\r\n }\r\n\r\n require([\"views/forms/uploadexcel\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id: excel_id_param, filename: \"MobiFone Invoice_nhan chi tiet mot bang ke.xlsx\", hdon_id: item.hdon_id });\r\n webix.$$(\"uploader\").hide();\r\n });\r\n }\r\n },\r\n },\r\n });\r\n\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu78\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n \"Thay thế\",\r\n { $template: \"Separator\" },\r\n \"Điều chỉnh tăng\",\r\n { $template: \"Separator\" },\r\n \"Điều chỉnh giảm\",\r\n { $template: \"Separator\" },\r\n \"Điều chỉnh thông tin\",\r\n { $template: \"Separator\" },\r\n // \"Hủy\",\r\n // { $template: \"Separator\" },\r\n \"Lịch sử gửi Email\",\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n var self = this;\r\n setTimeout(function () {\r\n var kyHieuHoaDon = {\r\n cctbao_id: $$(\"kyhieu_id\").getValue(),\r\n khieu: $$(\"kyhieu_id\").data.text,\r\n };\r\n\r\n if (self.getItem(id).value == \"Thay thế\") {\r\n commonHD.ExcuteReplaceInvoice(kyHieuHoaDon);\r\n }\r\n if (self.getItem(id).value == \"Điều chỉnh tăng\") {\r\n commonHD.ExcuteIncreaseChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Điều chỉnh giảm\") {\r\n commonHD.ExcuteReduceChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Điều chỉnh thông tin\") {\r\n commonHD.ExcuteInfoChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Hủy\") {\r\n commonHD.ExcuteCancellingInvoice();\r\n }\r\n\r\n if (self.getItem(id).value == \"Lịch sử gửi Email\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n var detailForm = webix.$$(\"invoiceViews\").$scope.ui(his_email.$ui);\r\n his_email.initUI(selectedItem.id);\r\n detailForm.show();\r\n }\r\n }, 100);\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Thêm (F4)\") + \"\",\r\n id: \"btnPlus\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n var cctbao_id = $$(\"kyhieu_id\").getValue();\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setNewInvoice();\r\n detailForm.show();\r\n // if (vc_window.after_new != null) {\r\n // var fn = Function(\"app\", vc_window.after_new);\r\n // fn(app);\r\n // }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Sửa (F3)\") + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n //var detailForm = this.$scope.ui(webix.$$(\"main\"));\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\" && item.tthai != \"Chờ duyệt\" && item.tthai != \"Chờ sinh số\") {\r\n webix.message(\"Hóa đơn đã ký hoặc đã gửi lên cơ quan thuế, không thể sửa !\", \"error\");\r\n return;\r\n }\r\n // main.setEditMode(0);\r\n // main.initUI(windowconfig);\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n item.nlap = new Date(item.nlap);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.setEditMode(2);\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Hóa đơn điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n invoiceForms.setValues(item, null);\r\n\r\n detailForm.show();\r\n //main.focusFirstElement();\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Xóa (F8)\") + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var lstDataChoose = commonHD.GetHoaDonChon();\r\n var lstDataChooseSort = lstDataChoose.sort(function (a, b) {\r\n return Number(a.shdon) - Number(b.shdon);\r\n });\r\n if (lstDataChooseSort.length === 0) return;\r\n var strHoaDonSelect = \" \";\r\n for (var i = 0; i < lstDataChooseSort.length; i++) {\r\n if (\r\n commonHD.CheckKhacNull(lstDataChooseSort[i].tthai) &&\r\n lstDataChooseSort[i].tthai != \"Chờ ký\" &&\r\n lstDataChooseSort[i].tthai != \"Chờ sinh số\" &&\r\n lstDataChooseSort[i].tthai != \"Chờ duyệt\"\r\n ) {\r\n webix.message(\"Không thể xóa hóa đơn đã ký,đã gửi !\", \"error\");\r\n return;\r\n }\r\n if (i < lstDataChooseSort.length - 1) {\r\n if (\r\n commonHD.CheckKhacNull(lstDataChooseSort[i].shdon) &&\r\n commonHD.CheckKhacNull(lstDataChooseSort[i + 1].shdon) &&\r\n Number(lstDataChooseSort[i + 1].shdon) - Number(lstDataChooseSort[i].shdon) >= 2\r\n ) {\r\n webix.message(\"Các hóa đơn xóa phải có số hóa đơn liên tiếp nhau\", \"error\");\r\n return;\r\n } else {\r\n strHoaDonSelect += lstDataChooseSort[i].shdon + \",\";\r\n }\r\n } else {\r\n strHoaDonSelect += lstDataChooseSort[i].shdon;\r\n }\r\n }\r\n var url = app.config.host + \"/Invoice68/hoadonXoaNhieu\";\r\n var data_post = { data: lstDataChooseSort };\r\n webix.confirm({\r\n title: \"XÓA HÓA ĐƠN\",\r\n text: \"Bạn có muốn xóa hóa đơn số: \" + strHoaDonSelect + \"\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n table.enable();\r\n table.hideProgress();\r\n return;\r\n } else {\r\n table.enable();\r\n table.clearAll();\r\n table.load(table.config.url);\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"COPY\") + \"\",\r\n id: \"btnCopy\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-files-o\",\r\n // label: _(\"COPY\"),\r\n // width: 85,\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n // var vc_window = windowconfig[\"data\"][0];\r\n // windowform.$ui.id = vc_window.code;\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n item.mccqthue = \"\";\r\n item.shdon = null;\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.copyValues(item);\r\n detailForm.show();\r\n\r\n // windowform.focusFirstElement();\r\n // if (vc_window.after_new != null) {\r\n // var fn = Function(vc_window.after_new);\r\n // fn();\r\n // }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Bảng kê\") + \"\",\r\n id: \"btnBangKeOption\",\r\n click: function () {\r\n subBangKe.show(webix.$$(\"btnBangKeOption\").$view);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n /*\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + \"In vé\" + \"\",\r\n id: \"btnPrintVe\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n \r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/Invoice68/inMauVe\",\r\n {\r\n id: item.id,\r\n type: \"0\",\r\n },\r\n {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"image/jpeg\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n }\r\n );\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n */\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"In chuyển đổi\") + \"\",\r\n id: \"btnPrintConvert\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {},\r\n {},\r\n {},\r\n {},\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n scrollX: true,\r\n scroll: true,\r\n //autowidth: true,\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n ShowHistory2: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonlq.$ui);\r\n var hdon_id = cell.row;\r\n hoadonlq.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n item.chon = !item.chon;\r\n table.updateItem(id.row, item);\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n $$(\"cmenu78\").refresh();\r\n $$(\"cmenu78\").sizeToContent();\r\n $$(\"cmenu78\").attachTo($$(\"invoiceViews\"));\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n var urlget = app.config.host + \"/Invoice68/GetDecimalPlace?ma_nt=\" + item[\"dvtte\"];\r\n webix\r\n .ajax()\r\n .sync()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlget, function (text) {\r\n var arr = JSON.parse(text);\r\n var arrayString_chitiet = [\"sluong\", \"dgia\", \"thtien\", \"stckhau\", \"tthue\", \"tgtien\", \"tienphi\"];\r\n for (var i = 0; i < arrayString_chitiet.length; i++) {\r\n var field_name = \"\";\r\n switch (arrayString_chitiet[i]) {\r\n case \"sluong\":\r\n field_name = \"quantity_decimal\";\r\n break;\r\n case \"dgia\":\r\n field_name = \"price_decimal\";\r\n break;\r\n case \"thtien\":\r\n field_name = \"amount_without_vat_decimal\";\r\n break;\r\n case \"stckhau\":\r\n field_name = \"price_discount\";\r\n break;\r\n case \"tthue\":\r\n field_name = \"tax_price\";\r\n break;\r\n case \"tgtien\":\r\n field_name = \"total_amount_decimal\";\r\n break;\r\n case \"tienphi\":\r\n field_name = \"fee_price\";\r\n break;\r\n }\r\n var decimal_place = Array(Number(arr[0][field_name]) + 1).join(\"9\");\r\n var decimal_format = Number(arr[0][field_name]);\r\n var format_numeric = {\r\n //maximumValue: Number(\"999999999999.\" + decimal_place),\r\n //minValue: Number(\"-999999999999.\" + decimal_place),\r\n decimalPlaces: Number(decimal_format),\r\n };\r\n var formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimal_format,\r\n };\r\n var formatSo = webix.Number.numToStr(formatSoDefault);\r\n\r\n var format_config = tableDetail.getColumnConfig(arrayString_chitiet[i]);\r\n\r\n format_config.format = formatSo;\r\n format_config.numericConfig = format_numeric;\r\n }\r\n });\r\n\r\n tableDetail.load(url);\r\n\r\n var data = tableDetail.serialize();\r\n console.log(data);\r\n }\r\n },\r\n },\r\n subview: {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n css: \"subInvoice\",\r\n scrollX: true,\r\n // tabbar: {\r\n // width: 200\r\n // },\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n margin: 10,\r\n id: \"hoadon68_chitiet_view\",\r\n height: 200,\r\n columns: [],\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n columns: col,\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n table.getColumnConfig;\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var mini_dashboard = {\r\n type: \"clean\",\r\n borderless: true,\r\n cols: [\r\n {\r\n id: \"choCapMa\",\r\n name: \"choCapMa\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"choCapMaError\",\r\n name: \"choCapMaError\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"duocCapMa\",\r\n name: \"duocCapMa\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"chuaGui\",\r\n name: \"chuaGui\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"doanhThu\",\r\n name: \"doanhThu\",\r\n view: \"label\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n id: \"main\",\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n rows: [mini_dashboard],\r\n },\r\n {\r\n id: \"tlbMain\",\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n var col = [];\r\n var sub_col = [];\r\n var windowconfig = null;\r\n var kihieuRefId = null;\r\n\r\n var initComponents = function (_windowconfig) {\r\n // console.log('window_config',_windowconfig);\r\n var k = Object.keys(_windowconfig[\"data\"][0][\"Tabs\"]).length;\r\n //console.log(k);\r\n var vc_window = _windowconfig[\"data\"][0];\r\n webix.$$(\"title\").parse({ title: vc_window[\"name\"], details: \"Lập hóa đơn ->\" + vc_window[\"name\"], width: 500 });\r\n var tabs = vc_window.Tabs;\r\n var codewindow = app.path[1].params[0];\r\n var windowno = vc_window.window_id;\r\n kihieuRefId = \"RF00054\";\r\n col = [];\r\n sub_col = [];\r\n col.push({\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n });\r\n col.push({\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n }); for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n if (tab.tab_type === \"Master\") {\r\n var masterTab = tabs[i];\r\n for (var j = 0; j < tabs[i].Fields.length; j++) {\r\n var field = masterTab.Fields[j];\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n var item = {\r\n id: field.column_name,\r\n header: _(field.column_name),\r\n columnType: field.column_type,\r\n columnAlias: field.column_alias,\r\n template: field.template,\r\n columnFormat: field.format,\r\n //adjust: true,\r\n };\r\n if (item.template !== undefined && item.template !== null && item.template.includes(\"function\")) item.template = Util.StringToFunc(item.template);\r\n //if(item.format!== undefined && item.format!== null && item.format.includes(\"function\")) item.template = Util.StringToFunc(item.format);\r\n if (field.caption != null) {\r\n item.header = _(field.caption);\r\n }\r\n\r\n if (field.column_type == \"numeric\") {\r\n item.css = { \"text-align\": \"right\" };\r\n item.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: field.data_decimal,\r\n });\r\n }\r\n\r\n if (field.type_filter != null) {\r\n if (field.type_filter != \"\") {\r\n item.header = [_(item.header), { content: field.type_filter }];\r\n }\r\n }\r\n\r\n if (field.type_editor == \"combo\") {\r\n item.editor = field.type_editor;\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n\r\n if (field.type_filter == \"serverMultiSelectFilter\") {\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.value_filter;\r\n }\r\n if (field.type_filter == \"serverSelectFilter\") {\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.value_filter;\r\n }\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n item.format = function (text) {\r\n var format = webix.Date.dateToStr(this.columnFormat);\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (field.type_editor == \"checkbox\") {\r\n if (field.column_type == \"boolean\") {\r\n item.checkValue = true;\r\n item.uncheckValue = false;\r\n }\r\n\r\n item.template = function (obj, common, value) {\r\n if (value == true || value == 1) return \"
\";\r\n else return \"
\";\r\n };\r\n }\r\n\r\n if (field.column_width == null) {\r\n //item.fillspace = true;\r\n } else {\r\n item.width = field.column_width;\r\n }\r\n\r\n col.push(item);\r\n }\r\n }\r\n if (tab.tab_type == \"Detail\") {\r\n for (var j = 0; j < tab.Fields.length; j++) {\r\n var field = tab.Fields[j];\r\n\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n\r\n var subCol = {\r\n id: field.column_name,\r\n header: field.caption == null ? _(field.column_name) : _(field.caption),\r\n hidden: field.hide_in_grid,\r\n };\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n subCol.format = function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (field.column_type == \"numeric\") {\r\n subCol.css = { \"text-align\": \"right\" };\r\n }\r\n\r\n if (field.column_width == null) {\r\n subCol.fillspace = true;\r\n } else {\r\n subCol.width = field.column_width;\r\n }\r\n\r\n sub_col.push(subCol);\r\n }\r\n }\r\n }\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n var subview = {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n css: \"subInvoice\",\r\n scrollX: true,\r\n // tabbar: {\r\n // width: 200\r\n // },\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n margin: 10,\r\n id: \"hoadon68_chitiet_view\",\r\n height: 200,\r\n columns: sub_col,\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n };\r\n /*var subview = {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 200,\r\n scrollX: true,\r\n cells: sub_col,\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n };*/\r\n table.define(\"subview\", subview);\r\n $$(\"head-title\").show();\r\n $$(\"head-title\").removeView(\"paramKH\");\r\n $$(\"head-title\").addView(\r\n {\r\n id: \"paramKH\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [],\r\n },\r\n 1\r\n );\r\n if (vc_window.WinParams != undefined && vc_window.WinParams != null) {\r\n for (var i = 0; i < vc_window.WinParams.length; i++) {\r\n var item = vc_window.WinParams[i];\r\n var comp = {\r\n id: item.value_field,\r\n view: item.type_editor,\r\n width: item.width,\r\n label: _(item.caption),\r\n value_field: item.value_field,\r\n isDefault: item.has_default,\r\n on: {\r\n },\r\n };\r\n\r\n if (comp.view == \"combo\") {\r\n comp.options = {\r\n body: {\r\n comboId: comp.id,\r\n isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + item.wb_references_id,\r\n ready: function () {\r\n if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n if (count > 0) {\r\n var combo = webix.$$(this.config.comboId);\r\n combo.setValue(this.getFirstId());\r\n }\r\n }\r\n },\r\n },\r\n };\r\n\r\n comp.on.onChange = function (newv, oldv) {\r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n };\r\n }\r\n\r\n if (comp.view == 'search') {\r\n // Tạm thời fix code cho riêng trường th số hoá đơn này, cơ chế đặt view id này cần xem lại\r\n if(item.value_field == 'shdon') {\r\n comp.id = 'tlbparams_shdon';\r\n comp.placeholder = \"VD: 1-10,21-30,41-50\";\r\n }\r\n var validateFunc = function() {\r\n var value = $$(comp.id).getValue();\r\n if(item.value_field == 'shdon' && value && value != \"\") {\r\n var regex = /^\\d+(-\\d+)?(,\\d+(-\\d+)?)*$/;\r\n return regex.test(value);\r\n }\r\n return true;\r\n }\r\n comp.on.onSearchIconClick = function () {\r\n if(validateFunc()) { \r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(\"Không đúng định dạng: x,x hoặc x-x,x-x (x là số)\", \"error\");\r\n }\r\n };\r\n comp.on.onEnter = function (code, e) {\r\n if(validateFunc()) { \r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(\"Không đúng định dạng: x,x hoặc x-x,x-x (x là số)\", \"error\");\r\n }\r\n };\r\n }\r\n\r\n $$(\"paramKH\").removeView(comp.id);\r\n $$(\"paramKH\").addView(comp);\r\n }\r\n\r\n\r\n // parentToolBar.addView(toolBarParams);\r\n }\r\n\r\n table.config.columns = col;\r\n table.refreshColumns();\r\n table.define(\"url\", loadUrl);\r\n table.getParentView().getParentView().getParentView().enable();\r\n table.getParentView().getParentView().getParentView().hideProgress();\r\n };\r\n\r\n var loadUrl = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n //get count list combo ký hiệu\r\n var url = app.config.host + \"/Invoice68/GetDataInvoice\";\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n var table = $$(\"invoiceViews\");\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"params\", params);\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n /*if (item.filterType == \"serverDateRangeFilter\") {\r\n var startDate = item.value.start;\r\n if (startDate !== null && startDate !== undefined) {\r\n var hoursDiff = startDate.getHours() - startDate.getTimezoneOffset() / 60;\r\n var minutesDiff = (startDate.getHours() - startDate.getTimezoneOffset()) % 60;\r\n startDate.setHours(hoursDiff);\r\n startDate.setMinutes(minutesDiff);\r\n item.value.start = startDate;\r\n }\r\n\r\n var endDate = item.value.end;\r\n if (endDate !== null && endDate !== undefined) {\r\n var hoursDiff = endDate.getHours() - endDate.getTimezoneOffset() / 60;\r\n var minutesDiff = (endDate.getHours() - endDate.getTimezoneOffset()) % 60;\r\n endDate.setHours(hoursDiff);\r\n endDate.setMinutes(minutesDiff);\r\n item.value.end = endDate;\r\n }\r\n }*/\r\n\r\n if (params.filter[property] != null && params.filter[property] != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n var tlbParams = $$(\"paramKH\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n // Xử lý field name \r\n var child = childViews[i];\r\n var valueField = child.config.value_field;\r\n if(valueField == \"kyhieu_id\") {\r\n valueField = \"cctbao_id\"\r\n\r\n if(!child.getValue() || child.getValue() == \"\") {\r\n return;\r\n }\r\n }\r\n\r\n var item = {\r\n columnName: valueField,\r\n value: child.getValue(),\r\n };\r\n if (item.value !== \"\") {\r\n parameters.push(item);\r\n }\r\n //parameters.push(item);\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n\r\n // Lấy giá trị thông tin các trường đã có mã, không có mã, doanh thu\r\n var urlMiniDashBoard = url.replace(\"GetDataInvoice\", \"GetDataInvoiceThongTin\");\r\n webix.ajax().get(urlMiniDashBoard, function (text) {\r\n var json = JSON.parse(text);\r\n var windowno = app.path[1].params[0];\r\n if (windowno != \"WIN00788C\") {\r\n $$(\"choCapMa\").setValue(\"Số hóa đơn chờ cấp mã: \" + json[\"chocapma\"]);\r\n $$(\"choCapMaError\").setValue(\"Số hóa đơn CQT không cấp mã: \" + json[\"chocapmaerror\"]);\r\n $$(\"duocCapMa\").setValue(\"Số hóa đơn được cấp mã: \" + json[\"duoccapma\"]);\r\n $$(\"chuaGui\").setValue(\"Số hóa đơn chưa ký gửi CQT: \" + json[\"chuagui\"]);\r\n $$(\"doanhThu\").setValue(\"Doanh thu xuất hóa đơn: \" + (fm(json[\"doanhthu\"]) ? fm(json[\"doanhthu\"]) : 0));\r\n }\r\n });\r\n\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n var buttons = [];\r\n var initUI = function () {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n url,\r\n {\r\n command: \"CM00002\",\r\n parameter: {\r\n window_id: windowno,\r\n },\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (buttons.length > 0) {\r\n for (var i = 0; i < buttons.length; i++) {\r\n var item = buttons[i];\r\n $$(\"tlbMain\").removeView(item.id);\r\n }\r\n }\r\n\r\n buttons = [];\r\n var menus = [];\r\n\r\n var stt = controls.filter(function (x) {\r\n return x.id !== undefined;\r\n }).length;\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n var item = json[i];\r\n\r\n if (item.is_group_function == \"C\") {\r\n if (item.hidden != 1) {\r\n menus.push({\r\n id: item.name,\r\n value: _(item.caption),\r\n on_click: item.on_click,\r\n });\r\n }\r\n } else {\r\n if (item.hidden != 1) {\r\n var fn = new Function(item.on_click);\r\n\r\n var button = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: item.width,\r\n label: ' ' + '' + _(item.caption) + \"\",\r\n id: item.name,\r\n // label: _(item.caption),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-\" + item.icon,\r\n // width: item.width,\r\n click: fn,\r\n };\r\n\r\n buttons.push(button);\r\n $$(\"tlbMain\").addView(button, stt);\r\n\r\n stt = stt + 1;\r\n }\r\n }\r\n }\r\n $$(\"tlbMain\").removeView(\"btnChucNang\");\r\n if (menus.length > 0) {\r\n subChucNang.clearAll();\r\n subChucNang.parse(menus, \"json\");\r\n var btnChucNang = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"CHUC_NANG\") + \"\",\r\n id: \"btnChucNang\",\r\n // label: _(\"CHUC_NANG\"),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-tasks\",\r\n // width: 100,\r\n click: function () {\r\n subChucNang.show(webix.$$(\"btnChucNang\").$view);\r\n },\r\n };\r\n $$(\"tlbMain\").addView(btnChucNang, stt);\r\n }\r\n }\r\n );\r\n col = [];\r\n sub_col = [];\r\n\r\n var url = app.config.host + \"/System/GetConfigWinByNo?id=\" + windowno;\r\n webix.$$(\"invoiceViews\").getParentView().getParentView().getParentView().disable();\r\n webix.$$(\"invoiceViews\").getParentView().getParentView().getParentView().showProgress();\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n\r\n if (app_cache[windowno] != null) {\r\n windowconfig = app_cache[windowno];\r\n initComponents(windowconfig);\r\n } //không có cache\r\n else {\r\n webix.ajax(url, function (text, xml, xhr) {\r\n var rp = JSON.parse(text);\r\n windowconfig = rp;\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n app_cache[windowno] = windowconfig;\r\n\r\n webix.storage.local.put(\"APP_CACHE\", app_cache);\r\n initComponents(windowconfig);\r\n });\r\n }\r\n };\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.extend(view, webix.ProgressBar);\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n if(dataFormHd78) {\r\n var khID = dataFormHd78.GetData(\"KHID\");\r\n if(khID) {\r\n webix.$$(\"kyhieu_id\").setValue(khID);\r\n dataFormHd78.ClearData(\"KHID\");\r\n } \r\n } \r\n\r\n table.clearAll();\r\n table.load(table.config.url);\r\n //if (editmode == 1) {\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n //}\r\n\r\n //if (editmode == 2) {\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n //}\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('locales/en',[], function () {\r\n return {\r\n \"TUCHOI\":\"Reject\",\r\n \"them\": \"Add\",\r\n \"sua\": \"Edit\",\r\n \"dangnhap\": \"Login\",\r\n \"DONVI\": \"Company\",\r\n \"DANGKY\": \"Register\",\r\n \"QUENMK\": \"Forgot password\",\r\n \"USERNAME\": \"User name\",\r\n \"PASSWORD\": \"Pass word\",\r\n \"REMEMBERME\": \"Rememberme\",\r\n \"DANGNHAP\": \"Login\",\r\n \"DANGNHAPSSO\": \"SSO\"\r\n };\r\n});\ndefine('locales/ko',[], function () {\r\n return {\r\n \"DONVI\": \"회사\",\r\n \"DANGKY\": \"등록\",\r\n \"QUENMK\": \"비밀 번호 잊어 버려\",\r\n \"THEM\": \"더하다\",\r\n \"SUA\": \"편집하다\",\r\n \"XOA\": \"지우다\",\r\n \"COPY\": \"부\",\r\n \"USERNAME\": \"사용자 이름\",\r\n \"PASSWORD\": \"암호\",\r\n \"REMEMBERME\": \"생각해 내다\",\r\n \"DANGNHAP\": \"로그인\",\r\n \"DANGNHAPSSO\": \"SSO\",\r\n \"MAU_HD\": \"Mẫu hóa đơn\",\r\n \"KY_HIEU\": \"Ký hiệu\",\r\n \"MAUIN\": \"Mẫu in\",\r\n \"SO_HDON\": \"Số hóa đơn\",\r\n \"NGAY_HDON\": \"Ngày hóa đơn\",\r\n \"TEN_DON_VI\": \"Tên đơn vị\",\r\n \"TEN_NGUOI_MUA\": \"Tên người mua\",\r\n \"SO_DH\": \"Số đơn hàng\",\r\n \"MA_DT\": \"Mã đối tượng\",\r\n \"MS_THUE\": \"Mã số thuế\",\r\n \"DIA_CHI\": \"Địa chỉ\",\r\n \"TK_BEN_MUA\": \"TK Bên Mua\",\r\n \"NGAN_HANG_BEN_MUA\": \"NH Bên Mua\",\r\n \"TK_BEN_BAN\": \"TK Bên Bán\",\r\n \"NGAN_HANG_BEN_BAN\": \"NH Bên Bán\",\r\n \"HT_TT\": \"HT thanh toán\",\r\n \"PRINT\": \"Xem/In\",\r\n \"MA_HV\": \"Mã hàng\",\r\n \"TEN_HV\": \"Tên hàng\",\r\n \"DVT\": \"ĐVT\",\r\n \"SO_LUONG\": \"Số lượng\",\r\n \"GIA\": \"Giá\",\r\n \"TIEN\": \"Tiền\",\r\n \"PT_CK\": \"% CK\",\r\n \"TIEN_CK\": \"Tiền CK\",\r\n \"MA_THUE\": \"Mã thuế\",\r\n \"TIEN_THUE\": \"Tiền thuế\",\r\n \"THANH_TIEN\": \"Thành tiền\",\r\n \"MA\": \"Mã\",\r\n \"TEN\": \"Tên\",\r\n \"DUYET\": \"Duyệt\",\r\n \"PHAN_QUYEN\": \"Phân quyền\",\r\n \"CHUC_NANG\": \"Chức năng\",\r\n \"BAO_CAO\": \"Báo cáo\",\r\n \"TEN_CHUC_NANG\": \"Tên chức năng\",\r\n \"TEN_MAU\": \"Tên mẫu\",\r\n \"LOAI_HOA_DON\": \"Loại hóa đơn\",\r\n \"HINH_THUC\": \"Hình thức\",\r\n \"MAU_SO\": \"Mẫu số\",\r\n \"SO_LIEN\": \"Số liên\",\r\n \"DA_KY\": \"Đã ký\",\r\n \"TRANG_THAI_MAU\": \"Trạng thái mẫu\",\r\n \"NGAY_TB\": \"Ngày thông báo\",\r\n \"NGUOI_DAI_DIEN_PL\": \"Người đại diện pháp luật\",\r\n \"DON_VI_CHU_QUAN\": \"Đơn vị chủ quản\",\r\n \"CO_QUAN_THUE_NHAN_TB\": \"Cơ quan thuế nhận thông báo\",\r\n \"TRANG_THAI\": \"Trạng thái\",\r\n \"MA_LOAI\": \"Mã loại\",\r\n \"TEN_LOAI\": \"Tên loại\",\r\n \"TU_SO\": \"Từ số\",\r\n \"DEN_SO\": \"Đến số\",\r\n \"NGAY_BD_SD\": \"Ngày bắt đầu sử dụng\",\r\n \"DN_IN\": \"Doanh nghiệp In/Cung cấp phần mềm\",\r\n \"MAU_HDON\": \"Mẫu hóa đơn\",\r\n \"TEN_DT\": \"Tên đối tượng\",\r\n \"CHUC_VU\": \"Chức vụ\",\r\n \"DIEN_THOAI\": \"Điện thoại\",\r\n \"DAI_DIEN\": \"Đại diện\",\r\n \"SU_DUNG\": \"Sử dụng\",\r\n \"EXPORT_XML\": \"Kết xuất XML\",\r\n \"NGUOI_KY\": \"Người ký\",\r\n \"SO_SERIAL\": \"Số serial\",\r\n \"MA_DVT\": \"Mã ĐVT\",\r\n \"TEN_DVT\": \"Tên ĐVT\",\r\n \"CHU_KY_SO\": \"Chữ ký số\",\r\n \"CHON\": \"Chọn\",\r\n \"TINH_THANH\": \"Tỉnh thành\",\r\n \"NGAY_BD_NAM_TC\": \"Ngày bắt đầu năm tài chính\",\r\n \"TAI_KHOAN\": \"Tài khoản\",\r\n \"TAI_NH\": \"Tại ngân hàng\",\r\n \"EMAIL\": \"Email\",\r\n \"SUBJECTNAME\": \"Chủ thể\",\r\n \"SIGN\": \"Ký\",\r\n \"KY_HOA_DON\": \"Ký hóa đơn\",\r\n \"DC_DINH_DANH\": \"Điều chỉnh định danh\",\r\n \"SOVB\": \"Số văn bản\",\r\n \"NGAYVB\": \"Ngày văn bản\",\r\n \"DIEN_GIAI\": \"Diễn giải\",\r\n \"SEARCH\": \"Tìm kiếm\",\r\n \"TIM_CHI_TIET\": \"Tìm chi tiết\",\r\n \"NGUOI_LAP\": \"Người lập\",\r\n \"TRANG_THAI_HDON\": \"Trạng thái hóa đơn\",\r\n \"TU_NGAY\": \"Từ ngày\",\r\n \"DEN_NGAY\": \"Đến ngày\",\r\n \"NGUOI_NHAN\": \"Người nhận\",\r\n \"TIEU_DE\": \"Tiêu đề\",\r\n \"NOI_DUNG\": \"Nội dung\",\r\n \"SEND_EMAIL_INVOICE\": \"Gửi hóa đơn qua email\",\r\n \"KHUYEN_MAI\": \"Khuyến mãi\",\r\n \"TIEU_THUC\": \"Tiêu thức\",\r\n \"DC_TANG\": \"Điều chỉnh tăng\",\r\n \"DC_GIAM\": \"Điều chỉnh giảm\",\r\n \"HDON_THAY_THE\": \"Hóa đơn thay thế\",\r\n \"REFRESH\": \"Tải dữ liệu\",\r\n \"EXPORT\": \"Kết xuất\",\r\n \"EXPORT_EXCEL\": \"Kết xuất Excel\",\r\n \"XOA_BO\": \"Xóa bỏ\",\r\n \"MST_BEN_BAN\": \"MST Bên bán\",\r\n \"MST_BEN_MUA\": \"MST Bên mua\",\r\n \"HDON_CT_BRA\": \"Hóa đơn chứng từ bán ra\",\r\n \"TIEN_TRUOC_THUE\": \"Tiền trước thuế\",\r\n \"TIEN_THUE_10\": \"10%\",\r\n \"TIEN_THUE_05\": \"5%\",\r\n \"TIEN_THUE_00\": \"0%\",\r\n \"KHONG_CHIU_THUE\": \"Không chịu thuế\",\r\n \"KHONG_KK\": \"Không kê khai\",\r\n \"GHI_CHU\": \"Ghi chú\",\r\n \"IMPORT_EXCEL\": \"Nhận Excel\",\r\n \"NGUOI_GUI\": \"Người gửi\",\r\n \"KY_HOA_DON_CHO_KY\": \"Ký hóa đơn chờ ký\",\r\n \"SMTP_SERVER\": \"SMTP Server\",\r\n \"SMTP_PORT\": \"SMTP Port\",\r\n \"enableSSL\": \"Enable SSL\",\r\n \"LOAI\": \"Loại\",\r\n \"SEND_EMAIL_CONFIRM\": \"Email yêu cầu ký xác nhận\",\r\n \"NHOM\": \"Nhóm\",\r\n \"GIA_BAN\": \"Giá bán\",\r\n \"DANG_KY\": \"Đăng ký\",\r\n \"SL_HD_DK\": \"Số lượng hóa đơn đã đăng ký\",\r\n \"KEY_LICENSE\": \"Key bản quyền\",\r\n \"SL_HD_THEM\": \"Số lượng hóa đơn đăng ký thêm\",\r\n \"GIA_TRI\": \"Giá trị\",\r\n \"NGAY_BAT_DAU\": \"Ngày bắt đầu\",\r\n \"NGAY_KET_THUC\": \"Ngày kết thúc\",\r\n \"TOKEN_SERIAL\": \"TOKEN SERIAL\",\r\n \"CHUYEN_DOI\": \"Chuyển đổi\",\r\n \"SO_TK\": \"Số tài khoản\"\r\n };\r\n});\ndefine('locales/vi',[], function () {\r\n return {\r\n \"from_number\": \"Từ số\",\r\n \"to_number\": \"Đến số\",\r\n \"TUCHOI\": \"Từ chối\",\r\n \"amount_to_word\": \"Thành tiền bằng chữ\",\r\n \"INVOICE_STATUS\": \"Trạng thái hóa đơn\",\r\n \"status\": \"Trạng thái\",\r\n \"invoice_issued_date\": \"Ngày hóa đơn\",\r\n \"invoice_number\": \"Số hóa đơn\",\r\n \"buyer_taxcode\": \"Mã số thuế\",\r\n \"buyer_legal_name\": \"Tên đơn vị\",\r\n \"total_amount_without_vat\": \"Tiền trước thuế\",\r\n \"discount_amount\": \"Tiền chiết khấu\",\r\n \"vat_amount\": \"Tiền thuế\",\r\n \"total_amount\": \"Tổng tiền\",\r\n \"template_code\": \"Mẫu số\",\r\n \"invoice_series\": \"Ký hiệu\",\r\n \"buyer_bank_account\": \"TK Bên mua\",\r\n \"buyer_bank_name\": \"NH Bên mua \",\r\n \"buyer_address_line\": \"Địa chỉ\",\r\n \"customer_code\": \"Mã khách hàng\",\r\n \"item_name\": \"Tên hàng\",\r\n \"item_code\": \"Mã hàng\",\r\n \"unit_code\": \"ĐVT\",\r\n \"quantity\": \"Số lượng\",\r\n \"unit_price\": \"Đơn giá\",\r\n \"discount_percentage\": \"% Chiết khấu\",\r\n \"tax_type\": \"Mã thuế\",\r\n \"promotion\": \"Khuyến mại\",\r\n \"buyer_display_name\": \"Tên người mua\",\r\n \"buyer_email\": \"Email\",\r\n \"payment_method_name\": \"Hình thức thanh toán\",\r\n \"CODE\": \"Mã\",\r\n \"NAME\": \"Tên\",\r\n \"PL_CUSTOMER_GROUP_ID\": \"Nhóm khách hàng\",\r\n \"TAX_CODE\": \"Mã số thuế\",\r\n \"BUYER_NAME\": \"Tên người mua\",\r\n \"TEL\": \"Số điện thoại\",\r\n \"MOBILE\": \"Di động\",\r\n \"ADDRESS\": \"Địa chỉ\",\r\n \"PL_GOODS_GROUP_ID\": \"Nhóm hàng hóa\",\r\n \"UNIT_CODE\": \"Đơn vị tính\",\r\n \"VAT_TYPE\": \"% Thuế\",\r\n \"UNIT_PRICE\": \"Đơn giá\",\r\n \"VAT_PERCENTAGE\": \"% Thuế\",\r\n \"BANK_ACCOUNT\": \"Tài khoản ngân hàng\",\r\n \"BANK_NAME\": \"Tên ngân hàng\",\r\n \"VAT_PERCENTAGE\": \"% Thuế\",\r\n \"COMPANY_NAME\": \"Tên công ty\",\r\n \"NOTIFICATION_DATE\": \"Ngày thông báo\",\r\n \"TAXCODE\": \"Mã số thuế\",\r\n \"INVOICE_TYPE\": \"Hình thức\",\r\n \"QUANTITY\": \"Số lượng\",\r\n \"INVOICE_SERIES\": \"Ký hiệu\",\r\n \"FROM_NUMBER\": \"Từ số\",\r\n \"TO_NUMBER\": \"Đến số\",\r\n \"TEMPLATE_CODE\": \"Mẫu số\",\r\n \"QUANTITY_DECIMAL\": \"Số chữ số thập phân số lượng\",\r\n \"PRICE_DECIMAL\": \"Số chữ số thập phân đơn giá\",\r\n\r\n \"BEGIN_DATE\": \"Ngày bắt đầu\",\r\n \"MST\": \"Mã số thuế\",\r\n \"TEN_NCC\": \"Tên nhà cung cấp\",\r\n \"THUONG_HIEU\": \"Thương hiệu\",\r\n \"LINK_TRACUU\": \"Link Tra cứu\",\r\n \"Bạn chưa chọn hóa đơn\": \"Not select Invoie\",\r\n \"IMPORT_EXCEL_CT\": \"Nhận Excel chi tiết\",\r\n \"ma_dt\": \"Mã đối tượng\",\r\n \"ten_dt\": \"Tên đối tượng\",\r\n \"THEM\": \"Thêm\",\r\n \"SUA\": \"Sửa\",\r\n \"XOA\": \"Xóa\",\r\n \"COPY\": \"Sao chép\",\r\n \"USERNAME\": \"Tên truy cập\",\r\n \"PASSWORD\": \"Mật khẩu\",\r\n \"REMEMBERME\": \"Ghi nhớ tài khoản\",\r\n \"DANGNHAP\": \"Đăng nhập\",\r\n \"DANGNHAPSSO\": \"SSO\",\r\n \"DANGKY\": \"Đăng ký\",\r\n \"QUENMK\": \"Quên mật khẩu\",\r\n \"MAU_HD\": \"Mẫu hóa đơn\",\r\n \"KY_HIEU\": \"Ký hiệu\",\r\n \"BRANCH_CODE\": \"Đơn vị\",\r\n \"MAUIN\": \"Mẫu in\",\r\n \"SO_HDON\": \"Số hóa đơn\",\r\n \"NGAY_HDON\": \"Ngày hóa đơn\",\r\n \"TEN_DON_VI\": \"Tên đơn vị\",\r\n \"TEN_NGUOI_MUA\": \"Tên người mua\",\r\n \"SO_DH\": \"Số đơn hàng\",\r\n \"MA_DT\": \"Mã đối tượng\",\r\n \"MS_THUE\": \"Mã số thuế\",\r\n \"DIA_CHI\": \"Địa chỉ\",\r\n \"TK_BEN_MUA\": \"TK Bên Mua\",\r\n \"NGAN_HANG_BEN_MUA\": \"NH Bên Mua\",\r\n \"TK_BEN_BAN\": \"TK Bên Bán\",\r\n \"NGAN_HANG_BEN_BAN\": \"NH Bên Bán\",\r\n \"HT_TT\": \"HT thanh toán\",\r\n \"PRINT\": \"Xem/In\",\r\n \"MA_HV\": \"Mã hàng\",\r\n \"TEN_HV\": \"Tên hàng\",\r\n \"DVT\": \"ĐVT\",\r\n \"SO_LUONG\": \"Số lượng\",\r\n \"GIA\": \"Giá\",\r\n \"TIEN\": \"Tiền\",\r\n \"PT_CK\": \"% CK\",\r\n \"TIEN_CK\": \"Tiền CK\",\r\n \"MA_THUE\": \"Mã thuế\",\r\n \"TIEN_THUE\": \"Tiền thuế\",\r\n \"THANH_TIEN\": \"Thành tiền\",\r\n \"MA\": \"Mã\",\r\n \"TEN\": \"Tên\",\r\n \"DUYET\": \"Duyệt\",\r\n \"PHAN_QUYEN\": \"Phân quyền\",\r\n \"CHUC_NANG\": \"Chức năng\",\r\n \"BAO_CAO\": \"Báo cáo\",\r\n \"TEN_CHUC_NANG\": \"Tên chức năng\",\r\n \"TEN_MAU\": \"Tên mẫu\",\r\n \"LOAI_HOA_DON\": \"Loại hóa đơn\",\r\n \"HINH_THUC\": \"Hình thức\",\r\n \"MAU_SO\": \"Mẫu số\",\r\n \"SO_LIEN\": \"Số liên\",\r\n \"DA_KY\": \"Đã ký\",\r\n \"TRANG_THAI_MAU\": \"Trạng thái mẫu\",\r\n \"NGAY_TB\": \"Ngày thông báo\",\r\n \"NGUOI_DAI_DIEN_PL\": \"Người đại diện pháp luật\",\r\n \"DON_VI_CHU_QUAN\": \"Đơn vị chủ quản\",\r\n \"CO_QUAN_THUE_NHAN_TB\": \"Cơ quan thuế nhận thông báo\",\r\n \"TRANG_THAI\": \"Trạng thái\",\r\n \"MA_LOAI\": \"Mã loại\",\r\n \"TEN_LOAI\": \"Tên loại\",\r\n \"TU_SO\": \"Từ số\",\r\n \"DEN_SO\": \"Đến số\",\r\n \"NGAY_BD_SD\": \"Ngày bắt đầu sử dụng\",\r\n \"DN_IN\": \"Doanh nghiệp In/Cung cấp phần mềm\",\r\n \"MAU_HDON\": \"Mẫu hóa đơn\",\r\n \"TEN_DT\": \"Tên đối tượng\",\r\n \"CHUC_VU\": \"Chức vụ\",\r\n \"DIEN_THOAI\": \"Điện thoại\",\r\n \"DAI_DIEN\": \"Đại diện\",\r\n \"SU_DUNG\": \"Sử dụng\",\r\n \"EXPORT_XML\": \"Kết xuất XML\",\r\n \"NGUOI_KY\": \"Người ký\",\r\n \"SO_SERIAL\": \"Ký hiệu\",\r\n \"MA_DVT\": \"Mã ĐVT\",\r\n \"TEN_DVT\": \"Tên ĐVT\",\r\n \"CHU_KY_SO\": \"Chữ ký số\",\r\n \"CHON\": \"Chọn\",\r\n \"DONVI\": \"Đơn vị\",\r\n \"TINH_THANH\": \"Tỉnh thành\",\r\n \"NGAY_BD_NAM_TC\": \"Ngày bắt đầu năm tài chính\",\r\n \"TAI_KHOAN\": \"Tài khoản\",\r\n \"TAI_NH\": \"Tại ngân hàng\",\r\n \"EMAIL\": \"Email\",\r\n \"SUBJECTNAME\": \"Chủ thể\",\r\n \"SIGN\": \"Ký hóa đơn\",\r\n \"KY_HOA_DON\": \"Ký hóa đơn\",\r\n \"DC_DINH_DANH\": \"Điều chỉnh định danh\",\r\n \"SOVB\": \"Số văn bản\",\r\n \"NGAYVB\": \"Ngày văn bản\",\r\n \"DIEN_GIAI\": \"Diễn giải\",\r\n \"SEARCH\": \"Tìm kiếm\",\r\n \"TIM_CHI_TIET\": \"Tìm chi tiết\",\r\n \"NGUOI_LAP\": \"Người lập\",\r\n \"TRANG_THAI_HDON\": \"Trạng thái hóa đơn\",\r\n \"TU_NGAY\": \"Từ ngày\",\r\n \"DEN_NGAY\": \"Đến ngày\",\r\n \"NGUOI_NHAN\": \"Người nhận\",\r\n \"TIEU_DE\": \"Tiêu đề\",\r\n \"NOI_DUNG\": \"Nội dung\",\r\n \"SEND_EMAIL_INVOICE\": \"Gửi hóa đơn qua email\",\r\n \"KHUYEN_MAI\": \"Khuyến mãi\",\r\n \"TIEU_THUC\": \"Tiêu thức\",\r\n \"DC_TANG\": \"Điều chỉnh tăng\",\r\n \"DC_GIAM\": \"Điều chỉnh giảm\",\r\n \"HDON_THAY_THE\": \"Hóa đơn thay thế\",\r\n \"REFRESH\": \"Tải dữ liệu\",\r\n \"EXPORT\": \"Kết xuất\",\r\n \"EXPORT_EXCEL\": \"Kết xuất Excel\",\r\n \"XOA_BO\": \"Xóa bỏ\",\r\n \"MST_BEN_BAN\": \"MST Bên bán\",\r\n \"MST_BEN_MUA\": \"MST Bên mua\",\r\n \"HDON_CT_BRA\": \"Hóa đơn chứng từ bán ra\",\r\n \"TIEN_TRUOC_THUE\": \"Tiền trước thuế\",\r\n \"TIEN_THUE_10\": \"10%\",\r\n \"TIEN_THUE_05\": \"5%\",\r\n \"TIEN_THUE_00\": \"0%\",\r\n \"KHONG_CHIU_THUE\": \"Không chịu thuế\",\r\n \"KHONG_KK\": \"Không kê khai\",\r\n \"GHI_CHU\": \"Ghi chú\",\r\n \"IMPORT_EXCEL\": \"Nhận Excel\",\r\n \"REGISTER_LICENCE\" : \"Đăng ký Licence\",\r\n \"NGUOI_GUI\": \"Người gửi\",\r\n \"KY_HOA_DON_CHO_KY\": \"Ký nhiều hóa đơn\",\r\n \"SMTP_SERVER\": \"SMTP Server\",\r\n \"SMTP_PORT\": \"SMTP Port\",\r\n \"enableSSL\": \"Enable SSL\",\r\n \"LOAI\": \"Loại\",\r\n \"SEND_EMAIL_CONFIRM\": \"Email yêu cầu ký xác nhận\",\r\n \"NHOM\": \"Nhóm\",\r\n \"GIA_BAN\": \"Giá bán\",\r\n \"DANG_KY\": \"Đăng ký\",\r\n \"SL_HD_DK\": \"Số lượng hóa đơn đã đăng ký\",\r\n \"KEY_LICENSE\": \"Key bản quyền\",\r\n \"SL_HD_THEM\": \"Số lượng hóa đơn đăng ký thêm\",\r\n \"GIA_TRI\": \"Giá trị\",\r\n \"NGAY_BAT_DAU\": \"Ngày bắt đầu\",\r\n \"NGAY_KET_THUC\": \"Ngày kết thúc\",\r\n \"TOKEN_SERIAL\": \"Token serial\",\r\n \"CHUYEN_DOI\": \"Chuyển đổi\",\r\n \"SO_TK\": \"Số tài khoản\",\r\n \"NGAY_HET_HAN\": \"Ngày hết hạn\",\r\n \"CHON_BOCHON\": \"Chọn/Bỏ chọn\",\r\n \"QUYEN_TRUY_CAP_HD\": \"Quyền truy cập hóa đơn\",\r\n \"IS_VIEW_USER\": \"Xem chứng từ của NSD khác\",\r\n \"IS_EDIT_USER\": \"Sửa chứng từ của NSD khác\",\r\n \"IS_DEL_USER\": \"Xóa chứng từ của NSD khác\",\r\n \"IS_NEW_USER\": \"Thêm chứng từ\",\r\n \"KY_HOA_DON\": \"Ký hóa đơn\",\r\n \"KY_HOA_DON_HSM\": \"Ký hóa đơn HSM\",\r\n \"DANG_KY_LAN_DAU\": \"Đăng ký lần đầu\",\r\n \"DANG_KY_THEM\": \"Đăng ký thêm\",\r\n \"THONG_BAO\": \"Thông báo\",\r\n \"TAI_FILE_MAU\": \"Tải file mẫu\",\r\n \"MA_NT\": \"Mã ngoại tệ\",\r\n \"TEN_NT\": \"Tên ngoại tệ\",\r\n \"TY_GIA\": \"Tỷ giá\",\r\n \"TEN_NH\": \"Tên ngân hàng\",\r\n \"IN_CHUYEN_DOI\": \"In chuyển đổi\",\r\n \"NGUOI_IN_CDOI\": \"Người in chuyển đổi\",\r\n \"NGAY_IN_CDOI\": \"Ngày in chuyển đổi\",\r\n \"PHAN_CACH_HANG_NGHIN\": \"Phân cách hàng nghìn\",\r\n \"PHAN_CACH_THAP_PHAN\": \"Phân cách thập phân\",\r\n \"PRINT_INVOICE_HTML\": \"Xem hóa đơn (Html)\",\r\n \"DEL_CACHE\": \"Xóa cache\",\r\n \"LOGOUT\": \"Đăng xuất\",\r\n \"CHANGE_PASS\": \"Đổi mật khẩu\",\r\n \"CHANGE_PASS_SSO\": \"Đổi mật khẩu SSO\",\r\n \"SO_BANG_KE\": \"Số bảng kê\",\r\n \"TAO_HD\": \"Tạo hóa đơn từ bảng kê\",\r\n \"LIST_DATE\": \"Ngày bảng kê\",\r\n \"LIST_NUMBER\": \"Số bảng kê\",\r\n \"MA_CHUNGTU\": \"Mã chứng từ\",\r\n \"NGAY_CHUNGTU\": \"Ngày chứng từ\",\r\n \"SO_CHUNGTU\": \"Số chứng từ\",\r\n \"PT_THUE\": \"% thuế\",\r\n \"TEN_DV\": \"Tên đơn vị\",\r\n \"TONG_TIEN\": \"Tổng tiền\",\r\n \"MA_DVCS\": \"Mã đơn vị\",\r\n \"TEN_NHV\": \"Tên nhóm\",\r\n \"USER_TRACUU\": \"Tạo user tra cứu\",\r\n \"MA_HANG\": \"Mã hàng hóa\",\r\n \"TEN_HANG\": \"Tên hàng\",\r\n \"DON_GIA\": \"Đơn giá\",\r\n \"DOANH_THU\": \"Doanh thu\",\r\n \"THUE_SUAT\": \"Thuế suất\",\r\n \"GIO_TB\": \"Ngày, giờ thông báo hủy hóa đơn như sau:\",\r\n \"NGAY_TB\": \"Ngày\",\r\n \"PHUONG_PHAP_HUY\": \"Phương pháp hủy hóa đơn:\",\r\n \"NGAY_LAP_TB\": \"Ngày lập thông báo:\",\r\n \"NGUOI_LAP_BIEU\": \"Người lập\",\r\n \"PATH\": \"Đường dẫn file ký\",\r\n \"KET_XUAT_EXCEL\": \"Kết xuất Excel\",\r\n \"HIDDEN\": \"Ẩn/hiện\",\r\n \"PARENT_ID\": \"Nhóm mẹ\",\r\n \"name\": \"Tên\",\r\n \"code\": \"Mã\",\r\n \"id\": \"Mã\",\r\n \"CURRENT_NUMBER\": \"Số hiện tại\",\r\n \"is_main\": \"Chính\",\r\n \"LINK_SSO\":\"Liên kết tài khoản SSO\"\r\n };\r\n});\nrequire([\"app\"]);\n"]}