Article 4KB4N CodeSOD: Nothing Direct About directAddCartEntry

CodeSOD: Nothing Direct About directAddCartEntry

by
Remy Porter
from The Daily WTF on (#4KB4N)

It's old hat, but every function, every class, every code unit you write, should all have a single, well-defined purpose. "Do one thing, and do it well," as it were.

Of course, sometimes, it's easier said that done, and mindlessly following that advice can lead to premature abstraction, and then you'll have quite a mess on your hands. Still, it's good advice, and a great design goal, even if you don't head straight there.

Marigold found some code which, well, has a long way to go. A looooooong way to go.

directAddCartEntry = function (matnr, menge,updateByField,m,redu){ var that=this; var produkt=new Object; var target = document.getElementById('content'); spinner.spin(target); if (produkt.BACK_PREIS!=undefined && produkt.BACK_PREIS!=""){ produkt.PREIS = produkt.BACK_PREIS } var Kundennummer = app.getModel("userData").getData().KUNDENNR; var Land = app.getModel("userData").getData().LAND; var Euland = app.getModel("userData").getData().ISTEULAND; var Kundennummer_u_Euland = Kundennummer+"|"+Euland+"|"+Land; var verpackungseinheit = ""; sap.ui.getCore().byId("app").getModel("kategorie").read("/PRODUKT_SET(MATNR='"+matnr+"',VKORG='"+VKORG+"',SPRAS='de',KAMPAGNE='"+Kundennummer_u_Euland+"',VTWEG='10')?$expand=MERKMAL",null,null,false,function(oData,response){ produkt=oData; var mindestbestellmenge = produkt.BOMRABATT; verpackungseinheit = produkt.VERPACKUNGSEINHEIT if (mindestbestellmenge!="0.000 "&& mindestbestellmenge!="" && mindestbestellmenge != undefined){ mindestbestellmenge=mindestbestellmenge.split(".")[0] var mindestbestellmenge = parseInt(mindestbestellmenge); produkt.BOMRABATT=mindestbestellmenge if (menge != mindestbestellmenge && vielfacher(menge,mindestbestellmenge)==false && redu!=true){ var dialog = new sap.m.Dialog({ showHeader: false, content: [ new sap.ui.layout.HorizontalLayout({ content: [ new sap.m.Image({ src: "Image/helia_small.png", }), new sap.m.Text({ //text: sap.ui.getCore().byId("app").getModel("i18n").getProperty("dialogUsersonlyFooter") }).addStyleClass('dialog__usersonlySmall'), ] }).addStyleClass('dialog__usersonlyHeader'), new sap.ui.layout.Grid({ hSpacing: 1, vSpacing: 1, layoutData: new sap.ui.layout.GridData({ span: "L12 M12 S12", }), content: [ new sap.ui.core.HTML({ layoutData: new sap.ui.layout.GridData({ span: "L12 M12 S12", }), content: verpackungseinheit=="ZS" ? sap.ui.getCore().byId("navContainer").getModel("i18n").getProperty("infozigarette") : sap.ui.getCore().byId("navContainer").getModel("i18n").getResourceBundle().getText("infonormal", produkt.BOMRABATT) }).addStyleClass("dialog__usersonlyTitle"), new sap.m.Select("dialogSelect",{ layoutData: new sap.ui.layout.GridData({ span: "L2 M2 S2", }),// items: productListItems2("zweier","","","") items: productListItems4(null,null,produkt.MAXMENGE,produkt.BOMRABATT) })/*.attachBrowserEvent( "click",function(evt){ var _numProductsSelected = parseInt( this.getSelectedKey() ); var _i = +_numProductsSelected; var plus=+_i; this.destroyItems(); for (_i;_i<=999;_i=_i+plus){ // XXX this.addItem(new sap.ui.core.ListItem({ text: _i, key: _i })) } this.setSelectedKey( _numProductsSelected ); } ).attachBrowserEvent( "tap",function(evt){ var _numProductsSelected = parseInt( this.getSelectedKey() ); var _i = +_numProductsSelected; var plus=+_i; this.destroyItems(); for (_i;_i<=999;_i=_i+plus){ // XXX this.addItem(new sap.ui.core.ListItem({ text: _i, key: _i })) } this.setSelectedKey( _numProductsSelected ); } )*/, new sap.m.Button({ text: "OK", press: function(oEvent) { var new_menge=sap.ui.getCore().byId("dialogSelect").getSelectedItem().mProperties.text dialog.destroy(); directAddCartEntry (matnr, new_menge,updateByField,m) simulateOrder() directController.setPreiseundRabatte(); }, layoutData: new sap.ui.layout.GridData({ span: "L1 M1 S1", }) }), new sap.m.Button({ text: app.getModel("i18n").getProperty("pwdabort"), press: function() { dialog.destroy(); }, layoutData: new sap.ui.layout.GridData({ span: "L2 M2 S2", }) }), ] }), //.addStyleClass('dialog__usersonlyChoice'), ] }).addStyleClass('dialog__usersonlyChoice'); dialog.open() spinner.stop(); return; } else{ if (istmindestmenge (oData,"","call")==true && redu!=true){// var menge2=menge/2 var menge2=menge/oData.BOMRABATT; directAddCartEntry (matnr, menge2,updateByField,m,true) return } else{ produkt.MENGE = menge; } } }else{ if (istmindestmenge (oData,"","call")==true && redu!=true){// var menge2=menge/2 menge/oData.BOMRABATT; directAddCartEntry (matnr, menge2,updateByField,m,true) return } else{ produkt.MENGE = menge; } } var Preis; var model = m; var data = model.getData(); var POSITIONEN = data.WK_POSITIONEN; var POSITION = null; var POSITIONIndex = -1; if (produkt.BACK_PREIS!=undefined && produkt.BACK_PREIS!=""){ produkt.PREIS = produkt.BACK_PREIS } //Position suchen for (var zxy = 0 ; zxy < POSITIONEN.length ; zxy ++) { if (POSITIONEN[zxy].MATNR === produkt.MATNR) { POSITION = POSITIONEN[zxy]; POSITIONIndex = zxy; break; } } //Wenn Position nicht gefunden, neu hinzuf?gen... if (POSITION === null) { produkt.PAKETPREIS = produkt.PREIS; produkt.SPARPREIS = 0; //Aktionsstaffelpreise und Staffelpreise ber?cksichtigen var Preis = parseFloat(produkt.PREIS).toFixed(2); if (produkt.STAFFELPREIS3!=""){ if( (parseFloat(produkt.MENGE) >= parseFloat(produkt.STAFFELPREIS6)) && ( parseFloat(produkt.STAFFELPREIS3) < parseFloat(produkt.PREIS) ) ) { produkt.PAKETPREIS = produkt.STAFFELPREIS3; produkt.SPARPREIS = ( parseFloat(produkt.PREIS) - parseFloat(produkt.STAFFELPREIS3)); var Preis = produkt.STAFFELPREIS3 } } if (produkt.AKTIONSPREIS3!=""){ if( (parseFloat(produkt.MENGE) >= parseFloat(produkt.AKTIONSPREIS6)) && ( parseFloat(produkt.AKTIONSPREIS3) < parseFloat(produkt.PREIS) ) ) { produkt.PAKETPREIS = produkt.AKTIONSPREIS3; produkt.SPARPREIS = ( parseFloat(produkt.PREIS) - parseFloat(produkt.AKTIONSPREIS3)); var Preis = produkt.AKTIONSPREIS3 } } if (parseFloat(produkt.AKTIONSPREIS)< parseFloat(produkt.PREIS) && produkt.AKTIONSPREIS!=""){ var Preis = parseFloat(produkt.AKTIONSPREIS).toFixed(2); } // Vergleich Staffelpreis zu Aktionspreis, VRU 21.06.2016 if ( (parseFloat(produkt.MENGE) >= parseFloat(produkt.AKTIONSPREIS6)) && (parseFloat(produkt.AKTIONSPREIS3)<parseFloat(produkt.STAFFELPREIS3)) && produkt.AKTIONSPREIS3!=""){ var Preis = parseFloat(produkt.AKTIONSPREIS3).toFixed(2); } // if( (produkt.MENGE >= 6) && ( parseFloat(produkt.AKTIONSPREIS6) < parseFloat(produkt.PREIS) ) ) {// produkt.PAKETPREIS = produkt.AKTIONSPREIS6;// produkt.SPARPREIS = ( parseFloat(produkt.PREIS) - parseFloat(produkt.AKTIONSPREIS6));// }// if( (produkt.MENGE >= 12) && ( parseFloat(produkt.AKTIONSPREIS12) < parseFloat(produkt.PREIS) ) ) {// produkt.PAKETPREIS = produkt.AKTIONSPREIS12;// produkt.SPARPREIS = ( parseFloat(produkt.PREIS) - parseFloat(produkt.AKTIONSPREIS12));// } produkt.GESAMTPREIS = parseFloat(Preis * menge).toFixed(2);// produkt.GESAMTPREIS = parseFloat(produkt.PAKETPREIS * produkt.MENGE).toFixed(2); produkt.GESAMTSPARPREIS = produkt.SPARPREIS * produkt.MENGE; produkt.MENGE=parseInt(produkt.MENGE); if (redu==true){// produkt.MENGE=produkt.MENGE*2 produkt.MENGE=produkt.MENGE*produkt.BOMRABATT } // create new entry POSITION = { MATNR:produkt.MATNR, MAKTX:produkt.MAKTX, MENGE:produkt.MENGE, MAXMENGE:produkt.MAXMENGE, KATTEXTKURZ:produkt.KATTEXTKURZ, IMG_BIG:produkt.IMG_BIG.replace(locStatic,""), IMG_THUMB:produkt.IMG_THUMB.replace(locStatic,""), BACK_PREIS: produkt.PREIS, PREIS:Preis, GESAMTPREIS:parseFloat(produkt.GESAMTPREIS).toFixed(2), STAFFELPREIS:produkt.STAFFELPREIS, AKTIONSPREIS:produkt.AKTIONSPREIS, WAEHRUNG:produkt.WAEHRUNG, PAKETPREIS:produkt.PAKETPREIS, SPARPREIS:produkt.SPARPREIS, GESAMTSPARPREIS:produkt.GESAMTSPARPREIS, AKTIONSPREIS3 : produkt.AKTIONSPREIS3, AKTIONSPREIS6 : produkt.AKTIONSPREIS6, STAFFELPREIS3 : produkt.STAFFELPREIS3, STAFFELPREIS6 : produkt.STAFFELPREIS6, BOMRABATT: produkt.BOMRABATT, VERPACKUNGSEINHEIT:produkt.VERPACKUNGSEINHEIT }; data.WK_POSITIONEN[data.WK_POSITIONEN.length] = POSITION; } else { //...Ansonsten Menge aendern if(updateByField){ POSITION.MENGE=parseInt(POSITION.MENGE) + parseInt(produkt.MENGE) if (redu!=undefined && redu ==true){ POSITION.MENGE = POSITION.MENGE/2 + parseInt(produkt.MENGE)/2 } var Preis = parseFloat(produkt.PREIS).toFixed(2); if (produkt.STAFFELPREIS3!=""){ if( (parseFloat(POSITION.MENGE) >= parseFloat(produkt.STAFFELPREIS6)) && ( parseFloat(produkt.STAFFELPREIS3) < parseFloat(produkt.PREIS) ) ) { POSITION.PAKETPREIS = produkt.STAFFELPREIS3; POSITION.SPARPREIS = ( parseFloat(produkt.PREIS) - parseFloat(produkt.STAFFELPREIS3)); var Preis = produkt.STAFFELPREIS3 } } if (produkt.AKTIONSPREIS3!=""){ if( (parseFloat(POSITION.MENGE) >= parseFloat(produkt.AKTIONSPREIS6)) && ( parseFloat(produkt.AKTIONSPREIS3) < parseFloat(produkt.PREIS) ) ) { POSITION.PAKETPREIS = produkt.AKTIONSPREIS3; POSITION.SPARPREIS = ( parseFloat(produkt.PREIS) - parseFloat(produkt.AKTIONSPREIS3)); var Preis = produkt.AKTIONSPREIS3 } } if (parseFloat(produkt.AKTIONSPREIS)< parseFloat(produkt.PREIS) && produkt.AKTIONSPREIS!=""){ var Preis = parseFloat(produkt.AKTIONSPREIS).toFixed(2); } // Vergleich Staffelpreis zu Aktionspreis, VRU 21.06.2016 if ( (parseFloat(POSITION.MENGE) >= parseFloat(produkt.AKTIONSPREIS6)) && (parseFloat(produkt.AKTIONSPREIS3)<parseFloat(produkt.STAFFELPREIS3)) && produkt.AKTIONSPREIS3!=""){ var Preis = parseFloat(produkt.AKTIONSPREIS3).toFixed(2); } POSITION.AKTIONSPREIS3 = produkt.AKTIONSPREIS3 POSITION.AKTIONSPREIS6 = produkt.AKTIONSPREIS6 POSITION.STAFFELPREIS3 = produkt.STAFFELPREIS3 POSITION.STAFFELPREIS6 = produkt.STAFFELPREIS6 POSITION.BACK_PREIS= produkt.PREIS, POSITION.PREIS = parseFloat(Preis).toFixed(2); POSITION.AKTIONSPREIS6 = produkt.AKTIONSPREIS6; POSITION.AKTIONSPREIS12 = produkt.AKTIONSPREIS12; POSITION.PAKETPREIS = POSITION.PREIS; POSITION.SPARPREIS = 0;// if( (POSITION.MENGE >= 6) && ( parseFloat(POSITION.AKTIONSPREIS6) < parseFloat(POSITION.PREIS) ) ) {// POSITION.PAKETPREIS = POSITION.AKTIONSPREIS6; // POSITION.SPARPREIS = ( parseFloat(POSITION.PREIS) - parseFloat(POSITION.AKTIONSPREIS6));// }// if( (POSITION.MENGE >= 12) && ( parseFloat(POSITION.AKTIONSPREIS12) < parseFloat(POSITION.PREIS) ) ) {// POSITION.PAKETPREIS = POSITION.AKTIONSPREIS12; // POSITION.SPARPREIS = ( parseFloat(POSITION.PREIS) - parseFloat(POSITION.AKTIONSPREIS12));// } POSITION.GESAMTPREIS = parseFloat(POSITION.MENGE*POSITION.PAKETPREIS).toFixed(2); POSITION.GESAMTSPARPREIS = POSITION.MENGE*POSITION.SPARPREIS; POSITION.STAFFELPREIS = produkt.STAFFELPREIS; POSITION.AKTIONSPREIS = produkt.AKTIONSPREIS; POSITION.WAEHRUNG = produkt.WAEHRUNG; if (redu!=undefined && redu ==true){// POSITION.MENGE = POSITION.MENGE*2 POSITION.MENGE = POSITION.MENGE*POSITION.BOMRABATT } }else{ } POSITION.AKTIONSPREIS3 = produkt.AKTIONSPREIS3 POSITION.AKTIONSPREIS6 = produkt.AKTIONSPREIS6 POSITION.STAFFELPREIS3 = produkt.STAFFELPREIS3 POSITION.STAFFELPREIS6 = produkt.STAFFELPREIS6 POSITION.BOMRABATT = produkt.BOMRABATT POSITION.BACK_PREIS= produkt.PREIS, POSITION.PREIS = Preis; POSITION.GESAMTPREIS= toFixed(POSITION.GESAMTPREIS,2); POSITION.GESAMTSPARPREIS= toFixed(POSITION.GESAMTSPARPREIS,2); POSITIONEN[POSITIONIndex] = POSITION; data.WK_POSITIONEN = POSITIONEN; } // Gesamtpreis neu berechnen data.GESAMTPREIS = 0; data.GESAMTMENGE = 0; data.ZWISCHENSUMME = 0; data.GESAMTSPARPREIS = 0; for (var xxy = 0 ; xxy < data.WK_POSITIONEN.length ; xxy ++) { data.GESAMTPREIS += parseFloat(data.WK_POSITIONEN[xxy].GESAMTPREIS); if (istmindestmenge (data.WK_POSITIONEN[xxy],"","call")==true && redu==true){ data.GESAMTMENGE += parseInt(data.WK_POSITIONEN[xxy].MENGE); }else{ data.GESAMTMENGE += parseInt(data.WK_POSITIONEN[xxy].MENGE); } //hier Gesamtmenge wieder erhoehen data.ZWISCHENSUMME += parseFloat(data.WK_POSITIONEN[xxy].GESAMTPREIS); data.GESAMTSPARPREIS += parseFloat(data.WK_POSITIONEN[xxy].GESAMTSPARPREIS); } data.GESAMTPREIS = parseFloat(data.GESAMTPREIS).toFixed(2) data.GESAMTSPARPREIS = parseFloat(data.GESAMTSPARPREIS).toFixed(2);// data.INTERNETRABATT = parseFloat(menge) + parseFloat(menge)// data.GESAMTPREIS= parseFloat(data.GESAMTPREIS).toFixed(2); data.ENDPREIS=parseFloat(data.GESAMTPREIS).toFixed(2) - parseFloat(data.INTERNETRABATT).toFixed(2); data.ZWISCHENSUMME= toFixed(data.ZWISCHENSUMME,2); data.GESAMTSPARPREIS= toFixed(data.GESAMTSPARPREIS,2); data.ERSATZLIEFERUNG = data.ERSATZLIEFERUNG; data.LIEFERART=data.LIEFERART; data.LIEFERDATUM = data.LIEFERDATUM; data.KUNDENNACHRICHT=data.KUNDENNACHRICHT;// if(parseFloat(oData.INTERNETRABATT)>0){// //sap.ui.getCore().byId("app").getModel("warenkorb").setProperty("/INTERNETRABATT",parseFloat(oData.INTERNETRABATT).toFixed(2));// sap.ui.getCore().byId("app").getModel("warenkorb").setProperty("/ENDPREIS",(parseFloat(sap.ui.getCore().byId("app").getModel("warenkorb").getProperty("/GESAMTPREIS")) - parseFloat(oData.INTERNETRABATT)).toFixed(2));// }// // Model updaten model.setData(data,"warenkorb"); if($.cookie("cookieUser")!=undefined){ setBackendWK(sap.ui.getCore().byId("app").getModel("kategorie"),sap.ui.getCore().byId("app").getModel("userData").oData.KUNDENNR); }else{ setCookieCart(model); } if (redu==true){// menge=menge*2; menge=menge*produkt.BOMRABATT; } showToastMessage(menge,produkt.MAKTX,produkt.MERKMAL.results); //Speichern des Warenkorbes in einen Cookie simulateOrder(); spinner.stop(); },function(oError){ spinner.stop(); messageToast(app.getModel("i18n").getProperty("keineWare")); });};

Marigold adds: "I have no words for this. Make something up. I don't care."

It isn't about what this code does, as much as the sheer mass of it, the weight of 350+ lines of code in one gigantic method which seems to do everything, makes me want to do nothing but eat a box of "einen Cookies" in one sitting.

proget-icon.png [Advertisement] Ensure your software is built only once and then deployed consistently across environments, by packaging your applications and components. Learn how today! TheDailyWtf?d=yIl2AUoC8zA_b60BhiIsRU
External Content
Source RSS or Atom Feed
Feed Location http://syndication.thedailywtf.com/TheDailyWtf
Feed Title The Daily WTF
Feed Link http://thedailywtf.com/
Reply 0 comments