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.

[Advertisement] Keep the plebs out of prod. Restrict NuGet feed privileges with ProGet. Learn more.